diff --git a/.gitignore b/.gitignore
index 8fb26d5b..d97c4669 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,4 +52,8 @@ all.txt
!tests/fixtures/dependencies/declaration-graph-placement/dist/**
!tests/fixtures/e2e/yarn-pnp-manifests/.yarn/
!tests/fixtures/e2e/yarn-pnp-manifests/.yarn/**
-!wouter@3.7.1.patch
\ No newline at end of file
+!wouter@3.7.1.patch
+
+# Astro generated files
+docs/.astro/
+docs/dist/
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
new file mode 100644
index 00000000..d710525d
--- /dev/null
+++ b/docs/astro.config.mjs
@@ -0,0 +1,51 @@
+import { defineConfig } from "astro/config";
+import starlight from "@astrojs/starlight";
+
+export default defineConfig({
+ site: "https://opti.drml.int.yt",
+ outDir: "./dist",
+ integrations: [
+ starlight({
+ title: "OptiPrune Docs",
+ logo: { src: "./src/assets/optiprune-logo.svg", alt: "OptiPrune" },
+ favicon: "./src/assets/favicon.svg",
+ sidebar: [
+ {
+ label: "Start here",
+ items: ["docs", "docs/getting-started", "docs/quickstart", "docs/workflow"],
+ },
+ {
+ label: "Core concepts",
+ items: ["docs/architecture", "docs/reachability", "docs/confidence", "docs/output"],
+ },
+ {
+ label: "Reference",
+ items: [
+ "docs/configuration",
+ "docs/cli",
+ "docs/quick-reference",
+ "docs/reporters",
+ "docs/headless-api",
+ "docs/cache",
+ "docs/language-server",
+ "docs/plugins",
+ ],
+ },
+ {
+ label: "Guides",
+ items: [
+ "docs/ci",
+ "docs/monorepos",
+ "docs/fixes",
+ "docs/plugin-authoring",
+ "docs/troubleshooting",
+ ],
+ },
+ ],
+ social: [
+ { icon: "github", label: "GitHub", href: "https://github.com/optiprune/core" },
+ { icon: "npm", label: "npm", href: "https://www.npmjs.com/package/@optiprune/cli" },
+ ],
+ }),
+ ],
+});
diff --git a/docs/client/index.html b/docs/client/index.html
deleted file mode 100644
index ede65301..00000000
--- a/docs/client/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
- OptiPrune Docs — Core, CLI & Plugins
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/client/public/.gitkeep b/docs/client/public/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/docs/client/src/App.tsx b/docs/client/src/App.tsx
deleted file mode 100644
index ad5c4e63..00000000
--- a/docs/client/src/App.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Calm docs system: root is a welcome surface; all detailed reference content is routed under /docs. */
-import { Route, Switch } from "wouter";
-import Home from "./pages/Home";
-import Docs from "./pages/Docs";
-import NotFound from "./pages/NotFound";
-
-export default function App() {
- return (
-
-
-
-
-
-
-
-
- );
-}
diff --git a/docs/client/src/components/ui/button.tsx b/docs/client/src/components/ui/button.tsx
deleted file mode 100644
index d9b5ada9..00000000
--- a/docs/client/src/components/ui/button.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-// Calm OptiPrune docs system: shared control primitive retained for restrained, accessible editorial UI elements.
-import * as React from "react";
-import { Slot } from "@radix-ui/react-slot";
-import { cva, type VariantProps } from "class-variance-authority";
-
-import { cn } from "@/lib/utils";
-
-const buttonVariants = cva(
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
- {
- variants: {
- variant: {
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
- destructive:
- "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
- outline:
- "border bg-transparent shadow-xs hover:bg-accent dark:bg-transparent dark:border-input dark:hover:bg-input/50",
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
- ghost: "hover:bg-accent dark:hover:bg-accent/50",
- link: "text-primary underline-offset-4 hover:underline",
- },
- size: {
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
- icon: "size-9",
- "icon-sm": "size-8",
- "icon-lg": "size-10",
- },
- },
- defaultVariants: {
- variant: "default",
- size: "default",
- },
- },
-);
-
-function Button({
- className,
- variant,
- size,
- asChild = false,
- ...props
-}: React.ComponentProps<"button"> &
- VariantProps & {
- asChild?: boolean;
- }) {
- const Comp = asChild ? Slot : "button";
-
- return (
-
- );
-}
-
-export { Button };
diff --git a/docs/client/src/components/ui/card.tsx b/docs/client/src/components/ui/card.tsx
deleted file mode 100644
index ddb0e66b..00000000
--- a/docs/client/src/components/ui/card.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as React from "react";
-
-import { cn } from "@/lib/utils";
-
-function Card({ className, ...props }: React.ComponentProps<"div">) {
- return (
-
- );
-}
-
-function CardContent({ className, ...props }: React.ComponentProps<"div">) {
- return
;
-}
-
-export { Card, CardContent };
diff --git a/docs/client/src/index.css b/docs/client/src/index.css
deleted file mode 100644
index 75b03cc2..00000000
--- a/docs/client/src/index.css
+++ /dev/null
@@ -1,2156 +0,0 @@
-/* Calm docs system: Knip.dev-inspired editorial reference layout, using OptiPrune violet-blue assets and restrained orange action color. */
-@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Source+Sans+3:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&display=swap");
-@import "tailwindcss";
-@import "tw-animate-css";
-
-:root {
- font-family: "Source Sans 3", sans-serif;
- color: #1b1d27;
- background: #f5f6fa;
- font-synthesis: none;
- --ink: #1b1d27;
- --paper: #fff;
- --surface: #f5f6fa;
- --surface-2: #eef0f5;
- --line: #dfe2e9;
- --muted: #626a7c;
- --violet: #6d4aff;
- --violet-dark: #4d32c5;
- --orange: #ff7d23;
- --mono: "IBM Plex Mono", monospace;
- --display: "Space Grotesk", sans-serif;
-}
-* {
- box-sizing: border-box;
-}
-html {
- scroll-behavior: smooth;
-}
-body {
- margin: 0;
- min-width: 320px;
- background: var(--surface);
- color: var(--ink);
-}
-a {
- color: inherit;
- text-decoration: none;
-}
-button,
-input {
- font: inherit;
-}
-button {
- cursor: pointer;
-}
-code,
-pre {
- font-family: var(--mono);
-}
-.app-shell {
- min-height: 100vh;
- display: flex;
- background: var(--surface);
-}
-.sidebar {
- width: 258px;
- flex: 0 0 258px;
- position: fixed;
- inset: 0 auto 0 0;
- background: rgba(255, 255, 255, 0.93);
- border-right: 1px solid var(--line);
- padding: 25px 18px 22px;
- display: flex;
- flex-direction: column;
- z-index: 10;
-}
-.brand-row {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 9px 28px;
-}
-.brand {
- display: inline-flex;
- gap: 9px;
- align-items: center;
- font-family: var(--display);
- font-size: 14px;
- letter-spacing: 0.06em;
-}
-.brand-logo {
- width: 32px;
- height: 32px;
- object-fit: contain;
-}
-.brand b {
- color: var(--ink);
- font-weight: 700;
-}
-.brand em {
- color: var(--violet);
- font-style: normal;
- font-weight: 600;
-}
-.side-caption,
-.kicker,
-.eyebrow-line,
-.terminal-label,
-.plugin-category,
-.side-links,
-.nav-index {
- font-family: var(--mono);
-}
-.side-caption {
- color: #9aa1b1;
- font-size: 9px;
- letter-spacing: 0.14em;
- padding: 0 10px 13px;
-}
-.side-nav {
- display: grid;
- gap: 4px;
-}
-.side-nav a {
- display: flex;
- align-items: center;
- gap: 11px;
- padding: 10px;
- color: #697286;
- border: 1px solid transparent;
- transition: 0.18s ease-out;
-}
-.side-nav a:hover,
-.side-nav a:focus-visible {
- color: var(--ink);
- border-color: var(--line);
- background: var(--surface);
-}
-.side-nav a > span:nth-child(2) {
- display: grid;
- gap: 1px;
- font-family: var(--display);
- font-size: 13px;
- font-weight: 600;
-}
-.side-nav small {
- color: #a2a9b6;
- font: 9px var(--mono);
- text-transform: uppercase;
- letter-spacing: 0.06em;
-}
-.side-nav svg {
- margin-left: auto;
- opacity: 0.45;
-}
-.nav-index {
- width: 22px;
- color: var(--violet);
- font-size: 10px;
-}
-.sidebar-note {
- margin: auto 10px 20px;
- border-top: 1px solid var(--line);
- padding-top: 18px;
- display: flex;
- gap: 10px;
-}
-.proof-line {
- width: 2px;
- background: var(--violet);
- flex: 0 0 2px;
-}
-.sidebar-note strong {
- font: 600 11px var(--mono);
- color: var(--violet-dark);
-}
-.sidebar-note p {
- color: #7b8393;
- font-size: 12px;
- line-height: 1.45;
- margin: 5px 0 0;
-}
-.side-links {
- display: grid;
- gap: 12px;
- border-top: 1px solid var(--line);
- padding: 18px 10px 0;
- font-size: 10px;
- color: #778093;
-}
-.side-links a {
- display: flex;
- gap: 8px;
- align-items: center;
-}
-.side-links a:hover {
- color: var(--violet-dark);
-}
-.side-links svg:last-child {
- margin-left: auto;
-}
-.main-column {
- margin-left: 258px;
- width: calc(100% - 258px);
-}
-.topbar {
- height: 69px;
- border-bottom: 1px solid var(--line);
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 clamp(24px, 5vw, 76px);
- position: sticky;
- top: 0;
- z-index: 5;
- background: rgba(255, 255, 255, 0.88);
- backdrop-filter: blur(12px);
-}
-.crumb {
- display: flex;
- align-items: center;
- gap: 8px;
- color: #9299a9;
- font: 11px var(--mono);
-}
-.crumb strong {
- color: var(--ink);
- font-weight: 500;
-}
-.top-actions {
- display: flex;
- align-items: center;
- gap: 16px;
-}
-.ide-link,
-.icon-link {
- color: #6d7586;
- display: inline-flex;
- align-items: center;
- gap: 7px;
- font: 10px var(--mono);
-}
-.ide-link:hover,
-.icon-link:hover {
- color: var(--violet);
-}
-.mobile-menu,
-.mobile-close {
- display: none;
- background: none;
- border: 0;
- color: var(--ink);
-}
-.page-section {
- max-width: 1240px;
- margin: 0 auto;
- padding: 94px clamp(24px, 5vw, 76px);
- border-bottom: 1px solid var(--line);
-}
-.hero-section {
- min-height: 620px;
- display: grid;
- grid-template-columns: minmax(0, 1.05fr) minmax(300px, 0.95fr);
- align-items: center;
- gap: clamp(36px, 8vw, 112px);
- padding-top: 82px;
-}
-.eyebrow-line {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: 9px;
- font-size: 9px;
- letter-spacing: 0.05em;
- text-transform: uppercase;
-}
-.eyebrow-chip {
- color: var(--violet-dark);
- background: #efedff;
- border: 1px solid #d7d0ff;
- padding: 6px 8px;
-}
-.proof-text {
- color: #5b6677;
- margin-left: 4px;
-}
-.tiny-check {
- border: 1px solid var(--violet);
- color: var(--violet);
- display: inline-grid;
- place-items: center;
- width: 15px;
- height: 15px;
- margin-right: 5px;
-}
-.npm-badges {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
- margin-top: 18px;
-}
-.npm-badges img {
- height: 20px;
-}
-.hero-copy h1 {
- font: 700 clamp(55px, 7vw, 96px)/0.96 var(--display);
- letter-spacing: -0.07em;
- margin: 25px 0 24px;
-}
-.hero-copy h1 span {
- color: var(--violet);
-}
-.hero-lede {
- max-width: 590px;
- color: #5e6677;
- font-size: 18px;
- line-height: 1.55;
- margin: 0;
-}
-.hero-actions {
- display: flex;
- gap: 12px;
- margin: 31px 0 35px;
- flex-wrap: wrap;
-}
-.button {
- display: inline-flex;
- align-items: center;
- gap: 9px;
- font: 600 11px var(--mono);
- padding: 13px 15px;
- border: 1px solid transparent;
- transition:
- transform 0.16s ease-out,
- border-color 0.16s ease-out,
- background 0.16s ease-out;
-}
-.button:active {
- transform: scale(0.97);
-}
-.button-primary {
- color: #fff;
- background: var(--orange);
-}
-.button-primary:hover {
- background: #eb6915;
-}
-.button-quiet {
- color: #4f5768;
- border-color: #cfd4de;
- background: #fff;
-}
-.button-quiet:hover {
- border-color: var(--violet);
- color: var(--violet-dark);
-}
-.hero-meta {
- display: flex;
- gap: 27px;
- border-top: 1px solid var(--line);
- padding-top: 16px;
- color: #7a8394;
- font: 10px var(--mono);
-}
-.hero-meta b {
- color: var(--ink);
- font-size: 15px;
- margin-right: 5px;
-}
-.hero-proof {
- background: #fff;
- border: 1px solid var(--line);
- box-shadow: 0 13px 35px rgba(50, 57, 75, 0.09);
-}
-.proof-header,
-.proof-footer {
- display: flex;
- justify-content: space-between;
- padding: 13px 15px;
- color: #7c8596;
- font: 9px var(--mono);
- border-bottom: 1px solid var(--line);
-}
-.proof-footer {
- border-top: 1px solid var(--line);
- border-bottom: 0;
-}
-.proof-footer b {
- color: var(--ink);
- margin-left: 4px;
-}
-.status-dot,
-.lime-dot {
- width: 6px;
- height: 6px;
- display: inline-block;
- background: var(--violet);
- border-radius: 50%;
- margin-right: 7px;
-}
-.official-art {
- padding: 35px;
- min-height: 315px;
- display: grid;
- place-items: center;
- background: #fbfbfd;
-}
-.official-art img {
- display: block;
- width: min(100%, 295px);
- height: auto;
-}
-.split-section {
- display: grid;
- grid-template-columns: minmax(230px, 0.72fr) minmax(0, 1.28fr);
- gap: clamp(40px, 7vw, 105px);
-}
-.section-heading {
- max-width: 530px;
-}
-.kicker {
- font-size: 10px;
- letter-spacing: 0.12em;
- color: var(--violet-dark);
- text-transform: uppercase;
-}
-.kicker-mark {
- color: var(--orange);
- margin-right: 8px;
-}
-.section-heading h2 {
- font: 600 clamp(32px, 4vw, 53px)/1.04 var(--display);
- letter-spacing: -0.045em;
- margin: 18px 0;
-}
-.section-heading p {
- color: var(--muted);
- font-size: 16px;
- line-height: 1.62;
- margin: 0;
-}
-.section-heading code,
-.step-card code,
-.config-notes code,
-.api-section code {
- color: var(--violet-dark);
- font: 13px var(--mono);
-}
-.quick-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 14px;
-}
-.step-card {
- background: #fff;
- border: 1px solid var(--line);
- padding: 24px;
-}
-.step-number {
- color: var(--violet);
- font: 11px var(--mono);
-}
-.step-card h3 {
- font: 600 22px var(--display);
- margin: 18px 0 9px;
-}
-.step-card p {
- color: var(--muted);
- font-size: 14px;
- line-height: 1.5;
- min-height: 86px;
- margin: 0 0 20px;
-}
-.code-shell {
- background: #1b1d27;
- border: 1px solid #303544;
- overflow: hidden;
-}
-.code-topline {
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 1px solid #353a49;
- padding: 9px 12px;
- color: #bbc2ce;
- font: 9px var(--mono);
-}
-.copy-button {
- border: 0;
- color: #d5d9e1;
- background: none;
- display: flex;
- gap: 5px;
- align-items: center;
- font: 9px var(--mono);
-}
-.copy-button:hover {
- color: #fff;
-}
-.code-shell pre {
- white-space: pre-wrap;
- overflow: auto;
- color: #f2f4f6;
- font-size: 11px;
- line-height: 1.72;
- padding: 16px;
- margin: 0;
-}
-.config-section {
- align-items: start;
-}
-.config-section > .code-shell {
- margin-top: 24px;
-}
-.config-notes {
- margin-top: 28px;
- display: grid;
- gap: 14px;
-}
-.config-notes > div {
- display: flex;
- gap: 12px;
-}
-.note-index {
- color: var(--violet);
- font: 10px var(--mono);
- border: 1px solid #cec7ff;
- background: #f5f3ff;
- width: 23px;
- height: 23px;
- display: grid;
- place-items: center;
- flex: 0 0 23px;
-}
-.config-notes strong {
- font: 600 12px var(--mono);
-}
-.config-notes p {
- color: var(--muted);
- font-size: 13px;
- margin: 4px 0 0;
- line-height: 1.4;
-}
-.plugin-section {
- max-width: none;
-}
-.plugin-section .section-heading {
- max-width: 720px;
-}
-.inline-link {
- color: var(--violet-dark);
- border-bottom: 1px solid #bdb4ff;
-}
-.plugin-toolbar {
- margin-top: 37px;
- display: flex;
- flex-wrap: wrap;
- gap: 12px;
- align-items: center;
-}
-.search-box {
- display: flex;
- align-items: center;
- gap: 9px;
- background: #fff;
- border: 1px solid var(--line);
- padding: 12px 14px;
- color: #7d899d;
- width: min(390px, 100%);
-}
-.search-box:focus-within {
- border-color: var(--violet);
-}
-.search-box input {
- background: transparent;
- border: 0;
- outline: 0;
- color: var(--ink);
- width: 100%;
- font: 11px var(--mono);
-}
-.search-box input::placeholder {
- color: #8b93a2;
-}
-.filter-scroll {
- display: flex;
- gap: 6px;
- overflow-x: auto;
-}
-.filter {
- color: #6f788a;
- background: #fff;
- border: 1px solid var(--line);
- padding: 10px 11px;
- font: 9px var(--mono);
- white-space: nowrap;
-}
-.filter:hover,
-.filter.active {
- color: #fff;
- background: var(--violet);
- border-color: var(--violet);
-}
-.plugin-result {
- max-width: 1320px;
- margin: 22px auto 13px;
- display: flex;
- justify-content: space-between;
- color: #7d8798;
- font: 10px var(--mono);
-}
-.plugin-result b {
- color: var(--ink);
-}
-.lime-dot {
- margin: 0 0 0 7px;
-}
-.plugin-inspector {
- max-width: 1320px;
- margin: 0 auto 26px;
- display: grid;
- grid-template-columns: 90px minmax(0, 1fr) auto;
- gap: 18px;
- align-items: center;
- padding: 20px;
- background: #fff;
- border: 1px solid #cfc9ff;
-}
-.inspector-index {
- color: var(--violet);
- font: 25px var(--mono);
- border-right: 1px solid var(--line);
- display: grid;
- gap: 6px;
-}
-.inspector-index span {
- color: #8b93a2;
- font-size: 8px;
- text-transform: uppercase;
- letter-spacing: 0.12em;
-}
-.inspector-copy h3 {
- font: 600 23px var(--display);
- margin: 4px 0;
-}
-.inspector-copy p {
- color: #6c7484;
- font-size: 13px;
- margin: 0;
-}
-.inspector-signals {
- display: flex;
- flex-wrap: wrap;
- gap: 18px;
- margin-top: 12px;
- color: #7b8495;
- font: 9px var(--mono);
-}
-.inspector-signals span {
- display: grid;
- gap: 4px;
-}
-.inspector-signals b {
- color: var(--violet-dark);
- font-weight: 500;
-}
-.inspector-source {
- align-self: start;
-}
-.plugin-group {
- max-width: 1320px;
- margin: 0 auto 26px;
-}
-.group-band {
- border-top: 1px solid #cfd4de;
- border-bottom: 1px solid var(--line);
- padding: 10px 3px;
- display: flex;
- justify-content: space-between;
- color: #687285;
- font: 10px var(--mono);
- text-transform: uppercase;
- letter-spacing: 0.08em;
-}
-.proof-tick {
- color: var(--violet);
- border: 1px solid #cfc9ff;
- padding: 2px 4px;
- margin-left: 6px;
-}
-.plugin-grid {
- max-width: 1320px;
- margin: 0 auto;
- display: grid;
- grid-template-columns: repeat(4, minmax(0, 1fr));
- gap: 10px;
-}
-.plugin-card {
- min-height: 238px;
- background: #fff;
- border: 1px solid var(--line);
- padding: 17px;
- display: flex;
- flex-direction: column;
- transition:
- transform 0.18s ease-out,
- border-color 0.18s ease-out,
- box-shadow 0.18s ease-out;
-}
-.plugin-card:hover,
-.plugin-card.selected {
- transform: translateY(-2px);
- border-color: #bfb7ff;
- box-shadow: 0 6px 18px rgba(66, 54, 150, 0.08);
-}
-.plugin-card.selected {
- box-shadow:
- inset 2px 0 0 var(--violet),
- 0 6px 18px rgba(66, 54, 150, 0.08);
-}
-.plugin-card-top {
- display: flex;
- align-items: center;
- justify-content: space-between;
-}
-.plugin-symbol {
- width: 30px;
- height: 30px;
- display: grid;
- place-items: center;
- color: var(--violet);
- border: 1px solid #cfc9ff;
- background: #f7f5ff;
- font: 10px var(--mono);
-}
-.plugin-version {
- color: #8b94a4;
- font: 9px var(--mono);
-}
-.plugin-card h3 {
- font: 600 16px var(--display);
- margin: 17px 0 3px;
- overflow-wrap: anywhere;
-}
-.plugin-category {
- color: var(--violet-dark);
- text-transform: uppercase;
- letter-spacing: 0.07em;
- font-size: 8px;
-}
-.plugin-card p {
- color: #6f7889;
- font-size: 12px;
- line-height: 1.45;
- margin: 12px 0;
-}
-.plugin-signals {
- display: flex;
- gap: 8px;
- margin-top: auto;
- color: #8a93a2;
- font: 8px var(--mono);
-}
-.source-link {
- color: var(--violet-dark);
- display: flex;
- align-items: center;
- gap: 5px;
- margin-top: 13px;
- font: 9px var(--mono);
-}
-.source-link:hover {
- color: var(--orange);
-}
-.empty-state {
- margin-top: 20px;
- padding: 35px;
- background: #fff;
- border: 1px dashed #bbc1ce;
- color: var(--muted);
- text-align: center;
- font: 11px var(--mono);
-}
-.api-section {
- align-items: start;
-}
-.api-cards {
- margin-top: 28px;
- display: grid;
- gap: 8px;
-}
-.api-cards > div {
- border-left: 2px solid var(--violet);
- padding: 10px 14px;
- background: #fff;
-}
-.api-name {
- color: var(--violet-dark);
- font: 12px var(--mono);
-}
-.api-cards p {
- color: var(--muted);
- font-size: 13px;
- margin: 4px 0 0;
-}
-.api-section > .code-shell {
- margin-top: 24px;
-}
-.cli-section {
- max-width: none;
-}
-.cli-section .section-heading {
- max-width: 660px;
-}
-.reference-table {
- margin-top: 34px;
- border-top: 1px solid var(--line);
-}
-.table-row {
- display: grid;
- grid-template-columns: 1.05fr 1.45fr 0.7fr;
- gap: 20px;
- align-items: center;
- border-bottom: 1px solid var(--line);
- padding: 15px 11px;
- color: #525b6c;
- font-size: 14px;
-}
-.table-head {
- color: #818a9a;
- text-transform: uppercase;
- font: 9px var(--mono);
-}
-.table-row code,
-.muted-code {
- color: var(--violet-dark);
- font-size: 11px;
-}
-.muted-code {
- color: #80899a;
-}
-.package-strip {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 10px;
- margin-top: 30px;
-}
-.package-strip a {
- display: flex;
- align-items: center;
- gap: 10px;
- border: 1px solid var(--line);
- background: #fff;
- padding: 15px;
- color: #596274;
-}
-.package-strip a:hover {
- border-color: var(--violet);
- color: var(--violet-dark);
-}
-.package-strip span {
- display: grid;
- gap: 3px;
- font: 12px var(--mono);
-}
-.package-strip small {
- color: #8a93a2;
- font-size: 8px;
- text-transform: uppercase;
-}
-.package-strip svg:last-child {
- margin-left: auto;
-}
-.footer {
- max-width: 1240px;
- margin: 0 auto;
- padding: 28px clamp(24px, 5vw, 76px) 44px;
- display: flex;
- justify-content: space-between;
- gap: 20px;
- color: #7d8797;
- font: 10px var(--mono);
-}
-.footer > div:first-child {
- display: flex;
- align-items: center;
- gap: 8px;
-}
-.footer strong {
- color: var(--ink);
-}
-.footer-mark {
- color: var(--violet);
- border: 1px solid var(--violet);
- width: 18px;
- height: 18px;
- display: grid;
- place-items: center;
-}
-.footer-links {
- display: flex;
- gap: 15px;
-}
-.footer-links a:hover {
- color: var(--violet-dark);
-}
-@media (max-width: 1100px) {
- .plugin-grid {
- grid-template-columns: repeat(3, minmax(0, 1fr));
- }
- .hero-section {
- gap: 42px;
- }
- .hero-copy h1 {
- font-size: clamp(52px, 7vw, 82px);
- }
-}
-@media (max-width: 820px) {
- .sidebar {
- transform: translateX(-100%);
- transition: transform 0.2s ease-out;
- box-shadow: 18px 0 45px rgba(35, 40, 57, 0.18);
- }
- .sidebar.is-open {
- transform: translateX(0);
- }
- .mobile-close,
- .mobile-menu {
- display: grid;
- place-items: center;
- }
- .main-column {
- margin-left: 0;
- width: 100%;
- }
- .topbar {
- padding: 0 20px;
- }
- .topbar .mobile-menu {
- margin-right: 13px;
- }
- .crumb {
- margin-right: auto;
- }
- .ide-link {
- display: none;
- }
- .hero-section,
- .split-section {
- grid-template-columns: 1fr;
- }
- .hero-section {
- min-height: auto;
- padding-top: 70px;
- }
- .hero-proof {
- max-width: 520px;
- }
- .page-section {
- padding-top: 78px;
- padding-bottom: 78px;
- }
- .plugin-grid {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
- .plugin-inspector {
- grid-template-columns: 54px minmax(0, 1fr);
- }
- .inspector-index {
- font-size: 18px;
- }
- .inspector-source {
- grid-column: 2;
- }
- .footer {
- flex-direction: column;
- }
- .footer-links {
- flex-wrap: wrap;
- }
-}
-@media (max-width: 520px) {
- .hero-copy h1 {
- font-size: 54px;
- }
- .hero-lede {
- font-size: 16px;
- }
- .hero-meta {
- gap: 12px;
- flex-wrap: wrap;
- }
- .quick-grid {
- grid-template-columns: 1fr;
- }
- .plugin-grid {
- grid-template-columns: 1fr;
- }
- .package-strip {
- grid-template-columns: 1fr;
- }
- .table-row {
- grid-template-columns: 1fr;
- gap: 5px;
- }
- .table-head {
- display: none;
- }
- .page-section {
- padding-left: 18px;
- padding-right: 18px;
- }
- .official-art {
- min-height: 240px;
- padding: 22px;
- }
-}
-@media (prefers-reduced-motion: reduce) {
- html {
- scroll-behavior: auto;
- }
- .plugin-card,
- .button {
- transition: none;
- }
-}
-
-/* Calm docs system: welcome page and /docs shell, intentionally simpler than the previous dashboard-like landing page. */
-.welcome-page {
- min-height: 100vh;
- background: #f5f6fa;
- color: var(--ink);
-}
-.welcome-header {
- height: 68px;
- max-width: 1220px;
- margin: 0 auto;
- padding: 0 28px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- border-bottom: 1px solid var(--line);
-}
-.welcome-brand,
-.docs-brand {
- display: inline-flex;
- align-items: center;
- gap: 9px;
- font: 14px var(--display);
- letter-spacing: 0.06em;
-}
-.welcome-brand img,
-.docs-brand img {
- width: 31px;
- height: 31px;
- object-fit: contain;
-}
-.welcome-brand b,
-.docs-brand b {
- color: var(--ink);
-}
-.welcome-brand em,
-.docs-brand em {
- color: var(--violet);
- font-style: normal;
-}
-.welcome-header nav {
- display: flex;
- align-items: center;
- gap: 22px;
- color: #656d7f;
- font: 11px var(--mono);
-}
-.welcome-header nav a {
- display: inline-flex;
- align-items: center;
- gap: 4px;
-}
-.welcome-header nav a:hover {
- color: var(--violet-dark);
-}
-.welcome-main {
- max-width: 1220px;
- margin: 0 auto;
- padding: 0 28px;
-}
-.welcome-hero {
- min-height: 630px;
- display: grid;
- grid-template-columns: 1fr 0.82fr;
- align-items: center;
- gap: 90px;
- padding: 76px 42px;
-}
-.welcome-kicker,
-.docs-eyebrow {
- color: var(--violet-dark);
- font: 10px var(--mono);
- letter-spacing: 0.13em;
- text-transform: uppercase;
-}
-.welcome-copy h1 {
- font: 700 clamp(55px, 7.1vw, 96px)/0.95 var(--display);
- letter-spacing: -0.07em;
- margin: 23px 0;
-}
-.welcome-copy h1 span {
- color: var(--violet);
-}
-.welcome-copy > p {
- color: #5f6879;
- font-size: 18px;
- line-height: 1.58;
- max-width: 570px;
- margin: 0;
-}
-.welcome-actions {
- display: flex;
- gap: 12px;
- flex-wrap: wrap;
- margin: 32px 0 24px;
-}
-.welcome-primary,
-.welcome-secondary {
- display: inline-flex;
- align-items: center;
- gap: 9px;
- padding: 13px 16px;
- font: 600 11px var(--mono);
-}
-.welcome-primary {
- color: #fff;
- background: var(--orange);
-}
-.welcome-primary:hover {
- background: #eb6915;
-}
-.welcome-secondary {
- color: #4f5768;
- background: #fff;
- border: 1px solid #cfd4de;
-}
-.welcome-secondary:hover {
- border-color: var(--violet);
- color: var(--violet-dark);
-}
-.welcome-badges {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
-}
-.welcome-badges img {
- height: 20px;
-}
-.welcome-art {
- background: #fff;
- border: 1px solid var(--line);
- padding: 36px;
- box-shadow: 0 13px 35px rgba(50, 57, 75, 0.09);
-}
-.welcome-art > img {
- display: block;
- width: 100%;
- max-width: 350px;
- margin: 0 auto;
-}
-.welcome-art-caption {
- display: flex;
- justify-content: space-between;
- border-top: 1px solid var(--line);
- padding-top: 14px;
- margin-top: 27px;
- color: #7b8495;
- font: 9px var(--mono);
-}
-.welcome-art-caption span:first-child {
- color: var(--violet-dark);
-}
-.welcome-art-caption i {
- display: inline-block;
- width: 6px;
- height: 6px;
- background: var(--violet);
- border-radius: 50%;
- margin-right: 6px;
-}
-.welcome-links {
- border-top: 1px solid var(--line);
- display: grid;
- grid-template-columns: repeat(3, 1fr);
-}
-.welcome-links > a {
- display: flex;
- align-items: flex-start;
- gap: 13px;
- padding: 25px 18px;
- border-right: 1px solid var(--line);
- color: #5f6879;
-}
-.welcome-links > a:last-child {
- border-right: 0;
-}
-.welcome-links > a:hover {
- background: #fff;
-}
-.welcome-link-number {
- color: var(--violet);
- font: 10px var(--mono);
-}
-.welcome-links > a span:nth-child(2) {
- display: grid;
- gap: 5px;
-}
-.welcome-links strong {
- color: var(--ink);
- font: 600 14px var(--display);
-}
-.welcome-links small {
- font-size: 12px;
- line-height: 1.45;
-}
-.welcome-links svg:last-child {
- margin-left: auto;
- color: #8991a1;
-}
-.welcome-footer {
- max-width: 1220px;
- margin: 0 auto;
- padding: 27px 46px;
- display: flex;
- justify-content: space-between;
- color: #80899a;
- font: 10px var(--mono);
-}
-.welcome-footer span:first-child {
- display: inline-flex;
- align-items: center;
- gap: 7px;
- color: #5a6374;
-}
-.docs-app {
- min-height: 100vh;
- background: var(--surface);
- color: var(--ink);
-}
-.docs-topbar {
- height: 67px;
- background: #fff;
- border-bottom: 1px solid var(--line);
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 26px;
- position: sticky;
- top: 0;
- z-index: 12;
-}
-.docs-top-actions {
- display: flex;
- gap: 19px;
- align-items: center;
- color: #6f7889;
- font: 10px var(--mono);
-}
-.docs-top-actions a {
- display: inline-flex;
- gap: 6px;
- align-items: center;
-}
-.docs-top-actions a:hover {
- color: var(--violet-dark);
-}
-.docs-mobile-menu {
- display: none;
- background: none;
- border: 0;
- color: var(--ink);
-}
-.docs-frame {
- display: grid;
- grid-template-columns: 245px minmax(0, 1fr);
- max-width: 1440px;
- margin: 0 auto;
-}
-.docs-nav {
- position: sticky;
- top: 67px;
- height: calc(100vh - 67px);
- overflow-y: auto;
- background: #fff;
- border-right: 1px solid var(--line);
- padding: 24px 18px 40px;
-}
-.docs-nav-head {
- display: flex;
- justify-content: space-between;
- padding: 0 8px 17px;
- color: #9aa1b1;
- font: 9px var(--mono);
- letter-spacing: 0.13em;
-}
-.docs-nav-head button {
- display: none;
- border: 0;
- background: none;
- color: var(--ink);
-}
-.docs-nav-group {
- padding: 0 0 20px;
-}
-.docs-nav-group h2 {
- color: #8f97a6;
- font: 10px var(--mono);
- letter-spacing: 0.04em;
- margin: 0 8px 7px;
-}
-.docs-nav-group a {
- display: block;
- padding: 7px 8px;
- border-left: 2px solid transparent;
- color: #697286;
- font-size: 13px;
-}
-.docs-nav-group a:hover {
- color: var(--ink);
-}
-.docs-nav-group a.active {
- color: var(--violet-dark);
- border-left-color: var(--violet);
- background: #f3f1ff;
- font-weight: 600;
-}
-.docs-main {
- min-width: 0;
-}
-.docs-breadcrumb {
- max-width: 930px;
- margin: 0 auto;
- padding: 26px 64px 0;
- display: flex;
- align-items: center;
- gap: 7px;
- color: #9aa1b1;
- font: 10px var(--mono);
-}
-.docs-breadcrumb a:hover {
- color: var(--violet-dark);
-}
-.docs-breadcrumb strong {
- color: #677083;
- font-weight: 500;
-}
-.docs-article {
- max-width: 930px;
- margin: 0 auto;
- padding: 47px 64px 90px;
- min-height: calc(100vh - 140px);
-}
-.docs-title {
- font: 700 clamp(38px, 5vw, 60px)/1.03 var(--display);
- letter-spacing: -0.06em;
- margin: 15px 0 20px;
-}
-.docs-lede {
- color: #657083;
- font-size: 18px;
- line-height: 1.58;
- max-width: 700px;
- margin: 0 0 54px;
-}
-.docs-article h2 {
- font: 600 28px var(--display);
- letter-spacing: -0.03em;
- margin: 45px 0 15px;
-}
-.docs-article p {
- color: #606a7b;
- font-size: 16px;
- line-height: 1.65;
- max-width: 700px;
-}
-.docs-article code {
- color: var(--violet-dark);
- font: 13px var(--mono);
-}
-.docs-inline {
- color: var(--violet-dark);
- border-bottom: 1px solid #c6bdff;
-}
-.docs-code {
- max-width: 760px;
- margin: 19px 0 30px;
- background: #1d1f29;
- border-radius: 4px;
- overflow: hidden;
-}
-.docs-code > div {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 10px 14px;
- border-bottom: 1px solid #363a47;
- color: #bfc5cf;
- font: 9px var(--mono);
-}
-.docs-code button {
- display: inline-flex;
- align-items: center;
- gap: 5px;
- background: none;
- border: 0;
- color: #c3c8d1;
- font: 9px var(--mono);
-}
-.docs-code pre {
- color: #f4f5f7;
- font-size: 12px;
- line-height: 1.75;
- white-space: pre-wrap;
- overflow-x: auto;
- padding: 18px;
- margin: 0;
-}
-.docs-next-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 12px;
- margin-top: 38px;
-}
-.docs-link-card {
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: 14px;
- border: 1px solid var(--line);
- background: #fff;
- padding: 18px;
-}
-.docs-link-card:hover {
- border-color: #bfb7ff;
-}
-.docs-link-card > span {
- display: grid;
- gap: 5px;
-}
-.docs-link-card strong {
- font: 600 14px var(--display);
-}
-.docs-link-card small {
- color: #758093;
- font-size: 12px;
- line-height: 1.4;
-}
-.docs-link-card svg {
- color: var(--violet);
- flex: 0 0 auto;
-}
-.docs-callout {
- display: grid;
- gap: 4px;
- border-left: 3px solid var(--violet);
- background: #f2f0ff;
- padding: 16px 18px;
- margin: 25px 0 28px;
- max-width: 750px;
-}
-.docs-callout strong {
- color: var(--violet-dark);
- font: 600 12px var(--mono);
-}
-.docs-callout span {
- color: #697286;
- font-size: 14px;
- line-height: 1.45;
-}
-.layer-list {
- border-top: 1px solid var(--line);
- max-width: 760px;
-}
-.layer-row {
- display: grid;
- grid-template-columns: 54px 1fr;
- gap: 18px;
- padding: 20px 0;
- border-bottom: 1px solid var(--line);
-}
-.layer-row > span {
- color: var(--violet);
- font: 12px var(--mono);
-}
-.layer-row h2 {
- margin: 0 0 5px;
- font-size: 21px;
-}
-.layer-row p {
- margin: 0;
- font-size: 14px;
-}
-.reason-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12px;
- margin: 25px 0;
-}
-.reason-grid > div {
- background: #fff;
- border: 1px solid var(--line);
- padding: 18px;
-}
-.reason-grid strong {
- font: 600 15px var(--display);
-}
-.reason-grid p {
- font-size: 14px;
- margin: 10px 0 0;
-}
-.docs-table {
- border-top: 1px solid var(--line);
- max-width: 780px;
- margin: 20px 0 34px;
-}
-.docs-table > div {
- display: grid;
- grid-template-columns: 190px 1fr;
- gap: 18px;
- padding: 14px 9px;
- border-bottom: 1px solid var(--line);
-}
-.docs-table b {
- color: var(--violet-dark);
- font: 12px var(--mono);
-}
-.docs-table span {
- color: #687285;
- font-size: 14px;
-}
-.docs-table small {
- display: block;
- color: #929aaa;
- font: 10px var(--mono);
- margin-top: 5px;
-}
-.plugin-controls {
- display: flex;
- gap: 10px;
- flex-wrap: wrap;
- margin: 22px 0 12px;
-}
-.plugin-controls label {
- display: flex;
- align-items: center;
- gap: 8px;
- background: #fff;
- border: 1px solid var(--line);
- padding: 11px 13px;
- color: #7a8395;
- width: min(340px, 100%);
-}
-.plugin-controls input {
- border: 0;
- outline: 0;
- color: var(--ink);
- background: transparent;
- width: 100%;
- font: 11px var(--mono);
-}
-.plugin-controls select {
- border: 1px solid var(--line);
- color: #5d6678;
- background: #fff;
- padding: 11px 12px;
- font: 11px var(--mono);
-}
-.plugin-count {
- color: #8c94a2;
- font: 10px var(--mono);
- margin-bottom: 10px;
-}
-.docs-plugin-list {
- border-top: 1px solid var(--line);
-}
-.docs-plugin {
- background: #fff;
- border-bottom: 1px solid var(--line);
- padding: 18px;
-}
-.docs-plugin-main {
- display: grid;
- grid-template-columns: 37px 1fr;
- gap: 13px;
-}
-.docs-plugin-mark {
- width: 30px;
- height: 30px;
- display: grid;
- place-items: center;
- color: var(--violet);
- background: #f3f1ff;
- border: 1px solid #d7d0ff;
- font: 10px var(--mono);
-}
-.docs-plugin h2 {
- margin: 0 0 3px;
- font: 600 17px var(--display);
-}
-.docs-plugin-meta {
- color: var(--violet-dark);
- text-transform: uppercase;
- font: 8px var(--mono);
- letter-spacing: 0.07em;
-}
-.docs-plugin p {
- font-size: 13px;
- margin: 9px 0 0;
-}
-.docs-plugin-detail {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: 18px;
- margin: 17px 0 0 50px;
- color: #818a9a;
- font: 9px var(--mono);
-}
-.docs-plugin-detail span {
- display: grid;
- gap: 4px;
-}
-.docs-plugin-detail b {
- color: #7a8394;
- font-weight: 500;
-}
-.docs-plugin-detail a {
- color: var(--violet-dark);
- display: inline-flex;
- gap: 4px;
- align-items: center;
- margin-left: auto;
-}
-.integration-list {
- border-top: 1px solid var(--line);
- max-width: 760px;
- margin-top: 28px;
-}
-.integration-list a {
- display: grid;
- grid-template-columns: 1fr 20px;
- gap: 3px 15px;
- align-items: center;
- padding: 18px 9px;
- border-bottom: 1px solid var(--line);
-}
-.integration-list a:hover {
- background: #fff;
-}
-.integration-list strong {
- font: 600 15px var(--display);
-}
-.integration-list span {
- color: #727c8c;
- font-size: 13px;
-}
-.integration-list svg {
- grid-column: 2;
- grid-row: 1 / span 2;
- color: var(--violet);
-}
-.docs-footer {
- max-width: 930px;
- margin: 0 auto;
- border-top: 1px solid var(--line);
- padding: 20px 64px 40px;
- display: flex;
- justify-content: space-between;
- color: #6f7889;
- font: 10px var(--mono);
-}
-.docs-footer a {
- display: inline-flex;
- align-items: center;
- gap: 6px;
-}
-.docs-footer a:hover {
- color: var(--violet-dark);
-}
-@media (max-width: 850px) {
- .welcome-hero {
- grid-template-columns: 1fr;
- gap: 45px;
- padding: 68px 18px;
- }
- .welcome-art {
- max-width: 530px;
- }
- .welcome-links {
- grid-template-columns: 1fr;
- }
- .welcome-links > a {
- border-right: 0;
- border-bottom: 1px solid var(--line);
- }
- .welcome-links > a:last-child {
- border-bottom: 0;
- }
- .welcome-footer {
- padding: 27px 18px;
- flex-direction: column;
- gap: 11px;
- }
- .docs-mobile-menu {
- display: block;
- order: -1;
- margin-right: 12px;
- }
- .docs-topbar {
- justify-content: flex-start;
- }
- .docs-brand {
- margin-right: auto;
- }
- .docs-top-actions {
- display: none;
- }
- .docs-frame {
- display: block;
- }
- .docs-nav {
- position: fixed;
- inset: 67px auto 0 0;
- width: 285px;
- transform: translateX(-105%);
- transition: transform 0.2s ease-out;
- z-index: 11;
- box-shadow: 14px 0 35px rgba(35, 40, 57, 0.15);
- }
- .docs-frame.nav-open .docs-nav {
- transform: translateX(0);
- }
- .docs-nav-head button {
- display: block;
- }
- .docs-breadcrumb {
- padding-left: 24px;
- padding-right: 24px;
- }
- .docs-article {
- padding-left: 24px;
- padding-right: 24px;
- }
- .docs-footer {
- padding-left: 24px;
- padding-right: 24px;
- }
- .reason-grid {
- grid-template-columns: 1fr;
- }
-}
-@media (max-width: 540px) {
- .welcome-header {
- padding: 0 18px;
- }
- .welcome-header nav a:nth-child(n + 2) {
- display: none;
- }
- .welcome-main {
- padding: 0 18px;
- }
- .welcome-copy h1 {
- font-size: 57px;
- }
- .welcome-copy > p {
- font-size: 16px;
- }
- .docs-next-grid {
- grid-template-columns: 1fr;
- }
- .docs-table > div {
- grid-template-columns: 1fr;
- gap: 5px;
- }
- .docs-plugin-detail {
- margin-left: 50px;
- gap: 12px;
- }
- .docs-plugin-detail a {
- margin-left: 0;
- }
- .docs-title {
- font-size: 42px;
- }
- .docs-lede {
- font-size: 16px;
- margin-bottom: 39px;
- }
-}
-
-.welcome-art-visual {
- min-height: 335px;
- display: grid;
- place-items: center;
- position: relative;
- background: #fbfbfd;
- overflow: hidden;
-}
-.welcome-art-logo {
- width: 178px !important;
- height: 178px;
- object-fit: contain;
- position: absolute;
- z-index: 1;
- opacity: 1;
-}
-.welcome-art-animation {
- display: block;
- width: min(100%, 330px);
- max-width: 330px;
- position: relative;
- z-index: 0;
- opacity: 0.16;
-}
-.welcome-art-caption {
- position: relative;
-}
-
-/* Distinct OptiPrune refinement: right-side docs rail, violet actions, recognizable ecosystem icons, and high-contrast code. */
-.welcome-header nav {
- order: 2;
-}
-.skill-link,
-.docs-skill-link {
- display: inline-flex !important;
- align-items: center;
- justify-content: center;
-}
-.skill-link img {
- width: 22px;
- height: 22px;
- display: block;
-}
-.docs-skill-link img {
- width: 19px;
- height: 19px;
- display: block;
-}
-.skill-link:hover img,
-.docs-skill-link:hover img {
- transform: translateY(-1px);
-}
-.welcome-primary {
- background: var(--violet);
-}
-.welcome-primary:hover {
- background: var(--violet-dark);
-}
-.welcome-kicker {
- display: none;
-}
-.docs-code pre,
-.docs-code code {
- color: #f7f8ff !important;
-}
-.docs-code {
- background: #171923;
-}
-.docs-frame {
- grid-template-columns: minmax(0, 1fr) 245px;
-}
-.docs-nav {
- grid-column: 2;
- grid-row: 1;
- border-right: 0;
- border-left: 1px solid var(--line);
-}
-.docs-main {
- grid-column: 1;
- grid-row: 1;
-}
-.docs-footer {
- border-top: 1px solid var(--line);
-}
-.docs-footer > span {
- flex: 1;
-}
-.docs-footer > a:last-child {
- margin-left: auto;
- text-align: right;
-}
-@media (max-width: 850px) {
- .docs-frame {
- display: block;
- }
- .docs-nav {
- border-left: 0;
- border-right: 1px solid var(--line);
- }
- .welcome-header nav {
- order: initial;
- }
-}
-
-/* Icon scale refinement: ecosystem links should be visible touch targets, not tiny metadata. */
-.skill-link img {
- width: 30px;
- height: 30px;
-}
-.docs-skill-link img {
- width: 25px;
- height: 25px;
-}
-.welcome-header nav {
- gap: 25px;
-}
-.docs-top-actions {
- gap: 22px;
-}
-@media (max-width: 540px) {
- .skill-link img {
- width: 28px;
- height: 28px;
- }
- .docs-skill-link img {
- width: 24px;
- height: 24px;
- }
- .welcome-header nav {
- gap: 14px;
- }
-}
-
-/* Header icon tile refinement: square, prominent ecosystem shortcuts grouped tightly beside Docs. */
-.welcome-header nav {
- gap: 12px;
-}
-.skill-link,
-.docs-skill-link {
- width: 42px;
- height: 42px;
- border: 1px solid #dfe2e9;
- background: #fff;
- border-radius: 6px;
-}
-.skill-link img {
- width: 32px;
- height: 32px;
-}
-.docs-skill-link img {
- width: 29px;
- height: 29px;
-}
-.welcome-header nav > a:first-child {
- margin-right: 1px;
-}
-.docs-top-actions {
- gap: 12px;
-}
-.docs-top-actions > a:first-child {
- margin-right: 1px;
-}
-@media (max-width: 540px) {
- .welcome-header nav {
- gap: 8px;
- }
- .skill-link,
- .docs-skill-link {
- width: 38px;
- height: 38px;
- }
- .skill-link img {
- width: 29px;
- height: 29px;
- }
- .docs-skill-link img {
- width: 27px;
- height: 27px;
- }
-}
-
-/* Plugin package logos: official Simple Icons where available, initials fallback otherwise. */
-.docs-plugin-logo img {
- width: 20px;
- height: 20px;
- display: block;
- object-fit: contain;
-}
-.docs-plugin-logo {
- background: #fff;
-}
-.docs-callout .docs-inline {
- overflow-wrap: anywhere;
- word-break: break-word;
-}
-
-/* Calm docs system: package marks and behavioral detail blocks reinforce the existing restrained editorial reference styling. */
-.docs-plugin-logo {
- position: relative;
- overflow: hidden;
- background: #fff;
-}
-.docs-plugin-logo img {
- width: 20px;
- height: 20px;
- display: block;
- object-fit: contain;
-}
-.plugin-initials {
- display: none;
- font: 9px var(--mono);
- color: var(--violet);
-}
-.plugin-initials.visible {
- display: grid;
- place-items: center;
- position: absolute;
- inset: 0;
-}
-.plugin-detail-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12px;
- margin: 28px 0 8px;
- max-width: 790px;
-}
-.plugin-detail-grid section {
- background: #fff;
- border: 1px solid var(--line);
- padding: 17px;
-}
-.plugin-detail-grid section > span {
- color: var(--violet-dark);
- font: 10px var(--mono);
- text-transform: uppercase;
- letter-spacing: 0.06em;
-}
-.plugin-detail-grid p {
- margin: 10px 0 0;
- font-size: 14px;
- line-height: 1.52;
-}
-.docs-plugin-detail span {
- max-width: min(330px, 100%);
- line-height: 1.45;
-}
-.docs-plugin-detail span b {
- text-transform: uppercase;
- font-size: 8px;
- letter-spacing: 0.06em;
-}
-
-/* Motion pass: preserve the original calm editorial style while giving route changes and inspection moments a physical response. */
-@keyframes welcomeEnter {
- from {
- opacity: 0;
- transform: translateY(12px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-@keyframes artEnter {
- from {
- opacity: 0;
- transform: translateX(14px) scale(0.985);
- }
- to {
- opacity: 1;
- transform: translateX(0) scale(1);
- }
-}
-@keyframes docsEnter {
- from {
- opacity: 0;
- transform: translateY(8px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-.welcome-copy > *,
-.welcome-links > a,
-.welcome-footer > span {
- animation: welcomeEnter 0.48s cubic-bezier(0.22, 1, 0.36, 1) both;
-}
-.welcome-copy > *:nth-child(2) {
- animation-delay: 0.04s;
-}
-.welcome-copy > *:nth-child(3) {
- animation-delay: 0.09s;
-}
-.welcome-copy > *:nth-child(4) {
- animation-delay: 0.14s;
-}
-.welcome-copy > *:nth-child(5) {
- animation-delay: 0.19s;
-}
-.welcome-art {
- animation: artEnter 0.58s cubic-bezier(0.22, 1, 0.36, 1) 0.08s both;
-}
-.welcome-links > a:nth-child(2) {
- animation-delay: 0.08s;
-}
-.welcome-links > a:nth-child(3) {
- animation-delay: 0.16s;
-}
-.docs-article {
- animation: docsEnter 0.28s cubic-bezier(0.22, 1, 0.36, 1) both;
-}
-.docs-link-card,
-.docs-plugin,
-.integration-list a {
- transition:
- transform 0.18s cubic-bezier(0.22, 1, 0.36, 1),
- border-color 0.18s ease,
- background-color 0.18s ease,
- box-shadow 0.18s ease;
-}
-.docs-link-card:hover,
-.docs-plugin:hover,
-.integration-list a:hover {
- transform: translateY(-2px);
-}
-.docs-code {
- transition:
- box-shadow 0.2s ease,
- transform 0.2s cubic-bezier(0.22, 1, 0.36, 1);
-}
-.docs-code:hover {
- transform: translateY(-1px);
- box-shadow: 0 12px 28px rgba(42, 47, 66, 0.1);
-}
-.docs-code button {
- transition:
- color 0.16s ease,
- transform 0.16s ease;
-}
-.docs-code button:hover {
- color: var(--violet-dark);
- transform: translateY(-1px);
-}
-.docs-code button:active {
- transform: scale(0.97);
-}
-.docs-skill-link img,
-.skill-link img {
- transition: transform 0.18s cubic-bezier(0.22, 1, 0.36, 1);
-}
-.skill-link:hover img,
-.docs-skill-link:hover img {
- transform: translateY(-2px) scale(1.04);
-}
-@media (prefers-reduced-motion: reduce) {
- *,
- *::before,
- *::after {
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
- scroll-behavior: auto !important;
- }
-}
-@media (max-width: 540px) {
- .plugin-detail-grid {
- grid-template-columns: 1fr;
- }
-}
diff --git a/docs/client/src/lib/complete-inventory.json b/docs/client/src/lib/complete-inventory.json
deleted file mode 100644
index 4c732771..00000000
--- a/docs/client/src/lib/complete-inventory.json
+++ /dev/null
@@ -1,762 +0,0 @@
-{
- "generatedAt": "2026-08-16T11:34:27.393Z",
- "repositories": {
- "core": {
- "commit": "ref: refs/heads/main",
- "version": "1.11.38",
- "exports": ["analyze", "applyFixes", "exportCache", "importCache", "shouldFail"],
- "typeExports": [
- "AnalysisContext",
- "AnalysisReport",
- "AnalysisSummary",
- "AnalyzerOptions",
- "AnalyzerPlugin",
- "CONFIDENCE_RANK",
- "CandidateBranch",
- "ConcolicVerificationResult",
- "Confidence",
- "Config",
- "DependencyEdge",
- "DynamicImportCandidate",
- "DynamicPattern",
- "EdgeKind",
- "ExportMember",
- "ExportRecord",
- "FailOn",
- "Finding",
- "FixConfig",
- "ModuleRecord",
- "MonorepoGraph",
- "OptiPruneUserConfig",
- "OutputFormat",
- "ParseDiagnostic",
- "ParseStatus",
- "ParserBackend",
- "PluginAdapter",
- "PluginLifecycle",
- "PluginsConfig",
- "Position",
- "Range",
- "ResolvedOptions",
- "RuleSeverity",
- "Severity",
- "StronglyConnectedComponent",
- "WorkspacePackage",
- "defineConfig"
- ],
- "sourceFiles": [
- "ast-utils.ts",
- "cache.ts",
- "config-loader.ts",
- "coverage-tracker.ts",
- "engine.ts",
- "fixer.ts",
- "fs-utils.ts",
- "graph.ts",
- "index.ts",
- "instrument.ts",
- "layer2.ts",
- "layer3.ts",
- "layer4.ts",
- "layer5.ts",
- "layer6.ts",
- "layer7.ts",
- "npm-utils.ts",
- "optional-peer-dependencies.d.ts",
- "parser.ts",
- "plugin-config.ts",
- "reporters.ts",
- "semantic-graph.ts",
- "symbolic-engine.ts",
- "topology-manager.ts",
- "types.ts",
- "workspace.ts"
- ],
- "layers": ["layer2.ts", "layer3.ts", "layer4.ts", "layer5.ts", "layer6.ts", "layer7.ts"],
- "pluginFiles": [
- "angular-plugin.ts",
- "astro-plugin.ts",
- "ava-plugin.ts",
- "axios-plugin.ts",
- "babel-plugin.ts",
- "biome-plugin.ts",
- "bumpp-plugin.ts",
- "bun-plugin.ts",
- "c8-plugin.ts",
- "capacitor-plugin.ts",
- "changelogen-plugin.ts",
- "changelogithub-plugin.ts",
- "changesets-plugin.ts",
- "commitlint-plugin.ts",
- "commitzen-plugin.ts",
- "convex-plugin.ts",
- "cross-env-plugin.ts",
- "cspell-plugin.ts",
- "cucumber-plugin.ts",
- "cypress-plugin.ts",
- "dependency-cruiser-plugin.ts",
- "docker-plugin.ts",
- "docusaurus-plugin.ts",
- "dotenv-plugin.ts",
- "drizzle-plugin.ts",
- "eleventy-plugin.ts",
- "esbuild-plugin.ts",
- "eslint-plugin.ts",
- "execa-plugin.ts",
- "expo-plugin.ts",
- "express-plugin.ts",
- "expressive-code-plugin.ts",
- "fast-plugin.ts",
- "fastify-plugin.ts",
- "fumadocs-plugin.ts",
- "gatsby-plugin.ts",
- "github-actions-plugin.ts",
- "graphql-codegen-plugin.ts",
- "hardhat-plugin.ts",
- "hono-plugin.ts",
- "heroku-plugin.ts",
- "husky-plugin.ts",
- "i18next-parser-plugin.ts",
- "jest-plugin.ts",
- "jetbrains-plugin.ts",
- "karma-plugin.ts",
- "knex-plugin.ts",
- "knip-plugin.ts",
- "ladle-plugin.ts",
- "lefthook-plugin.ts",
- "lint-html-plugin.ts",
- "lint-staged-plugin.ts",
- "lit-plugin.ts",
- "lockfile-lint-plugin.ts",
- "lost-pixel-plugin.ts",
- "markdown-lint.ts",
- "marko-plugin.ts",
- "mdx-plugin.ts",
- "mdxlint-plugin.ts",
- "metro-plugin.ts",
- "mocha-plugin.ts",
- "moonrepo-plugin.ts",
- "msw-plugin.ts",
- "nestjs-plugin.ts",
- "netlify-plugin.ts",
- "nextjs-plugin.ts",
- "nitro-plugin.ts",
- "node-types-plugin.ts",
- "nodemon-plugin..ts",
- "npm-package-json-lint-plugin.ts",
- "nuxtjs-plugin.ts",
- "nx-plugin.ts",
- "nyc-plugin.ts",
- "object-member-plugin.ts",
- "oclif-plugin.ts",
- "openapi-ts.ts",
- "openclaw-plugin.ts",
- "orval-plugin.ts",
- "oxfmt-plugin.ts",
- "oxlint-plugin.ts",
- "panda-css-plugin.ts",
- "parcel-plugin.ts",
- "payload-cms-plugin.ts",
- "playwright-plugin.ts",
- "plop-plugin.ts",
- "pm2-plugin.ts",
- "pnpm-plugin.ts",
- "postcss-plugin.ts",
- "pre-commit-plugin.ts",
- "preconstruct-plugin.ts",
- "prettier-plugin.ts",
- "prisma-plugin.ts",
- "quasar-plugin.ts",
- "qwik-plugin.ts",
- "r-tools-plugin.ts",
- "raycast-plugin.ts",
- "react-cosmos-plugin.ts",
- "react-email-plugin.ts",
- "react-native-plugin.ts",
- "react-native-router-plugin.ts",
- "react-plugin.ts",
- "release-it-plugin.ts",
- "remark-plugin.ts",
- "remix-plugin.ts",
- "rolldown-plugin.ts",
- "rollup-plugin.ts",
- "rsbuild-plugin.ts",
- "rslib-plugin.ts",
- "rspack-plugin.ts",
- "rstest-plugin.ts",
- "sanity-plugin.ts",
- "semantic-release-plugin.ts",
- "sentry-plugin.ts",
- "serverless-plugin.ts",
- "service-worker-plugin.ts",
- "simple-git-hooks-plugin.ts",
- "size-limit-plugin.ts",
- "sst-plugin.ts",
- "storybook-plugin.ts",
- "stryker-plugin.ts",
- "stylelint-plugin.ts",
- "svelte-kit-plugin.ts",
- "svelte-plugin.ts",
- "svgo-plugin.ts",
- "svgr-plugin.ts",
- "swc-plugin.ts",
- "tailwind-plugin.ts",
- "tanstack-router.ts",
- "taskfile-plugin.ts",
- "tauri-plugin.ts",
- "temporal-io-plugin.ts",
- "travis-ci-plugin.ts",
- "trpc-plugin.ts",
- "ts-node-plugin.ts",
- "tsconfig-plus-plugin.ts",
- "tsdown-plugin.ts",
- "tsup-plugin.ts",
- "tsx-plugin.ts",
- "typedoc-plugin.ts",
- "typeorm-plugin.ts",
- "unbuild-plugin.ts",
- "unocss-plugin.ts",
- "unplugin-plugin.ts",
- "vercel-plugin.ts",
- "vike-plugin.ts",
- "vite-plugin.ts",
- "vite-specialized-plugin.ts",
- "vitepress-plugin.ts",
- "vitest-plugin.ts",
- "vscode-plugin.ts",
- "vuejs-plugin.ts",
- "webdriver-io-plugin.ts",
- "webpack-plugin.ts",
- "wireit-plugin.ts",
- "worker-plugin.ts",
- "wrangler-plugin.ts",
- "xo-plugin.ts",
- "yarn-plugin.ts",
- "zod-plugin.ts"
- ],
- "packageExports": {
- ".": {
- "types": "./dist/index.d.ts",
- "import": "./dist/index.js"
- },
- "./reporters": {
- "types": "./dist/reporters.d.ts",
- "import": "./dist/reporters.js"
- },
- "./fs-utils": {
- "types": "./dist/fs-utils.d.ts",
- "import": "./dist/fs-utils.js"
- },
- "./types": {
- "types": "./dist/types.d.ts",
- "import": "./dist/types.js"
- },
- "./package.json": "./package.json"
- }
- },
- "cli": {
- "commit": "ref: refs/heads/main",
- "version": "1.2.23",
- "commands": ["analyze", "export-cache ", "import-cache "],
- "options": [
- {
- "flag": "-r, --rootDir ",
- "description": "Root directory of the project"
- },
- {
- "flag": "--include-entry-exports",
- "description": "Include entry exports in the analysis"
- },
- {
- "flag": "--ignore-tests",
- "description": "Ignore Test folders, Spec folders, *.test.*, *.spec.* files"
- },
- {
- "flag": "--ignore-unknown-import",
- "description": " Ignore dynamic and unknown import patterns for reachability"
- },
- {
- "flag": "--cycles",
- "description": "Print detected dependency cycles"
- },
- {
- "flag": "-e, --entry ",
- "description": "Entry point patterns (glob or file paths)"
- },
- {
- "flag": "-x, --extensions ",
- "description": "File extensions to analyze"
- },
- {
- "flag": "-i, --ignore ",
- "description": "Ignore patterns (glob)"
- },
- {
- "flag": "--no-report-unused-exports",
- "description": "Do not report unused exports"
- },
- {
- "flag": "--no-conventional-entries",
- "description": "Do not include conventional entry points (e.g., src/index.ts)"
- },
- {
- "flag": "--fail-on ",
- "description": "Fail on findings with confidence level (high, medium, low, none)"
- },
- {
- "flag": "--json",
- "description": "Output results as JSON"
- },
- {
- "flag": "--sarif",
- "description": "Output results in SARIF format"
- },
- {
- "flag": "--skip-3",
- "description": "Skip Layer 3 (SMT Constraint Solver)"
- },
- {
- "flag": "--skip-4",
- "description": "Skip Layer 4 (Concolic Execution Proofs)"
- },
- {
- "flag": "-v, --verbose",
- "description": "Show verbose output and internal graph state"
- },
- {
- "flag": "--fix ",
- "description": "Fix selected targets: files, exports, dependencies, devDependencies"
- },
- {
- "flag": "--confidence ",
- "description": "Minimum confidence to fix (high, medium+, low/low+, all)"
- },
- {
- "flag": "--force",
- "description": "Allow fixes below the configured confidence threshold"
- },
- {
- "flag": "--dry-run",
- "description": "Log what would be fixed without changing files"
- },
- {
- "flag": "--cache-from ",
- "description": "Path to a JSON file to import cache from before analysis"
- },
- {
- "flag": "--cache-to ",
- "description": "Path to export the resulting cache to after analysis"
- }
- ],
- "sourceFiles": ["cli.ts"],
- "packageBin": {
- "optiprune": "./dist/cli.js"
- }
- }
- },
- "configuration": {
- "schemaFields": [
- "$schema",
- "rootDir",
- "entry",
- "extensions",
- "ignore",
- "ignoreDependencies",
- "externalContracts",
- "reportUnusedExports",
- "includeConventionalEntries",
- "failOn",
- "verbose",
- "fix",
- "output",
- "json",
- "rules",
- "plugins",
- "layers"
- ],
- "schema": {
- "$schema": {
- "type": "string",
- "description": "URL to the JSON schema for validation and autocompletion."
- },
- "rootDir": {
- "type": "string",
- "default": ".",
- "description": "The root directory of the project source code relative to the workspace."
- },
- "entry": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [],
- "description": "Array of entry-point file patterns used as analysis roots. Their dependency chains are analyzed for reachability; only explicitly public entry APIs and package.json exports protect public exports from unused-export pruning."
- },
- "extensions": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [
- ".ts",
- ".tsx",
- ".mts",
- ".cts",
- ".js",
- ".jsx",
- ".mjs",
- ".cjs",
- ".vue",
- ".svelte",
- ".astro",
- ".css",
- ".scss",
- ".sass",
- ".less",
- ".styl",
- ".stylus"
- ],
- "description": "File extensions OptiPrune will process during analysis. Replaces the default list when provided."
- },
- "ignore": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [],
- "description": "Glob patterns or path segments to exclude from analysis. Use this to ignore entire folders (e.g., '**/tests/**'), specific files (e.g., '**/*.spec.ts'), or build artifacts. These patterns are appended to the built-in defaults like node_modules and dist.",
- "examples": [["**/tests/**", "**/__mocks__/**", "**/*.test.ts"]]
- },
- "ignoreDependencies": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [],
- "description": "npm package names that OptiPrune should never flag as unused, regardless of whether they appear in import statements. Useful for packages used via global injection or peer dependencies."
- },
- "externalContracts": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [],
- "description": "List of public symbols or interfaces exported for external consumers to prevent OptiPrune from flagging them as unused."
- },
- "reportUnusedExports": {
- "type": "boolean",
- "default": true,
- "description": "When true, flags exported symbols that are never imported elsewhere in the project."
- },
- "includeConventionalEntries": {
- "type": "boolean",
- "default": true,
- "description": "Automatically recognizes framework conventions (e.g., index.ts, main.js, App.tsx) as entry points."
- },
- "failOn": {
- "type": "string",
- "enum": ["high", "medium", "low", "info", "none"],
- "default": "high",
- "description": "Minimum finding severity level that causes the execution process to exit with a non-zero code."
- },
- "verbose": {
- "type": "boolean",
- "default": false,
- "description": "Enables detailed step-by-step diagnostic logging during execution."
- },
- "fix": {
- "oneOf": [
- {
- "type": "boolean",
- "description": "When true, automatically applies high-confidence fixes from the conservative default set: unreachable files and unused dependencies. Source-level fixes require an explicit rules category."
- },
- {
- "type": "object",
- "description": "Granular fix configuration.",
- "properties": {
- "confidence": {
- "type": "string",
- "enum": ["high", "medium+", "low+", "all"],
- "default": "high",
- "description": "Minimum confidence level to apply a fix."
- },
- "rules": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "List of fix categories or individual rule names. Categories include exports, files, dependencies, and conditions. Supported core rules include unused-export, unused-member, unreachable-file, unused-dependency, unused-dev-dependency, and constant-condition.",
- "examples": [
- ["files", "dependencies"],
- ["exports"],
- ["files", "dependencies", "exports", "conditions"]
- ]
- },
- "dryRun": {
- "type": "boolean",
- "default": false,
- "description": "If true, logs fixes without modifying files."
- }
- },
- "additionalProperties": false
- }
- ],
- "default": false,
- "description": "Configures automated dead-code removal. Boolean true uses the conservative default fix categories; use an object to opt into source-level export or condition fixes."
- },
- "output": {
- "type": "string",
- "enum": ["terminal", "json", "sarif"],
- "default": "terminal",
- "description": "Output format for analysis results. 'terminal' produces human-readable coloured output; 'json' emits machine-readable JSON to stdout; 'sarif' emits SARIF 2.1 JSON for IDE and CI integrations."
- },
- "json": {
- "type": "boolean",
- "default": false,
- "deprecated": true,
- "description": "Deprecated. Use 'output: \"json\"' instead. When true, outputs analysis findings in raw JSON format to stdout."
- },
- "rules": {
- "type": "object",
- "description": "Map of rule names to their severity level overrides.",
- "additionalProperties": {
- "type": "string",
- "enum": ["error", "warning", "off"]
- }
- },
- "plugins": {
- "type": "object",
- "description": "Explicit enable/disable overrides for individual plugins. Use the plugin's name string as the key. Setting a value to false disables the plugin even if its auto-detection would enable it; setting it to true forces it on regardless of detection.",
- "additionalProperties": {
- "type": "boolean"
- },
- "examples": [
- {
- "nextjs-plugin": true,
- "nestjs-plugin": false
- }
- ]
- },
- "layers": {
- "type": "object",
- "description": "Advanced engine layer settings for execution and solver layers.",
- "additionalProperties": false,
- "properties": {
- "smtTimeoutMs": {
- "type": "integer",
- "minimum": 0,
- "default": 10000,
- "description": "Maximum time limit in milliseconds allocated to the SMT solver per proof attempt."
- },
- "isolateMemoryLimitMb": {
- "type": "integer",
- "minimum": 1,
- "default": 128,
- "description": "Maximum V8 isolate heap memory limit in Megabytes allocated per worker thread."
- },
- "enableConcolicProof": {
- "type": "boolean",
- "default": false,
- "description": "Enables concolic execution engine for deep reachability and dead-path proofs."
- },
- "skip3": {
- "type": "boolean",
- "default": false,
- "description": "Skips Execution Layer 3 (SMT/Z3 solver) pass during analysis."
- },
- "skip4": {
- "type": "boolean",
- "default": false,
- "description": "Skips Execution Layer 4 (WASM sandbox) pass during analysis."
- }
- }
- }
- },
- "typeConfigFields": [
- "allDependencies",
- "ast",
- "baseDirectory",
- "baseUrl",
- "cacheFrom",
- "cacheTo",
- "candidateBranches",
- "candidates",
- "column",
- "components",
- "confidence",
- "contextCode",
- "cycles",
- "dependencies",
- "dryRun",
- "dynamicExpression",
- "dynamicImportCandidates",
- "dynamicPattern",
- "edges",
- "enabled",
- "enabledPlugins",
- "end",
- "entry",
- "entryPoints",
- "errors",
- "evidence",
- "executionTimeMs",
- "exportedAs",
- "exports",
- "expression",
- "extensions",
- "externalContracts",
- "failOn",
- "file",
- "filesDiscovered",
- "filesFallback",
- "filesParsed",
- "filesRecovered",
- "findings",
- "fix",
- "force",
- "frameworks",
- "hasParseError",
- "hasReachableUnknownDynamicBoundary",
- "hasUnknownDynamicBoundary",
- "hasUnresolvedCommonJsExports",
- "high",
- "id",
- "ignore",
- "ignoreDependencies",
- "importedLocals",
- "importedNames",
- "includeConventionalEntries",
- "info",
- "instrumentedCode",
- "isCycle",
- "isDefault",
- "isExternalContract",
- "isMaybeReachable",
- "isReExport",
- "isReachable",
- "isTypeOnly",
- "isWildcard",
- "json",
- "kind",
- "layers",
- "lifecycle",
- "line",
- "localReferences",
- "localSymbolMap",
- "localTypeMap",
- "location",
- "logs",
- "low",
- "manifestPath",
- "maybeReachable",
- "medium",
- "members",
- "message",
- "modules",
- "monorepo",
- "name",
- "none",
- "options",
- "output",
- "packageMap",
- "parseDiagnostics",
- "parseStatus",
- "parserBackend",
- "pathAliases",
- "pathReached",
- "plugins",
- "prefix",
- "projectPatterns",
- "protectedExportPatterns",
- "publicApiEntryPoints",
- "rawSpecifier",
- "reachable",
- "recovered",
- "relativePath",
- "reportUnusedExports",
- "repositoryType",
- "resolution",
- "rootDir",
- "rootPath",
- "rule",
- "rules",
- "scannedDirectories",
- "schemaEnums",
- "seedInput",
- "semanticGraph",
- "severity",
- "skip3",
- "skip4",
- "source",
- "sourceText",
- "start",
- "stronglyConnectedComponents",
- "suffix",
- "summary",
- "symbolicContracts",
- "target",
- "topologicalOrder",
- "unreachableFileIgnorePatterns",
- "usedExportConfidence",
- "usedExports",
- "usedMembers",
- "usedPackages",
- "verbose",
- "version",
- "warnings",
- "workspaceGlobs"
- ],
- "sources": [
- "optiprune.config",
- "optiprune.config.js",
- "optiprune.config.mjs",
- "optiprune.config.ts",
- "optiprune.json",
- "optiprune.jsonc"
- ],
- "precedence": [
- "optiprune.json",
- "optiprune.jsonc",
- "optiprune.config.ts",
- "optiprune.config.js",
- "optiprune.config.mjs",
- "package.json#optiprune"
- ],
- "runtimeDefaultsBlock": "export const DEFAULT_CONFIG: ResolvedOptions = {\n rootDir: normalizeAbsolute(process.cwd()),\n entry: [],\n extensions: DEFAULT_EXTENSIONS,\n ignore: DEFAULT_IGNORE,\n ignoreDependencies: [],\n reportUnusedExports: true,\n schemaEnums: {},\n failOn: \"high\",\n json: false,\n output: \"terminal\",\n includeConventionalEntries: true,\n externalContracts: [],\n verbose: false,\n fix: false,\n workspaceGlobs: [],\n projectPatterns: [],\n unreachableFileIgnorePatterns: [],\n protectedExportPatterns: [],\n frameworks: [],\n pathAliases: new Map(),\n layers: {\n smtTimeoutMs: 100,\n isolateMemoryLimitMb: 16,\n enableConcolicProof: true,\n skip3: false,\n skip4: false,\n },\n rules: {\n \"unused-export\": \"warning\",\n \"unreachable-file\": \"warning\",\n \"constant-condition\": \"warning\",\n \"unreachable-dynamic-path\": \"warning\",\n },\n plugins: {},\n};\n\n"
- },
- "analysis": {
- "findingRules": [
- "constant-condition",
- "contradictory-guard",
- "missing-dependency",
- "missing-script-target",
- "no-entry-points",
- "non-existent-dependency",
- "parse-recovery",
- "protected-contract",
- "schema-impossible-guard",
- "unknown-dynamic-import",
- "unreachable-dynamic-path",
- "unreachable-file",
- "unreachable-statement",
- "unresolved-import",
- "unused-dependency",
- "unused-dev-dependency",
- "unused-export",
- "unused-member"
- ],
- "fixerRules": [
- "conditions",
- "constant-condition",
- "dependencies",
- "exports",
- "files",
- "unreachable-file",
- "unused-dependency",
- "unused-dev-dependency",
- "unused-export",
- "unused-member"
- ],
- "reporterExports": ["formatSarif", "formatTerminal"]
- }
-}
diff --git a/docs/client/src/lib/pluginData.ts b/docs/client/src/lib/pluginData.ts
deleted file mode 100644
index 83d11d04..00000000
--- a/docs/client/src/lib/pluginData.ts
+++ /dev/null
@@ -1,1674 +0,0 @@
-// Calm OptiPrune docs data: the UI presents each source-backed plugin through its user-facing behavior, not implementation internals.
-export type PluginRecord = {
- name: string;
- version: string;
- category: string;
- summary: string;
- lifecycle: string[];
- markers: string[];
- source: string;
-};
-
-export const plugins: PluginRecord[] = [
- {
- name: "angular-plugin",
- version: "1.3.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Angular conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/angular-plugin.ts",
- },
- {
- name: "astro-plugin",
- version: "1.5.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Astro conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/astro-plugin.ts",
- },
- {
- name: "ava-plugin",
- version: "1.1.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Ava configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/ava-plugin.ts",
- },
- {
- name: "babel-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Babel configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/babel-plugin.ts",
- },
- {
- name: "biome-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Biome configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/biome-plugin.ts",
- },
- {
- name: "bumpp-plugin",
- version: "1.1.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Bumpp configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/bumpp-plugin.ts",
- },
- {
- name: "bun-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Bun configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/bun-plugin.ts",
- },
- {
- name: "c8-plugin",
- version: "1.1.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for C8 configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/c8-plugin.ts",
- },
- {
- name: "capacitor-plugin",
- version: "1.0.0",
- category: "Platforms & runtime",
- summary:
- "Project-aware analysis for Capacitor conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/capacitor-plugin.ts",
- },
- {
- name: "changelogen-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Changelogen configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/changelogen-plugin.ts",
- },
- {
- name: "changelogithub-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Changelogithub configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/changelogithub-plugin.ts",
- },
- {
- name: "changesets-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Changesets configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/changesets-plugin.ts",
- },
- {
- name: "commitzen-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Commitizen conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/commitzen-plugin.ts",
- },
- {
- name: "commitlint-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Commitlint configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/commitlint-plugin.ts",
- },
- {
- name: "convex-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Convex conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/convex-plugin.ts",
- },
- {
- name: "cross-env-plugin",
- version: "1.0.1",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Cross Env configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/cross-env-plugin.ts",
- },
- {
- name: "cspell-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Cspell configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/cspell-plugin.ts",
- },
- {
- name: "cucumber-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Cucumber configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/cucumber-plugin.ts",
- },
- {
- name: "cypress-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Cypress configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/cypress-plugin.ts",
- },
- {
- name: "dependency-cruiser-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Dependency Cruiser configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/dependency-cruiser-plugin.ts",
- },
- {
- name: "docker-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Docker configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/docker-plugin.ts",
- },
- {
- name: "docusaurus-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Docusaurus conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/docusaurus-plugin.ts",
- },
- {
- name: "dotenv-plugin",
- version: "1.1.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Dotenv configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onAnalysisComplete", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/dotenv-plugin.ts",
- },
- {
- name: "drizzle-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Drizzle configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/drizzle-plugin.ts",
- },
- {
- name: "eleventy-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Eleventy conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/eleventy-plugin.ts",
- },
- {
- name: "esbuild-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Esbuild configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/esbuild-plugin.ts",
- },
- {
- name: "eslint-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Eslint configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/eslint-plugin.ts",
- },
- {
- name: "execa-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Execa configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/execa-plugin.ts",
- },
- {
- name: "expo-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Expo conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/expo-plugin.ts",
- },
- {
- name: "express-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Express conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/express-plugin.ts",
- },
- {
- name: "expressive-code-plugin",
- version: "1.1.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Expressive Code conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/expressive-code-plugin.ts",
- },
- {
- name: "fast-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Fast conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/fast-plugin.ts",
- },
- {
- name: "fastify-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Fastify conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/fastify-plugin.ts",
- },
- {
- name: "fumadocs-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Fumadocs conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/fumadocs-plugin.ts",
- },
- {
- name: "gatsby-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Gatsby conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/gatsby-plugin.ts",
- },
- {
- name: "graphql-codegen-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Graphql Codegen configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/graphql-codegen-plugin.ts",
- },
- {
- name: "hardhat-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Hardhat configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/hardhat-plugin.ts",
- },
- {
- name: "heroku-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Heroku conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/heroku-plugin.ts",
- },
- {
- name: "hono-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Hono conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/hono-plugin.ts",
- },
- {
- name: "husky-plugin",
- version: "1.3.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Husky configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/husky-plugin.ts",
- },
- {
- name: "i18next-parser-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for I18Next Parser configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/i18next-parser-plugin.ts",
- },
- {
- name: "jest-plugin",
- version: "1.2.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Jest configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/jest-plugin.ts",
- },
- {
- name: "jetbrains-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Jetbrains conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/jetbrains-plugin.ts",
- },
- {
- name: "karma-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Karma configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/karma-plugin.ts",
- },
- {
- name: "knex-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Knex configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/knex-plugin.ts",
- },
- {
- name: "knip-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Knip conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/knip-plugin.ts",
- },
- {
- name: "ladle-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Ladle configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/ladle-plugin.ts",
- },
- {
- name: "lefthook-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Lefthook configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/lefthook-plugin.ts",
- },
- {
- name: "lint-staged-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Lint Staged configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/lint-staged-plugin.ts",
- },
- {
- name: "lint-html-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Linthtml conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/lint-html-plugin.ts",
- },
- {
- name: "lit-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Lit conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/lit-plugin.ts",
- },
- {
- name: "lockfile-lint-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Lockfile Lint configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/lockfile-lint-plugin.ts",
- },
- {
- name: "lost-pixel-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Lost Pixel conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/lost-pixel-plugin.ts",
- },
- {
- name: "marko-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Marko conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/marko-plugin.ts",
- },
- {
- name: "mdx-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Mdx conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/mdx-plugin.ts",
- },
- {
- name: "mdxlint-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Mdxlint conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/mdxlint-plugin.ts",
- },
- {
- name: "metro-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Metro configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/metro-plugin.ts",
- },
- {
- name: "mocha-plugin",
- version: "1.1.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Mocha configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/mocha-plugin.ts",
- },
- {
- name: "moonrepo-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Moonrepo configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/moonrepo-plugin.ts",
- },
- {
- name: "msw-plugin",
- version: "1.1.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Msw configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart"],
- markers: ["markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/msw-plugin.ts",
- },
- {
- name: "nestjs-plugin",
- version: "1.2.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Nestjs conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nestjs-plugin.ts",
- },
- {
- name: "netlify-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Netlify configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/netlify-plugin.ts",
- },
- {
- name: "nextjs-plugin",
- version: "1.4.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Nextjs conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nextjs-plugin.ts",
- },
- {
- name: "nitro-plugin",
- version: "1.2.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Nitro conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nitro-plugin.ts",
- },
- {
- name: "node-types-plugin",
- version: "1.1.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Node Builtin conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onAnalysisComplete", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/node-types-plugin.ts",
- },
- {
- name: "npm-package-json-lint-plugin",
- version: "1.1.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Npm Package Json Lint configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source:
- "https://github.com/optiprune/core/blob/main/src/plugins/npm-package-json-lint-plugin.ts",
- },
- {
- name: "nuxtjs-plugin",
- version: "1.2.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Nuxt conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nuxtjs-plugin.ts",
- },
- {
- name: "nx-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Nx configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nx-plugin.ts",
- },
- {
- name: "nyc-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Nyc conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nyc-plugin.ts",
- },
- {
- name: "object-member-plugin",
- version: "1.1.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Object Member conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onAnalysisComplete", "onProjectInit"],
- markers: ["emitFinding"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/object-member-plugin.ts",
- },
- {
- name: "oclif-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Oclif configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/oclif-plugin.ts",
- },
- {
- name: "openclaw-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Openclaw configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/openclaw-plugin.ts",
- },
- {
- name: "orval-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Orval configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/orval-plugin.ts",
- },
- {
- name: "oxfmt-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Oxfmt configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/oxfmt-plugin.ts",
- },
- {
- name: "oxlint-plugin",
- version: "1.1.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Oxlint configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/oxlint-plugin.ts",
- },
- {
- name: "panda-css-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Panda Css configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/panda-css-plugin.ts",
- },
- {
- name: "parcel-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Parcel configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/parcel-plugin.ts",
- },
- {
- name: "payload-cms-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Payload Cms conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/payload-cms-plugin.ts",
- },
- {
- name: "playwright-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Playwright configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/playwright-plugin.ts",
- },
- {
- name: "plop-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Plop conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/plop-plugin.ts",
- },
- {
- name: "pm2-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Pm2 configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/pm2-plugin.ts",
- },
- {
- name: "github-actions-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for GitHub Actions workflows, repository automation, and referenced project files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/github-actions-plugin.ts",
- },
- {
- name: "pnpm-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Pnpm configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/pnpm-plugin.ts",
- },
- {
- name: "postcss-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Postcss configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/postcss-plugin.ts",
- },
- {
- name: "pre-commit-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Pre Commit configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/pre-commit-plugin.ts",
- },
- {
- name: "preconstruct-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Preconstruct configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/preconstruct-plugin.ts",
- },
- {
- name: "prettier-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Prettier configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/prettier-plugin.ts",
- },
- {
- name: "prisma-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Prisma configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/prisma-plugin.ts",
- },
- {
- name: "quasar-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Quasar conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/quasar-plugin.ts",
- },
- {
- name: "qwik-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Qwik conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/qwik-plugin.ts",
- },
- {
- name: "r-tools-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for R Tools configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/r-tools-plugin.ts",
- },
- {
- name: "raycast-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Raycast configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/raycast-plugin.ts",
- },
- {
- name: "react-cosmos-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for React Cosmos configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/react-cosmos-plugin.ts",
- },
- {
- name: "react-email-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for React Email conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/react-email-plugin.ts",
- },
- {
- name: "react-native-plugin",
- version: "1.1.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for React Native conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/react-native-plugin.ts",
- },
- {
- name: "react-native-router-plugin",
- version: "1.1.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for React Native Router configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/react-native-router-plugin.ts",
- },
- {
- name: "react-plugin",
- version: "1.3.1",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for React conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/react-plugin.ts",
- },
- {
- name: "release-it-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Release It configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/release-it-plugin.ts",
- },
- {
- name: "remark-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Remark configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/remark-plugin.ts",
- },
- {
- name: "remix-plugin",
- version: "1.2.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Remix conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/remix-plugin.ts",
- },
- {
- name: "rolldown-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Rolldown configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/rolldown-plugin.ts",
- },
- {
- name: "rollup-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Rollup configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/rollup-plugin.ts",
- },
- {
- name: "rsbuild-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Rsbuild configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/rsbuild-plugin.ts",
- },
- {
- name: "rslib-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Rslib configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/rslib-plugin.ts",
- },
- {
- name: "rspack-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Rspack configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/rspack-plugin.ts",
- },
- {
- name: "rstest-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Rstest configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/rstest-plugin.ts",
- },
- {
- name: "sanity-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Sanity conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/sanity-plugin.ts",
- },
- {
- name: "semantic-release-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Semantic Release configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/semantic-release-plugin.ts",
- },
- {
- name: "sentry-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Sentry configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/sentry-plugin.ts",
- },
- {
- name: "serverless-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Serverless configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/serverless-plugin.ts",
- },
- {
- name: "service-worker-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Service Worker configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/service-worker-plugin.ts",
- },
- {
- name: "simple-git-hooks-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Simple Git Hooks configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/simple-git-hooks-plugin.ts",
- },
- {
- name: "size-limit-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Size Limit configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/size-limit-plugin.ts",
- },
- {
- name: "sst-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Sst configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/sst-plugin.ts",
- },
- {
- name: "storybook-plugin",
- version: "1.2.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Storybook configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/storybook-plugin.ts",
- },
- {
- name: "stryker-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Stryker configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/stryker-plugin.ts",
- },
- {
- name: "stylelint-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Stylelint configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/stylelint-plugin.ts",
- },
- {
- name: "svelte-plugin",
- version: "1.2.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Svelte conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/svelte-plugin.ts",
- },
- {
- name: "svelte-kit-plugin",
- version: "1.2.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Sveltekit conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/svelte-kit-plugin.ts",
- },
- {
- name: "svgo-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Svgo configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/svgo-plugin.ts",
- },
- {
- name: "svgr-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Svgr configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/svgr-plugin.ts",
- },
- {
- name: "swc-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Swc configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/swc-plugin.ts",
- },
- {
- name: "tailwind-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Tailwind configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tailwind-plugin.ts",
- },
- {
- name: "taskfile-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Taskfile configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/taskfile-plugin.ts",
- },
- {
- name: "tauri-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Tauri conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tauri-plugin.ts",
- },
- {
- name: "temporal-io-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Temporal conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/temporal-io-plugin.ts",
- },
- {
- name: "travis-ci-plugin",
- version: "1.2.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Travis Ci conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/travis-ci-plugin.ts",
- },
- {
- name: "trpc-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Trpc conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/trpc-plugin.ts",
- },
- {
- name: "ts-node-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Ts Node configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/ts-node-plugin.ts",
- },
- {
- name: "tsconfig-plus-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Tsconfig Plus configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tsconfig-plus-plugin.ts",
- },
- {
- name: "tsdown-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Tsdown configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tsdown-plugin.ts",
- },
- {
- name: "tsup-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Tsup configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tsup-plugin.ts",
- },
- {
- name: "tsx-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Tsx configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tsx-plugin.ts",
- },
- {
- name: "typedoc-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Typedoc configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/typedoc-plugin.ts",
- },
- {
- name: "typeorm-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Typeorm configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/typeorm-plugin.ts",
- },
- {
- name: "unbuild-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Unbuild configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/unbuild-plugin.ts",
- },
- {
- name: "unocss-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Unocss configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/unocss-plugin.ts",
- },
- {
- name: "unplugin-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Unplugin configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/unplugin-plugin.ts",
- },
- {
- name: "vercel-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Vercel configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vercel-plugin.ts",
- },
- {
- name: "vike-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Vike conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vike-plugin.ts",
- },
- {
- name: "vite-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Vite configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vite-plugin.ts",
- },
- {
- name: "vite-specialized-plugin",
- version: "1.3.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Vite Specialized configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vite-specialized-plugin.ts",
- },
- {
- name: "vitepress-plugin",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Vitepress conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vitepress-plugin.ts",
- },
- {
- name: "vitest-plugin",
- version: "1.0.0",
- category: "Testing & QA",
- summary:
- "Test-aware analysis for Vitest configuration, test files, fixtures, runners, and referenced test helpers.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vitest-plugin.ts",
- },
- {
- name: "vscode-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Vscode conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vscode-plugin.ts",
- },
- {
- name: "vuejs-plugin",
- version: "1.2.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for Vuejs conventions, entrypoints, configuration files, and framework-specific references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vuejs-plugin.ts",
- },
- {
- name: "webdriver-io-plugin",
- version: "1.0.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Webdriverio conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/webdriver-io-plugin.ts",
- },
- {
- name: "webpack-plugin",
- version: "1.2.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Webpack configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/webpack-plugin.ts",
- },
- {
- name: "wireit-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Wireit configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/wireit-plugin.ts",
- },
- {
- name: "worker-plugin",
- version: "1.1.0",
- category: "Project conventions",
- summary:
- "Project-aware analysis for Worker conventions, configuration, package usage, and reachable source files.",
- lifecycle: ["onASTNode", "onFileStart"],
- markers: ["markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/worker-plugin.ts",
- },
- {
- name: "wrangler-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Wrangler configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["emitFinding", "markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/wrangler-plugin.ts",
- },
- {
- name: "xo-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Xo configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/xo-plugin.ts",
- },
- {
- name: "yarn-plugin",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Yarn configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/yarn-plugin.ts",
- },
- {
- name: "zod-plugin",
- version: "2.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Zod configuration, package scripts, generated artifacts, and conventionally used files.",
- lifecycle: ["onASTNode", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/zod-plugin.ts",
- },
- {
- name: "markdown-lint",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Markdown lint configuration, package scripts, and referenced project files.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/markdown-lint.ts",
- },
- {
- name: "nodemon-plugin.",
- version: "1.0.0",
- category: "Tooling & ecosystem",
- summary:
- "Tooling-aware analysis for Nodemon configuration, package scripts, and runtime entry points.",
- lifecycle: ["onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/nodemon-plugin..ts",
- },
- {
- name: "openapi-ts",
- version: "1.0.0",
- category: "Libraries & APIs",
- summary:
- "Project-aware analysis for OpenAPI TypeScript generation configuration and generated API surfaces.",
- lifecycle: ["onASTNode", "onProjectInit"],
- markers: ["markAsUsed", "markPackageAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/openapi-ts.ts",
- },
- {
- name: "tanstack-router",
- version: "1.0.0",
- category: "Frameworks",
- summary:
- "Framework-aware analysis for TanStack Router route trees and generated route references.",
- lifecycle: ["onASTNode", "onFileStart", "onProjectInit"],
- markers: ["markAsUsed", "markAsUsed"],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tanstack-router.ts",
- },
- {
- name: "graphql-runtime-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Recognizes GraphQL runtime usage, schema operations, and package declarations that static imports alone may not explain.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/graphql-runtime-plugin.ts",
- },
- {
- name: "langchainjs-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Recognizes LangChain.js imports and runtime chains so model, tool, and loader integrations are assessed in their execution context.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/langchainjs-plugin.ts",
- },
- {
- name: "node-llama-cpp-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Understands node-llama-cpp imports and runtime model-sequence usage, including dependency consistency checks.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/node-llama-cpp-plugin.ts",
- },
- {
- name: "onnxruntime-node-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Recognizes ONNX Runtime Node sessions and package usage in server-side inference code.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/onnxruntime-node-plugin.ts",
- },
- {
- name: "openapi-plugin",
- version: "1.0.1",
- category: "Libraries & APIs",
- summary:
- "Recognizes OpenAPI specifications and the project packages that consume or generate API contracts from them.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/openapi-plugin.ts",
- },
- {
- name: "tensorflowjs-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Recognizes TensorFlow.js runtime imports, tensor lifecycle patterns, and related dependency usage.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/tensorflowjs-plugin.ts",
- },
- {
- name: "transformersjs-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Recognizes Transformers.js package usage and inference-oriented calls in JavaScript and TypeScript code.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/transformersjs-plugin.ts",
- },
- {
- name: "vercel-ai-sdk-plugin",
- version: "1.0.0",
- category: "AI & machine learning",
- summary:
- "Recognizes Vercel AI SDK imports and AI generation flows that are meaningful runtime evidence.",
- lifecycle: [],
- markers: [],
- source: "https://github.com/optiprune/core/blob/main/src/plugins/vercel-ai-sdk-plugin.ts",
- },
-];
diff --git a/docs/client/src/lib/utils.ts b/docs/client/src/lib/utils.ts
deleted file mode 100644
index a5ef1935..00000000
--- a/docs/client/src/lib/utils.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { clsx, type ClassValue } from "clsx";
-import { twMerge } from "tailwind-merge";
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs));
-}
diff --git a/docs/client/src/main.tsx b/docs/client/src/main.tsx
deleted file mode 100644
index 696e0d2b..00000000
--- a/docs/client/src/main.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { createRoot } from "react-dom/client";
-import App from "./App";
-import "./index.css";
-
-createRoot(document.getElementById("root")!).render( );
diff --git a/docs/client/src/pages/Docs.tsx b/docs/client/src/pages/Docs.tsx
deleted file mode 100644
index f20c1071..00000000
--- a/docs/client/src/pages/Docs.tsx
+++ /dev/null
@@ -1,1447 +0,0 @@
-/* Calm OptiPrune docs system: retain the editorial right-rail layout while making reference pages practical, source-backed, and free from implementation internals. */
-import { useEffect, useMemo, useState, type ReactNode } from "react";
-import { ArrowLeft, ArrowRight, ArrowUpRight, Check, Copy, Menu, Search, X } from "lucide-react";
-import { useLocation } from "wouter";
-import { plugins, type PluginRecord } from "@/lib/pluginData";
-
-const groups = [
- {
- label: "Start here",
- items: [
- ["getting-started", "Getting Started"],
- ["how-it-works", "How OptiPrune works"],
- ["why-optiprune", "Why use OptiPrune?"],
- ],
- },
- {
- label: "Configuration & discovery",
- items: [
- ["configuration", "Configuration"],
- ["entry-files", "Entry files"],
- ["monorepos", "Monorepos & workspaces"],
- ["integrations", "Integrations"],
- ],
- },
- {
- label: "Reference",
- items: [
- ["cli", "CLI commands & options"],
- ["fixes", "Automated fixes"],
- ["core-api", "Core functions"],
- ["analysis", "Analysis & findings"],
- ["reporters", "Reporters & output"],
- ["cache", "Cache commands"],
- ["plugins", `Plugins (${plugins.length})`],
- ["quick-reference", "Search the reference"],
- ],
- },
- {
- label: "Contributing",
- items: [
- ["writing-a-plugin", "Plugin guidance"],
- ["source", "Source repositories"],
- ],
- },
-];
-
-const sourceLinks = {
- core: "https://github.com/optiprune/core",
- cli: "https://github.com/optiprune/cli",
- npmCli: "https://www.npmjs.com/package/@optiprune/cli",
- npmCore: "https://www.npmjs.com/package/@optiprune/core",
- vscode: "https://marketplace.visualstudio.com/items?itemName=dreamlongyt.optiprune-vscode",
-};
-
-const schemaUrl = "https://raw.githubusercontent.com/optiprune/core/main/schema.json";
-const orderedDocs = groups.flatMap((group) => group.items);
-
-const cliOptions = [
- ["-r, --rootDir ", "Choose the project directory to analyze."],
- ["-e, --entry ", "Set one or more entry files, paths, or glob patterns."],
- ["-x, --extensions ", "Replace the default list of source extensions."],
- ["-i, --ignore ", "Exclude matching paths from analysis."],
- ["--no-report-unused-exports", "Turn off unused-export findings."],
- ["--no-conventional-entries", "Do not infer conventional entry files."],
- ["--include-entry-exports", "Include unused exports declared directly in entry files."],
- ["--cycles", "Print detected dependency cycles."],
- ["--ignore-tests", "Ignore test files and test directories."],
- [
- "--ignore-unknown-import",
- "Do not retain uncertain dynamic-import paths as possible reachability evidence.",
- ],
- ["--fail-on ", "Exit non-zero from the selected confidence level."],
- ["--json", "Write the structured analysis report as JSON."],
- ["--sarif", "Write SARIF output for code-scanning workflows."],
- ["--skip-3 / --skip-4", "Skip the SMT or concolic proof pass."],
- [
- "-v, --verbose",
- "Include execution diagnostics; with JSON output, diagnostics are structured under debug.",
- ],
- [
- "--fix ",
- "Select files, exports, dependencies, devDependencies, conditions, or json fixes.",
- ],
- ["--fix-json", "Safely repair recoverable package.json JSON syntax; shorthand for --fix json."],
- ["--confidence ", "Set the minimum confidence for fixes: high, medium+, low+, or all."],
- ["--force", "Allow a selected fix where the source edit would otherwise be treated as unsafe."],
- ["--dry-run", "Show planned fixes without writing files."],
- [
- "--cache-from / --cache-to ",
- "Import a cache before analysis or export the resulting cache afterward.",
- ],
-] as const;
-
-const coreFunctions = [
- [
- "analyze(options)",
- "Runs the complete analysis and returns an AnalysisReport with findings, graph information, entries, and summary counters.",
- ],
- [
- "shouldFail(report, failOn)",
- "Answers whether a report reaches the configured CI failure threshold.",
- ],
- [
- "applyFixes(report, rootDir, fixConfig)",
- "Applies explicitly requested, confidence-gated fixes to a completed report.",
- ],
- ["exportCache(rootDir, targetPath)", "Writes the project cache to a portable JSON file."],
- [
- "importCache(rootDir, sourcePath)",
- "Loads a compatible cache JSON file into the project cache.",
- ],
-] as const;
-
-const schemaPreview = `{
- "$schema": "https://raw.githubusercontent.com/optiprune/core/main/schema.json",
- "entry": ["src/index.ts"],
- "ignore": ["**/*.test.ts", "**/dist/**"],
- "failOn": "high",
- "plugins": { "nextjs-plugin": true }
-}`;
-
-function CodeBlock({ code, label = "Terminal" }: { code: string; label?: string }) {
- const [copied, setCopied] = useState(false);
- const copy = async () => {
- await navigator.clipboard?.writeText(code);
- setCopied(true);
- window.setTimeout(() => setCopied(false), 1200);
- };
- return (
-
-
- {label}
-
- {copied ? : }
- {copied ? "Copied" : "Copy"}
-
-
-
- {code}
-
-
- );
-}
-
-function PageIntro({
- eyebrow,
- title,
- children,
-}: {
- eyebrow: string;
- title: string;
- children: ReactNode;
-}) {
- return (
- <>
- {eyebrow}
- {title}
- {children}
- >
- );
-}
-
-function LinkCard({
- href,
- title,
- text,
- next = true,
-}: {
- href: string;
- title: string;
- text: string;
- next?: boolean;
-}) {
- return (
-
-
- {title}
- {text}
-
- {next ? : }
-
- );
-}
-
-function Table({ rows }: { rows: readonly (readonly string[])[] }) {
- return (
-
- {rows.map((row) => (
-
-
- {row[0]}
-
-
- {row[1]}
- {row[2] ? {row[2]} : null}
-
-
- ))}
-
- );
-}
-
-function SchemaReference() {
- const [schema, setSchema] = useState | null>(null);
- const [error, setError] = useState(false);
-
- useEffect(() => {
- fetch(schemaUrl)
- .then((response) => (response.ok ? response.json() : Promise.reject()))
- .then(setSchema)
- .catch(() => setError(true));
- }, []);
-
- const fields = schema ? Object.entries(schema.properties ?? {}) : [];
-
- return (
-
- Configuration fields
-
- This reference reads schema.json from the Core repository. The example is
- intentionally short; each field below explains its purpose, accepted values, and default
- where the schema provides one.
-
-
-
- {error ? (
-
- Schema unavailable
-
- The source link above remains available; refresh this page to retry the field reference.
-
-
- ) : schema ? (
-
- {fields.map(([name, rawValue]) => {
- const value = rawValue as any;
- const nested = value.properties ? Object.entries(value.properties) : [];
- const metadata = [
- value.type,
- value.oneOf
- ? value.oneOf.map((item: any) => item.type || "variant").join(" or ")
- : "",
- value.default !== undefined ? `default: ${JSON.stringify(value.default)}` : "",
- value.enum ? `values: ${value.enum.join(", ")}` : "",
- ]
- .filter(Boolean)
- .join(" · ");
-
- return (
-
-
- {name}
-
-
- {value.description || "No description is defined in the schema."}
- {metadata}
- {nested.map(([childName, childRaw]) => {
- const child = childRaw as any;
- return (
-
-
- {name}.{childName}
- {" "}
- — {child.description || "Nested configuration field."}
- {child.default !== undefined
- ? ` · default: ${JSON.stringify(child.default)}`
- : ""}
- {child.enum ? ` · values: ${child.enum.join(", ")}` : ""}
-
- );
- })}
-
-
- );
- })}
-
- ) : (
- Loading configuration fields from schema.json…
- )}
-
- );
-}
-
-function pluginTitle(name: string) {
- const special: Record = {
- nextjs: "Next.js",
- nestjs: "NestJS",
- vuejs: "Vue.js",
- "node-llama-cpp": "node-llama-cpp",
- "onnxruntime-node": "ONNX Runtime Node",
- tensorflowjs: "TensorFlow.js",
- transformersjs: "Transformers.js",
- "vercel-ai-sdk": "Vercel AI SDK",
- "graphql-runtime": "GraphQL Runtime",
- langchainjs: "LangChain.js",
- openapi: "OpenAPI",
- "github-actions": "GitHub Actions",
- "react-native": "React Native",
- "svelte-kit": "SvelteKit",
- vitepress: "VitePress",
- pnpm: "pnpm",
- nx: "Nx",
- pm2: "PM2",
- zod: "Zod",
- };
- const bare = name.replace(/-plugin$/, "");
- if (special[bare]) return special[bare];
- return bare
- .split("-")
- .map((part) =>
- part.length <= 3 ? part.toUpperCase() : `${part[0].toUpperCase()}${part.slice(1)}`,
- )
- .join(" ");
-}
-
-// Only plugins identified as having a graphical logo in pasted_content_3 receive an image.
-// Wordmark-only and plain-text plugins deliberately render without a visual mark.
-const officialPluginIcons: Record = {
- "openclaw-plugin": "svgl:openclaw",
- "node-llama-cpp-plugin": "iconify:logos:meta-icon",
- "angular-plugin": "angular",
- "astro-plugin": "astro",
- "ava-plugin": "iconify:logos:ava",
- "babel-plugin": "babel",
- "biome-plugin": "biome",
- "bun-plugin": "bun",
- "capacitor-plugin": "capacitor",
- "changesets-plugin": "iconify:vscode-icons:folder-type-changesets",
- "commitlint-plugin": "commitlint",
- "convex-plugin": "convex",
- "cypress-plugin": "cypress",
- "dependency-cruiser-plugin": "iconify:lucide:ship",
- "docker-plugin": "docker",
- "docusaurus-plugin": "docusaurus",
- "drizzle-plugin": "drizzle",
- "eleventy-plugin": "eleventy",
- "esbuild-plugin": "esbuild",
- "eslint-plugin": "eslint",
- "expo-plugin": "expo",
- "fastify-plugin": "fastify",
- "fumadocs-plugin": "iconify:selfhst:fumadocs",
- "gatsby-plugin": "gatsby",
- "graphql-codegen-plugin": "graphql",
- "graphql-runtime-plugin": "graphql",
- "hardhat-plugin": "iconify:logos:hardhat",
- "heroku-plugin": "iconify:logos:heroku",
- "hono-plugin": "hono",
- "husky-plugin": "iconify:token-branded:husky",
- "jest-plugin": "jest",
- "jetbrains-plugin": "jetbrains",
- "karma-plugin": "iconify:logos:karma",
- "knex-plugin": "iconify:logos:knex",
- "knip-plugin": "knip",
- "ladle-plugin": "iconify:solar:ladle-bold",
- "lefthook-plugin": "lefthook",
- "lit-plugin": "lit",
- "marko-plugin": "marko",
- "mdx-plugin": "mdx",
- "metro-plugin": "metro",
- "mocha-plugin": "mocha",
- "moonrepo-plugin": "moonrepo",
- "msw-plugin": "iconify:logos:msw",
- "nestjs-plugin": "nestjs",
- "netlify-plugin": "netlify",
- "nextjs-plugin": "nextdotjs",
- "nitro-plugin": "iconify:unjs:nitro",
- "nuxtjs-plugin": "svgl:nuxt",
- "nx-plugin": "nx",
- "oclif-plugin": "oclif",
- "openapi-plugin": "openapiinitiative",
- "openapi-ts": "openapiinitiative",
- "panda-css-plugin": "iconify:mdi:panda",
- "parcel-plugin": "iconify:logos:parcel",
- "payload-cms-plugin": "payloadcms",
- "playwright-plugin": "iconify:logos:playwright",
- "github-actions-plugin": "githubactions",
- "pnpm-plugin": "pnpm",
- "postcss-plugin": "postcss",
- "prettier-plugin": "prettier",
- "prisma-plugin": "prisma",
- "quasar-plugin": "quasar",
- "qwik-plugin": "qwik",
- "raycast-plugin": "raycast",
- "react-plugin": "react",
- "react-native-plugin": "react",
- "react-cosmos-plugin": "iconify:lucide:orbit",
- "react-email-plugin": "react",
- "remix-plugin": "remix",
- "rolldown-plugin": "rolldown",
- "rollup-plugin": "rollupdotjs",
- "rsbuild-plugin": "svgl:rsbuild",
- "rspack-plugin": "svgl:rspack",
- "sanity-plugin": "sanity",
- "sentry-plugin": "sentry",
- "serverless-plugin": "serverless",
- "size-limit-plugin": "iconify:lucide:gauge",
- "sst-plugin": "sst",
- "storybook-plugin": "storybook",
- "stryker-plugin": "stryker",
- "stylelint-plugin": "stylelint",
- "svelte-plugin": "svelte",
- "svelte-kit-plugin": "svelte",
- "svgo-plugin": "svgo",
- "swc-plugin": "swc",
- "tailwind-plugin": "tailwindcss",
- "tauri-plugin": "tauri",
- "temporal-io-plugin": "temporal",
- "travis-ci-plugin": "travisci",
- "trpc-plugin": "trpc",
- "typeorm-plugin": "typeorm",
- "unocss-plugin": "unocss",
- "vercel-plugin": "vercel",
- "vercel-ai-sdk-plugin": "vercel",
- "vite-plugin": "vite",
- "vite-specialized-plugin": "vite",
- "vitepress-plugin": "vite",
- "vitest-plugin": "vitest",
- "vscode-plugin": "iconify:logos:visual-studio-code",
- "vuejs-plugin": "vuedotjs",
- "webdriver-io-plugin": "webdriverio",
- "webpack-plugin": "webpack",
- "wireit-plugin": "iconify:lucide:network",
- "wrangler-plugin": "cloudflare",
- "cloudflare-wrangler-plugin": "cloudflare",
- "yarn-plugin": "yarn",
- "zod-plugin": "zod",
- "tanstack-router": "tanstack",
- "tanstack-router-plugin": "tanstack",
- "langchainjs-plugin": "langchain",
- "onnxruntime-node-plugin": "onnx",
- "tensorflowjs-plugin": "tensorflow",
-};
-
-// Only the explicit emoji marks in pasted_content_3 receive an emoji badge.
-const emojiPluginMarks: Record = {
- "transformersjs-plugin": "🤗",
- "changelogen-plugin": "💅",
- "changelogithub-plugin": "✨",
- "cucumber-plugin": "🥒",
- "lint-staged-plugin": "🚫💩",
- "orval-plugin": "🍺",
- "plop-plugin": "🍬",
- "release-it-plugin": "🚀",
- "semantic-release-plugin": "🚀📦",
- "xo-plugin": "❤️",
-};
-
-function pluginIcon(name: string) {
- return officialPluginIcons[name] ?? null;
-}
-
-function pluginLogoSrc(icon: string) {
- if (icon.startsWith("svgl:")) return `https://api.svgl.app/svg/${icon.slice("svgl:".length)}.svg`;
- if (icon.startsWith("iconify:"))
- return `https://api.iconify.design/${icon.slice("iconify:".length)}.svg`;
- return `https://cdn.simpleicons.org/${icon}`;
-}
-
-function pluginEmoji(name: string) {
- return emojiPluginMarks[name] ?? null;
-}
-
-function PluginLogo({ plugin }: { plugin: PluginRecord }) {
- const [failed, setFailed] = useState(false);
- const title = pluginTitle(plugin.name);
- const icon = pluginIcon(plugin.name);
- const emoji = pluginEmoji(plugin.name);
-
- // Text-only entries, including wordmarks, intentionally do not receive a badge.
- if (!icon && !emoji) return null;
-
- if (emoji) {
- return (
-
- {emoji}
-
- );
- }
-
- // A failed graphical asset falls back to text-only; initials are never substituted.
- if (failed) return null;
-
- return (
-
- setFailed(true)} />
-
- );
-}
-
-type PluginNarrative = {
- summary: string;
- activation: string;
- looksFor: string;
- behavior: string;
-};
-
-function pluginNarrative(plugin: PluginRecord): PluginNarrative {
- const title = pluginTitle(plugin.name);
- const specific: Record = {
- "nextjs-plugin": {
- summary:
- "Makes Next.js route, metadata, middleware, configuration, and MDX conventions visible to the analysis engine.",
- activation:
- "It turns on when it finds a Next.js configuration file, a Next dependency paired with Next scripts, or an App/Pages Router project structure.",
- looksFor:
- "It examines route and layout files, route handlers, middleware, Next metadata exports, MDX providers, Next imports, and Next-related scripts.",
- behavior:
- "It preserves framework-owned routes and runtime exports that may not have ordinary local import references, and checks whether an observed Next configuration is backed by the declared dependency.",
- },
- "node-llama-cpp-plugin": {
- summary: "Adds semantic awareness for node-llama-cpp model and sequence usage.",
- activation:
- "It turns on when node-llama-cpp is declared and source files contain compatible package usage.",
- looksFor:
- "It examines ESM and CommonJS package imports, model and sequence calls, and resource-handling patterns around the runtime.",
- behavior:
- "It keeps observed node-llama-cpp usage connected to the package declaration and can identify a mismatch between imported runtime code and package metadata.",
- },
- "onnxruntime-node-plugin": {
- summary: "Adds awareness for server-side ONNX Runtime inference sessions.",
- activation: "It turns on when the workspace declares onnxruntime-node.",
- looksFor:
- "It examines imports or require calls, session and inference-resource usage, and the dependency declaration.",
- behavior:
- "It treats genuine ONNX Runtime usage as runtime evidence so inference dependencies are not removed simply because the pattern is indirect.",
- },
- "tensorflowjs-plugin": {
- summary: "Adds awareness for TensorFlow.js inference and tensor lifecycle code.",
- activation: "It turns on when a TensorFlow.js package is declared in the workspace.",
- looksFor:
- "It examines TensorFlow.js imports, tensor-producing calls, disposal-oriented lifecycle patterns, and package usage.",
- behavior:
- "It connects model-runtime code to its dependencies and retains evidence that would otherwise be hard to infer from a plain import graph.",
- },
- "transformersjs-plugin": {
- summary: "Adds awareness for Transformers.js package usage and inference calls.",
- activation: "It turns on when @huggingface/transformers is declared in the project.",
- looksFor:
- "It examines package imports, compatible CommonJS access, and inference-oriented calls.",
- behavior:
- "It recognizes the package as runtime evidence when the surrounding model pipeline is reachable through the application’s execution paths.",
- },
- "vercel-ai-sdk-plugin": {
- summary: "Adds awareness for Vercel AI SDK generation and streaming flows.",
- activation: "It turns on when the ai or @ai-sdk/ai package is declared in the workspace.",
- looksFor:
- "It examines imports, compatible require calls, and AI SDK generation-oriented APIs.",
- behavior:
- "It keeps observed AI SDK runtime usage aligned with package declarations so valid generation flows are not mistaken for unused dependency code.",
- },
- "openapi-plugin": {
- summary: "Recognizes OpenAPI contracts as a first-class project surface.",
- activation:
- "It turns on when it finds openapi.yaml, openapi.yml, openapi.json, or matching project package evidence.",
- looksFor:
- "It examines OpenAPI specification files, nested OpenAPI folders, and packages that consume or generate API contracts.",
- behavior:
- "It retains contract files and their supporting package usage when they are part of the API workflow rather than ordinary imported application modules.",
- },
- "langchainjs-plugin": {
- summary: "Adds awareness for LangChain.js model, tool, and loader integrations.",
- activation: "It turns on when compatible LangChain packages are declared by the workspace.",
- looksFor:
- "It examines package imports, loader and chain construction, tool calls, and related runtime dependency evidence.",
- behavior:
- "It treats the model-pipeline conventions as meaningful runtime usage, reducing false unused-dependency reports for indirect AI integrations.",
- },
- "graphql-runtime-plugin": {
- summary: "Adds awareness for GraphQL runtime packages and execution paths.",
- activation:
- "It turns on when GraphQL runtime packages are declared or used by the workspace.",
- looksFor:
- "It examines runtime imports, resolver and schema-oriented usage, and compatible package evidence.",
- behavior:
- "It keeps GraphQL runtime dependencies and convention-owned execution surfaces connected to the analysis result.",
- },
- };
-
- if (specific[plugin.name]) return specific[plugin.name];
-
- const categoryCopy: Record = {
- Frameworks:
- "framework entry files, configuration, route or component conventions, runtime imports, and public framework exports",
- "Testing & QA":
- "test-runner configuration, test-owned files, fixtures, test scripts, and package imports",
- "Testing & quality":
- "test-runner configuration, test-owned files, fixtures, test scripts, and package imports",
- "Tooling & ecosystem":
- "tool configuration, package scripts, generated artifacts, and package imports",
- "Libraries & APIs":
- "library configuration, API contracts, package imports, and convention-owned source files",
- "Project conventions":
- "repository metadata, convention files, package scripts, and project-owned runtime files",
- "AI & machine learning":
- "model-runtime package usage, indirect execution calls, configuration, and dependency declarations",
- };
-
- const focus =
- categoryCopy[plugin.category] ||
- "project metadata, configuration, imports, and file conventions";
- return {
- summary: `${title} awareness for OptiPrune’s static analysis.`,
- activation: `It turns on automatically when it finds ${title}-specific project evidence, such as a declared package, configuration file, script, or naming convention.`,
- looksFor: `It examines ${focus}.`,
- behavior:
- plugin.category === "Frameworks"
- ? "It protects framework-owned files and exports that are valid runtime surfaces even when a local import graph does not fully explain them."
- : "It keeps tool-owned files and valid package usage connected to the analysis result when ordinary source imports alone are not enough evidence.",
- };
-}
-
-function PluginsPage() {
- const [query, setQuery] = useState("");
- const [category, setCategory] = useState("All");
- const categories = ["All", ...Array.from(new Set(plugins.map((plugin) => plugin.category)))];
-
- const filtered = useMemo(
- () =>
- plugins.filter(
- (plugin) =>
- `${plugin.name} ${pluginTitle(plugin.name)} ${pluginNarrative(plugin).summary} ${plugin.category}`
- .toLowerCase()
- .includes(query.toLowerCase()) &&
- (category === "All" || plugin.category === category),
- ),
- [query, category],
- );
-
- return (
- <>
-
- Plugins with an official visual mark or an explicit emoji display it here; wordmark-only and
- plain-text plugins remain text-only. Each entry explains the project evidence it recognizes,
- when it activates, and how that evidence changes analysis.
-
-
- {plugins.length} Core plugins
-
- Search by package, plugin name, or category. Open any item for its activation criteria,
- search focus, and behavior.
-
-
-
-
-
- setQuery(event.target.value)}
- placeholder="Search plugins or packages"
- />
-
- setCategory(event.target.value)}>
- {categories.map((item) => (
- {item}
- ))}
-
-
-
- {filtered.length} of {plugins.length} plugins
-
-
- {filtered.map((plugin) => {
- const narrative = pluginNarrative(plugin);
- return (
-
-
-
-
-
{pluginTitle(plugin.name)}
-
- {plugin.category} · {plugin.version}
-
-
{narrative.summary}
-
-
-
-
- Activates on
- {narrative.activation}
-
-
- Searches for
- {narrative.looksFor}
-
-
- View details
-
-
-
- );
- })}
-
- >
- );
-}
-
-function PluginDetailPage({ plugin }: { plugin: PluginRecord }) {
- const narrative = pluginNarrative(plugin);
- return (
- <>
-
- {narrative.summary}
-
-
-
Package
-
- {plugin.name} · Version {plugin.version} · Activate or disable this plugin
- directly in the{" "}
-
- configuration
-
- .
-
-
-
-
- Activates when
- {narrative.activation}
-
-
- Searches for
- {narrative.looksFor}
-
-
- What it changes
- {narrative.behavior}
-
-
- Configuration override
-
- Plugins are detected automatically, but the schema also supports an explicit override. Set
- the plugin to true to require it or false to keep it disabled for
- this project.
-
-
-
-
-
-
- >
- );
-}
-
-function CliPage() {
- return (
- <>
-
- The @optiprune/cli package runs the Core engine from the command line. The
- default command is analyze; command-line values take precedence over file
- configuration.
-
- \n" +
- "npx @optiprune/cli import-cache \n" +
- "npx @optiprune/cli --help\n" +
- "npx @optiprune/cli --version"
- }
- />
- Analyze options
-
- Cache subcommands
- ", "Export the local analysis cache to JSON."],
- ["import-cache ", "Import a cache JSON file into the current project cache."],
- ["-r, --rootDir ", "Use a different project root with either cache command."],
- ]}
- />
-
- Safe fixes first
-
- --confidence, --force, and --dry-run work with{" "}
- --fix or --fix-json. Use a dry run before allowing any file
- changes.
-
-
- >
- );
-}
-
-function ConfigPage() {
- return (
- <>
-
- Place an OptiPrune configuration beside your project, or use the optiprune{" "}
- field in package.json. Core merges it with its defaults; command-line options
- are explicit overrides.
-
- Where configuration is read
-
- How options are merged
-
- Command-line options override file values. Ignore patterns are combined with built-in
- ignores; nested rules, plugins, and layers are merged by key. The source of truth for every
- valid field is the Core schema.json reference below.
-
-
- >
- );
-}
-
-function FixesPage() {
- return (
- <>
-
- Fixes are opt-in and confidence-gated. Begin with a dry run, review the proposed changes,
- then run the same command without --dry-run only when the result is acceptable.
-
-
- Fix targets
-
-
- Safety boundary
-
- --force changes the safety decision for a selected fix; it does not make an
- unverified finding correct.
-
-
- >
- );
-}
-
-function CoreApiPage() {
- return (
- <>
-
- Use @optiprune/core when the CLI is not the right integration boundary. The
- package returns structured results for CI, editors, dashboards, and custom developer
- tooling.
-
-
- Public functions
-
- Report result
-
- An AnalysisReport contains the project root, discovered entry points, findings,
- summary counters, module records, export information, dependency edges, and strongly
- connected components.
-
- >
- );
-}
-
-function AnalysisPage() {
- return (
- <>
-
- Core combines source parsing, module graphs, dynamic-path analysis, project metadata, and
- optional proof layers to decide what is reachable in a JavaScript or TypeScript workspace.
-
-
- {[
- [
- "01",
- "Source & graph",
- "Parses supported files, connects imports and exports, and establishes reachability roots.",
- ],
- [
- "02",
- "Control flow",
- "Finds unreachable statements, constant conditions, and contradictory guards.",
- ],
- [
- "03",
- "Constraint proof",
- "Uses the optional SMT pass for conditions that need stronger proof.",
- ],
- [
- "04",
- "Isolated proof",
- "Uses the optional concolic execution pass for selected dynamic-path evidence.",
- ],
- [
- "05",
- "Project context",
- "Examines manifests, scripts, dependencies, workspaces, and public package surfaces.",
- ],
- [
- "06",
- "Framework context",
- "Uses plugins to understand convention-owned paths and externally managed runtime surfaces.",
- ],
- ].map(([number, title, text]) => (
-
- ))}
-
- Finding families
-
- >
- );
-}
-
-function ReportersPage() {
- return (
- <>
-
- Core separates analysis from presentation. Choose the format that matches a local review,
- automation, or code-scanning workflow.
-
-
- optiprune.sarif"
- }
- />
- >
- );
-}
-
-function CachePage() {
- return (
- <>
-
- Use JSON cache files to reuse analysis work locally or in CI. Cache import and export are
- available from the CLI and the public Core API.
-
-
- ", "Import a JSON cache before analysis."],
- ["--cache-to ", "Export the resulting cache after analysis."],
- ["exportCache", "Core helper that writes a portable cache JSON file."],
- ["importCache", "Core helper that loads a portable cache JSON file."],
- ]}
- />
- >
- );
-}
-
-function QuickReferencePage() {
- const [query, setQuery] = useState("");
- const entries = [
- ...cliOptions.map(([name, text]) => ({
- kind: "CLI",
- name,
- text,
- href: "/docs/cli",
- })),
- ...coreFunctions.map(([name, text]) => ({
- kind: "Core",
- name,
- text,
- href: "/docs/core-api",
- })),
- ...[
- "rootDir",
- "entry",
- "extensions",
- "ignore",
- "externalContracts",
- "reportUnusedExports",
- "includeConventionalEntries",
- "failOn",
- "verbose",
- "fix",
- "output",
- "rules",
- "plugins",
- "layers",
- ].map((name) => ({
- kind: "Config",
- name,
- text: "Schema-backed configuration field",
- href: "/docs/configuration",
- })),
- ];
-
- const filtered = entries.filter((item) =>
- `${item.kind} ${item.name} ${item.text}`.toLowerCase().includes(query.toLowerCase()),
- );
-
- return (
- <>
-
- Search current CLI flags, public Core functions, and configuration fields without leaving
- the documentation.
-
-
-
-
- setQuery(event.target.value)}
- placeholder="Search commands, functions, or fields"
- />
-
-
-
- {filtered.length} matches · {entries.length} indexed entries
-
-
- {filtered.map((item) => (
-
- ))}
-
- >
- );
-}
-
-function DocsArticle({ slug }: { slug: string }) {
- if (slug === "plugins") return ;
- if (slug === "configuration") return ;
- if (slug === "cli") return ;
- if (slug === "fixes") return ;
- if (slug === "core-api") return ;
- if (slug === "analysis") return ;
- if (slug === "reporters") return ;
- if (slug === "cache") return ;
- if (slug === "quick-reference") return ;
- if (slug === "getting-started") {
- return (
- <>
-
- Install the CLI, run an analysis, then use this reference to choose the configuration,
- Core, fix, cache, or plugin surface that fits your workflow.
-
- Install and run
-
-
-
-
-
- >
- );
- }
- if (slug === "how-it-works") {
- return (
- <>
-
- OptiPrune combines parser-backed source data, module reachability, optional proof layers,
- dependency analysis, and plugin context to identify unreachable code with evidence.
-
-
- >
- );
- }
- if (slug === "why-optiprune") {
- return (
- <>
-
- Use OptiPrune when import graphs alone cannot explain framework entry points, package
- scripts, dynamic imports, contracts, workspace topology, or safe cleanup boundaries.
-
-
-
-
Context-aware
-
- Plugins recognize frameworks and tools that own runtime files outside conventional
- imports.
-
-
-
-
Traceable fixes
-
Fixes are explicit, confidence-gated, and can be reviewed with dry-run first.
-
-
-
Headless first
-
Use Core directly in CI, dashboards, editor integrations, and custom tooling.
-
-
- >
- );
- }
- if (slug === "integrations") {
- return (
- <>
-
- Run the CLI locally or in CI, upload SARIF to code scanning, or embed Core in custom
- developer tooling.
-
-
- >
- );
- }
- if (slug === "writing-a-plugin") {
- return (
- <>
-
- A useful plugin documents three things clearly: the project evidence that activates it,
- the files or APIs it recognizes, and the behavior it contributes to analysis. Keep
- recognition narrow enough that unrelated projects are not affected.
-
-
-
- >
- );
- }
- if (slug === "source") {
- return (
- <>
-
- The reference tracks the public Core and CLI repositories, with configuration fields read
- from the Core schema.
-
-
- >
- );
- }
- if (slug === "monorepos") {
- return (
- <>
-
- Core inspects workspace packages, manifests, scripts, exported surfaces, and package
- boundaries. Place the configuration at the workspace root and use entry,{" "}
- ignore, and externalContracts to clarify project-specific
- boundaries.
-
-
- >
- );
- }
- return (
- <>
-
- OptiPrune begins from explicit entries, package metadata, exports, bins, scripts,
- conventional framework files, and workspace topology.
-
-
-
- Use externalContracts for public symbols and{" "}
- includeConventionalEntries to control discovery of familiar application roots.
-
- >
- );
-}
-
-export default function Docs() {
- const [location] = useLocation();
- const [mobileOpen, setMobileOpen] = useState(false);
- const parts = location.split("/").filter(Boolean);
- const slug = parts[1] || "getting-started";
- const pluginSlug = parts[2] ? decodeURIComponent(parts[2]) : undefined;
- const pluginDetail =
- slug === "plugins" && pluginSlug
- ? plugins.find((plugin) => plugin.name.replace(/-plugin$/, "") === pluginSlug)
- : undefined;
- const currentIndex = Math.max(
- 0,
- orderedDocs.findIndex(([item]) => item === slug),
- );
- const active = pluginDetail
- ? pluginTitle(pluginDetail.name)
- : orderedDocs[currentIndex]?.[1] || "Getting Started";
- const previous = orderedDocs[currentIndex - 1];
- const next = orderedDocs[currentIndex + 1];
-
- return (
-
-
-
-
-
- DOCUMENTATION
- setMobileOpen(false)} aria-label="Close navigation">
-
-
-
- {groups.map((group) => (
-
- ))}
-
-
-
-
- {pluginDetail ? (
-
- ) : (
-
- )}
-
-
-
-
-
- );
-}
diff --git a/docs/client/src/pages/Home.tsx b/docs/client/src/pages/Home.tsx
deleted file mode 100644
index 0135c5bd..00000000
--- a/docs/client/src/pages/Home.tsx
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Calm docs system: the root route is a welcoming product landing page; detailed reference content lives under /docs. */
-import { ArrowRight, ArrowUpRight, Github, Package, Terminal } from "lucide-react";
-
-const links = {
- docs: "/docs/getting-started",
- core: "https://github.com/optiprune/core",
- cli: "https://github.com/optiprune/cli",
- wrapper: "https://github.com/optiprune/cli",
- npm: "https://www.npmjs.com/package/@optiprune/cli",
- vscode: "https://marketplace.visualstudio.com/items?itemName=dreamlongyt.optiprune-vscode",
- reference: "/docs/quick-reference",
-};
-
-export default function Home() {
- return (
-
-
-
-
-
-
- Stop guessing.
-
- Start proving.
-
-
- OptiPrune finds unreachable files, exports, dependencies, and logic in TypeScript and
- JavaScript workspaces—then gives you the context to decide what goes.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Open Source
-
- Made by DreamLongYT
-
-
-
-
-
-
-
- npm install --save-dev @optiprune/cli
-
- MIT License · made by DreamLongYT
-
-
- );
-}
diff --git a/docs/client/src/pages/NotFound.tsx b/docs/client/src/pages/NotFound.tsx
deleted file mode 100644
index d070d8bd..00000000
--- a/docs/client/src/pages/NotFound.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import { Button } from "@/components/ui/button";
-import { Card, CardContent } from "@/components/ui/card";
-import { AlertCircle, Home } from "lucide-react";
-import { useLocation } from "wouter";
-
-export default function NotFound() {
- const [, setLocation] = useLocation();
-
- const handleGoHome = () => {
- setLocation("/");
- };
-
- return (
-
-
-
-
-
- 404
-
- Page Not Found
-
-
- Sorry, the page you are looking for doesn't exist.
-
- It may have been moved or deleted.
-
-
-
-
-
- Go Home
-
-
-
-
-
- );
-}
diff --git a/docs/functions/api/blog.js b/docs/functions/api/blog.js
new file mode 100644
index 00000000..54d3953f
--- /dev/null
+++ b/docs/functions/api/blog.js
@@ -0,0 +1,40 @@
+const json = (data, status = 200) =>
+ new Response(JSON.stringify(data), {
+ status,
+ headers: {
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "public, max-age=60",
+ },
+ });
+
+export async function onRequestGet({ env }) {
+ const listed = await env.BLOG.list({ prefix: "post:" });
+ const posts = (
+ await Promise.all(
+ listed.keys.map(async ({ name }) => {
+ try {
+ return await env.BLOG.get(name, "json");
+ } catch {
+ return null;
+ }
+ }),
+ )
+ )
+ .filter(Boolean)
+ .sort(
+ (a, b) =>
+ new Date(b.published_at || b.created_at || 0) -
+ new Date(a.published_at || a.created_at || 0),
+ );
+
+ return json(
+ posts.map(({ body, content, ...post }) => ({
+ ...post,
+ excerpt:
+ post.excerpt ||
+ String(body || content || "")
+ .replace(/<[^>]+>/g, "")
+ .slice(0, 160),
+ })),
+ );
+}
diff --git a/docs/functions/api/blog/[id].js b/docs/functions/api/blog/[id].js
new file mode 100644
index 00000000..f10c8d2a
--- /dev/null
+++ b/docs/functions/api/blog/[id].js
@@ -0,0 +1,15 @@
+const json = (data, status = 200) =>
+ new Response(JSON.stringify(data), {
+ status,
+ headers: {
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "public, max-age=60",
+ },
+ });
+
+export async function onRequestGet({ env, params }) {
+ const id = decodeURIComponent(params.id);
+ const post = await env.BLOG.get(`post:${id}`, "json");
+ if (!post) return json({ error: "Not found" }, 404);
+ return json(post);
+}
diff --git a/docs/package-lock.json b/docs/package-lock.json
new file mode 100644
index 00000000..e4025d48
--- /dev/null
+++ b/docs/package-lock.json
@@ -0,0 +1,5440 @@
+{
+ "name": "optiprune-docs",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "optiprune-docs",
+ "version": "1.0.0",
+ "dependencies": {
+ "@astrojs/starlight": "latest",
+ "astro": "latest"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.4.0.tgz",
+ "integrity": "sha512-x2RjDUuWfwLNtc3mjAdSRInwqh/rqbLar9cm/5FOMbHvmYZB7yfKewzSclAxWjIZsypJDXv1lhaP2WG+P8TK3g==",
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@astrojs/compiler-binding-darwin-arm64": "0.4.0",
+ "@astrojs/compiler-binding-darwin-x64": "0.4.0",
+ "@astrojs/compiler-binding-linux-arm64-gnu": "0.4.0",
+ "@astrojs/compiler-binding-linux-arm64-musl": "0.4.0",
+ "@astrojs/compiler-binding-linux-x64-gnu": "0.4.0",
+ "@astrojs/compiler-binding-linux-x64-musl": "0.4.0",
+ "@astrojs/compiler-binding-wasm32-wasi": "0.4.0",
+ "@astrojs/compiler-binding-win32-arm64-msvc": "0.4.0",
+ "@astrojs/compiler-binding-win32-x64-msvc": "0.4.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-arm64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.4.0.tgz",
+ "integrity": "sha512-ZVUwHundaQyFNjE6uoa0usaC0WOCitDCLS/4mdb4rOiJXwVUuKJBMxI5WMzXLWmamsXtK/Z//ifLXvV5Yeh4Hw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-darwin-x64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.4.0.tgz",
+ "integrity": "sha512-FI6G8AY8u6fR1SI/QRR5yGMwtvZwP34CDmZpZ5HwJGa50UM1VISTLhqkhV4a476pmgd25X1Aur2dqw6hUnrlKA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.4.0.tgz",
+ "integrity": "sha512-lB9gLFJK7m82EnjaU8nlRBEfcwGNeHidW3sSjODTUjMNaoewVuUz9fwwdY5M4jiSXIqWLH3yl6TX8FTDKA74Sw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-arm64-musl": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.4.0.tgz",
+ "integrity": "sha512-HPbvWqbxFxyaoQJhLxCaSjtYBx9KBo7JGVzEFZCmMl968a2PsSH0UfiODYgYPXofTOIsIH2aoCcrHXML0IA3ig==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-gnu": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.4.0.tgz",
+ "integrity": "sha512-tQKolMxoJ/+0AmLWm1PmJ/i+z3i10ZU1bNuVjEDulCf48azEMtUNjTZgHJ5MPtpYRNc7dlETr8QujUfduzoC7Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-linux-x64-musl": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.4.0.tgz",
+ "integrity": "sha512-5v5YymudsxMHp3NBLCS8BUlu5CRqeLtWD9cKS/4nIhIEHCbpz9okmVV6I0HWqmBAPhWYcDa3vw/vltYPrOQCTA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-wasm32-wasi": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.4.0.tgz",
+ "integrity": "sha512-m/phuH3x3PREvv1OnkM44NoPh4MatUadix1fB1u5SvMLCyDTUZykDJbKnWf1cjnYmHdlB8HcjTjl6JrCqAIXcw==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.2.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.4.0.tgz",
+ "integrity": "sha512-B9zYf3okEY83kM8gydlpH2BHP00w4ifxPqlYlWrgTwuD6wnkrJDCwBlgy1q31cERjCJRXN1lrE2VmkLvFjv/6g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-binding-win32-x64-msvc": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.4.0.tgz",
+ "integrity": "sha512-zB0Nrv0dGc0zZWPGDRmmETTPhDRqyZjAjk+gWMlVrJX5U89obpB3VUUE1ZiHxOCN5LQojeLK6O8L/dnoHolvNQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/compiler-rs": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.4.0.tgz",
+ "integrity": "sha512-koVikeon1kreEy+/JzLQRy3vzHHQVOjycs4degg4vFufKApZOwMZvSSAEztYNhmcQVfNVsVZZI4cEge3cexAbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-binding": "0.4.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/internal-helpers": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.11.0.tgz",
+ "integrity": "sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "js-yaml": "^4.3.0",
+ "picomatch": "^4.0.4",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "unified": "^11.0.5"
+ }
+ },
+ "node_modules/@astrojs/markdown-satteri": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.4.0.tgz",
+ "integrity": "sha512-wykOOW9KsUVcZweOpY/CeXpdKcCKZy6fQbdcteWFuI75+sQCiqxYM7VKsGa5b+aGl3cYQscFY37rsbbyal5MRw==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.11.0",
+ "@astrojs/prism": "4.0.2",
+ "github-slugger": "^2.0.0",
+ "satteri": "^0.10.3"
+ }
+ },
+ "node_modules/@astrojs/mdx": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-8.0.0.tgz",
+ "integrity": "sha512-4I/z+VgUO0B9I/+yhzIEpLyBYQZNJsInmrtqClP4lqX9yvUpbuV72zfRTZ8VqJLKABETUE5CYOl+23va8nqxZg==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.11.0",
+ "@astrojs/markdown-satteri": "0.4.0",
+ "es-module-lexer": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ },
+ "peerDependencies": {
+ "@astrojs/markdown-remark": "^7.3.0",
+ "@astrojs/markdown-satteri": "^0.4.0",
+ "astro": "^7.2.6"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@astrojs/prism": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz",
+ "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==",
+ "license": "MIT",
+ "dependencies": {
+ "prismjs": "^1.30.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
+ },
+ "node_modules/@astrojs/sitemap": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.4.tgz",
+ "integrity": "sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA==",
+ "license": "MIT",
+ "dependencies": {
+ "sitemap": "^9.0.0",
+ "zod": "^4.3.6"
+ }
+ },
+ "node_modules/@astrojs/starlight": {
+ "version": "0.42.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.42.0.tgz",
+ "integrity": "sha512-EVsGnyGJ6rRNwGRZFYmGABo0qTQ55F7OSmfSL0VK+5lsqD+u6GWcB8tFqXETcUvP8kyn90W+QBLSL2aer9jNJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/markdown-satteri": "^0.4.0",
+ "@astrojs/mdx": "^8.0.0",
+ "@astrojs/sitemap": "^3.7.3",
+ "@pagefind/default-ui": "^1.3.0",
+ "@types/hast": "^3.0.5",
+ "@types/js-yaml": "^4.0.9",
+ "@types/mdast": "^4.0.4",
+ "astro-expressive-code": "^0.44.0",
+ "bcp-47": "^2.1.0",
+ "hast-util-format": "^1.1.0",
+ "hast-util-select": "^6.0.4",
+ "hast-util-to-html": "^9.0.5",
+ "hast-util-to-string": "^3.0.1",
+ "hastscript": "^9.0.1",
+ "i18next": "^26.0.7",
+ "js-yaml": "^4.1.1",
+ "klona": "^2.0.6",
+ "magic-string": "^1.2.3",
+ "mdast-util-directive": "^3.1.0",
+ "mdast-util-to-markdown": "^2.1.2",
+ "mdast-util-to-string": "^4.0.0",
+ "pagefind": "^1.5.2",
+ "remark-directive": "^4.0.0",
+ "satteri": "^0.10.3",
+ "ultrahtml": "^1.6.0",
+ "unified": "^11.0.5",
+ "unist-util-visit": "^5.1.0",
+ "vfile": "^6.0.3"
+ },
+ "peerDependencies": {
+ "@astrojs/markdown-remark": "^7.3.0",
+ "astro": "^7.2.10"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@astrojs/telemetry": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz",
+ "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ci-info": "^4.4.0",
+ "dset": "^3.1.4",
+ "is-docker": "^4.0.0",
+ "package-manager-detector": "^1.6.0"
+ },
+ "engines": {
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.8"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bruits/satteri-darwin-arm64": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.10.5.tgz",
+ "integrity": "sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@bruits/satteri-darwin-x64": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.10.5.tgz",
+ "integrity": "sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-arm64-gnu": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.10.5.tgz",
+ "integrity": "sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-arm64-musl": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.10.5.tgz",
+ "integrity": "sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-gnu": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.10.5.tgz",
+ "integrity": "sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-linux-x64-musl": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.10.5.tgz",
+ "integrity": "sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.10.5.tgz",
+ "integrity": "sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "1.11.1",
+ "@emnapi/runtime": "1.11.1",
+ "@napi-rs/wasm-runtime": "^1.2.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
+ "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
+ "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@bruits/satteri-win32-arm64-msvc": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.10.5.tgz",
+ "integrity": "sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@bruits/satteri-win32-x64-msvc": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.10.5.tgz",
+ "integrity": "sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@capsizecss/unpack": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz",
+ "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@clack/core": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz",
+ "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@clack/prompts": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz",
+ "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==",
+ "license": "MIT",
+ "dependencies": {
+ "@clack/core": "1.4.3",
+ "fast-string-width": "^3.0.2",
+ "fast-wrap-ansi": "^0.2.0",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 20.12.0"
+ }
+ },
+ "node_modules/@ctrl/tinycolor": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz",
+ "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@emnapi/core": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
+ "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
+ "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@expressive-code/core": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.44.2.tgz",
+ "integrity": "sha512-Yw5KonQCD1HoOO2P89y4wifqS9qrJcGVY0LkVMUsVZjhi++bhz4WwQ37inenKFNOEVo50P7cjoVsCdaVnUbq8w==",
+ "license": "MIT",
+ "dependencies": {
+ "@ctrl/tinycolor": "^4.0.4",
+ "hast-util-select": "^6.0.2",
+ "hast-util-to-html": "^9.0.1",
+ "hast-util-to-text": "^4.0.1",
+ "hastscript": "^9.0.0",
+ "postcss": "^8.4.38",
+ "postcss-nested": "^6.0.1",
+ "unist-util-visit": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.1"
+ }
+ },
+ "node_modules/@expressive-code/plugin-frames": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.44.2.tgz",
+ "integrity": "sha512-gVLm6TQMNIRWIaM7o+mCtxkGNjLZY5/2faSTLoXeo9wv/Pkj/0QAtZyXPVPrRsPARqiipATNFmfvQFLJudxPHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@expressive-code/core": "^0.44.2"
+ }
+ },
+ "node_modules/@expressive-code/plugin-shiki": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.44.2.tgz",
+ "integrity": "sha512-ebWIvCDzXvjyD8rH6T6DfytYJw1GoArLR4nusIAE4VxXrCQf3d+owytiv010KU/dUg+SRLZskDn0N+HaFXeuSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@expressive-code/core": "^0.44.2",
+ "shiki": "^4.0.2"
+ }
+ },
+ "node_modules/@expressive-code/plugin-text-markers": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.44.2.tgz",
+ "integrity": "sha512-SNI7EgUSiADqbqUzzMbj1ZeC/r2pa5eg3KyFOGAd3a7EsIA4qzjXQLp+ODWQtHVDKFCdGs4J3ovSJUqvKIK96g==",
+ "license": "MIT",
+ "dependencies": {
+ "@expressive-code/core": "^0.44.2"
+ }
+ },
+ "node_modules/@img/colour": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz",
+ "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz",
+ "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-freebsd-wasm32": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz",
+ "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.4"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz",
+ "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz",
+ "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz",
+ "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz",
+ "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-ppc64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz",
+ "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-riscv64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz",
+ "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz",
+ "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz",
+ "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz",
+ "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz",
+ "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz",
+ "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz",
+ "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linux-ppc64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz",
+ "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-ppc64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linux-riscv64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz",
+ "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-riscv64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz",
+ "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz",
+ "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz",
+ "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz",
+ "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz",
+ "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==",
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.11.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-webcontainers-wasm32": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz",
+ "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.4"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-arm64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz",
+ "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz",
+ "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz",
+ "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
+ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
+ "license": "MIT"
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz",
+ "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.3"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4",
+ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4"
+ }
+ },
+ "node_modules/@oslojs/encoding": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
+ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
+ "license": "MIT"
+ },
+ "node_modules/@oxc-project/types": {
+ "version": "0.148.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz",
+ "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/oxc-project"
+ }
+ },
+ "node_modules/@pagefind/darwin-arm64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.5.2.tgz",
+ "integrity": "sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@pagefind/darwin-x64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.5.2.tgz",
+ "integrity": "sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@pagefind/default-ui": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.5.2.tgz",
+ "integrity": "sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==",
+ "license": "MIT"
+ },
+ "node_modules/@pagefind/freebsd-x64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.5.2.tgz",
+ "integrity": "sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@pagefind/linux-arm64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.5.2.tgz",
+ "integrity": "sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@pagefind/linux-x64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.5.2.tgz",
+ "integrity": "sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@pagefind/windows-arm64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/windows-arm64/-/windows-arm64-1.5.2.tgz",
+ "integrity": "sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@pagefind/windows-x64": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.5.2.tgz",
+ "integrity": "sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rolldown/binding-android-arm-eabi": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz",
+ "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz",
+ "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz",
+ "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz",
+ "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz",
+ "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz",
+ "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz",
+ "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz",
+ "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz",
+ "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz",
+ "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz",
+ "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz",
+ "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz",
+ "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz",
+ "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz",
+ "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
+ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
+ "license": "MIT"
+ },
+ "node_modules/@shikijs/core": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.3.tgz",
+ "integrity": "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/primitive": "4.4.3",
+ "@shikijs/types": "4.4.3",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5",
+ "hast-util-to-html": "^9.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz",
+ "integrity": "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.3",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^4.3.6"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz",
+ "integrity": "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.3",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz",
+ "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.3"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/primitive": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.3.tgz",
+ "integrity": "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.3",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz",
+ "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.4.3"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz",
+ "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "license": "MIT"
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
+ "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/js-yaml": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz",
+ "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/nlcst": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+ "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "24.13.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz",
+ "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.18.0"
+ }
+ },
+ "node_modules/@types/sax": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
+ "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz",
+ "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==",
+ "license": "ISC"
+ },
+ "node_modules/am-i-vibing": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz",
+ "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==",
+ "license": "MIT",
+ "dependencies": {
+ "process-ancestry": "^0.1.0"
+ },
+ "bin": {
+ "am-i-vibing": "dist/cli.mjs"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/astro": {
+ "version": "7.2.10",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-7.2.10.tgz",
+ "integrity": "sha512-uPtD+nK6kQXugyq4kiMPwj9OI3Sae6HSerA5X+fuv2CPaDwxmokFPPFlGRKIAXH0QAKu+zot2q6yrLG61wFmqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/compiler-rs": "^0.4.0",
+ "@astrojs/internal-helpers": "0.11.0",
+ "@astrojs/markdown-satteri": "0.4.0",
+ "@astrojs/telemetry": "3.3.3",
+ "@capsizecss/unpack": "^4.0.0",
+ "@clack/prompts": "^1.1.0",
+ "@oslojs/encoding": "^1.1.0",
+ "am-i-vibing": "^0.4.0",
+ "aria-query": "^5.3.2",
+ "axobject-query": "^4.1.0",
+ "ci-info": "^4.4.0",
+ "clsx": "^2.1.1",
+ "common-ancestor-path": "^2.0.0",
+ "cookie": "^2.0.1",
+ "devalue": "^5.8.1",
+ "diff": "^9.0.0",
+ "dset": "^3.1.4",
+ "es-module-lexer": "^2.0.0",
+ "esbuild": "^0.28.0",
+ "find-proc": "0.1.0",
+ "flattie": "^1.1.1",
+ "fontace": "~0.4.1",
+ "get-tsconfig": "5.0.0-beta.4",
+ "github-slugger": "^2.0.0",
+ "html-escaper": "3.0.3",
+ "http-cache-semantics": "^4.2.0",
+ "js-yaml": "^4.3.0",
+ "jsonc-parser": "^3.3.1",
+ "magic-string": "^1.0.0",
+ "magicast": "^0.5.2",
+ "mrmime": "^2.0.1",
+ "neotraverse": "^1.0.1",
+ "obug": "^2.1.1",
+ "p-limit": "^7.3.0",
+ "p-queue": "^9.1.0",
+ "package-manager-detector": "^1.6.0",
+ "piccolore": "^0.1.3",
+ "picomatch": "^4.0.4",
+ "semver": "^7.7.4",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "svgo": "^4.0.1",
+ "tinyclip": "^0.1.12",
+ "tinyexec": "^1.0.4",
+ "tinyglobby": "^0.2.15",
+ "ultrahtml": "^1.6.0",
+ "unifont": "~0.7.5",
+ "unstorage": "^1.17.5",
+ "vite": "^8.0.13",
+ "vitefu": "^1.1.2",
+ "xxhash-wasm": "^1.1.0",
+ "yargs-parser": "^22.0.0",
+ "zod": "^4.3.6"
+ },
+ "bin": {
+ "astro": "bin/astro.mjs"
+ },
+ "engines": {
+ "node": ">=22.12.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/astrodotbuild"
+ },
+ "optionalDependencies": {
+ "sharp": "^0.35.4"
+ },
+ "peerDependencies": {
+ "@astrojs/markdown-remark": "^7.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@astrojs/markdown-remark": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/astro-expressive-code": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.44.2.tgz",
+ "integrity": "sha512-avop7nZcRwC7quvIxVguhwEZ9Tp6IoTzKUCLwP30Fb7+er+pWQgcysP01dcuzRIJo81kLGg30q/YAI2Yb1Sdzg==",
+ "license": "MIT",
+ "dependencies": {
+ "rehype-expressive-code": "^0.44.2",
+ "url-extras": "^0.1.0"
+ },
+ "peerDependencies": {
+ "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/bcp-47": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.1.tgz",
+ "integrity": "sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/bcp-47-match": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz",
+ "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "license": "ISC"
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
+ "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/common-ancestor-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz",
+ "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz",
+ "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cookie-es": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz",
+ "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
+ "license": "MIT"
+ },
+ "node_modules/crossws": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
+ "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
+ "license": "MIT",
+ "dependencies": {
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz",
+ "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^7.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "nth-check": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-selector-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz",
+ "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/mdevils"
+ },
+ {
+ "type": "patreon",
+ "url": "https://patreon.com/mdevils"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/css-tree": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+ "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.27.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz",
+ "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+ "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/defu": {
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
+ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/destr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
+ "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "5.9.2",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.2.tgz",
+ "integrity": "sha512-po4PAY5c53tw5XMocSnf8A/5OHhbbUftpr93aEN6BBoAdntUmK7vu7wOATqvt7cXO7m1Cl4gMVn6p7n6n4mj0w==",
+ "license": "MIT"
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/diff": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz",
+ "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/direction": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz",
+ "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==",
+ "license": "MIT",
+ "bin": {
+ "direction": "cli.js"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dset": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
+ "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz",
+ "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==",
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.2",
+ "@esbuild/android-arm": "0.28.2",
+ "@esbuild/android-arm64": "0.28.2",
+ "@esbuild/android-x64": "0.28.2",
+ "@esbuild/darwin-arm64": "0.28.2",
+ "@esbuild/darwin-x64": "0.28.2",
+ "@esbuild/freebsd-arm64": "0.28.2",
+ "@esbuild/freebsd-x64": "0.28.2",
+ "@esbuild/linux-arm": "0.28.2",
+ "@esbuild/linux-arm64": "0.28.2",
+ "@esbuild/linux-ia32": "0.28.2",
+ "@esbuild/linux-loong64": "0.28.2",
+ "@esbuild/linux-mips64el": "0.28.2",
+ "@esbuild/linux-ppc64": "0.28.2",
+ "@esbuild/linux-riscv64": "0.28.2",
+ "@esbuild/linux-s390x": "0.28.2",
+ "@esbuild/linux-x64": "0.28.2",
+ "@esbuild/netbsd-arm64": "0.28.2",
+ "@esbuild/netbsd-x64": "0.28.2",
+ "@esbuild/openbsd-arm64": "0.28.2",
+ "@esbuild/openbsd-x64": "0.28.2",
+ "@esbuild/openharmony-arm64": "0.28.2",
+ "@esbuild/sunos-x64": "0.28.2",
+ "@esbuild/win32-arm64": "0.28.2",
+ "@esbuild/win32-ia32": "0.28.2",
+ "@esbuild/win32-x64": "0.28.2"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
+ "license": "MIT"
+ },
+ "node_modules/expressive-code": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.44.2.tgz",
+ "integrity": "sha512-MLNghkvhyFgVW4oCD5DxBuYnnTXIf0PygzGmfT6OZeOOYWh/D4sH1j931biElkA5RG/J9wY/iuSMGAPF5vzHOg==",
+ "license": "MIT",
+ "dependencies": {
+ "@expressive-code/core": "^0.44.2",
+ "@expressive-code/plugin-frames": "^0.44.2",
+ "@expressive-code/plugin-shiki": "^0.44.2",
+ "@expressive-code/plugin-text-markers": "^0.44.2"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-string-truncated-width": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
+ "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-string-width": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz",
+ "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-truncated-width": "^3.0.2"
+ }
+ },
+ "node_modules/fast-wrap-ansi": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz",
+ "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-string-width": "^3.0.2"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/find-proc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.1.0.tgz",
+ "integrity": "sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fontace": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz",
+ "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkitten": "^1.0.2"
+ }
+ },
+ "node_modules/fontkitten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz",
+ "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
+ "license": "MIT",
+ "dependencies": {
+ "tiny-inflate": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "5.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz",
+ "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==",
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=20.20.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "license": "ISC"
+ },
+ "node_modules/h3": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz",
+ "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==",
+ "license": "MIT",
+ "dependencies": {
+ "cookie-es": "^1.2.3",
+ "crossws": "^0.3.5",
+ "defu": "^6.1.6",
+ "destr": "^2.0.5",
+ "iron-webcrypto": "^1.2.1",
+ "node-mock-http": "^1.0.4",
+ "radix3": "^1.1.2",
+ "ufo": "^1.6.3",
+ "uncrypto": "^0.1.3"
+ }
+ },
+ "node_modules/hast-util-embedded": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz",
+ "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-is-element": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-format": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz",
+ "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-minify-whitespace": "^1.0.0",
+ "hast-util-phrasing": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-whitespace-sensitive-tag-names": "^3.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-has-property": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz",
+ "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-body-ok-link": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz",
+ "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-minify-whitespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz",
+ "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-has-property": "^3.0.0",
+ "hast-util-is-body-ok-link": "^3.0.0",
+ "hast-util-is-element": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz",
+ "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "bcp-47-match": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "css-selector-parser": "^3.0.0",
+ "devlop": "^1.0.0",
+ "direction": "^2.0.0",
+ "hast-util-has-property": "^3.0.0",
+ "hast-util-to-string": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "nth-check": "^2.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-string": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
+ "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+ "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unist-util-find-after": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+ "license": "MIT"
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/html-whitespace-sensitive-tag-names": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz",
+ "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/i18next": {
+ "version": "26.4.1",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.4.1.tgz",
+ "integrity": "sha512-9YbX5E6gd1H+yaOSX3izCsPj5iWXyH7X4oC+iuHHJJw8AeHglzOK5SJf+1CHxaYKYigcea+8jvzSxqYx46YvyA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://www.locize.com/i18next"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.locize.com"
+ }
+ ],
+ "license": "MIT",
+ "peerDependencies": {
+ "typescript": "^5 || ^6 || ^7"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/iron-webcrypto": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
+ "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/brc-dd"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz",
+ "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==",
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "license": "MIT"
+ },
+ "node_modules/klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.33.0",
+ "lightningcss-darwin-arm64": "1.33.0",
+ "lightningcss-darwin-x64": "1.33.0",
+ "lightningcss-freebsd-x64": "1.33.0",
+ "lightningcss-linux-arm-gnueabihf": "1.33.0",
+ "lightningcss-linux-arm64-gnu": "1.33.0",
+ "lightningcss-linux-arm64-musl": "1.33.0",
+ "lightningcss-linux-x64-gnu": "1.33.0",
+ "lightningcss-linux-x64-musl": "1.33.0",
+ "lightningcss-win32-arm64-msvc": "1.33.0",
+ "lightningcss-win32-x64-msvc": "1.33.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+ "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+ "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+ "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+ "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+ "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+ "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+ "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+ "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+ "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+ "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+ "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "11.5.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+ "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz",
+ "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/magicast": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz",
+ "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/mdast-util-directive": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz",
+ "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz",
+ "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.27.1",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/micromark": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-directive": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz",
+ "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "parse-entities": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/neotraverse": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz",
+ "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/nlcst-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+ "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/node-fetch-native": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
+ "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
+ "license": "MIT"
+ },
+ "node_modules/node-mock-http": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz",
+ "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==",
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/obug": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz",
+ "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==",
+ "funding": [
+ "https://github.com/sponsors/sxzz",
+ "https://opencollective.com/debug"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/ofetch": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
+ "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
+ "license": "MIT",
+ "dependencies": {
+ "destr": "^2.0.5",
+ "node-fetch-native": "^1.6.7",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/ohash": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.12.tgz",
+ "integrity": "sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==",
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
+ "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
+ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
+ "license": "MIT",
+ "dependencies": {
+ "oniguruma-parser": "^0.12.2",
+ "regex": "^6.1.0",
+ "regex-recursion": "^6.0.2"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.2.tgz",
+ "integrity": "sha512-Ll0w3fU24vYpXoZmjjZIee6bJQDgG0oAyo1PdmFYI8UDwJJddaHAypxIH9avUu+t+lSsAwKVsb1jDCMIIChliw==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz",
+ "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==",
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^5.0.4",
+ "p-timeout": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz",
+ "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-manager-detector": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz",
+ "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==",
+ "license": "MIT"
+ },
+ "node_modules/pagefind": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.5.2.tgz",
+ "integrity": "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==",
+ "license": "MIT",
+ "bin": {
+ "pagefind": "lib/runner/bin.cjs"
+ },
+ "optionalDependencies": {
+ "@pagefind/darwin-arm64": "1.5.2",
+ "@pagefind/darwin-x64": "1.5.2",
+ "@pagefind/freebsd-x64": "1.5.2",
+ "@pagefind/linux-arm64": "1.5.2",
+ "@pagefind/linux-x64": "1.5.2",
+ "@pagefind/windows-arm64": "1.5.2",
+ "@pagefind/windows-x64": "1.5.2"
+ }
+ },
+ "node_modules/parse-entities": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
+ "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
+ },
+ "node_modules/piccolore": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
+ "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
+ "license": "ISC"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.26",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.17",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
+ "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/process-ancestry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz",
+ "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/radix3": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
+ "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz",
+ "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
+ },
+ "node_modules/rehype-expressive-code": {
+ "version": "0.44.2",
+ "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.44.2.tgz",
+ "integrity": "sha512-jvjQpsfWKBquDrEl5YQA3CJybRRIuDOYsui1BJTs5oKDUK8pPkJSSxY8FjxNlIFIdtgrTjC1zuahuY4Cc1j9SQ==",
+ "license": "MIT",
+ "dependencies": {
+ "expressive-code": "^0.44.2"
+ }
+ },
+ "node_modules/remark-directive": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-4.0.0.tgz",
+ "integrity": "sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-directive": "^3.0.0",
+ "micromark-extension-directive": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/retext-smartypants": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
+ "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rolldown": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz",
+ "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==",
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/types": "=0.148.0",
+ "@rolldown/pluginutils": "^1.0.0"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm-eabi": "1.2.7",
+ "@rolldown/binding-android-arm64": "1.2.7",
+ "@rolldown/binding-darwin-arm64": "1.2.7",
+ "@rolldown/binding-darwin-x64": "1.2.7",
+ "@rolldown/binding-freebsd-x64": "1.2.7",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.7",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.7",
+ "@rolldown/binding-linux-arm64-musl": "1.2.7",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.7",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.7",
+ "@rolldown/binding-linux-x64-gnu": "1.2.7",
+ "@rolldown/binding-linux-x64-musl": "1.2.7",
+ "@rolldown/binding-openharmony-arm64": "1.2.7",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.7",
+ "@rolldown/binding-win32-x64-msvc": "1.2.7"
+ }
+ },
+ "node_modules/satteri": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.10.5.tgz",
+ "integrity": "sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.5",
+ "@types/hast": "^3.0.5",
+ "@types/mdast": "^4.0.4",
+ "@types/unist": "^3.0.3"
+ },
+ "optionalDependencies": {
+ "@bruits/satteri-darwin-arm64": "0.10.5",
+ "@bruits/satteri-darwin-x64": "0.10.5",
+ "@bruits/satteri-linux-arm64-gnu": "0.10.5",
+ "@bruits/satteri-linux-arm64-musl": "0.10.5",
+ "@bruits/satteri-linux-x64-gnu": "0.10.5",
+ "@bruits/satteri-linux-x64-musl": "0.10.5",
+ "@bruits/satteri-wasm32-wasi": "0.10.5",
+ "@bruits/satteri-win32-arm64-msvc": "0.10.5",
+ "@bruits/satteri-win32-x64-msvc": "0.10.5"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+ "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz",
+ "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "@img/colour": "^1.1.0",
+ "detect-libc": "^2.1.2",
+ "semver": "^7.8.5"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.35.4",
+ "@img/sharp-darwin-x64": "0.35.4",
+ "@img/sharp-freebsd-wasm32": "0.35.4",
+ "@img/sharp-libvips-darwin-arm64": "1.3.3",
+ "@img/sharp-libvips-darwin-x64": "1.3.3",
+ "@img/sharp-libvips-linux-arm": "1.3.3",
+ "@img/sharp-libvips-linux-arm64": "1.3.3",
+ "@img/sharp-libvips-linux-ppc64": "1.3.3",
+ "@img/sharp-libvips-linux-riscv64": "1.3.3",
+ "@img/sharp-libvips-linux-s390x": "1.3.3",
+ "@img/sharp-libvips-linux-x64": "1.3.3",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.3",
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.3",
+ "@img/sharp-linux-arm": "0.35.4",
+ "@img/sharp-linux-arm64": "0.35.4",
+ "@img/sharp-linux-ppc64": "0.35.4",
+ "@img/sharp-linux-riscv64": "0.35.4",
+ "@img/sharp-linux-s390x": "0.35.4",
+ "@img/sharp-linux-x64": "0.35.4",
+ "@img/sharp-linuxmusl-arm64": "0.35.4",
+ "@img/sharp-linuxmusl-x64": "0.35.4",
+ "@img/sharp-webcontainers-wasm32": "0.35.4",
+ "@img/sharp-win32-arm64": "0.35.4",
+ "@img/sharp-win32-ia32": "0.35.4",
+ "@img/sharp-win32-x64": "0.35.4"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/shiki": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.3.tgz",
+ "integrity": "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "4.4.3",
+ "@shikijs/engine-javascript": "4.4.3",
+ "@shikijs/engine-oniguruma": "4.4.3",
+ "@shikijs/langs": "4.4.3",
+ "@shikijs/themes": "4.4.3",
+ "@shikijs/types": "4.4.3",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "license": "MIT"
+ },
+ "node_modules/sitemap": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz",
+ "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "^24.9.2",
+ "@types/sax": "^1.2.1",
+ "arg": "^5.0.0",
+ "sax": "^1.4.1"
+ },
+ "bin": {
+ "sitemap": "dist/esm/cli.js"
+ },
+ "engines": {
+ "node": ">=20.19.5",
+ "npm": ">=10.8.2"
+ }
+ },
+ "node_modules/smol-toml": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz",
+ "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyyynthia"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz",
+ "integrity": "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^6.0.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^7.0.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "1.6.1"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "license": "MIT"
+ },
+ "node_modules/tinyclip": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz",
+ "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.14.0 || >= 17.3.0"
+ }
+ },
+ "node_modules/tinyexec": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz",
+ "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/ufo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
+ "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+ "license": "MIT"
+ },
+ "node_modules/ultrahtml": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz",
+ "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==",
+ "license": "MIT"
+ },
+ "node_modules/uncrypto": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
+ "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
+ "license": "MIT"
+ },
+ "node_modules/undici": {
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-8.10.1.tgz",
+ "integrity": "sha512-YQ3WlbqjYMmNpdvDH64jAgLjxuAR9+649calDWhbshYaeQGO2bR4nI94ORJmwI3J9YhoKQnpyGOK+0zlWS5N5Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=22.19.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
+ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+ "license": "MIT"
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unifont": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.5.tgz",
+ "integrity": "sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==",
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "^3.1.0",
+ "ohash": "^2.0.11",
+ "undici": "^8.0.0"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+ "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unstorage": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz",
+ "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "^3.1.3",
+ "chokidar": "^5.0.0",
+ "destr": "^2.0.5",
+ "h3": "^1.15.10",
+ "lru-cache": "^11.2.7",
+ "node-fetch-native": "^1.6.7",
+ "ofetch": "^1.5.1",
+ "ufo": "^1.6.3"
+ },
+ "peerDependencies": {
+ "@azure/app-configuration": "^1.8.0",
+ "@azure/cosmos": "^4.2.0",
+ "@azure/data-tables": "^13.3.0",
+ "@azure/identity": "^4.6.0",
+ "@azure/keyvault-secrets": "^4.9.0",
+ "@azure/storage-blob": "^12.26.0",
+ "@capacitor/preferences": "^6 || ^7 || ^8",
+ "@deno/kv": ">=0.9.0",
+ "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0",
+ "@planetscale/database": "^1.19.0",
+ "@upstash/redis": "^1.34.3",
+ "@vercel/blob": ">=0.27.1",
+ "@vercel/functions": "^2.2.12 || ^3.0.0",
+ "@vercel/kv": "^1 || ^2 || ^3",
+ "aws4fetch": "^1.0.20",
+ "db0": ">=0.2.1",
+ "idb-keyval": "^6.2.1",
+ "ioredis": "^5.4.2",
+ "uploadthing": "^7.4.4"
+ },
+ "peerDependenciesMeta": {
+ "@azure/app-configuration": {
+ "optional": true
+ },
+ "@azure/cosmos": {
+ "optional": true
+ },
+ "@azure/data-tables": {
+ "optional": true
+ },
+ "@azure/identity": {
+ "optional": true
+ },
+ "@azure/keyvault-secrets": {
+ "optional": true
+ },
+ "@azure/storage-blob": {
+ "optional": true
+ },
+ "@capacitor/preferences": {
+ "optional": true
+ },
+ "@deno/kv": {
+ "optional": true
+ },
+ "@netlify/blobs": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/blob": {
+ "optional": true
+ },
+ "@vercel/functions": {
+ "optional": true
+ },
+ "@vercel/kv": {
+ "optional": true
+ },
+ "aws4fetch": {
+ "optional": true
+ },
+ "db0": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "uploadthing": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/url-extras": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/url-extras/-/url-extras-0.1.0.tgz",
+ "integrity": "sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz",
+ "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "lightningcss": "^1.33.0",
+ "picomatch": "^4.0.5",
+ "postcss": "^8.5.26",
+ "rolldown": "~1.2.4",
+ "tinyglobby": "^0.2.17"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.4.0 || ^0.5.0",
+ "esbuild": "^0.27.0 || ^0.28.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
+ "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*",
+ "tests/projects/workspace/packages/*"
+ ],
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
+ "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
+ "license": "MIT"
+ },
+ "node_modules/yargs-parser": {
+ "version": "22.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
+ "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
+ "license": "ISC",
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=23"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz",
+ "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz",
+ "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/docs/package.json b/docs/package.json
index a879567d..615d9c0b 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -1,49 +1,20 @@
{
"name": "optiprune-docs",
"version": "1.0.0",
- "license": "MIT",
+ "private": true,
"type": "module",
"scripts": {
- "dev": "vite --host",
- "build": "vite build && esbuild server/index.ts --platform=node --packages=external --bundle --format=esm --outdir=dist",
- "start": "NODE_ENV=production node dist/index.js",
- "preview": "vite preview --host",
- "check": "tsc --noEmit",
+ "dev": "astro dev",
+ "build": "node scripts/build-site.mjs && astro build",
+ "preview": "astro preview",
+ "check": "astro check",
"format": "prettier --write ."
},
"dependencies": {
- "@radix-ui/react-slot": "^1.2.3",
- "class-variance-authority": "^0.7.1",
- "clsx": "^2.1.1",
- "express": "^4.21.2",
- "lucide-react": "^0.453.0",
- "react": "^19.2.1",
- "react-dom": "^19.2.1",
- "tailwind-merge": "^3.3.1",
- "wouter": "^3.3.5"
+ "@astrojs/starlight": "latest",
+ "astro": "latest"
},
- "devDependencies": {
- "@builder.io/vite-plugin-jsx-loc": "^0.1.1",
- "@tailwindcss/vite": "^4.1.3",
- "@types/express": "4.17.21",
- "@types/node": "^24.7.0",
- "@types/react": "^19.2.1",
- "@types/react-dom": "^19.2.1",
- "@vitejs/plugin-react": "^5.0.4",
- "esbuild": "^0.25.0",
- "prettier": "^3.6.2",
- "tailwindcss": "^4.1.14",
- "tw-animate-css": "^1.4.0",
- "typescript": "5.6.3",
- "vite": "^7.1.7"
- },
- "packageManager": "pnpm@10.4.1+sha512.c753b6c3ad7afa13af388fa6d808035a008e30ea9993f58c6663e2bc5ff21679aa834db094987129aa4d488b86df57f7b634981b2f827cdcacc698cc0cfb88af",
- "pnpm": {
- "patchedDependencies": {
- "wouter@3.7.1": "patches/wouter@3.7.1.patch"
- },
- "overrides": {
- "tailwindcss>nanoid": "3.3.7"
- }
+ "engines": {
+ "node": ">=20.0.0"
}
}
diff --git a/docs/patches/wouter@3.7.1.patch b/docs/patches/wouter@3.7.1.patch
deleted file mode 100644
index 133e386e..00000000
--- a/docs/patches/wouter@3.7.1.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/esm/index.js b/esm/index.js
-index c83bc63a2c10431fb62e25b7d490656a3796f301..bcae513cc20a4be6c38dc116e0b8d9bacda62b5b 100644
---- a/esm/index.js
-+++ b/esm/index.js
-@@ -338,6 +338,23 @@ const Switch = ({ children, location }) => {
- const router = useRouter();
- const [originalLocation] = useLocationFromRouter(router);
-
-+ // Collect all route paths to window object
-+ if (typeof window !== 'undefined') {
-+ if (!window.__WOUTER_ROUTES__) {
-+ window.__WOUTER_ROUTES__ = [];
-+ }
-+
-+ const allChildren = flattenChildren(children);
-+ allChildren.forEach((element) => {
-+ if (isValidElement(element) && element.props.path) {
-+ const path = element.props.path;
-+ if (!window.__WOUTER_ROUTES__.includes(path)) {
-+ window.__WOUTER_ROUTES__.push(path);
-+ }
-+ }
-+ });
-+ }
-+
- for (const element of flattenChildren(children)) {
- let match = 0;
-
diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml
deleted file mode 100644
index 33693227..00000000
--- a/docs/pnpm-lock.yaml
+++ /dev/null
@@ -1,2317 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-overrides:
- tailwindcss>nanoid: 3.3.7
-
-patchedDependencies:
- wouter@3.7.1:
- hash: 4e16e6ff3fde7d6c1024d3e0c8605dc9eb6afb690d0d49958c2f449091813072
- path: patches/wouter@3.7.1.patch
-
-importers:
-
- .:
- dependencies:
- '@radix-ui/react-slot':
- specifier: ^1.2.3
- version: 1.2.3(@types/react@19.2.1)(react@19.2.1)
- class-variance-authority:
- specifier: ^0.7.1
- version: 0.7.1
- clsx:
- specifier: ^2.1.1
- version: 2.1.1
- express:
- specifier: ^4.21.2
- version: 4.21.2
- lucide-react:
- specifier: ^0.453.0
- version: 0.453.0(react@19.2.1)
- react:
- specifier: ^19.2.1
- version: 19.2.1
- react-dom:
- specifier: ^19.2.1
- version: 19.2.1(react@19.2.1)
- tailwind-merge:
- specifier: ^3.3.1
- version: 3.3.1
- wouter:
- specifier: ^3.3.5
- version: 3.7.1(patch_hash=4e16e6ff3fde7d6c1024d3e0c8605dc9eb6afb690d0d49958c2f449091813072)(react@19.2.1)
- devDependencies:
- '@builder.io/vite-plugin-jsx-loc':
- specifier: ^0.1.1
- version: 0.1.1(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))
- '@tailwindcss/vite':
- specifier: ^4.1.3
- version: 4.1.14(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))
- '@types/express':
- specifier: 4.17.21
- version: 4.17.21
- '@types/node':
- specifier: ^24.7.0
- version: 24.7.0
- '@types/react':
- specifier: ^19.2.1
- version: 19.2.1
- '@types/react-dom':
- specifier: ^19.2.1
- version: 19.2.1(@types/react@19.2.1)
- '@vitejs/plugin-react':
- specifier: ^5.0.4
- version: 5.0.4(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))
- esbuild:
- specifier: ^0.25.0
- version: 0.25.10
- prettier:
- specifier: ^3.6.2
- version: 3.6.2
- tailwindcss:
- specifier: ^4.1.14
- version: 4.1.14
- tw-animate-css:
- specifier: ^1.4.0
- version: 1.4.0
- typescript:
- specifier: 5.6.3
- version: 5.6.3
- vite:
- specifier: ^7.1.7
- version: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)
-
-packages:
-
- '@babel/code-frame@7.27.1':
- resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.28.4':
- resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.28.4':
- resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.28.3':
- resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-compilation-targets@7.27.2':
- resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-globals@7.28.0':
- resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.27.1':
- resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-transforms@7.28.3':
- resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-plugin-utils@7.27.1':
- resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-option@7.27.1':
- resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.28.4':
- resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/plugin-transform-react-jsx-self@7.27.1':
- resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-react-jsx-source@7.27.1':
- resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/template@7.27.2':
- resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/traverse@7.28.4':
- resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
- engines: {node: '>=6.9.0'}
-
- '@builder.io/jsx-loc-internals@0.0.1':
- resolution: {integrity: sha512-cSADapVCi07DDhcuDmcAVItqSVmji7DNyD3xxYTHyNCwhWMNnTpZjyvDIWwYFJLleyDCJ9VUtbaXtUjjqBiRqw==}
-
- '@builder.io/vite-plugin-jsx-loc@0.1.1':
- resolution: {integrity: sha512-iAHFkaLBDJBC+EkGO1hF7hnIW2+oKKYVOl8NFAQH//3xeNEzvGdS9tOALRPR+JjR/M5NLyj+FG0VV7WFb1aJmw==}
- peerDependencies:
- vite: ^4.0.0 || ^5.0.0
-
- '@esbuild/aix-ppc64@0.25.10':
- resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.25.10':
- resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.25.10':
- resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.25.10':
- resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.25.10':
- resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.25.10':
- resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.25.10':
- resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.25.10':
- resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.25.10':
- resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.25.10':
- resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.25.10':
- resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.25.10':
- resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.25.10':
- resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.25.10':
- resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.25.10':
- resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.25.10':
- resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.25.10':
- resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.25.10':
- resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.25.10':
- resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.25.10':
- resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.25.10':
- resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openharmony-arm64@0.25.10':
- resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
- '@esbuild/sunos-x64@0.25.10':
- resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.25.10':
- resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.25.10':
- resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.25.10':
- resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@isaacs/fs-minipass@4.0.1':
- resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
- engines: {node: '>=18.0.0'}
-
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
-
- '@jridgewell/remapping@2.3.5':
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
- '@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
-
- '@radix-ui/react-compose-refs@1.1.2':
- resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- '@radix-ui/react-slot@1.2.3':
- resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- '@rolldown/pluginutils@1.0.0-beta.38':
- resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==}
-
- '@rollup/rollup-android-arm-eabi@4.52.4':
- resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.52.4':
- resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.52.4':
- resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.52.4':
- resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-freebsd-arm64@4.52.4':
- resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.52.4':
- resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.52.4':
- resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-musleabihf@4.52.4':
- resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-gnu@4.52.4':
- resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-musl@4.52.4':
- resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-loong64-gnu@4.52.4':
- resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==}
- cpu: [loong64]
- os: [linux]
-
- '@rollup/rollup-linux-ppc64-gnu@4.52.4':
- resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-gnu@4.52.4':
- resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-musl@4.52.4':
- resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-s390x-gnu@4.52.4':
- resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==}
- cpu: [s390x]
- os: [linux]
-
- '@rollup/rollup-linux-x64-gnu@4.52.4':
- resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-musl@4.52.4':
- resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-openharmony-arm64@4.52.4':
- resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==}
- cpu: [arm64]
- os: [openharmony]
-
- '@rollup/rollup-win32-arm64-msvc@4.52.4':
- resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.52.4':
- resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-gnu@4.52.4':
- resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==}
- cpu: [x64]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.52.4':
- resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==}
- cpu: [x64]
- os: [win32]
-
- '@tailwindcss/node@4.1.14':
- resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==}
-
- '@tailwindcss/oxide-android-arm64@4.1.14':
- resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [android]
-
- '@tailwindcss/oxide-darwin-arm64@4.1.14':
- resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@tailwindcss/oxide-darwin-x64@4.1.14':
- resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@tailwindcss/oxide-freebsd-x64@4.1.14':
- resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [freebsd]
-
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
- resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [linux]
-
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
- resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@tailwindcss/oxide-linux-arm64-musl@4.1.14':
- resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@tailwindcss/oxide-linux-x64-gnu@4.1.14':
- resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@tailwindcss/oxide-linux-x64-musl@4.1.14':
- resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@tailwindcss/oxide-wasm32-wasi@4.1.14':
- resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
- bundledDependencies:
- - '@napi-rs/wasm-runtime'
- - '@emnapi/core'
- - '@emnapi/runtime'
- - '@tybys/wasm-util'
- - '@emnapi/wasi-threads'
- - tslib
-
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
- resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@tailwindcss/oxide-win32-x64-msvc@4.1.14':
- resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
- '@tailwindcss/oxide@4.1.14':
- resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==}
- engines: {node: '>= 10'}
-
- '@tailwindcss/vite@4.1.14':
- resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==}
- peerDependencies:
- vite: ^5.2.0 || ^6 || ^7
-
- '@types/babel__core@7.20.5':
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
-
- '@types/babel__generator@7.27.0':
- resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
-
- '@types/babel__template@7.4.4':
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
-
- '@types/babel__traverse@7.28.0':
- resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
-
- '@types/body-parser@1.19.6':
- resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
-
- '@types/connect@3.4.38':
- resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@types/express-serve-static-core@4.19.6':
- resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==}
-
- '@types/express@4.17.21':
- resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
-
- '@types/http-errors@2.0.5':
- resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
-
- '@types/mime@1.3.5':
- resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
-
- '@types/node@24.7.0':
- resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==}
-
- '@types/qs@6.14.0':
- resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
-
- '@types/range-parser@1.2.7':
- resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
-
- '@types/react-dom@19.2.1':
- resolution: {integrity: sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==}
- peerDependencies:
- '@types/react': ^19.2.0
-
- '@types/react@19.2.1':
- resolution: {integrity: sha512-1U5NQWh/GylZQ50ZMnnPjkYHEaGhg6t5i/KI0LDDh3t4E3h3T3vzm+GLY2BRzMfIjSBwzm6tginoZl5z0O/qsA==}
-
- '@types/send@0.17.5':
- resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
-
- '@types/send@1.2.0':
- resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==}
-
- '@types/serve-static@1.15.9':
- resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==}
-
- '@vitejs/plugin-react@5.0.4':
- resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
-
- accepts@1.3.8:
- resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
- engines: {node: '>= 0.6'}
-
- array-flatten@1.1.1:
- resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
-
- baseline-browser-mapping@2.8.13:
- resolution: {integrity: sha512-7s16KR8io8nIBWQyCYhmFhd+ebIzb9VKTzki+wOJXHTxTnV6+mFGH3+Jwn1zoKaY9/H9T/0BcKCZnzXljPnpSQ==}
- hasBin: true
-
- body-parser@1.20.3:
- resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
- browserslist@4.26.3:
- resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
- engines: {node: '>= 0.8'}
-
- call-bind-apply-helpers@1.0.2:
- resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
- engines: {node: '>= 0.4'}
-
- call-bound@1.0.4:
- resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
- engines: {node: '>= 0.4'}
-
- caniuse-lite@1.0.30001748:
- resolution: {integrity: sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==}
-
- chownr@3.0.0:
- resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
- engines: {node: '>=18'}
-
- class-variance-authority@0.7.1:
- resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
-
- clsx@2.1.1:
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
- engines: {node: '>=6'}
-
- content-disposition@0.5.4:
- resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
- engines: {node: '>= 0.6'}
-
- content-type@1.0.5:
- resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
- engines: {node: '>= 0.6'}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- cookie-signature@1.0.6:
- resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
-
- cookie@0.7.1:
- resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
- engines: {node: '>= 0.6'}
-
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
- debug@2.6.9:
- resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- depd@2.0.0:
- resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
- engines: {node: '>= 0.8'}
-
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
- detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
-
- dunder-proto@1.0.1:
- resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
- engines: {node: '>= 0.4'}
-
- ee-first@1.1.1:
- resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
- electron-to-chromium@1.5.232:
- resolution: {integrity: sha512-ENirSe7wf8WzyPCibqKUG1Cg43cPaxH4wRR7AJsX7MCABCHBIOFqvaYODSLKUuZdraxUTHRE/0A2Aq8BYKEHOg==}
-
- encodeurl@1.0.2:
- resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
- engines: {node: '>= 0.8'}
-
- encodeurl@2.0.0:
- resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
- engines: {node: '>= 0.8'}
-
- enhanced-resolve@5.18.3:
- resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
- engines: {node: '>=10.13.0'}
-
- es-define-property@1.0.1:
- resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
- engines: {node: '>= 0.4'}
-
- es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
-
- es-object-atoms@1.1.1:
- resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
- engines: {node: '>= 0.4'}
-
- esbuild@0.25.10:
- resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
- engines: {node: '>=18'}
- hasBin: true
-
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
-
- escape-html@1.0.3:
- resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
- estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
- etag@1.8.1:
- resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
- engines: {node: '>= 0.6'}
-
- express@4.21.2:
- resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
- engines: {node: '>= 0.10.0'}
-
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- finalhandler@1.3.1:
- resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
- engines: {node: '>= 0.8'}
-
- forwarded@0.2.0:
- resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
- engines: {node: '>= 0.6'}
-
- fresh@0.5.2:
- resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
- engines: {node: '>= 0.6'}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
- engines: {node: '>= 0.4'}
-
- get-proto@1.0.1:
- resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
- engines: {node: '>= 0.4'}
-
- get-tsconfig@4.12.0:
- resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==}
-
- gopd@1.2.0:
- resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
- engines: {node: '>= 0.4'}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- has-symbols@1.1.0:
- resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
- engines: {node: '>= 0.4'}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- http-errors@2.0.0:
- resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
- engines: {node: '>= 0.8'}
-
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- ipaddr.js@1.9.1:
- resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
- engines: {node: '>= 0.10'}
-
- jiti@2.6.1:
- resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
- hasBin: true
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- lightningcss-darwin-arm64@1.30.1:
- resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- lightningcss-darwin-x64@1.30.1:
- resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [darwin]
-
- lightningcss-freebsd-x64@1.30.1:
- resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- lightningcss-linux-arm-gnueabihf@1.30.1:
- resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
-
- lightningcss-linux-arm64-gnu@1.30.1:
- resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
-
- lightningcss-linux-arm64-musl@1.30.1:
- resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
-
- lightningcss-linux-x64-gnu@1.30.1:
- resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
-
- lightningcss-linux-x64-musl@1.30.1:
- resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
-
- lightningcss-win32-arm64-msvc@1.30.1:
- resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
-
- lightningcss-win32-x64-msvc@1.30.1:
- resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [win32]
-
- lightningcss@1.30.1:
- resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
- engines: {node: '>= 12.0.0'}
-
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
- lucide-react@0.453.0:
- resolution: {integrity: sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==}
- peerDependencies:
- react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
-
- magic-string@0.30.19:
- resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
-
- math-intrinsics@1.1.0:
- resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
- engines: {node: '>= 0.4'}
-
- media-typer@0.3.0:
- resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
- engines: {node: '>= 0.6'}
-
- merge-descriptors@1.0.3:
- resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
-
- methods@1.1.2:
- resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
- engines: {node: '>= 0.6'}
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
-
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minizlib@3.1.0:
- resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
- engines: {node: '>= 18'}
-
- mitt@3.0.1:
- resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
-
- ms@2.0.0:
- resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- negotiator@0.6.3:
- resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
- engines: {node: '>= 0.6'}
-
- node-releases@2.0.23:
- resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==}
-
- object-inspect@1.13.4:
- resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
- engines: {node: '>= 0.4'}
-
- on-finished@2.4.1:
- resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
- engines: {node: '>= 0.8'}
-
- parseurl@1.3.3:
- resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
- engines: {node: '>= 0.8'}
-
- path-to-regexp@0.1.12:
- resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
- engines: {node: '>=12'}
-
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
- engines: {node: ^10 || ^12 || >=14}
-
- prettier@3.6.2:
- resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
- engines: {node: '>=14'}
- hasBin: true
-
- proxy-addr@2.0.7:
- resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
- engines: {node: '>= 0.10'}
-
- qs@6.13.0:
- resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
- engines: {node: '>=0.6'}
-
- range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
-
- raw-body@2.5.2:
- resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
- engines: {node: '>= 0.8'}
-
- react-dom@19.2.1:
- resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==}
- peerDependencies:
- react: ^19.2.1
-
- react-refresh@0.17.0:
- resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
- engines: {node: '>=0.10.0'}
-
- react@19.2.1:
- resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==}
- engines: {node: '>=0.10.0'}
-
- regexparam@3.0.0:
- resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==}
- engines: {node: '>=8'}
-
- resolve-pkg-maps@1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
- rollup@4.52.4:
- resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- scheduler@0.27.0:
- resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
-
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
-
- send@0.19.0:
- resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
- engines: {node: '>= 0.8.0'}
-
- serve-static@1.16.2:
- resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
- engines: {node: '>= 0.8.0'}
-
- setprototypeof@1.2.0:
- resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
- side-channel-list@1.0.0:
- resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
- engines: {node: '>= 0.4'}
-
- side-channel-map@1.0.1:
- resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
- engines: {node: '>= 0.4'}
-
- side-channel-weakmap@1.0.2:
- resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
- engines: {node: '>= 0.4'}
-
- side-channel@1.1.0:
- resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
- engines: {node: '>= 0.4'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- statuses@2.0.1:
- resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
- engines: {node: '>= 0.8'}
-
- tailwind-merge@3.3.1:
- resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
-
- tailwindcss@4.1.14:
- resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==}
-
- tapable@2.3.0:
- resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
- engines: {node: '>=6'}
-
- tar@7.5.1:
- resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
- engines: {node: '>=18'}
- deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
-
- tinyglobby@0.2.15:
- resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
- engines: {node: '>=12.0.0'}
-
- toidentifier@1.0.1:
- resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
- engines: {node: '>=0.6'}
-
- tsx@4.20.6:
- resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==}
- engines: {node: '>=18.0.0'}
- hasBin: true
-
- tw-animate-css@1.4.0:
- resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
-
- type-is@1.6.18:
- resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
- engines: {node: '>= 0.6'}
-
- typescript@5.6.3:
- resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- undici-types@7.14.0:
- resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==}
-
- unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
-
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- use-sync-external-store@1.6.0:
- resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
- utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
-
- vary@1.1.2:
- resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
- engines: {node: '>= 0.8'}
-
- vite@7.1.9:
- resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^20.19.0 || >=22.12.0
- jiti: '>=1.21.0'
- less: ^4.0.0
- lightningcss: ^1.21.0
- sass: ^1.70.0
- sass-embedded: ^1.70.0
- stylus: '>=0.54.8'
- sugarss: ^5.0.0
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- wouter@3.7.1:
- resolution: {integrity: sha512-od5LGmndSUzntZkE2R5CHhoiJ7YMuTIbiXsa0Anytc2RATekgv4sfWRAxLEULBrp7ADzinWQw8g470lkT8+fOw==}
- peerDependencies:
- react: '>=16.8.0'
-
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
- yallist@5.0.0:
- resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
- engines: {node: '>=18'}
-
-snapshots:
-
- '@babel/code-frame@7.27.1':
- dependencies:
- '@babel/helper-validator-identifier': 7.27.1
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/compat-data@7.28.4': {}
-
- '@babel/core@7.28.4':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
- '@babel/helpers': 7.28.4
- '@babel/parser': 7.28.4
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/generator@7.28.3':
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
-
- '@babel/helper-compilation-targets@7.27.2':
- dependencies:
- '@babel/compat-data': 7.28.4
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.26.3
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-globals@7.28.0': {}
-
- '@babel/helper-module-imports@7.27.1':
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-plugin-utils@7.27.1': {}
-
- '@babel/helper-string-parser@7.27.1': {}
-
- '@babel/helper-validator-identifier@7.27.1': {}
-
- '@babel/helper-validator-option@7.27.1': {}
-
- '@babel/helpers@7.28.4':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
-
- '@babel/parser@7.28.4':
- dependencies:
- '@babel/types': 7.28.4
-
- '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/template@7.27.2':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
-
- '@babel/traverse@7.28.4':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.4
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.28.4':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
- '@builder.io/jsx-loc-internals@0.0.1':
- dependencies:
- '@babel/parser': 7.28.4
- estree-walker: 2.0.2
- magic-string: 0.30.19
-
- '@builder.io/vite-plugin-jsx-loc@0.1.1(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))':
- dependencies:
- '@builder.io/jsx-loc-internals': 0.0.1
- vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)
-
- '@esbuild/aix-ppc64@0.25.10':
- optional: true
-
- '@esbuild/android-arm64@0.25.10':
- optional: true
-
- '@esbuild/android-arm@0.25.10':
- optional: true
-
- '@esbuild/android-x64@0.25.10':
- optional: true
-
- '@esbuild/darwin-arm64@0.25.10':
- optional: true
-
- '@esbuild/darwin-x64@0.25.10':
- optional: true
-
- '@esbuild/freebsd-arm64@0.25.10':
- optional: true
-
- '@esbuild/freebsd-x64@0.25.10':
- optional: true
-
- '@esbuild/linux-arm64@0.25.10':
- optional: true
-
- '@esbuild/linux-arm@0.25.10':
- optional: true
-
- '@esbuild/linux-ia32@0.25.10':
- optional: true
-
- '@esbuild/linux-loong64@0.25.10':
- optional: true
-
- '@esbuild/linux-mips64el@0.25.10':
- optional: true
-
- '@esbuild/linux-ppc64@0.25.10':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.10':
- optional: true
-
- '@esbuild/linux-s390x@0.25.10':
- optional: true
-
- '@esbuild/linux-x64@0.25.10':
- optional: true
-
- '@esbuild/netbsd-arm64@0.25.10':
- optional: true
-
- '@esbuild/netbsd-x64@0.25.10':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.10':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.10':
- optional: true
-
- '@esbuild/openharmony-arm64@0.25.10':
- optional: true
-
- '@esbuild/sunos-x64@0.25.10':
- optional: true
-
- '@esbuild/win32-arm64@0.25.10':
- optional: true
-
- '@esbuild/win32-ia32@0.25.10':
- optional: true
-
- '@esbuild/win32-x64@0.25.10':
- optional: true
-
- '@isaacs/fs-minipass@4.0.1':
- dependencies:
- minipass: 7.1.2
-
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/remapping@2.3.5':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
-
- '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.1)(react@19.2.1)':
- dependencies:
- react: 19.2.1
- optionalDependencies:
- '@types/react': 19.2.1
-
- '@radix-ui/react-slot@1.2.3(@types/react@19.2.1)(react@19.2.1)':
- dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.1)(react@19.2.1)
- react: 19.2.1
- optionalDependencies:
- '@types/react': 19.2.1
-
- '@rolldown/pluginutils@1.0.0-beta.38': {}
-
- '@rollup/rollup-android-arm-eabi@4.52.4':
- optional: true
-
- '@rollup/rollup-android-arm64@4.52.4':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.52.4':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.52.4':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.52.4':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-loong64-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-ppc64-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.52.4':
- optional: true
-
- '@rollup/rollup-openharmony-arm64@4.52.4':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.52.4':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.52.4':
- optional: true
-
- '@rollup/rollup-win32-x64-gnu@4.52.4':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.52.4':
- optional: true
-
- '@tailwindcss/node@4.1.14':
- dependencies:
- '@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.18.3
- jiti: 2.6.1
- lightningcss: 1.30.1
- magic-string: 0.30.19
- source-map-js: 1.2.1
- tailwindcss: 4.1.14
-
- '@tailwindcss/oxide-android-arm64@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-darwin-arm64@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-darwin-x64@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-freebsd-x64@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-linux-arm64-musl@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-linux-x64-gnu@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-linux-x64-musl@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-wasm32-wasi@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
- optional: true
-
- '@tailwindcss/oxide-win32-x64-msvc@4.1.14':
- optional: true
-
- '@tailwindcss/oxide@4.1.14':
- dependencies:
- detect-libc: 2.1.2
- tar: 7.5.1
- optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.1.14
- '@tailwindcss/oxide-darwin-arm64': 4.1.14
- '@tailwindcss/oxide-darwin-x64': 4.1.14
- '@tailwindcss/oxide-freebsd-x64': 4.1.14
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14
- '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14
- '@tailwindcss/oxide-linux-arm64-musl': 4.1.14
- '@tailwindcss/oxide-linux-x64-gnu': 4.1.14
- '@tailwindcss/oxide-linux-x64-musl': 4.1.14
- '@tailwindcss/oxide-wasm32-wasi': 4.1.14
- '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14
- '@tailwindcss/oxide-win32-x64-msvc': 4.1.14
-
- '@tailwindcss/vite@4.1.14(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))':
- dependencies:
- '@tailwindcss/node': 4.1.14
- '@tailwindcss/oxide': 4.1.14
- tailwindcss: 4.1.14
- vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)
-
- '@types/babel__core@7.20.5':
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- '@types/babel__generator': 7.27.0
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.28.0
-
- '@types/babel__generator@7.27.0':
- dependencies:
- '@babel/types': 7.28.4
-
- '@types/babel__template@7.4.4':
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
-
- '@types/babel__traverse@7.28.0':
- dependencies:
- '@babel/types': 7.28.4
-
- '@types/body-parser@1.19.6':
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 24.7.0
-
- '@types/connect@3.4.38':
- dependencies:
- '@types/node': 24.7.0
-
- '@types/estree@1.0.8': {}
-
- '@types/express-serve-static-core@4.19.6':
- dependencies:
- '@types/node': 24.7.0
- '@types/qs': 6.14.0
- '@types/range-parser': 1.2.7
- '@types/send': 1.2.0
-
- '@types/express@4.17.21':
- dependencies:
- '@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 4.19.6
- '@types/qs': 6.14.0
- '@types/serve-static': 1.15.9
-
- '@types/http-errors@2.0.5': {}
-
- '@types/mime@1.3.5': {}
-
- '@types/node@24.7.0':
- dependencies:
- undici-types: 7.14.0
-
- '@types/qs@6.14.0': {}
-
- '@types/range-parser@1.2.7': {}
-
- '@types/react-dom@19.2.1(@types/react@19.2.1)':
- dependencies:
- '@types/react': 19.2.1
-
- '@types/react@19.2.1':
- dependencies:
- csstype: 3.1.3
-
- '@types/send@0.17.5':
- dependencies:
- '@types/mime': 1.3.5
- '@types/node': 24.7.0
-
- '@types/send@1.2.0':
- dependencies:
- '@types/node': 24.7.0
-
- '@types/serve-static@1.15.9':
- dependencies:
- '@types/http-errors': 2.0.5
- '@types/node': 24.7.0
- '@types/send': 0.17.5
-
- '@vitejs/plugin-react@5.0.4(vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6))':
- dependencies:
- '@babel/core': 7.28.4
- '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4)
- '@rolldown/pluginutils': 1.0.0-beta.38
- '@types/babel__core': 7.20.5
- react-refresh: 0.17.0
- vite: 7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6)
- transitivePeerDependencies:
- - supports-color
-
- accepts@1.3.8:
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
-
- array-flatten@1.1.1: {}
-
- baseline-browser-mapping@2.8.13: {}
-
- body-parser@1.20.3:
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.13.0
- raw-body: 2.5.2
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
- browserslist@4.26.3:
- dependencies:
- baseline-browser-mapping: 2.8.13
- caniuse-lite: 1.0.30001748
- electron-to-chromium: 1.5.232
- node-releases: 2.0.23
- update-browserslist-db: 1.1.3(browserslist@4.26.3)
-
- bytes@3.1.2: {}
-
- call-bind-apply-helpers@1.0.2:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
-
- call-bound@1.0.4:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
-
- caniuse-lite@1.0.30001748: {}
-
- chownr@3.0.0: {}
-
- class-variance-authority@0.7.1:
- dependencies:
- clsx: 2.1.1
-
- clsx@2.1.1: {}
-
- content-disposition@0.5.4:
- dependencies:
- safe-buffer: 5.2.1
-
- content-type@1.0.5: {}
-
- convert-source-map@2.0.0: {}
-
- cookie-signature@1.0.6: {}
-
- cookie@0.7.1: {}
-
- csstype@3.1.3: {}
-
- debug@2.6.9:
- dependencies:
- ms: 2.0.0
-
- debug@4.4.3:
- dependencies:
- ms: 2.1.3
-
- depd@2.0.0: {}
-
- destroy@1.2.0: {}
-
- detect-libc@2.1.2: {}
-
- dunder-proto@1.0.1:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
-
- ee-first@1.1.1: {}
-
- electron-to-chromium@1.5.232: {}
-
- encodeurl@1.0.2: {}
-
- encodeurl@2.0.0: {}
-
- enhanced-resolve@5.18.3:
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.3.0
-
- es-define-property@1.0.1: {}
-
- es-errors@1.3.0: {}
-
- es-object-atoms@1.1.1:
- dependencies:
- es-errors: 1.3.0
-
- esbuild@0.25.10:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.10
- '@esbuild/android-arm': 0.25.10
- '@esbuild/android-arm64': 0.25.10
- '@esbuild/android-x64': 0.25.10
- '@esbuild/darwin-arm64': 0.25.10
- '@esbuild/darwin-x64': 0.25.10
- '@esbuild/freebsd-arm64': 0.25.10
- '@esbuild/freebsd-x64': 0.25.10
- '@esbuild/linux-arm': 0.25.10
- '@esbuild/linux-arm64': 0.25.10
- '@esbuild/linux-ia32': 0.25.10
- '@esbuild/linux-loong64': 0.25.10
- '@esbuild/linux-mips64el': 0.25.10
- '@esbuild/linux-ppc64': 0.25.10
- '@esbuild/linux-riscv64': 0.25.10
- '@esbuild/linux-s390x': 0.25.10
- '@esbuild/linux-x64': 0.25.10
- '@esbuild/netbsd-arm64': 0.25.10
- '@esbuild/netbsd-x64': 0.25.10
- '@esbuild/openbsd-arm64': 0.25.10
- '@esbuild/openbsd-x64': 0.25.10
- '@esbuild/openharmony-arm64': 0.25.10
- '@esbuild/sunos-x64': 0.25.10
- '@esbuild/win32-arm64': 0.25.10
- '@esbuild/win32-ia32': 0.25.10
- '@esbuild/win32-x64': 0.25.10
-
- escalade@3.2.0: {}
-
- escape-html@1.0.3: {}
-
- estree-walker@2.0.2: {}
-
- etag@1.8.1: {}
-
- express@4.21.2:
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.3
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.7.1
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.3.1
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.3
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.12
- proxy-addr: 2.0.7
- qs: 6.13.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.19.0
- serve-static: 1.16.2
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
-
- fdir@6.5.0(picomatch@4.0.3):
- optionalDependencies:
- picomatch: 4.0.3
-
- finalhandler@1.3.1:
- dependencies:
- debug: 2.6.9
- encodeurl: 2.0.0
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.1
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
- forwarded@0.2.0: {}
-
- fresh@0.5.2: {}
-
- fsevents@2.3.3:
- optional: true
-
- function-bind@1.1.2: {}
-
- gensync@1.0.0-beta.2: {}
-
- get-intrinsic@1.3.0:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- function-bind: 1.1.2
- get-proto: 1.0.1
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
-
- get-proto@1.0.1:
- dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
-
- get-tsconfig@4.12.0:
- dependencies:
- resolve-pkg-maps: 1.0.0
- optional: true
-
- gopd@1.2.0: {}
-
- graceful-fs@4.2.11: {}
-
- has-symbols@1.1.0: {}
-
- hasown@2.0.2:
- dependencies:
- function-bind: 1.1.2
-
- http-errors@2.0.0:
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
-
- iconv-lite@0.4.24:
- dependencies:
- safer-buffer: 2.1.2
-
- inherits@2.0.4: {}
-
- ipaddr.js@1.9.1: {}
-
- jiti@2.6.1: {}
-
- js-tokens@4.0.0: {}
-
- jsesc@3.1.0: {}
-
- json5@2.2.3: {}
-
- lightningcss-darwin-arm64@1.30.1:
- optional: true
-
- lightningcss-darwin-x64@1.30.1:
- optional: true
-
- lightningcss-freebsd-x64@1.30.1:
- optional: true
-
- lightningcss-linux-arm-gnueabihf@1.30.1:
- optional: true
-
- lightningcss-linux-arm64-gnu@1.30.1:
- optional: true
-
- lightningcss-linux-arm64-musl@1.30.1:
- optional: true
-
- lightningcss-linux-x64-gnu@1.30.1:
- optional: true
-
- lightningcss-linux-x64-musl@1.30.1:
- optional: true
-
- lightningcss-win32-arm64-msvc@1.30.1:
- optional: true
-
- lightningcss-win32-x64-msvc@1.30.1:
- optional: true
-
- lightningcss@1.30.1:
- dependencies:
- detect-libc: 2.1.2
- optionalDependencies:
- lightningcss-darwin-arm64: 1.30.1
- lightningcss-darwin-x64: 1.30.1
- lightningcss-freebsd-x64: 1.30.1
- lightningcss-linux-arm-gnueabihf: 1.30.1
- lightningcss-linux-arm64-gnu: 1.30.1
- lightningcss-linux-arm64-musl: 1.30.1
- lightningcss-linux-x64-gnu: 1.30.1
- lightningcss-linux-x64-musl: 1.30.1
- lightningcss-win32-arm64-msvc: 1.30.1
- lightningcss-win32-x64-msvc: 1.30.1
-
- lru-cache@5.1.1:
- dependencies:
- yallist: 3.1.1
-
- lucide-react@0.453.0(react@19.2.1):
- dependencies:
- react: 19.2.1
-
- magic-string@0.30.19:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
-
- math-intrinsics@1.1.0: {}
-
- media-typer@0.3.0: {}
-
- merge-descriptors@1.0.3: {}
-
- methods@1.1.2: {}
-
- mime-db@1.52.0: {}
-
- mime-types@2.1.35:
- dependencies:
- mime-db: 1.52.0
-
- mime@1.6.0: {}
-
- minipass@7.1.2: {}
-
- minizlib@3.1.0:
- dependencies:
- minipass: 7.1.2
-
- mitt@3.0.1: {}
-
- ms@2.0.0: {}
-
- ms@2.1.3: {}
-
- nanoid@3.3.11: {}
-
- negotiator@0.6.3: {}
-
- node-releases@2.0.23: {}
-
- object-inspect@1.13.4: {}
-
- on-finished@2.4.1:
- dependencies:
- ee-first: 1.1.1
-
- parseurl@1.3.3: {}
-
- path-to-regexp@0.1.12: {}
-
- picocolors@1.1.1: {}
-
- picomatch@4.0.3: {}
-
- postcss@8.5.6:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- prettier@3.6.2: {}
-
- proxy-addr@2.0.7:
- dependencies:
- forwarded: 0.2.0
- ipaddr.js: 1.9.1
-
- qs@6.13.0:
- dependencies:
- side-channel: 1.1.0
-
- range-parser@1.2.1: {}
-
- raw-body@2.5.2:
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
-
- react-dom@19.2.1(react@19.2.1):
- dependencies:
- react: 19.2.1
- scheduler: 0.27.0
-
- react-refresh@0.17.0: {}
-
- react@19.2.1: {}
-
- regexparam@3.0.0: {}
-
- resolve-pkg-maps@1.0.0:
- optional: true
-
- rollup@4.52.4:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.52.4
- '@rollup/rollup-android-arm64': 4.52.4
- '@rollup/rollup-darwin-arm64': 4.52.4
- '@rollup/rollup-darwin-x64': 4.52.4
- '@rollup/rollup-freebsd-arm64': 4.52.4
- '@rollup/rollup-freebsd-x64': 4.52.4
- '@rollup/rollup-linux-arm-gnueabihf': 4.52.4
- '@rollup/rollup-linux-arm-musleabihf': 4.52.4
- '@rollup/rollup-linux-arm64-gnu': 4.52.4
- '@rollup/rollup-linux-arm64-musl': 4.52.4
- '@rollup/rollup-linux-loong64-gnu': 4.52.4
- '@rollup/rollup-linux-ppc64-gnu': 4.52.4
- '@rollup/rollup-linux-riscv64-gnu': 4.52.4
- '@rollup/rollup-linux-riscv64-musl': 4.52.4
- '@rollup/rollup-linux-s390x-gnu': 4.52.4
- '@rollup/rollup-linux-x64-gnu': 4.52.4
- '@rollup/rollup-linux-x64-musl': 4.52.4
- '@rollup/rollup-openharmony-arm64': 4.52.4
- '@rollup/rollup-win32-arm64-msvc': 4.52.4
- '@rollup/rollup-win32-ia32-msvc': 4.52.4
- '@rollup/rollup-win32-x64-gnu': 4.52.4
- '@rollup/rollup-win32-x64-msvc': 4.52.4
- fsevents: 2.3.3
-
- safe-buffer@5.2.1: {}
-
- safer-buffer@2.1.2: {}
-
- scheduler@0.27.0: {}
-
- semver@6.3.1: {}
-
- send@0.19.0:
- dependencies:
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 0.5.2
- http-errors: 2.0.0
- mime: 1.6.0
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.1
- transitivePeerDependencies:
- - supports-color
-
- serve-static@1.16.2:
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.19.0
- transitivePeerDependencies:
- - supports-color
-
- setprototypeof@1.2.0: {}
-
- side-channel-list@1.0.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-map@1.0.1:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-weakmap@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
- side-channel-map: 1.0.1
-
- side-channel@1.1.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
- side-channel-list: 1.0.0
- side-channel-map: 1.0.1
- side-channel-weakmap: 1.0.2
-
- source-map-js@1.2.1: {}
-
- statuses@2.0.1: {}
-
- tailwind-merge@3.3.1: {}
-
- tailwindcss@4.1.14: {}
-
- tapable@2.3.0: {}
-
- tar@7.5.1:
- dependencies:
- '@isaacs/fs-minipass': 4.0.1
- chownr: 3.0.0
- minipass: 7.1.2
- minizlib: 3.1.0
- yallist: 5.0.0
-
- tinyglobby@0.2.15:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
-
- toidentifier@1.0.1: {}
-
- tsx@4.20.6:
- dependencies:
- esbuild: 0.25.10
- get-tsconfig: 4.12.0
- optionalDependencies:
- fsevents: 2.3.3
- optional: true
-
- tw-animate-css@1.4.0: {}
-
- type-is@1.6.18:
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
-
- typescript@5.6.3: {}
-
- undici-types@7.14.0: {}
-
- unpipe@1.0.0: {}
-
- update-browserslist-db@1.1.3(browserslist@4.26.3):
- dependencies:
- browserslist: 4.26.3
- escalade: 3.2.0
- picocolors: 1.1.1
-
- use-sync-external-store@1.6.0(react@19.2.1):
- dependencies:
- react: 19.2.1
-
- utils-merge@1.0.1: {}
-
- vary@1.1.2: {}
-
- vite@7.1.9(@types/node@24.7.0)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.20.6):
- dependencies:
- esbuild: 0.25.10
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.6
- rollup: 4.52.4
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 24.7.0
- fsevents: 2.3.3
- jiti: 2.6.1
- lightningcss: 1.30.1
- tsx: 4.20.6
-
- wouter@3.7.1(patch_hash=4e16e6ff3fde7d6c1024d3e0c8605dc9eb6afb690d0d49958c2f449091813072)(react@19.2.1):
- dependencies:
- mitt: 3.0.1
- react: 19.2.1
- regexparam: 3.0.0
- use-sync-external-store: 1.6.0(react@19.2.1)
-
- yallist@3.1.1: {}
-
- yallist@5.0.0: {}
diff --git a/docs/public/_redirects b/docs/public/_redirects
new file mode 100644
index 00000000..8275d6ac
--- /dev/null
+++ b/docs/public/_redirects
@@ -0,0 +1 @@
+/blog/* /blog/index.html 200
diff --git a/docs/client/public/optiprune-animation.svg b/docs/public/assets/optiprune-animation.svg
similarity index 100%
rename from docs/client/public/optiprune-animation.svg
rename to docs/public/assets/optiprune-animation.svg
diff --git a/docs/client/public/optiprune-logo.svg b/docs/public/assets/optiprune-logo.svg
similarity index 100%
rename from docs/client/public/optiprune-logo.svg
rename to docs/public/assets/optiprune-logo.svg
diff --git a/docs/public/plugins.json b/docs/public/plugins.json
new file mode 100644
index 00000000..bafd3386
--- /dev/null
+++ b/docs/public/plugins.json
@@ -0,0 +1,1143 @@
+[
+ {
+ "name": "angular-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Angular conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/angular-plugin.ts"
+ },
+ {
+ "name": "astro-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Astro conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/astro-plugin.ts"
+ },
+ {
+ "name": "ava-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Ava conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/ava-plugin.ts"
+ },
+ {
+ "name": "babel-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Babel conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/babel-plugin.ts"
+ },
+ {
+ "name": "biome-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Biome conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/biome-plugin.ts"
+ },
+ {
+ "name": "bumpp-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Bumpp conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/bumpp-plugin.ts"
+ },
+ {
+ "name": "bun-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Bun conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/bun-plugin.ts"
+ },
+ {
+ "name": "c8-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for C8 conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/c8-plugin.ts"
+ },
+ {
+ "name": "capacitor-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Capacitor conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/capacitor-plugin.ts"
+ },
+ {
+ "name": "changelogen-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Changelogen conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/changelogen-plugin.ts"
+ },
+ {
+ "name": "changelogithub-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Changelogithub conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/changelogithub-plugin.ts"
+ },
+ {
+ "name": "changesets-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Changesets conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/changesets-plugin.ts"
+ },
+ {
+ "name": "commitlint-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Commitlint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/commitlint-plugin.ts"
+ },
+ {
+ "name": "commitzen-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Commitzen conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/commitzen-plugin.ts"
+ },
+ {
+ "name": "convex-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Convex conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/convex-plugin.ts"
+ },
+ {
+ "name": "cross-env-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Cross Env conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/cross-env-plugin.ts"
+ },
+ {
+ "name": "cspell-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Cspell conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/cspell-plugin.ts"
+ },
+ {
+ "name": "cucumber-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Cucumber conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/cucumber-plugin.ts"
+ },
+ {
+ "name": "cypress-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Cypress conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/cypress-plugin.ts"
+ },
+ {
+ "name": "dependency-cruiser-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Dependency Cruiser conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/dependency-cruiser-plugin.ts"
+ },
+ {
+ "name": "docker-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Docker conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/docker-plugin.ts"
+ },
+ {
+ "name": "docusaurus-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Docusaurus conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/docusaurus-plugin.ts"
+ },
+ {
+ "name": "dotenv-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Dotenv conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/dotenv-plugin.ts"
+ },
+ {
+ "name": "drizzle-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Drizzle conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/drizzle-plugin.ts"
+ },
+ {
+ "name": "eleventy-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Eleventy conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/eleventy-plugin.ts"
+ },
+ {
+ "name": "esbuild-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Esbuild conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/esbuild-plugin.ts"
+ },
+ {
+ "name": "eslint-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Eslint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/eslint-plugin.ts"
+ },
+ {
+ "name": "execa-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Execa conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/execa-plugin.ts"
+ },
+ {
+ "name": "expo-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Expo conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/expo-plugin.ts"
+ },
+ {
+ "name": "express-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Express conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/express-plugin.ts"
+ },
+ {
+ "name": "expressive-code-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Expressive Code conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/expressive-code-plugin.ts"
+ },
+ {
+ "name": "fast-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Fast conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/fast-plugin.ts"
+ },
+ {
+ "name": "fastify-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Fastify conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/fastify-plugin.ts"
+ },
+ {
+ "name": "fumadocs-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Fumadocs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/fumadocs-plugin.ts"
+ },
+ {
+ "name": "gatsby-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Gatsby conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/gatsby-plugin.ts"
+ },
+ {
+ "name": "github-actions-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Github Actions conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/github-actions-plugin.ts"
+ },
+ {
+ "name": "graphql-codegen-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Graphql Codegen conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/graphql-codegen-plugin.ts"
+ },
+ {
+ "name": "graphql-runtime-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Graphql Runtime conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/graphql-runtime-plugin.ts"
+ },
+ {
+ "name": "hardhat-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Hardhat conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/hardhat-plugin.ts"
+ },
+ {
+ "name": "hono-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Hono conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/hono-plugin.ts"
+ },
+ {
+ "name": "husky-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Husky conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/husky-plugin.ts"
+ },
+ {
+ "name": "i18next-parser-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for I18next Parser conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/i18next-parser-plugin.ts"
+ },
+ {
+ "name": "jest-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Jest conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/jest-plugin.ts"
+ },
+ {
+ "name": "jetbrains-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Jetbrains conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/jetbrains-plugin.ts"
+ },
+ {
+ "name": "karma-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Karma conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/karma-plugin.ts"
+ },
+ {
+ "name": "knex-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Knex conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/knex-plugin.ts"
+ },
+ {
+ "name": "knip-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Knip conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/knip-plugin.ts"
+ },
+ {
+ "name": "ladle-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Ladle conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/ladle-plugin.ts"
+ },
+ {
+ "name": "langchainjs-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Langchainjs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/langchainjs-plugin.ts"
+ },
+ {
+ "name": "lefthook-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Lefthook conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/lefthook-plugin.ts"
+ },
+ {
+ "name": "lint-html-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Lint Html conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/lint-html-plugin.ts"
+ },
+ {
+ "name": "lint-staged-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Lint Staged conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/lint-staged-plugin.ts"
+ },
+ {
+ "name": "lit-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Lit conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/lit-plugin.ts"
+ },
+ {
+ "name": "lockfile-lint-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Lockfile Lint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/lockfile-lint-plugin.ts"
+ },
+ {
+ "name": "lost-pixel-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Lost Pixel conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/lost-pixel-plugin.ts"
+ },
+ {
+ "name": "marko-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Marko conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/marko-plugin.ts"
+ },
+ {
+ "name": "mdx-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Mdx conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/mdx-plugin.ts"
+ },
+ {
+ "name": "mdxlint-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Mdxlint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/mdxlint-plugin.ts"
+ },
+ {
+ "name": "metro-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Metro conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/metro-plugin.ts"
+ },
+ {
+ "name": "mocha-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Mocha conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/mocha-plugin.ts"
+ },
+ {
+ "name": "moonrepo-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Moonrepo conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/moonrepo-plugin.ts"
+ },
+ {
+ "name": "msw-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Msw conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/msw-plugin.ts"
+ },
+ {
+ "name": "nestjs-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Nestjs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/nestjs-plugin.ts"
+ },
+ {
+ "name": "netlify-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Netlify conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/netlify-plugin.ts"
+ },
+ {
+ "name": "nextjs-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Nextjs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/nextjs-plugin.ts"
+ },
+ {
+ "name": "nitro-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Nitro conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/nitro-plugin.ts"
+ },
+ {
+ "name": "node-llama-cpp-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Node Llama Cpp conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/node-llama-cpp-plugin.ts"
+ },
+ {
+ "name": "node-types-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Node Types conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/node-types-plugin.ts"
+ },
+ {
+ "name": "npm-package-json-lint-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Npm Package Json Lint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/npm-package-json-lint-plugin.ts"
+ },
+ {
+ "name": "nuxtjs-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Nuxtjs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/nuxtjs-plugin.ts"
+ },
+ {
+ "name": "nx-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Nx conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/nx-plugin.ts"
+ },
+ {
+ "name": "nyc-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Nyc conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/nyc-plugin.ts"
+ },
+ {
+ "name": "object-member-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Object Member conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/object-member-plugin.ts"
+ },
+ {
+ "name": "oclif-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Oclif conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/oclif-plugin.ts"
+ },
+ {
+ "name": "onnxruntime-node-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Onnxruntime Node conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/onnxruntime-node-plugin.ts"
+ },
+ {
+ "name": "openapi-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Openapi conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/openapi-plugin.ts"
+ },
+ {
+ "name": "openclaw-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Openclaw conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/openclaw-plugin.ts"
+ },
+ {
+ "name": "orval-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Orval conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/orval-plugin.ts"
+ },
+ {
+ "name": "oxfmt-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Oxfmt conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/oxfmt-plugin.ts"
+ },
+ {
+ "name": "oxlint-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Oxlint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/oxlint-plugin.ts"
+ },
+ {
+ "name": "package-catalog-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Package Catalog conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/package-catalog-plugin.ts"
+ },
+ {
+ "name": "panda-css-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Panda Css conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/panda-css-plugin.ts"
+ },
+ {
+ "name": "parcel-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Parcel conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/parcel-plugin.ts"
+ },
+ {
+ "name": "payload-cms-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Payload Cms conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/payload-cms-plugin.ts"
+ },
+ {
+ "name": "playwright-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Playwright conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/playwright-plugin.ts"
+ },
+ {
+ "name": "plop-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Plop conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/plop-plugin.ts"
+ },
+ {
+ "name": "pm2-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Pm2 conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/pm2-plugin.ts"
+ },
+ {
+ "name": "pnpm-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Pnpm conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/pnpm-plugin.ts"
+ },
+ {
+ "name": "postcss-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Postcss conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/postcss-plugin.ts"
+ },
+ {
+ "name": "pre-commit-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Pre Commit conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/pre-commit-plugin.ts"
+ },
+ {
+ "name": "preconstruct-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Preconstruct conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/preconstruct-plugin.ts"
+ },
+ {
+ "name": "prettier-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Prettier conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/prettier-plugin.ts"
+ },
+ {
+ "name": "prisma-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Prisma conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/prisma-plugin.ts"
+ },
+ {
+ "name": "quasar-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Quasar conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/quasar-plugin.ts"
+ },
+ {
+ "name": "qwik-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Qwik conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/qwik-plugin.ts"
+ },
+ {
+ "name": "r-tools-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for R Tools conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/r-tools-plugin.ts"
+ },
+ {
+ "name": "raycast-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Raycast conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/raycast-plugin.ts"
+ },
+ {
+ "name": "react-cosmos-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for React Cosmos conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/react-cosmos-plugin.ts"
+ },
+ {
+ "name": "react-email-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for React Email conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/react-email-plugin.ts"
+ },
+ {
+ "name": "react-native-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for React Native conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/react-native-plugin.ts"
+ },
+ {
+ "name": "react-native-router-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for React Native Router conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/react-native-router-plugin.ts"
+ },
+ {
+ "name": "react-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for React conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/react-plugin.ts"
+ },
+ {
+ "name": "release-it-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Release It conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/release-it-plugin.ts"
+ },
+ {
+ "name": "remark-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Remark conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/remark-plugin.ts"
+ },
+ {
+ "name": "remix-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Remix conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/remix-plugin.ts"
+ },
+ {
+ "name": "rolldown-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Rolldown conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/rolldown-plugin.ts"
+ },
+ {
+ "name": "rollup-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Rollup conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/rollup-plugin.ts"
+ },
+ {
+ "name": "rsbuild-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Rsbuild conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/rsbuild-plugin.ts"
+ },
+ {
+ "name": "rslib-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Rslib conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/rslib-plugin.ts"
+ },
+ {
+ "name": "rspack-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Rspack conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/rspack-plugin.ts"
+ },
+ {
+ "name": "rstest-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Rstest conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/rstest-plugin.ts"
+ },
+ {
+ "name": "sanity-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Sanity conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/sanity-plugin.ts"
+ },
+ {
+ "name": "semantic-release-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Semantic Release conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/semantic-release-plugin.ts"
+ },
+ {
+ "name": "sentry-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Sentry conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/sentry-plugin.ts"
+ },
+ {
+ "name": "serverless-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Serverless conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/serverless-plugin.ts"
+ },
+ {
+ "name": "service-worker-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Service Worker conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/service-worker-plugin.ts"
+ },
+ {
+ "name": "simple-git-hooks-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Simple Git Hooks conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/simple-git-hooks-plugin.ts"
+ },
+ {
+ "name": "size-limit-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Size Limit conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/size-limit-plugin.ts"
+ },
+ {
+ "name": "sst-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Sst conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/sst-plugin.ts"
+ },
+ {
+ "name": "storybook-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Storybook conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/storybook-plugin.ts"
+ },
+ {
+ "name": "stryker-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Stryker conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/stryker-plugin.ts"
+ },
+ {
+ "name": "stylelint-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Stylelint conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/stylelint-plugin.ts"
+ },
+ {
+ "name": "svelte-kit-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Svelte Kit conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/svelte-kit-plugin.ts"
+ },
+ {
+ "name": "svelte-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Svelte conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/svelte-plugin.ts"
+ },
+ {
+ "name": "svgo-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Svgo conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/svgo-plugin.ts"
+ },
+ {
+ "name": "svgr-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Svgr conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/svgr-plugin.ts"
+ },
+ {
+ "name": "swc-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Swc conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/swc-plugin.ts"
+ },
+ {
+ "name": "tailwind-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Tailwind conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tailwind-plugin.ts"
+ },
+ {
+ "name": "taskfile-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Taskfile conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/taskfile-plugin.ts"
+ },
+ {
+ "name": "tauri-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Tauri conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tauri-plugin.ts"
+ },
+ {
+ "name": "temporal-io-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Temporal Io conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/temporal-io-plugin.ts"
+ },
+ {
+ "name": "tensorflowjs-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Tensorflowjs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tensorflowjs-plugin.ts"
+ },
+ {
+ "name": "transformersjs-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Transformersjs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/transformersjs-plugin.ts"
+ },
+ {
+ "name": "travis-ci-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Travis Ci conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/travis-ci-plugin.ts"
+ },
+ {
+ "name": "trpc-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Trpc conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/trpc-plugin.ts"
+ },
+ {
+ "name": "ts-node-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Ts Node conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/ts-node-plugin.ts"
+ },
+ {
+ "name": "tsconfig-plus-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Tsconfig Plus conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tsconfig-plus-plugin.ts"
+ },
+ {
+ "name": "tsdown-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Tsdown conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tsdown-plugin.ts"
+ },
+ {
+ "name": "tsup-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Tsup conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tsup-plugin.ts"
+ },
+ {
+ "name": "tsx-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Tsx conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/tsx-plugin.ts"
+ },
+ {
+ "name": "typedoc-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Typedoc conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/typedoc-plugin.ts"
+ },
+ {
+ "name": "typeorm-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Typeorm conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/typeorm-plugin.ts"
+ },
+ {
+ "name": "unbuild-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Unbuild conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/unbuild-plugin.ts"
+ },
+ {
+ "name": "unocss-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Unocss conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/unocss-plugin.ts"
+ },
+ {
+ "name": "unplugin-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Unplugin conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/unplugin-plugin.ts"
+ },
+ {
+ "name": "vercel-ai-sdk-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Vercel Ai Sdk conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vercel-ai-sdk-plugin.ts"
+ },
+ {
+ "name": "vercel-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Vercel conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vercel-plugin.ts"
+ },
+ {
+ "name": "vike-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Vike conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vike-plugin.ts"
+ },
+ {
+ "name": "vite-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Vite conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vite-plugin.ts"
+ },
+ {
+ "name": "vite-specialized-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Vite Specialized conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vite-specialized-plugin.ts"
+ },
+ {
+ "name": "vitepress-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Vitepress conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vitepress-plugin.ts"
+ },
+ {
+ "name": "vitest-plugin",
+ "version": "current",
+ "category": "Testing & QA",
+ "summary": "Project-aware analysis for Vitest conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vitest-plugin.ts"
+ },
+ {
+ "name": "vscode-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Vscode conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vscode-plugin.ts"
+ },
+ {
+ "name": "vuejs-plugin",
+ "version": "current",
+ "category": "Frameworks",
+ "summary": "Project-aware analysis for Vuejs conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/vuejs-plugin.ts"
+ },
+ {
+ "name": "webdriver-io-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Webdriver Io conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/webdriver-io-plugin.ts"
+ },
+ {
+ "name": "webpack-plugin",
+ "version": "current",
+ "category": "Tooling & ecosystem",
+ "summary": "Project-aware analysis for Webpack conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/webpack-plugin.ts"
+ },
+ {
+ "name": "wireit-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Wireit conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/wireit-plugin.ts"
+ },
+ {
+ "name": "worker-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Worker conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/worker-plugin.ts"
+ },
+ {
+ "name": "wrangler-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Wrangler conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/wrangler-plugin.ts"
+ },
+ {
+ "name": "xo-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Xo conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/xo-plugin.ts"
+ },
+ {
+ "name": "yarn-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Yarn conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/yarn-plugin.ts"
+ },
+ {
+ "name": "yarn-pnp-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Yarn Pnp conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/yarn-pnp-plugin.ts"
+ },
+ {
+ "name": "zod-plugin",
+ "version": "current",
+ "category": "Project conventions",
+ "summary": "Project-aware analysis for Zod conventions, configuration, package usage, and reachable source files.",
+ "source": "https://github.com/optiprune/core/blob/main/src/plugins/zod-plugin.ts"
+ }
+]
diff --git a/docs/public/robots.txt b/docs/public/robots.txt
new file mode 100644
index 00000000..fb683e73
--- /dev/null
+++ b/docs/public/robots.txt
@@ -0,0 +1,3 @@
+User-agent: *
+Allow: /
+Sitemap: https://opti.drml.int.yt/sitemap.xml
diff --git a/docs/public/site.js b/docs/public/site.js
new file mode 100644
index 00000000..254cf34b
--- /dev/null
+++ b/docs/public/site.js
@@ -0,0 +1,179 @@
+const app = document.querySelector("#app");
+const esc = (s = "") =>
+ String(s).replace(
+ /[&<>"']/g,
+ (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c],
+ );
+const safeHtml = (s) => {
+ const t = document.createElement("template");
+ t.innerHTML = s;
+ t.content.querySelectorAll("script,iframe,object,embed,style,form").forEach((n) => n.remove());
+ t.content.querySelectorAll("*").forEach((n) =>
+ [...n.attributes].forEach((a) => {
+ if (
+ /^on/i.test(a.name) ||
+ ((a.name === "href" || a.name === "src") && /^javascript:/i.test(a.value))
+ )
+ n.removeAttribute(a.name);
+ }),
+ );
+ return t.innerHTML;
+};
+const md = (s = "") => {
+ if (/^\s* {
+ if (/^```/.test(block)) return `${esc(block.replace(/^```\w*\n?|```$/g, ""))} `;
+ if (/^#{1,3}\s/.test(block)) {
+ const m = block.match(/^(#{1,3})\s+(.+)/);
+ return `${inline(m[2])} `;
+ }
+ if (/^>/.test(block))
+ return `${inline(block.replace(/^>\s?/gm, ""))} `;
+ if (/^[-*]\s/.test(block))
+ return `${block
+ .split("\n")
+ .map((x) => `${inline(x.replace(/^[-*]\s/, ""))} `)
+ .join("")} `;
+ return `${inline(block.replace(/\n/g, " "))}
`;
+ })
+ .join("");
+};
+const inline = (s) =>
+ s
+ .replace(/`([^`]+)`/g, "$1")
+ .replace(/\*\*([^*]+)\*\*/g, "$1 ")
+ .replace(
+ /\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g,
+ '$1 ',
+ );
+const layout = (content, kicker, title, lede = "") =>
+ `${kicker}
${title} ${lede ? `
${lede}
` : ""}
${content}
`;
+const home = () =>
+ `A static Code Analyzer
Stop guessing.Start proving. OptiPrune builds a dependency graph from your real entry points and shows what is never reached — files, imports, exports, packages, and logic.
npm install --save-dev @optiprune/cli · inspect first, fix deliberately
Why OptiPrune
Understand your codebase. Designed for safe cleanup: inspect the graph, review confidence, then remove only what your codebase can prove is unreachable.
01 / GRAPH Reachability, not heuristics Entry points create a real module graph instead of relying on naming guesses or arbitrary percentages.
02 / CONTEXT Context-aware findings Dynamic dispatch, test conventions, generated files, and package metadata stay visible in the analysis.
03 / CONTROL Dry-run first Every fix is explicit. Preview changes, use confidence gates, and keep a clean audit trail in CI.
A small proof
Scan. Verify. Prune. $ npx @optiprune/cli analyze
✖ [high] src/legacy/orphan.ts — unreachable-file
⚠ [medium] src/legacy/index.ts — unused-export: legacyFn
Analysis complete · review findings before applying fixes
`;
+const docs = () =>
+ layout(
+ `Install OptiPrune is a headless analyzer for TypeScript and JavaScript workspaces. Use the CLI for a quick scan or import Core when you need programmatic control.
npm install --save-dev @optiprune/cli
+npm install @optiprune/core Run from the workspace root:
npx optiprune ./src --entry src/index.ts --dry-run A predictable workflow Start with a dry run, inspect high-confidence findings, then widen the scope. OptiPrune keeps analysis and mutation separate so a CI check cannot silently rewrite your repository.
1 Discover Declare entry points and let the graph reveal reachable modules.
2 Review Use high, medium, and low confidence as a review queue.
3 Fix Apply only approved changes with a reproducible command.
Configuration Keep configuration close to the project. Plugin overrides let you force-enable a detector or disable one that does not match your runtime conventions.
{
+ "entry": ["src/index.ts"],
+ "plugins": { "nextjs-plugin": true, "nestjs-plugin": false },
+ "failOn": "high"
+} Plugins Plugins add framework, test-runner, and tooling conventions to the graph. Browse the full inventory on the Plugins page , including source links and lifecycle hooks.
Guides and reference For CI, use JSON or SARIF reporters. For monorepos, define workspace boundaries explicitly. For custom integrations, import the headless Core API and keep file mutation behind your own approval step.
`,
+ "Documentation / Core + CLI",
+ "A clear path from first scan to safe cleanup.",
+ "No empty “go here” pages: the essentials, commands, configuration model, plugin behavior, and next steps live together.",
+ );
+async function pluginsPage() {
+ const data = await fetch("/plugins.json")
+ .then((r) => r.json())
+ .catch(() => []);
+ return layout(
+ `All categories ${[
+ ...new Set(data.map((x) => x.category)),
+ ]
+ .sort()
+ .map((x) => `${esc(x)} `)
+ .join(
+ "",
+ )}
${data.length} plugins shipped from the current Core source tree.
${data.map(pluginCard).join("")}
`,
+ "Ecosystem / Plugin registry",
+ "Plugins that understand your stack.",
+ "Frameworks, test runners, build tools, and project conventions — documented with source links instead of vague promises.",
+ );
+}
+const pluginCard = (p) =>
+ `${esc(p.category)} v${esc(p.version || "1.0.0")} ${esc(p.name)} ${esc(p.summary || "Framework-aware reachability support for this tool.")}
View source ↗ `;
+async function blogPage() {
+ const posts = await fetch("/api/blog")
+ .then((r) => (r.ok ? r.json() : []))
+ .catch(() => []);
+ return layout(
+ posts.length
+ ? ``
+ : `No Posts are here yet
`,
+ "Journal / Updates",
+ "The OptiPrune blog.",
+ "Release notes, architecture notes, and practical cleanup patterns.",
+ );
+}
+async function blogDetail(id) {
+ const p = await fetch("/api/blog/" + encodeURIComponent(id))
+ .then((r) => (r.ok ? r.json() : null))
+ .catch(() => null);
+ if (!p)
+ return layout(
+ 'This post could not be found.
',
+ "Blog / 404",
+ "Post not found.",
+ );
+ return layout(
+ `${new Date(p.published_at || p.created_at).toLocaleDateString()} · ${esc(p.category || "Engineering")}
${md(p.body || p.content || "")}
`,
+ "Blog / " + esc(p.category || "Update"),
+ esc(p.title),
+ esc(p.excerpt || ""),
+ );
+}
+async function show() {
+ const path = location.pathname.replace(/\/$/, "") || "/";
+ if (path === "/") app.innerHTML = home();
+ else if (path === "/docs") app.innerHTML = docs();
+ else if (path === "/plugins") {
+ app.innerHTML = await pluginsPage();
+ bindPlugins();
+ } else if (path === "/blog") app.innerHTML = await blogPage();
+ else if (path.startsWith("/blog/"))
+ app.innerHTML = await blogDetail(decodeURIComponent(path.slice(6)));
+ else
+ app.innerHTML = layout(
+ 'The page you requested does not exist.
',
+ "404",
+ "Not found.",
+ );
+ fetch("/api/blog")
+ .then((r) => (r.ok ? r.json() : []))
+ .then((posts) => {
+ const fresh = posts.find(
+ (p) =>
+ p.show_on_website &&
+ Date.now() - new Date(p.published_at || p.created_at).getTime() < 172800000,
+ );
+ const a = document.querySelector("#announcement");
+ if (fresh && path !== "/blog/" + fresh.id) {
+ a.hidden = false;
+ a.innerHTML = `↗ ${esc(fresh.title)} Learn more → `;
+ }
+ })
+ .catch(() => {});
+}
+function bindPlugins() {
+ const q = document.querySelector("#plugin-search"),
+ c = document.querySelector("#plugin-category");
+ const filter = () =>
+ document
+ .querySelectorAll(".plugin-card")
+ .forEach(
+ (x) =>
+ (x.style.display =
+ (!q.value || x.dataset.name.includes(q.value.toLowerCase())) &&
+ (!c.value || x.dataset.category === c.value)
+ ? ""
+ : "none"),
+ );
+ q.oninput = filter;
+ c.onchange = filter;
+ const count = document.querySelector("#plugin-count");
+ if (count) count.textContent = document.querySelectorAll(".plugin-card").length;
+}
+document.querySelector("[data-theme-toggle]").onclick = () => {
+ document.documentElement.dataset.theme =
+ document.documentElement.dataset.theme === "dark" ? "" : "dark";
+};
+fetch("/plugins.json")
+ .then((r) => r.json())
+ .then((items) => {
+ const count = document.querySelector("#plugin-count");
+ if (count) count.textContent = items.length;
+ })
+ .catch(() => {});
+show();
diff --git a/docs/public/sitemap.xml b/docs/public/sitemap.xml
new file mode 100644
index 00000000..2f3eee0f
--- /dev/null
+++ b/docs/public/sitemap.xml
@@ -0,0 +1,7 @@
+
+
+ https://opti.drml.int.yt/ 1.0
+ https://opti.drml.int.yt/docs 0.9
+ https://opti.drml.int.yt/plugins 0.8
+ https://opti.drml.int.yt/blog 0.7
+
diff --git a/docs/public/styles.css b/docs/public/styles.css
new file mode 100644
index 00000000..aae39a1d
--- /dev/null
+++ b/docs/public/styles.css
@@ -0,0 +1,634 @@
+@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Source+Sans+3:wght@400;500;600;700&family=Space+Grotesk:wght@500;600;700&display=swap");
+:root {
+ --ink: #17151f;
+ --paper: #fbfbff;
+ --surface: #f1f0f8;
+ --line: #dcd8ea;
+ --muted: #6b6878;
+ --violet: #7046ff;
+ --violet-2: #a994ff;
+ --orange: #ff7b35;
+ --green: #35c777;
+ --mono: "IBM Plex Mono", ui-monospace, monospace;
+ --display: "Space Grotesk", sans-serif;
+ --serif: Georgia, serif;
+ color-scheme: light;
+}
+html[data-theme="dark"] {
+ --ink: #f4f2ff;
+ --paper: #11101a;
+ --surface: #171521;
+ --line: #37334a;
+ --muted: #aaa4bd;
+ --violet: #a994ff;
+ --violet-2: #735cff;
+ --orange: #ff9b68;
+ --green: #70e0a2;
+ color-scheme: dark;
+}
+* {
+ box-sizing: border-box;
+}
+html {
+ scroll-behavior: smooth;
+}
+body {
+ margin: 0;
+ min-width: 320px;
+ background: var(--paper);
+ color: var(--ink);
+ font-family: "Source Sans 3", sans-serif;
+ line-height: 1.6;
+ overflow-x: hidden;
+}
+a {
+ color: inherit;
+ text-decoration: none;
+}
+button {
+ font: inherit;
+ cursor: pointer;
+}
+.site-header {
+ height: 76px;
+ padding: 0 clamp(20px, 5vw, 76px);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-bottom: 1px solid var(--line);
+ background: color-mix(in srgb, var(--paper) 80%, transparent);
+ backdrop-filter: blur(15px);
+ position: sticky;
+ top: 0;
+ z-index: 10;
+}
+.brand {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ font: 700 14px var(--display);
+ letter-spacing: 0.12em;
+}
+.brand img {
+ width: 31px;
+ height: 31px;
+}
+.brand span span {
+ color: var(--violet);
+}
+.nav {
+ display: flex;
+ gap: clamp(16px, 3vw, 34px);
+ font: 600 12px var(--mono);
+ color: var(--muted);
+}
+.nav a:hover {
+ color: var(--violet);
+}
+.theme-toggle {
+ border: 1px solid var(--line);
+ background: var(--paper);
+ color: var(--muted);
+ border-radius: 999px;
+ padding: 8px 12px;
+ display: flex;
+ gap: 7px;
+ align-items: center;
+ font: 11px var(--mono);
+ transition: transform 0.18s ease-out;
+}
+.theme-toggle:active {
+ transform: scale(0.97);
+}
+.announcement {
+ margin: 18px auto 0;
+ max-width: 1100px;
+ padding: 12px 16px;
+ border: 1px solid #b9aaff;
+ background: #f0ecff;
+ color: #3b268f;
+ font: 12px var(--mono);
+ animation: rise 0.45s cubic-bezier(0.23, 1, 0.32, 1);
+}
+.announcement a {
+ font-weight: 700;
+ text-decoration: underline;
+ margin-left: 10px;
+}
+.ambient {
+ position: fixed;
+ z-index: -2;
+ filter: blur(60px);
+ opacity: 0.35;
+ pointer-events: none;
+ border-radius: 50%;
+ animation: drift 18s ease-in-out infinite alternate;
+}
+.ambient-a {
+ width: 420px;
+ height: 420px;
+ right: -140px;
+ top: 130px;
+ background: linear-gradient(135deg, var(--violet-2), #c8bfff 48%, var(--orange));
+}
+.ambient-b {
+ width: 310px;
+ height: 310px;
+ left: -130px;
+ bottom: 8%;
+ background: #ffcca9;
+ animation-delay: -6s;
+}
+.grid-noise {
+ position: fixed;
+ inset: 0;
+ z-index: -1;
+ pointer-events: none;
+ opacity: 0.23;
+ background-image:
+ linear-gradient(var(--line) 1px, transparent 1px),
+ linear-gradient(90deg, var(--line) 1px, transparent 1px);
+ background-size: 44px 44px;
+ mask-image: linear-gradient(to bottom, black, transparent 80%);
+}
+.site-footer {
+ max-width: 1100px;
+ margin: 100px auto 0;
+ padding: 25px 0 35px;
+ border-top: 1px solid var(--line);
+ display: flex;
+ justify-content: space-between;
+ gap: 18px;
+ color: var(--muted);
+ font: 11px var(--mono);
+}
+.site-footer a {
+ color: var(--violet);
+}
+.page {
+ max-width: 1100px;
+ margin: 0 auto;
+ padding: clamp(56px, 9vw, 120px) 24px;
+}
+.kicker {
+ font: 11px var(--mono);
+ letter-spacing: 0.16em;
+ color: var(--violet);
+ text-transform: uppercase;
+}
+.hero {
+ display: grid;
+ grid-template-columns: 1.15fr 0.85fr;
+ gap: 60px;
+ align-items: center;
+}
+.hero h1 {
+ font: 700 clamp(44px, 6.5vw, 78px) var(--display);
+ line-height: 0.94;
+ letter-spacing: -0.07em;
+ margin: 18px 0 25px;
+ max-width: 760px;
+}
+.hero h1 em {
+ font-style: normal;
+ background: linear-gradient(110deg, var(--violet), var(--orange));
+ background-clip: text;
+ color: transparent;
+}
+.lede {
+ font-size: 16px;
+ color: var(--muted);
+ max-width: 640px;
+}
+.actions {
+ display: flex;
+ gap: 12px;
+ flex-wrap: wrap;
+ margin: 30px 0;
+}
+.button {
+ display: inline-flex;
+ align-items: center;
+ gap: 9px;
+ padding: 13px 17px;
+ border: 1px solid var(--ink);
+ font: 700 12px var(--mono);
+ transition:
+ transform 0.18s ease-out,
+ box-shadow 0.18s ease-out;
+}
+.button:hover {
+ transform: translateY(-3px);
+ box-shadow: 5px 5px 0 var(--ink);
+}
+.button.primary {
+ background: var(--violet);
+ border-color: var(--violet);
+ color: white;
+}
+.button.secondary {
+ background: var(--paper);
+}
+.hero-art {
+ border: 1px solid var(--line);
+ background: color-mix(in srgb, var(--paper) 55%, transparent);
+ min-height: 390px;
+ display: grid;
+ place-items: center;
+ position: relative;
+ overflow: hidden;
+}
+.hero-art img {
+ width: 75%;
+ max-height: 270px;
+}
+.hero-art:after {
+ content: "";
+ position: absolute;
+ bottom: 20px;
+ left: 22px;
+ color: var(--orange);
+ font: 12px var(--mono);
+}
+.metrics {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ border-top: 1px solid var(--line);
+ border-bottom: 1px solid var(--line);
+ margin: 70px 0;
+}
+.metric {
+ padding: 22px 15px;
+ border-right: 1px solid var(--line);
+}
+.metric:last-child {
+ border: 0;
+}
+.metric strong {
+ display: block;
+ font: 32px var(--display);
+ color: var(--violet);
+}
+.metric span {
+ font: 11px var(--mono);
+ color: var(--muted);
+}
+.section {
+ margin: 115px 0;
+}
+.section-head {
+ display: flex;
+ justify-content: space-between;
+ gap: 30px;
+ align-items: end;
+ margin-bottom: 28px;
+}
+.section h2 {
+ font: 700 clamp(28px, 3.4vw, 44px) var(--display);
+ line-height: 1.02;
+ letter-spacing: -0.04em;
+ margin: 10px 0;
+}
+.section-head p {
+ max-width: 420px;
+ color: var(--muted);
+}
+.badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 7px;
+ margin-top: 20px;
+}
+.badges a {
+ display: inline-flex;
+ line-height: 0;
+}
+.badges img {
+ height: 20px;
+}
+.card-link {
+ color: inherit;
+ text-decoration: none;
+}
+.card-link h3 {
+ text-decoration: underline;
+ text-decoration-color: transparent;
+ text-underline-offset: 4px;
+ transition: text-decoration-color 160ms ease;
+}
+.card-link:hover h3,
+.card-link:focus-visible h3 {
+ text-decoration-color: currentColor;
+}
+.feature-grid,
+.plugin-grid,
+.blog-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 12px;
+}
+.card {
+ border: 1px solid var(--line);
+ background: color-mix(in srgb, var(--paper) 84%, transparent);
+ padding: 23px;
+ transition:
+ transform 0.2s ease-out,
+ border-color 0.2s;
+}
+.card:hover {
+ transform: translateY(-5px);
+ border-color: var(--violet);
+}
+.card h3 {
+ font: 700 18px var(--display);
+ margin: 16px 0 7px;
+}
+.card p {
+ color: var(--muted);
+ font-size: 14px;
+ margin: 0;
+}
+.number {
+ font: 13px var(--mono);
+ color: var(--orange);
+}
+.terminal {
+ background: #17151f;
+ color: #ebe7ff;
+ padding: 26px;
+ font: 13px/1.8 var(--mono);
+ box-shadow: 10px 10px 0 #d3cbff;
+}
+.terminal .ok {
+ color: #75e3a2;
+}
+.terminal .warn {
+ color: #ffae7a;
+}
+.docs-layout {
+ display: grid;
+ grid-template-columns: 225px 1fr;
+ gap: 60px;
+}
+.toc {
+ position: sticky;
+ top: 105px;
+ height: max-content;
+ border-right: 1px solid var(--line);
+ padding-right: 20px;
+}
+.toc a {
+ display: block;
+ padding: 8px 0;
+ color: var(--muted);
+ font: 12px var(--mono);
+}
+.toc a:hover {
+ color: var(--violet);
+}
+.article {
+ max-width: 760px;
+}
+.article h1 {
+ font: 700 clamp(34px, 5vw, 54px) var(--display);
+ line-height: 1;
+ margin: 12px 0 18px;
+ letter-spacing: -0.06em;
+}
+.article h2 {
+ font: 700 27px var(--display);
+ margin: 52px 0 12px;
+}
+.article h3 {
+ font: 20px var(--display);
+ margin: 30px 0 8px;
+}
+.article p,
+.article li {
+ font-size: 16px;
+ color: var(--muted);
+}
+.article code {
+ font: 13px var(--mono);
+ background: #eeebfa;
+ color: #4e32bc;
+ padding: 2px 5px;
+}
+.article pre {
+ background: #191621;
+ color: #eee8ff;
+ padding: 20px;
+ overflow: auto;
+ font: 13px/1.7 var(--mono);
+}
+.article blockquote {
+ border-left: 3px solid var(--orange);
+ padding-left: 20px;
+ color: var(--ink);
+ font-family: var(--serif);
+ font-size: 21px;
+}
+.table-wrap {
+ overflow: auto;
+}
+.compare {
+ border-collapse: collapse;
+ width: 100%;
+ font-size: 14px;
+ background: color-mix(in srgb, var(--paper) 80%, transparent);
+}
+.compare th,
+.compare td {
+ border: 1px solid var(--line);
+ padding: 13px;
+ text-align: left;
+ vertical-align: top;
+}
+.compare th {
+ font: 700 11px var(--mono);
+ color: var(--violet);
+ text-transform: uppercase;
+}
+.plugin-toolbar {
+ display: flex;
+ gap: 10px;
+ flex-wrap: wrap;
+ margin: 25px 0;
+}
+.plugin-toolbar input,
+.plugin-toolbar select {
+ border: 1px solid var(--line);
+ background: var(--paper);
+ padding: 12px 14px;
+ color: var(--ink);
+ font: 12px var(--mono);
+}
+.plugin-toolbar input {
+ flex: 1;
+ min-width: 240px;
+}
+.plugin-card {
+ min-height: 205px;
+}
+.plugin-card .tag {
+ font: 10px var(--mono);
+ color: var(--violet);
+ text-transform: uppercase;
+}
+.plugin-card .version {
+ float: right;
+ font: 10px var(--mono);
+ color: var(--muted);
+}
+.plugin-card a {
+ display: inline-block;
+ margin-top: 15px;
+ font: 11px var(--mono);
+ color: var(--orange);
+}
+.blog-meta {
+ font: 11px var(--mono);
+ color: var(--muted);
+}
+.blog-card h3 {
+ font-size: 21px;
+}
+.blog-card .blog-meta {
+ margin-top: 16px;
+}
+.empty {
+ padding: 38px;
+ border: 1px dashed var(--line);
+ color: var(--muted);
+ font: 13px var(--mono);
+}
+@keyframes drift {
+ 0% {
+ transform: translate3d(0, 0, 0) scale(1);
+ }
+ 50% {
+ transform: translate3d(40px, -28px, 0) scale(1.12);
+ }
+ 100% {
+ transform: translate3d(-24px, 24px, 0) scale(0.96);
+ }
+}
+@keyframes rise {
+ from {
+ opacity: 0;
+ transform: translateY(10px);
+ }
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+@media (max-width: 780px) {
+ .site-header {
+ height: auto;
+ min-height: 70px;
+ flex-wrap: wrap;
+ gap: 12px;
+ padding: 14px 20px;
+ }
+ .nav {
+ order: 3;
+ width: 100%;
+ overflow: auto;
+ padding-bottom: 4px;
+ }
+ .toggle-label {
+ display: none;
+ }
+ .hero,
+ .docs-layout {
+ grid-template-columns: 1fr;
+ }
+ .hero-art {
+ min-height: 260px;
+ }
+ .metrics {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ .metric:nth-child(2) {
+ border-right: 0;
+ }
+ .feature-grid,
+ .plugin-grid,
+ .blog-grid {
+ grid-template-columns: 1fr;
+ }
+ .toc {
+ position: static;
+ border-right: 0;
+ border-bottom: 1px solid var(--line);
+ padding: 0 0 14px;
+ display: flex;
+ gap: 15px;
+ overflow: auto;
+ }
+ .section-head {
+ display: block;
+ }
+ .site-footer {
+ margin: 60px 24px 0;
+ display: grid;
+ }
+ .page {
+ padding-top: 55px;
+ }
+}
+@media (prefers-reduced-motion: reduce) {
+ *,
+ *:before,
+ *:after {
+ animation-duration: 0.01ms !important;
+ transition-duration: 0.01ms !important;
+ scroll-behavior: auto !important;
+ }
+}
+
+/* Requested visual refinements: original font family, restrained scale, true dark mode, and moving editorial gradients. */
+.npm-link {
+ display: inline-flex;
+ align-items: center;
+}
+.npm-icon {
+ display: inline-block;
+ padding: 2px 5px;
+ border-radius: 3px;
+ background: #cb3837;
+ color: white;
+ font: 700 10px/1 var(--mono);
+ letter-spacing: -0.04em;
+}
+html[data-theme="dark"] .site-header {
+ background: color-mix(in srgb, var(--paper) 88%, transparent);
+}
+html[data-theme="dark"] .card,
+html[data-theme="dark"] .hero-art,
+html[data-theme="dark"] .plugin-toolbar input,
+html[data-theme="dark"] .plugin-toolbar select {
+ background: color-mix(in srgb, var(--paper) 88%, transparent);
+}
+html[data-theme="dark"] .article code {
+ background: #2b2740;
+ color: #d7cbff;
+}
+html[data-theme="dark"] .announcement {
+ background: #292344;
+ color: #e1d9ff;
+ border-color: #6552ba;
+}
+.hero h1 {
+ font-weight: 700;
+}
+@media (prefers-reduced-motion: reduce) {
+ .ambient,
+ .announcement {
+ animation: none;
+ }
+ html {
+ scroll-behavior: auto;
+ }
+}
diff --git a/docs/scripts/build-site.mjs b/docs/scripts/build-site.mjs
new file mode 100644
index 00000000..f09dacd0
--- /dev/null
+++ b/docs/scripts/build-site.mjs
@@ -0,0 +1,39 @@
+import { mkdir, readdir, writeFile } from "node:fs/promises";
+import { resolve } from "node:path";
+
+const docsRoot = resolve(new URL("..", import.meta.url).pathname);
+const pluginsDir = resolve(docsRoot, "../src/plugins");
+const publicDir = resolve(docsRoot, "public");
+await mkdir(publicDir, { recursive: true });
+
+const files = (await readdir(pluginsDir)).filter((file) => file.endsWith("-plugin.ts")).sort();
+const plugins = files.map((file) => {
+ const name = file.replace(/\.ts$/, "");
+ const label = name
+ .replace(/-plugin$/, "")
+ .replace(/-/g, " ")
+ .replace(/\b\w/g, (char) => char.toUpperCase());
+ const lower = name.toLowerCase();
+ const category =
+ /test|ava|c8|cucumber|cypress|jest|mocha|playwright|storybook|stryker|vitest/.test(lower)
+ ? "Testing & QA"
+ : /next|nuxt|astro|angular|docusaurus|eleventy|express|fastify|hono|remix|svelte|vue|react|solid|nestjs|expo|gatsby|vitepress/.test(
+ lower,
+ )
+ ? "Frameworks"
+ : /eslint|biome|babel|webpack|rollup|esbuild|tsup|vite|swc|oxc|typescript|prettier|tailwind|unocss/.test(
+ lower,
+ )
+ ? "Tooling & ecosystem"
+ : "Project conventions";
+ return {
+ name,
+ version: "current",
+ category,
+ summary: `Project-aware analysis for ${label} conventions, configuration, package usage, and reachable source files.`,
+ source: `https://github.com/optiprune/core/blob/main/src/plugins/${file}`,
+ };
+});
+
+await writeFile(resolve(publicDir, "plugins.json"), JSON.stringify(plugins, null, 2));
+console.log(`Generated ${plugins.length} plugins in docs/public/plugins.json`);
diff --git a/docs/server/index.ts b/docs/server/index.ts
deleted file mode 100644
index 70704f76..00000000
--- a/docs/server/index.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import express from "express";
-import { createServer } from "http";
-import path from "path";
-import { fileURLToPath } from "url";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-
-async function startServer() {
- const app = express();
- const server = createServer(app);
-
- // Serve static files from dist/public in production
- const staticPath =
- process.env.NODE_ENV === "production"
- ? path.resolve(__dirname, "public")
- : path.resolve(__dirname, "..", "dist", "public");
-
- app.use(express.static(staticPath));
-
- // Handle client-side routing - serve index.html for all routes
- app.get("*", (_req, res) => {
- res.sendFile(path.join(staticPath, "index.html"));
- });
-
- const port = process.env.PORT || 3000;
-
- server.listen(port, () => {
- console.log(`Server running on http://localhost:${port}/`);
- });
-}
-
-startServer().catch(console.error);
diff --git a/docs/src/assets/favicon.svg b/docs/src/assets/favicon.svg
new file mode 100644
index 00000000..46ff576e
--- /dev/null
+++ b/docs/src/assets/favicon.svg
@@ -0,0 +1 @@
+
diff --git a/docs/src/assets/optiprune-logo.svg b/docs/src/assets/optiprune-logo.svg
new file mode 100644
index 00000000..c3fd5d99
--- /dev/null
+++ b/docs/src/assets/optiprune-logo.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/src/content.config.ts b/docs/src/content.config.ts
new file mode 100644
index 00000000..7fbcf2c3
--- /dev/null
+++ b/docs/src/content.config.ts
@@ -0,0 +1,7 @@
+import { defineCollection } from "astro:content";
+import { docsLoader } from "@astrojs/starlight/loaders";
+import { docsSchema } from "@astrojs/starlight/schema";
+
+export const collections = {
+ docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
+};
diff --git a/docs/src/content/docs/docs/architecture.md b/docs/src/content/docs/docs/architecture.md
new file mode 100644
index 00000000..10eddec0
--- /dev/null
+++ b/docs/src/content/docs/docs/architecture.md
@@ -0,0 +1,44 @@
+---
+title: Architecture
+description: How Core turns source files into an evidence-backed graph.
+---
+
+OptiPrune separates project discovery, graph construction, analysis layers, reporting, and mutation. The **Core API** owns analysis; the **CLI package** supplies a command-line boundary around it.
+
+## Pipeline
+
+1. **Resolve configuration.** Core loads supported project configuration and combines it with explicit analyzer options.
+2. **Discover the workspace.** It resolves the root, package boundaries, conventional entries, configured entries, project files, and workspace relationships.
+3. **Run early plugins.** Enabled plugins can inspect project markers and contribute entry patterns, ignore patterns, project files, package usage, and contracts before the full graph is finalized.
+4. **Parse source files.** JavaScript and TypeScript modules are parsed and represented with exports, dependency edges, dynamic-import information, diagnostics, and parser status.
+5. **Build evidence graphs.** Core connects file, package, symbol, export, workspace, and strongly connected-component relationships.
+6. **Analyze reachability and logic.** The analysis layers evaluate imports, exports, members, dependencies, dynamic paths, control flow, contracts, and confidence.
+7. **Run the later plugin pass.** Plugins receive file-start events, AST nodes, and the completed graph so framework and runtime conventions can add evidence or findings.
+8. **Assemble a report.** Core returns an `AnalysisReport` with modules, findings, summary data, components, entry points, and enabled plugins.
+9. **Format or mutate explicitly.** Callers can format the report as terminal or SARIF output, and fixes require an explicit, confidence-gated request.
+
+## Plugin lifecycle
+
+The engine registers built-in and dynamically loaded plugins, runs `detect()` unless configuration overrides the decision, then invokes lifecycle hooks in this order:
+
+```text
+detect(adapter)
+ ↓
+onProjectInit(adapter)
+ ↓
+for each discovered file: onFileStart(fileId, adapter)
+ ↓
+for each AST node: onASTNode(node, fileId, adapter, ancestors)
+ ↓
+onAnalysisComplete(adapter)
+```
+
+The engine performs an early project/plugin pass and a later execution pass after source discovery. This lets a framework plugin influence the set of entries while still observing concrete files and AST nodes later. See [Plugins](/docs/plugins/) and [Writing a plugin](/docs/plugin-authoring/) for the adapter contract.
+
+## Evidence and uncertainty
+
+A normal import edge is only one kind of evidence. Plugins can represent generated routes, test discovery, package export maps, configuration contracts, dynamic registries, and externally consumed symbols. Unknown dynamic imports remain uncertain rather than being silently treated as unreachable. Findings carry severity, confidence, source information, and evidence so integrations can choose their own policy.
+
+## CLI boundary
+
+The CLI invokes the same Core concepts through `@optiprune/cli` and exposes command-line options for entries, formats, thresholds, cache, plugins, and fixes. It does not define a second analyzer. For an application-owned integration, install `@optiprune/core` and call `analyze()` directly; for a standard developer or CI command, install `@optiprune/cli` and run `npx @optiprune/cli analyze`.
diff --git a/docs/src/content/docs/docs/cache.md b/docs/src/content/docs/docs/cache.md
new file mode 100644
index 00000000..8342b06a
--- /dev/null
+++ b/docs/src/content/docs/docs/cache.md
@@ -0,0 +1,10 @@
+---
+title: Cache
+description: Reuse analysis state safely across local and CI runs.
+---
+
+Core stores a project cache at `/.optiprune/cache.json` when enabled. `loadCache()` and `saveCache()` support integrations; `exportCache(rootDir, targetPath)` and `importCache(rootDir, sourcePath)` move compatible cache data between environments.
+
+On unchanged workspaces, Core first compares the analysis key and inexpensive file metadata such as `size` and `mtimeMs`. When metadata is unavailable or different, it falls back to SHA-256 content hashes. Invalidated runs reuse unchanged module records and reparse changed files.
+
+Use `--cache-from` and `--cache-to` in automation when the cache is stored as a CI artifact. Treat caches as performance data, never as the source of truth for findings.
diff --git a/docs/src/content/docs/docs/ci.md b/docs/src/content/docs/docs/ci.md
new file mode 100644
index 00000000..22ad8eb4
--- /dev/null
+++ b/docs/src/content/docs/docs/ci.md
@@ -0,0 +1,23 @@
+---
+title: Continuous integration
+description: Keep dead-code checks deterministic and reviewable in CI.
+---
+
+Run OptiPrune in report-only mode and fail on the confidence level your team trusts.
+
+```bash
+npx optiprune ./src \
+ --entry src/index.ts \
+ --fail-on high \
+ --reporter sarif \
+ --output optiprune.sarif
+```
+
+Upload the SARIF file to your code-scanning provider or use the JSON reporter for custom build annotations.
+
+## Related pages
+
+- [Configuration](/docs/configuration/)
+- [Plugins](/docs/plugins/)
+- [Plugin explorer](/plugins)
+- [OptiPrune blog](/blog)
diff --git a/docs/src/content/docs/docs/cli.md b/docs/src/content/docs/docs/cli.md
new file mode 100644
index 00000000..c00217aa
--- /dev/null
+++ b/docs/src/content/docs/docs/cli.md
@@ -0,0 +1,93 @@
+---
+title: CLI
+description: Install and run the OptiPrune command-line interface.
+---
+
+The **CLI package** is [`@optiprune/cli`](https://www.npmjs.com/package/@optiprune/cli). It is the supported command-line entry point for running the [`@optiprune/core`](https://www.npmjs.com/package/@optiprune/core) analyzer. Install the CLI in the project you want to inspect:
+
+```bash
+npm install --save-dev @optiprune/cli
+```
+
+## Analyze a project
+
+Run the command from the project root:
+
+```bash
+npx @optiprune/cli analyze
+```
+
+`analyze` is the default command, so this is equivalent:
+
+```bash
+npx @optiprune/cli
+```
+
+Use explicit entry points when a project does not use conventional entries:
+
+```bash
+npx @optiprune/cli analyze \
+ --entry src/index.ts \
+ --entry src/worker.ts
+```
+
+The CLI discovers configuration, parses supported JavaScript and TypeScript files, builds the dependency graph, runs enabled plugins, and prints a terminal report. The default output is terminal text; use `--json` or `--sarif` for integrations.
+
+## Commands
+
+| Command | Purpose |
+| --------------------------- | --------------------------------------------------------- |
+| `analyze [options]` | Analyze the current project. This is the default command. |
+| `export-cache ` | Export the current analysis cache. |
+| `import-cache ` | Import an analysis cache before a run. |
+| `--help` | Print command and option help. |
+| `--version` | Print the CLI and detected Core versions. |
+
+## Reports and CI
+
+```bash
+# Structured JSON for scripts
+npx @optiprune/cli analyze --json
+
+# SARIF for code-scanning tools
+npx @optiprune/cli analyze --sarif > optiprune.sarif
+
+# Fail when high-confidence findings exist
+npx @optiprune/cli analyze --fail-on high
+```
+
+The terminal reporter begins with `Optiprune Analysis Report`, followed by the root, a summary, and findings grouped by file. Each finding includes a rule, message, and—when a source location exists—confidence. See [Output](/docs/output/) for the exact format and [Reporters](/docs/reporters/) for Core-level formatting functions.
+
+## Configuration and scope
+
+The CLI accepts project configuration from `optiprune.json`, `optiprune.jsonc`, `optiprune.config.ts`, `optiprune.config.js`, `optiprune.config.mjs`, or the `package.json#optiprune` field. See [Configuration](/docs/configuration/) for precedence and examples.
+
+Common options include:
+
+| Option | Meaning |
+| --------------------------- | ------------------------------------------------------------------------------------- |
+| `--rootDir ` | Analyze a different project root. |
+| `--entry ` | Add entry-point files or globs. |
+| `--extensions ` | Set source extensions; the default includes `.ts`, `.tsx`, `.js`, `.jsx`, and `.vue`. |
+| `--ignore ` | Ignore matching paths. |
+| `--no-conventional-entries` | Disable automatic conventional entries such as `src/index.ts`. |
+| `--cycles` | Include dependency-cycle information in human-readable output. |
+| `--ignore-tests` | Exclude conventional test files. |
+| `--verbose` | Include additional analyzer diagnostics. |
+
+## Controlled fixes
+
+Fixes are explicit and confidence-gated. Begin with a dry run:
+
+```bash
+npx @optiprune/cli analyze \
+ --fix files exports dependencies devDependencies conditions json \
+ --confidence medium+ \
+ --dry-run
+```
+
+Supported fix targets are `files`, `exports`, `dependencies`, `devDependencies`, `conditions`, and safely recoverable `json` changes. Review the proposed diff before running without `--dry-run`; see [Fixes](/docs/fixes/) for safety boundaries.
+
+## CLI versus Core API
+
+Choose the CLI when you need a ready-to-run developer or CI command. Choose the Core API when another program owns orchestration, output, authentication, or user experience. The CLI and Core use the same analysis concepts, but they are separate npm packages and should be installed and documented separately.
diff --git a/docs/src/content/docs/docs/confidence.md b/docs/src/content/docs/docs/confidence.md
new file mode 100644
index 00000000..2a6cff61
--- /dev/null
+++ b/docs/src/content/docs/docs/confidence.md
@@ -0,0 +1,14 @@
+---
+title: Confidence levels
+description: Use evidence strength to decide what to review and remove.
+---
+
+Every finding is assigned a confidence level. Confidence is a review aid, not a promise that a project has no dynamic behavior.
+
+| Level | Meaning | Recommended action |
+| ------ | ------------------------------------------------------- | ------------------------------------------------- |
+| High | Strong graph evidence that the item is never reached. | Review and usually safe to remove. |
+| Medium | Evidence is incomplete or a convention may be involved. | Check runtime behavior and project configuration. |
+| Low | Dynamic or ambiguous behavior limits certainty. | Keep unless you can prove it is unused. |
+
+Use `--fail-on high` in CI as a conservative starting point.
diff --git a/docs/src/content/docs/docs/configuration.md b/docs/src/content/docs/docs/configuration.md
new file mode 100644
index 00000000..bc311cdc
--- /dev/null
+++ b/docs/src/content/docs/docs/configuration.md
@@ -0,0 +1,32 @@
+---
+title: Configuration
+description: Configure roots, rules, plugins, contracts, output, and analysis layers.
+---
+
+The loader accepts `optiprune.json`, `optiprune.jsonc`, `optiprune.config.ts`, `optiprune.config.js`, `optiprune.config.mjs`, and the supported package configuration field. CLI values override project configuration.
+
+```ts
+import { defineConfig } from "@optiprune/core";
+
+export default defineConfig({
+ rootDir: ".",
+ entry: ["src/index.ts", "src/worker.ts"],
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".vue"],
+ ignore: ["**/fixtures/**", "**/generated/**"],
+ reportUnusedExports: true,
+ includeConventionalEntries: true,
+ failOn: "high",
+ output: "terminal",
+ rules: {
+ "unused-export": "warning",
+ "unreachable-file": "warning",
+ "constant-condition": "warning",
+ },
+ plugins: {},
+ layers: {},
+});
+```
+
+Use `externalContracts` for public APIs consumed outside the local workspace. Use `ignoreDependencies` for packages intentionally provided by a host. Keep ignores narrow: an overly broad ignore removes evidence from the graph and can hide real problems.
+
+The authoritative machine-readable schema is `schema.json` in the Core repository.
diff --git a/docs/src/content/docs/docs/fixes.md b/docs/src/content/docs/docs/fixes.md
new file mode 100644
index 00000000..3ee0dd8e
--- /dev/null
+++ b/docs/src/content/docs/docs/fixes.md
@@ -0,0 +1,13 @@
+---
+title: Fixes and safety
+description: Apply explicit, confidence-gated changes without losing review control.
+---
+
+Fixes are opt-in. Supported targets include files, exports, dependencies, devDependencies, and conditions. Start with a dry run and choose a minimum confidence level.
+
+```bash
+npx @optiprune/cli analyze --fix files,exports --confidence medium+ --dry-run
+npx @optiprune/cli analyze --fix-json
+```
+
+`--force` allows a selected operation to continue when the source edit is considered unsafe. Use it only when the change has been reviewed. In Core integrations, `applyFixes(report, rootDir, fixConfig)` returns the planned or applied change count.
diff --git a/docs/src/content/docs/docs/getting-started.md b/docs/src/content/docs/docs/getting-started.md
new file mode 100644
index 00000000..1678247c
--- /dev/null
+++ b/docs/src/content/docs/docs/getting-started.md
@@ -0,0 +1,40 @@
+---
+title: Getting started
+description: Install OptiPrune and run your first safe analysis.
+---
+
+OptiPrune is a static code analyzer for TypeScript and JavaScript workspaces. It builds a graph from real entry points, package metadata, exports, dependencies, and project conventions, then returns findings with evidence and confidence.
+
+## Install the CLI
+
+```bash
+npm install --save-dev @optiprune/cli
+```
+
+Run the current CLI entry point from the workspace root:
+
+```bash
+npx @optiprune/cli analyze
+```
+
+## Install Core for integrations
+
+```bash
+npm install @optiprune/core
+```
+
+Use Core directly when the integration needs a structured report, custom reporter, editor diagnostic, dashboard, or approval workflow.
+
+## Establish a safe baseline
+
+Start with an explicit entry point and a dry run. The command reports planned changes without modifying files:
+
+```bash
+npx @optiprune/cli analyze --entry src/index.ts --dry-run
+```
+
+If your application has several roots, repeat `--entry` or pass multiple patterns. Review high-confidence findings first, then add configuration for generated files, external contracts, and framework conventions.
+
+## Continue
+
+Read [Quickstart](/docs/quickstart/) for a five-minute workflow, [Output](/docs/output/) for report formats, [Configuration](/docs/configuration/) for schema-backed settings, and [Headless Core API](/docs/headless-api/) for programmatic integrations.
diff --git a/docs/src/content/docs/docs/headless-api.md b/docs/src/content/docs/docs/headless-api.md
new file mode 100644
index 00000000..a684cbac
--- /dev/null
+++ b/docs/src/content/docs/docs/headless-api.md
@@ -0,0 +1,74 @@
+---
+title: Core API
+description: Integrate OptiPrune programmatically without the CLI.
+---
+
+The **Core API** is the programmatic analyzer in [`@optiprune/core`](https://www.npmjs.com/package/@optiprune/core). It is not a second product or a separate “headless API”: **headless** describes how the Core API runs without owning a terminal, process lifecycle, or user interface.
+
+Install it when your application owns orchestration, reporting, editor integration, dashboards, or CI policy:
+
+```bash
+npm install @optiprune/core
+```
+
+## Analyze
+
+```ts
+import { analyze, shouldFail } from "@optiprune/core";
+
+const report = await analyze({
+ rootDir: process.cwd(),
+ entry: ["src/index.ts"],
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".vue"],
+ output: "json",
+});
+
+console.log(report.summary);
+console.log(report.findings);
+
+if (shouldFail(report, "high")) process.exitCode = 1;
+```
+
+`analyze()` returns a `Promise`. It performs analysis and returns data; it does not silently edit source files. The `output` option describes the intended report format for callers, while the returned report remains structured data.
+
+## Public exports
+
+| Export | Use |
+| ------------------------------------- | ------------------------------------------------------------------------ |
+| `analyze(options)` | Run discovery, parsing, graph analysis, plugins, and finding generation. |
+| `shouldFail(report, failOn)` | Apply a confidence threshold to decide a CI exit status. |
+| `applyFixes(report, rootDir, config)` | Apply explicitly selected, confidence-gated fixes. Use `dryRun` first. |
+| `defineConfig(config)` | Type-safe configuration helper; it returns the supplied config. |
+| `loadConfig(rootDir)` | Load supported project configuration. |
+| `mergeConfig(base, override)` | Merge configuration values. |
+| `DEFAULT_CONFIG` | Inspect the Core defaults. |
+| `exportCache` / `importCache` | Move cache state between environments. |
+
+Additional entry points expose reporter functions and public types:
+
+```ts
+import { formatTerminal, formatSarif } from "@optiprune/core/reporters";
+import type { AnalysisReport, AnalyzerOptions, Finding } from "@optiprune/core/types";
+```
+
+`formatTerminal(report, { showCycles: true })` returns the human-readable report used by the CLI-style output. `formatSarif(report)` returns a SARIF JSON string for code-scanning integrations.
+
+## Core API versus CLI
+
+| Concern | `@optiprune/cli` | `@optiprune/core` |
+| -------------- | ----------------------------------------- | --------------------------------------------------------- |
+| Installation | Ready-to-run command | Library dependency |
+| Invocation | `npx @optiprune/cli analyze` | `await analyze(options)` |
+| Output | Terminal, JSON, or SARIF flags | Structured `AnalysisReport`, plus reporter helpers |
+| Process policy | CLI handles command exit behavior | Caller decides whether to fail, display, or store results |
+| Fix workflow | CLI flags such as `--fix` and `--dry-run` | `applyFixes(report, rootDir, config)` |
+
+Use [CLI](/docs/cli/) for the standard command workflow. Use this page when another program is the integration boundary.
+
+## Configuration
+
+The Core API accepts `AnalyzerOptions` directly. If you want repository configuration, use `loadConfig(rootDir)` or pass the resolved values to `analyze()`. Supported project sources are documented in [Configuration](/docs/configuration/).
+
+## Extending analysis
+
+Plugins are part of Core’s analysis pipeline, not a separate API layer. They can contribute evidence about framework conventions through the `AnalyzerPlugin` contract. Read [How plugins work](/docs/plugins/) for the lifecycle and [Writing a plugin](/docs/plugin-authoring/) for a complete implementation guide.
diff --git a/docs/src/content/docs/docs/index.md b/docs/src/content/docs/docs/index.md
new file mode 100644
index 00000000..ada035b3
--- /dev/null
+++ b/docs/src/content/docs/docs/index.md
@@ -0,0 +1,66 @@
+---
+title: OptiPrune documentation
+description: A clear path from first scan to Core integration and plugin development.
+template: splash
+hero:
+ title: Prove what your code uses.
+ tagline: Start with the CLI, integrate the Core API, and extend project knowledge with plugins.
+ actions:
+ - text: Install the CLI
+ link: /docs/cli/
+ icon: right-arrow
+ - text: Learn the Core API
+ link: /docs/headless-api/
+ icon: external
+---
+
+OptiPrune is a static analyzer for TypeScript and JavaScript workspaces. The **CLI** (`@optiprune/cli`) is the ready-to-run command. The **Core API** (`@optiprune/core`) is the programmatic engine underneath it. Plugins add evidence for framework, tooling, runtime, and workspace conventions.
+
+## Choose your path
+
+| If you want to… | Start here |
+| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+| Run a scan locally or in CI | [CLI](/docs/cli/) |
+| Embed analysis in an application or integration | [Core API](/docs/headless-api/) |
+| Understand reports and confidence | [Output](/docs/output/) and [Confidence](/docs/confidence/) |
+| Configure entries, rules, and plugins | [Configuration](/docs/configuration/) |
+| Understand the engine | [Architecture](/docs/architecture/) |
+| Build a framework or tool integration | [Plugins](/docs/plugins/) and [Writing a plugin](/docs/plugin-authoring/) |
+| Bring diagnostics into an editor | [Language Server](/docs/language-server/) and the [VS Code extension](https://marketplace.visualstudio.com/items?itemName=optiprune.vscode) |
+
+## Recommended learning route
+
+Start with the [CLI](/docs/cli/) and run one scan. Then read [Output](/docs/output/) to understand the terminal, JSON, and SARIF shapes. If another program should own orchestration or presentation, move to the [Core API](/docs/headless-api/). If the analyzer needs to understand a framework-specific convention, study [how plugins work](/docs/plugins/) before writing a plugin with the [authoring guide](/docs/plugin-authoring/).
+
+## Install the CLI
+
+```bash
+npm install --save-dev @optiprune/cli
+npx @optiprune/cli analyze
+```
+
+## Install the Core API
+
+```bash
+npm install @optiprune/core
+```
+
+```ts
+import { analyze } from "@optiprune/core";
+
+const report = await analyze({
+ rootDir: process.cwd(),
+ entry: ["src/index.ts"],
+});
+```
+
+## Official links
+
+| Resource | Link |
+| ------------------- | -------------------------------------------------------------------------------------------------------------- |
+| GitHub organisation | [github.com/optiprune](https://github.com/optiprune) |
+| Core repository | [github.com/optiprune/core](https://github.com/optiprune/core) |
+| CLI repository | [github.com/optiprune/cli](https://github.com/optiprune/cli) |
+| CLI package | [@optiprune/cli on npm](https://www.npmjs.com/package/@optiprune/cli) |
+| Core package | [@optiprune/core on npm](https://www.npmjs.com/package/@optiprune/core) |
+| VS Code extension | [OptiPrune on Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=optiprune.vscode) |
diff --git a/docs/src/content/docs/docs/language-server.md b/docs/src/content/docs/docs/language-server.md
new file mode 100644
index 00000000..1fd7411f
--- /dev/null
+++ b/docs/src/content/docs/docs/language-server.md
@@ -0,0 +1,14 @@
+---
+title: Language server
+description: Publish Core findings as editor diagnostics over LSP.
+---
+
+The Core package includes a lightweight Language Server Protocol implementation over standard input and output. It detects the workspace from `rootUri` or workspace folders, runs the analyzer, and publishes findings with rule code, severity, confidence, location, and message.
+
+```bash
+npm install @optiprune/core
+npm run build
+npx optiprune-language-server
+```
+
+The server reacts to document open, change, and save events and reuses the normal `.optiprune/cache.json` cache. A client starts it as a stdio process with `npx optiprune-language-server`.
diff --git a/docs/src/content/docs/docs/monorepos.md b/docs/src/content/docs/docs/monorepos.md
new file mode 100644
index 00000000..beb4f2a1
--- /dev/null
+++ b/docs/src/content/docs/docs/monorepos.md
@@ -0,0 +1,16 @@
+---
+title: Monorepos
+description: Configure analysis boundaries across packages and workspaces.
+---
+
+Run OptiPrune from the workspace root when package relationships should be visible. For isolated package checks, run it from the package directory with that package’s entry points.
+
+## Recommended setup
+
+Keep each package’s public entry points explicit. Include shared build tools and test configuration when they are part of the execution graph.
+
+## Avoid accidental deletion
+
+Do not treat a package as dead merely because another package does not import it. Published packages, CLI entry points, and workspace scripts can be consumed outside the local graph.
+
+Use plugin overrides and ignore lists for generated output, fixtures, and intentional boundary modules.
diff --git a/docs/src/content/docs/docs/output.md b/docs/src/content/docs/docs/output.md
new file mode 100644
index 00000000..f2a45f99
--- /dev/null
+++ b/docs/src/content/docs/docs/output.md
@@ -0,0 +1,22 @@
+---
+title: Output and findings
+description: Read terminal, JSON, and SARIF reports with confidence-aware review.
+---
+
+OptiPrune emits a structured `AnalysisReport`. It includes the project root, discovered entry points, summary counters, findings, module records, exports, dependency edges, and strongly connected components.
+
+## Formats
+
+The terminal reporter is for humans. JSON preserves the complete report for automation. SARIF 2.1 is intended for code-scanning systems.
+
+```bash
+npx @optiprune/cli analyze
+npx @optiprune/cli analyze --json > optiprune.json
+npx @optiprune/cli analyze --sarif > optiprune.sarif
+```
+
+## Finding fields
+
+A finding contains a rule, severity, confidence, message, file information, and optional source location or evidence. Confidence values are `high`, `medium`, `low`, and `info`; severity values are `error`, `warning`, and `info`.
+
+Treat high-confidence findings as the first review queue. Medium and low confidence findings may reflect dynamic imports, runtime contracts, generated files, or incomplete entry-point configuration.
diff --git a/docs/src/content/docs/docs/plugin-authoring.md b/docs/src/content/docs/docs/plugin-authoring.md
new file mode 100644
index 00000000..b1f3a27e
--- /dev/null
+++ b/docs/src/content/docs/docs/plugin-authoring.md
@@ -0,0 +1,87 @@
+---
+title: Writing a plugin
+description: Extend Core with narrow, evidence-producing project conventions.
+---
+
+A plugin teaches Core how a framework, build tool, test runner, package manager, runtime, or workspace convention affects reachability. A plugin contributes **evidence** to the graph; it should not hide uncertain code or edit source files.
+
+## The plugin contract
+
+A plugin is an `AnalyzerPlugin` object with a stable `name`, a `version`, an optional asynchronous `detect()` function, and a `lifecycle` object. The lifecycle hooks are optional, so a small plugin can implement only the phase it needs.
+
+```ts
+import type { AnalyzerPlugin } from "@optiprune/core/types";
+
+export const ExamplePlugin: AnalyzerPlugin = {
+ name: "example-plugin",
+ version: "1.0.0",
+
+ async detect(adapter) {
+ const packageJson = await adapter.readJson("package.json");
+ return Boolean(packageJson?.dependencies?.["example-framework"]);
+ },
+
+ lifecycle: {
+ async onProjectInit(adapter) {
+ adapter.addEntryPatterns(["src/register.ts"]);
+ adapter.markPackageAsUsed("example-framework");
+ },
+ },
+};
+```
+
+The example is intentionally conservative: it activates only when its project marker is present, adds one known entry pattern, and records the package as used.
+
+## How the lifecycle works
+
+Core runs plugins in an early pass and a later pass after source discovery. The practical order is:
+
+| Phase | Hook | Typical responsibility |
+| ---------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| Detection | `detect(adapter)` | Inspect package metadata, config files, or folders and return whether the plugin applies. |
+| Project initialization | `onProjectInit(adapter)` | Add entries, project/config patterns, ignore rules, protected exports, package usage, or repository metadata. |
+| File start | `onFileStart(fileId, adapter)` | React to each discovered file and mark framework-consumed files as used. |
+| AST traversal | `onASTNode(node, fileId, adapter, ancestors)` | Inspect syntax and record runtime or configuration contracts. |
+| Completion | `onAnalysisComplete(adapter)` | Emit findings or perform analysis that needs the complete graph. |
+
+When no `detect()` hook exists, the plugin is enabled by default. A repository configuration can override detection with `plugins: { "example-plugin": true }` or disable it with `false`.
+
+## The adapter boundary
+
+Plugins communicate with Core through `PluginAdapter`, rather than reaching into internal state. Read operations include `getAst`, `getSymbol`, `getType`, `getDependencies`, `isPublicExport`, `isEntryPoint`, `isDynamicallyImported`, `getConfig`, `readFile`, `readJson`, `folderExists`, `findFiles`, and `findFilesByGlob`.
+
+Evidence and configuration operations include:
+
+| Adapter method | Purpose |
+| --------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `emitFinding(finding)` | Add a plugin finding with severity, confidence, file, message, and evidence. |
+| `markAsUsed(fileId, symbol?)` | Keep a file or symbol reachable because a convention consumes it. |
+| `markRelativeFileAsUsed(sourceFileId, path)` | Mark a referenced file relative to the declaring file. |
+| `markPackageAsUsed(name)` | Record package usage that is not visible as a normal import. |
+| `markConfigMemberAsUsed(file, object, member)` | Preserve configuration members consumed by a tool. |
+| `addEntryPatterns(patterns)` | Add framework-discovered entry files. |
+| `addProjectPatterns(patterns)` | Declare configuration or project files in scope. |
+| `addIgnorePatterns(patterns)` | Add framework-specific ignore patterns. |
+| `addUnreachableFileIgnorePatterns(patterns)` | Exclude known generated/contract files from unreachable-file findings. |
+| `addProtectedExportPatterns(patterns)` | Protect externally consumed exports. |
+| `addExternalContracts(names)` | Record symbols consumed outside the static graph. |
+| `setWorkspaceGlobs(patterns)` / `setRepoType(type)` | Contribute workspace classification. |
+| `declareFramework(name)` | Declare a verified framework for overlap-aware behavior. |
+
+Use `emitFinding()` only when the plugin has a specific, explainable diagnostic. Include evidence that makes the result reviewable and choose confidence honestly.
+
+## Static configuration parsing
+
+When a plugin needs project configuration, prefer the static helpers in `plugin-config.ts`. `loadStaticPluginConfig()` reads JSON/JSONC and supported exported configuration objects without executing arbitrary project code. It can also read a plugin-owned key from `package.json`. Use `stringArray()` and `stringRecord()` to validate common shapes.
+
+## Registration and distribution
+
+Built-in plugins live under [`src/plugins`](https://github.com/optiprune/core/tree/main/src/plugins). Core discovers plugin modules from the project’s configured plugin registry during analysis. A plugin should therefore be exported through the registry mechanism used by the repository and included in the published build; merely creating an unreferenced TypeScript file does not make it available to users.
+
+Before publishing a plugin, confirm how the target version loads dynamic plugins and test it through the same configuration path used by the CLI. Keep the plugin package and its compatibility assumptions documented.
+
+## Testing checklist
+
+Create a focused fixture for every convention. The fixture should cover a positive marker, the files or symbols that the plugin preserves, and at least one negative case where the marker is absent. Add a regression case for every false positive. Run both the Core test suite and a real CLI scan, and verify that disabling the plugin removes only the evidence supplied by that plugin.
+
+A good plugin is narrow, deterministic, explainable, and safe when its marker is absent. Prefer a small adapter contribution over framework-specific logic spread through the analyzer.
diff --git a/docs/src/content/docs/docs/plugins.md b/docs/src/content/docs/docs/plugins.md
new file mode 100644
index 00000000..99952411
--- /dev/null
+++ b/docs/src/content/docs/docs/plugins.md
@@ -0,0 +1,31 @@
+---
+title: Plugins
+description: How Core understands framework, tooling, runtime, and workspace conventions.
+---
+
+A generic import graph cannot know that a framework discovers routes, a test runner loads files by pattern, a bundler consumes configuration, or a package manager exposes a binary. OptiPrune plugins add that project context as explicit graph evidence.
+
+## What a plugin can do
+
+A plugin can recognize project markers, add carefully scoped entry patterns, interpret package metadata, mark files or packages as used, inspect AST and dependency information, and contribute findings during the analysis-complete phase. Plugins should not mutate source files or silently convert uncertainty into reachability.
+
+The repository currently ships 163 source plugins across frameworks, build tools, testing, package management, runtime conventions, documentation tools, and workspace orchestration. The [Plugin Explorer](/plugins) is generated from the current `src/plugins` directory and links each card to its source file.
+
+## Enablement and overrides
+
+Automatic detection is preferred. Set a plugin to `true` to force-enable it or `false` to disable it when a repository uses a nonstandard convention:
+
+```json
+{
+ "plugins": {
+ "nextjs-plugin": true,
+ "nestjs-plugin": false
+ }
+}
+```
+
+Keep overrides in version control and explain why they exist. A broad plugin entry pattern can hide real findings, so prefer the smallest pattern that represents the framework contract.
+
+## Testing a plugin
+
+Every plugin should have a fixture that proves its positive behavior, a negative case where the project marker is absent, and a regression case for a previous false positive. The plugin authoring guide covers the `AnalyzerPlugin` contract and adapter boundaries.
diff --git a/docs/src/content/docs/docs/quick-reference.md b/docs/src/content/docs/docs/quick-reference.md
new file mode 100644
index 00000000..8f76cbd4
--- /dev/null
+++ b/docs/src/content/docs/docs/quick-reference.md
@@ -0,0 +1,33 @@
+---
+title: Quick reference
+description: The current CLI flags, Core functions, and configuration fields.
+---
+
+## CLI flags
+
+| Flag | Purpose |
+| ----------------------------- | --------------------------------------------- |
+| `-r, --rootDir ` | Choose the project directory. |
+| `-e, --entry ` | Set entry files, paths, or glob patterns. |
+| `-x, --extensions ` | Replace source extensions. |
+| `-i, --ignore ` | Exclude matching paths. |
+| `--no-report-unused-exports` | Disable unused-export findings. |
+| `--no-conventional-entries` | Disable inferred conventional entries. |
+| `--include-entry-exports` | Include exports declared directly in entries. |
+| `--cycles` | Print dependency cycles. |
+| `--ignore-tests` | Ignore test files and directories. |
+| `--ignore-unknown-import` | Do not retain uncertain dynamic-import paths. |
+| `--fail-on ` | Exit non-zero at the selected confidence. |
+| `--json` / `--sarif` | Select structured JSON or SARIF output. |
+| `--skip-3` / `--skip-4` | Skip the SMT or concolic proof pass. |
+| `-v, --verbose` | Include diagnostics and graph details. |
+| `--fix ` | Select explicit fix targets. |
+| `--fix-json` | Repair recoverable package JSON syntax. |
+| `--confidence ` | Set the minimum confidence for fixes. |
+| `--force` | Allow an otherwise unsafe selected fix. |
+| `--dry-run` | Show planned fixes without writing files. |
+| `--cache-from` / `--cache-to` | Import or export a cache file. |
+
+## Core functions
+
+The headless package exports `analyze(options)`, `shouldFail(report, failOn)`, `applyFixes(report, rootDir, fixConfig)`, `exportCache(rootDir, targetPath)`, and `importCache(rootDir, sourcePath)`. Reporters are available from `@optiprune/core/reporters`.
diff --git a/docs/src/content/docs/docs/quickstart.md b/docs/src/content/docs/docs/quickstart.md
new file mode 100644
index 00000000..5aee6157
--- /dev/null
+++ b/docs/src/content/docs/docs/quickstart.md
@@ -0,0 +1,23 @@
+---
+title: Quickstart
+description: Run a first scan in under five minutes.
+---
+
+## Create a baseline
+
+```bash
+npm install --save-dev @optiprune/cli
+npx optiprune ./src --entry src/index.ts --dry-run
+```
+
+## Read the report
+
+Start with unreachable files and high-confidence unused imports. Confirm that your entry points include the application, test runner, and any package exports that are consumed externally.
+
+## Add the check to CI
+
+```bash
+npx optiprune ./src --entry src/index.ts --fail-on high --reporter sarif --output optiprune.sarif
+```
+
+After the baseline is clean, review medium-confidence findings as a normal engineering task rather than turning them into automatic deletions.
diff --git a/docs/src/content/docs/docs/reachability.md b/docs/src/content/docs/docs/reachability.md
new file mode 100644
index 00000000..21101e31
--- /dev/null
+++ b/docs/src/content/docs/docs/reachability.md
@@ -0,0 +1,18 @@
+---
+title: Reachability
+description: Understand what it means for code to be reachable.
+---
+
+A module is reachable when the configured entry points can reach it through imports, exports, dynamic imports, package conventions, or plugin-provided evidence.
+
+## Entry points matter
+
+A scan without accurate entry points can report valid code as unused. Start with application, package, test, and tool entry points that actually execute in your workspace.
+
+## Dynamic behavior
+
+Dynamic dispatch, `getattr`, dispatch tables, `exec`, and `eval` reduce certainty. OptiPrune keeps those cases visible and lowers confidence instead of pretending the graph is complete.
+
+## Generated code
+
+Generated directories should be declared in configuration or ignored deliberately. Do not delete generated output based on a source-only scan.
diff --git a/docs/src/content/docs/docs/reporters.md b/docs/src/content/docs/docs/reporters.md
new file mode 100644
index 00000000..38f55be5
--- /dev/null
+++ b/docs/src/content/docs/docs/reporters.md
@@ -0,0 +1,13 @@
+---
+title: Reporters
+description: Export findings for terminals, automation, and code scanning.
+---
+
+The terminal reporter is optimized for humans. JSON is stable for scripts, dashboards, and custom annotations. SARIF is designed for code-scanning integrations.
+
+```bash
+npx optiprune ./src --reporter json --output optiprune.json
+npx optiprune ./src --reporter sarif --output optiprune.sarif
+```
+
+Keep reports as CI artifacts when you need historical comparison. Avoid committing generated reports unless your project intentionally treats them as release evidence.
diff --git a/docs/src/content/docs/docs/troubleshooting.md b/docs/src/content/docs/docs/troubleshooting.md
new file mode 100644
index 00000000..0f089fa4
--- /dev/null
+++ b/docs/src/content/docs/docs/troubleshooting.md
@@ -0,0 +1,16 @@
+---
+title: Troubleshooting
+description: Diagnose incomplete graphs, unexpected findings, and CI failures.
+---
+
+## Too many unreachable files
+
+Check the entry points first. Include application boot files, package exports, tests, and scripts that execute in production or CI.
+
+## A dynamic module is reported
+
+Review dynamic imports and dispatch tables. If runtime behavior cannot be proven statically, treat the finding as medium or low confidence and keep it until verified.
+
+## CI fails unexpectedly
+
+Run the exact CI command locally with the same working directory, configuration file, ignore rules, and Node version. Export JSON or SARIF when the terminal output is too abbreviated for debugging.
diff --git a/docs/src/content/docs/docs/workflow.md b/docs/src/content/docs/docs/workflow.md
new file mode 100644
index 00000000..01bf79ce
--- /dev/null
+++ b/docs/src/content/docs/docs/workflow.md
@@ -0,0 +1,25 @@
+---
+title: Recommended workflow
+description: Discover, review, and prune with explicit confidence gates.
+---
+
+## 1. Discover
+
+Declare the real application entry points and let OptiPrune build the reachability graph. For monorepos, define workspace boundaries explicitly.
+
+## 2. Review
+
+Treat findings as a review queue. High-confidence findings are the safest starting point; medium and low confidence findings should be checked against dynamic imports, dispatch tables, generated files, and runtime conventions.
+
+## 3. Fix
+
+Use a dry run before mutation. Keep file changes in a separate commit so the analysis result and the cleanup decision remain easy to audit.
+
+```bash
+npx optiprune ./src --entry src/index.ts --dry-run
+npx optiprune ./src --entry src/index.ts --fail-on high
+```
+
+## CI principle
+
+CI should block new high-confidence dead code without silently rewriting a branch. Use JSON or SARIF output when a code-scanning platform consumes the report.
diff --git a/docs/src/pages/blog/index.astro b/docs/src/pages/blog/index.astro
new file mode 100644
index 00000000..3a8c95b5
--- /dev/null
+++ b/docs/src/pages/blog/index.astro
@@ -0,0 +1,13 @@
+---
+const title = 'OptiPrune Blog';
+---
+
+ {title}
+
+
+
+
+
+
+
+
diff --git a/docs/src/pages/index.astro b/docs/src/pages/index.astro
new file mode 100644
index 00000000..65f6f40d
--- /dev/null
+++ b/docs/src/pages/index.astro
@@ -0,0 +1,54 @@
+---
+const title = 'OptiPrune — Prove what your code uses';
+const badges = [
+ {
+ alt: 'npm version for @optiprune/core',
+ src: 'https://img.shields.io/npm/v/%40optiprune%2Fcore?label=%40optiprune%2Fcore',
+ href: 'https://www.npmjs.com/package/@optiprune/core',
+ },
+ {
+ alt: 'npm version for @optiprune/cli',
+ src: 'https://img.shields.io/npm/v/%40optiprune%2Fcli?label=%40optiprune%2Fcli',
+ href: 'https://www.npmjs.com/package/@optiprune/cli',
+ },
+ {
+ alt: 'Socket security score for @optiprune/cli',
+ src: 'https://socket.dev/api/badge/npm/package/@optiprune/cli',
+ href: 'https://socket.dev/npm/package/@optiprune/cli',
+ },
+ {
+ alt: 'MIT license',
+ src: 'https://img.shields.io/github/license/optiprune/core',
+ href: 'https://github.com/optiprune/core/blob/main/LICENSE',
+ },
+];
+---
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+
+
+
+ A static Code Analyzer
Stop guessing.Start proving. OptiPrune builds a dependency graph from your real entry points and shows what is never reached — files, imports, exports, packages, and logic.
npm install --save-dev @optiprune/cli · inspect first, fix deliberately
{badges.map((badge) =>
)}
+
+ Why OptiPrune
Understand your codebase. Designed for safe cleanup: inspect the graph, review confidence, then remove only what your codebase can prove is unreachable.
01 / GRAPH Reachability, not heuristics Entry points create a real module graph instead of relying on naming guesses or arbitrary percentages.
02 / CONTEXT Context-aware findings Dynamic dispatch, test conventions, generated files, and package metadata stay visible in the analysis.
03 / CONTROL Dry-run first Every fix is explicit. Preview changes, use confidence gates, and keep a clean audit trail in CI.
+ A real report
Scan. Verify. Prune. This excerpt is from a real CLI run against a two-file JavaScript fixture. Paths are shown exactly as the reporter emits them.
$ npx @optiprune/cli analyze --entry src/index.js --no-conventional-entries --fail-on none
Optiprune Analysis Report v1.16.0
Root: /home/ubuntu/optiprune-core/.research-fixture
Summary:
Files: 2 discovered, 2 parsed
Findings: 2 total (0 errors, 2 warnings)
/home/ubuntu/optiprune-core/.research-fixture/src/index.js
WARNING [unused-export] Export 'main' is never imported or referenced.
at /home/ubuntu/optiprune-core/.research-fixture/src/index.js:1:16 (Confidence: high)
/home/ubuntu/optiprune-core/.research-fixture/src/orphan.js
WARNING [unreachable-file] File is part of an isolated component (#0) that is unreachable from any entry point.
+ Use OptiPrune where you work
One analyzer, three entry points. Start with the CLI, integrate the Core API, or review findings in VS Code.
+
+
+
+
+
diff --git a/docs/src/pages/plugins/index.astro b/docs/src/pages/plugins/index.astro
new file mode 100644
index 00000000..92db6711
--- /dev/null
+++ b/docs/src/pages/plugins/index.astro
@@ -0,0 +1,13 @@
+---
+const title = 'OptiPrune Plugins';
+---
+
+ {title}
+
+
+
+
+
+
+
+
diff --git a/docs/src/styles/starlight.css b/docs/src/styles/starlight.css
new file mode 100644
index 00000000..480c1081
--- /dev/null
+++ b/docs/src/styles/starlight.css
@@ -0,0 +1,16 @@
+:root {
+ --sl-color-accent-low: #eee9ff;
+ --sl-color-accent: #7046ff;
+ --sl-color-accent-high: #3f268f;
+ --sl-font: system-ui, sans-serif;
+ --sl-font-mono: "IBM Plex Mono", ui-monospace, monospace;
+}
+[data-theme="dark"] {
+ --sl-color-accent-low: #2a2052;
+ --sl-color-accent-high: #d7cbff;
+}
+.sl-markdown-content h1,
+.sl-markdown-content h2,
+.sl-markdown-content h3 {
+ letter-spacing: -0.03em;
+}
diff --git a/docs/tsconfig.json b/docs/tsconfig.json
deleted file mode 100644
index 5f4a60ee..00000000
--- a/docs/tsconfig.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "include": ["client/src/**/*", "shared/**/*", "server/**/*"],
- "exclude": ["node_modules", "build", "dist", "**/*.test.ts"],
- "compilerOptions": {
- "incremental": true,
- "tsBuildInfoFile": "./node_modules/typescript/tsbuildinfo",
- "noEmit": true,
- "module": "ESNext",
- "strict": true,
- "lib": ["esnext", "dom", "dom.iterable"],
- "jsx": "preserve",
- "esModuleInterop": true,
- "skipLibCheck": true,
- "allowImportingTsExtensions": true,
- "moduleResolution": "bundler",
- "types": ["node", "vite/client"],
- "paths": {
- "@/*": ["./client/src/*"],
- "@shared/*": ["./shared/*"]
- }
- }
-}
diff --git a/docs/tsconfig.node.json b/docs/tsconfig.node.json
deleted file mode 100644
index 0d3d7144..00000000
--- a/docs/tsconfig.node.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2022",
- "lib": ["ES2023"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "isolatedModules": true,
- "moduleDetection": "force",
- "noEmit": true,
-
- /* Linting */
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["vite.config.ts"]
-}
diff --git a/docs/vite.config.ts b/docs/vite.config.ts
deleted file mode 100644
index 55268f37..00000000
--- a/docs/vite.config.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-import { jsxLocPlugin } from "@builder.io/vite-plugin-jsx-loc";
-import tailwindcss from "@tailwindcss/vite";
-import react from "@vitejs/plugin-react";
-import fs from "node:fs";
-import path from "node:path";
-import { defineConfig, type Plugin, type ViteDevServer } from "vite";
-const PROJECT_ROOT = import.meta.dirname;
-const MAX_LOG_SIZE_BYTES = 1 * 1024 * 1024; // 1MB per log file
-const TRIM_TARGET_BYTES = Math.floor(MAX_LOG_SIZE_BYTES * 0.6); // Trim to 60% to avoid constant re-trimming
-
-type LogSource = "browserConsole" | "networkRequests" | "sessionReplay";
-
-function trimLogFile(logPath: string, maxSize: number) {
- try {
- if (!fs.existsSync(logPath) || fs.statSync(logPath).size <= maxSize) {
- return;
- }
-
- const lines = fs.readFileSync(logPath, "utf-8").split("\n");
- const keptLines: string[] = [];
- let keptBytes = 0;
-
- // Keep newest lines (from end) that fit within 60% of maxSize
- const targetSize = TRIM_TARGET_BYTES;
- for (let i = lines.length - 1; i >= 0; i--) {
- const lineBytes = Buffer.byteLength(`${lines[i]}\n`, "utf-8");
- if (keptBytes + lineBytes > targetSize) break;
- keptLines.unshift(lines[i]);
- keptBytes += lineBytes;
- }
-
- fs.writeFileSync(logPath, keptLines.join("\n"), "utf-8");
- } catch {
- /* ignore trim errors */
- }
-}
-
-function vitePluginStorageProxy(): Plugin {
- return {
- name: "manus-storage-proxy",
- configureServer(server: ViteDevServer) {
- server.middlewares.use("/manus-storage", async (req, res) => {
- const key = req.url?.replace(/^\//, "");
- if (!key) {
- res.writeHead(400, { "Content-Type": "text/plain" });
- res.end("Missing storage key");
- return;
- }
-
- const forgeBaseUrl = (process.env.BUILT_IN_FORGE_API_URL || "").replace(/\/+$/, "");
- const forgeKey = process.env.BUILT_IN_FORGE_API_KEY;
-
- if (!forgeBaseUrl || !forgeKey) {
- res.writeHead(500, { "Content-Type": "text/plain" });
- res.end("Storage proxy not configured");
- return;
- }
-
- try {
- const forgeUrl = new URL("v1/storage/presign/get", forgeBaseUrl + "/");
- forgeUrl.searchParams.set("path", key);
-
- const forgeResp = await fetch(forgeUrl, {
- headers: { Authorization: `Bearer ${forgeKey}` },
- });
-
- if (!forgeResp.ok) {
- res.writeHead(502, { "Content-Type": "text/plain" });
- res.end("Storage backend error");
- return;
- }
-
- const { url } = (await forgeResp.json()) as { url: string };
- if (!url) {
- res.writeHead(502, { "Content-Type": "text/plain" });
- res.end("Empty signed URL");
- return;
- }
-
- res.writeHead(307, { Location: url, "Cache-Control": "no-store" });
- res.end();
- } catch {
- res.writeHead(502, { "Content-Type": "text/plain" });
- res.end("Storage proxy error");
- }
- });
- },
- };
-}
-
-const plugins = [react(), tailwindcss(), jsxLocPlugin(), vitePluginStorageProxy()];
-
-export default defineConfig({
- plugins,
- resolve: {
- alias: {
- "@": path.resolve(import.meta.dirname, "client", "src"),
- "@shared": path.resolve(import.meta.dirname, "shared"),
- "@assets": path.resolve(import.meta.dirname, "attached_assets"),
- },
- },
- envDir: path.resolve(import.meta.dirname),
- root: path.resolve(import.meta.dirname, "client"),
- build: {
- outDir: path.resolve(import.meta.dirname, "dist/public"),
- emptyOutDir: true,
- },
- server: {
- port: 3000,
- strictPort: false, // Will find next available port if 3000 is busy
- host: true,
- allowedHosts: [
- ".manuspre.computer",
- ".manus.computer",
- ".manus-asia.computer",
- ".manuscomputer.ai",
- ".manusvm.computer",
- "localhost",
- "127.0.0.1",
- ],
- fs: {
- strict: true,
- deny: ["**/.*"],
- },
- },
-});
diff --git a/docs/wrangler.toml b/docs/wrangler.toml
new file mode 100644
index 00000000..e118efb5
--- /dev/null
+++ b/docs/wrangler.toml
@@ -0,0 +1,8 @@
+name = "optiprune-docs"
+compatibility_date = "2026-09-02"
+pages_build_output_dir = "dist"
+
+[[kv_namespaces]]
+binding = "BLOG"
+id = "f473e9d0041948bfa8c1135382b40e51"
+preview_id = "f473e9d0041948bfa8c1135382b40e51"
diff --git a/package.json b/package.json
index d6d8a67c..05a26bc0 100644
--- a/package.json
+++ b/package.json
@@ -120,6 +120,5 @@
},
"engines": {
"node": ">=20.0.0"
- },
- "packageManager": "npm@10.9.2"
+ }
}