diff --git a/.agents/skills/create-integration-package/SKILL.md b/.agents/skills/create-integration-package/SKILL.md new file mode 100644 index 000000000..63ef17e9c --- /dev/null +++ b/.agents/skills/create-integration-package/SKILL.md @@ -0,0 +1,325 @@ +--- +name: create-integration-package +description: >- + This skill is utilized when creating a web framework integration package. + After examining the given framework, a feasibility assessment is conducted + regarding the creation of an integration package. + If implementation is feasible, the package is generated; + if it is not possible, the rationale is provided to the user. +argument-hint: "Provide the name of the web framework you want to integrate with." +--- + + + +Adding an integration package to a web framework +================================================ + +Follow these steps in order to implement the integration package. + +1. Research the web framework +2. Create the package directory +3. Implement the package +4. Add to `@fedify/init` +5. Test with `mise test:init` +6. Add an example +7. Lint, format, and final checks + + +Research the web framework +-------------------------- + +Research the web framework for which the integration package will be +implemented. Fedify operates as middleware via +[`Federation.fetch`](../../../packages/fedify/src/federation/federation.ts). +The critical question is whether the given framework can act as a server +framework and supports adding middleware. Search for and investigate +whether the relevant functionality is available. Assess feasibility based +on the research. If research indicates implementation is not possible, +explain the reasons in detail to the user and stop. If feasible, proceed +to create the package. Even during package creation, it may turn out to be +infeasible. In that case as well, explain the reasons in detail to the +user and stop. + + +Implement the package +--------------------- + +**Prioritize usability above all else.** The most important goal is that +the package integrates smoothly with the framework so users do not +experience friction when connecting it. + +Unless there are significant hurdles, please set up the package to publish +on both JSR and NPM. + +Create the package directory inside the `packages/` directory. For example, if +the framework is named “framework”, create the directory `packages/framework/`. + +Copy the template files from into the directory you created. Then, +implement the package according to the framework. Since the comments in the +template are instructions for the developer to follow, please remove them once +the implementation is complete. + +Add additional definitions as appropriate based on context. Aside from the +main integration function and the `ContextDataFactory` type, keep module +exports to a minimum to avoid confusing users. + +### Request flow + +When a request arrives, the integration middleware calls +`federation.fetch()`. If Fedify has a route for the path and the client's +`Accept` header includes an ActivityPub media type such as +`application/activity+json`, Fedify generates and returns the JSON-LD +response directly. Framework-side routing does not execute. + +### Request conversion + +Some frameworks define and use their own `Request` type internally instead +of the Web API `Request`. If the target framework does so, write +conversion functions within the integration package to translate between +the Web API `Request` and the framework's native `Request`. + +### 406 not acceptable + +The final failure 406 response uses this form: + +~~~~ typescript +new Response("Not acceptable", { + status: 406, + headers: { + "Content-Type": "text/plain", + Vary: "Accept", + }, +}); +~~~~ + +### Function naming conventions + +A consistent naming convention for the main function has not yet been +established, but there is an [open naming convention issue]. If the issue +has been resolved by the time this skill is executed, update this section. +As a temporary convention, respect conventions of the framework : name it +`fedifyMiddleware` if the official documentation calls it as middleware, or +`fedifyHandler` if it's called a handler. + +[open naming convention issue]: https://github.com/fedify-dev/fedify/issues/657 + +### Non-source files + +#### README.md + +The package README.md must include the following: + + - Package description + - Supported framework versions, if only specific versions are supported + - Installation instructions + - Usage instructions (with example code) + +#### `deno.json` + +A *deno.json* is required to publish to JSR. + +#### `package.json` + +A *package.json* is required to publish to npm. + +#### `tsdown.config.ts` + +A *tsdown.config.ts* is required for the build in Node.js and Bun +environments. + +### Other updates + +Refer to the “Adding a new package” section in *CONTRIBUTING.md* and +perform the required updates. Record the package addition in *CHANGES.md*. + +### Tests + +Unit tests aren't mandatory since you can test using `mise test:init`, which +will be explained later. Therefore, testing by packages is not necessary. + +### Implementation checklist + +1. Create the *packages/framework/* directory +2. Write *src/mod.ts*: + - Export the main integration middleware/handler function + - Implement `federation.fetch()` invocation with + `onNotFound`/`onNotAcceptable` + - Export the `ContextDataFactory` type + - Write conversion functions if the framework does not natively support + Web API `Request`/`Response` +3. Write *README.md* +4. Write *deno.json* (if publishing to JSR is intended) +5. Write *package.json* (if publishing to npm is intended) +6. Write *tsdown.config.ts* (if Node.js and Bun are supported) +7. Write tests if possible +8. Perform remaining updates per the “Adding a new package” section in + *CONTRIBUTING.md* +9. Record changes in *CHANGES.md* + + +Add to `@fedify/init` +--------------------- + +Add the new package to the `@fedify/init` package so users can select the +new framework via the `fedify init` command. Follow these steps. + +Steps may require code modifications not explicitly listed. For example, +if the new package needs specific configuration, utility functions in +`packages/init/src/webframeworks/utils.ts` may need updating. Make +modifications consistent with the existing code style and context. + +### Write the `WebFrameworkDescription` object + +Create a `packages/init/src/webframeworks/framework.ts` file and write the +`WebFrameworkDescription` object, referring to . Check +the specifications in the comments in `packages/init/src/types.ts` for +details. + +### Add to the `WEB_FRAMEWORK` array + +Add the new framework name to the end of the `WEB_FRAMEWORK` array in +`packages/init/src/const.ts`. + +~~~~ typescript +export const WEB_FRAMEWORK = [ + // ... other frameworks + "framework", // Fill with the framework name +]; +~~~~ + +### Add to the `webFrameworks` object + +Add the new `WebFrameworkDescription` object in alphabetical order to the +`webFrameworks` object in `packages/init/src/webframeworks/mod.ts`. + +~~~~ typescript +// packages/init/src/webframeworks/mod.ts + +// ... other imports +import framework from "./framework.ts"; // Fill with the framework name + +const webFrameworks: Record = { + // ... other frameworks + framework, // Fill with the framework name +}; +~~~~ + +### Add templates in `packages/init/src/templates/framework/` + +If additional files need to be generated, add template files under the +`packages/init/src/templates/framework/` directory. Template files must +end with the `.tpl` extension appended to their base name. Then, in +`packages/init/src/webframeworks/framework.ts`, load the templates using +the `readTemplate` function defined in `packages/init/src/lib.ts` and add +them to the `WebFrameworkDescription.init().files` object. + + +Test with `mise test:init` +-------------------------- + +Run `mise test:init` to verify that the new package is generated and runs +correctly. If a test fails, the output and error file paths are printed; +read them to diagnose the issue. + +Running `mise test:init` without arguments tests all option combinations +and can take a very long time. Use appropriate options to narrow the test +scope. + +Immediately remove test paths after completing the tests and analyzing any +resulting errors. + +At a minimum, test the following three combinations. + + - `mise test:init -w framework -m in-process -k in-memory --no-dry-run`: + Tests the new framework with the in-memory KV store and in-process message + queue, which are the most basic options. This combination verify that the + newly created package can be used without issues by minimizing dependencies + on other environments. + - `mise test:init -w framework`: Tests all package manager, KV store, + and message queue combinations with the framework selected. If a + required database is not installed or running, this combinations are + useless. Therefore, if the test output indicates that the databases are + not running, don't use this combination ever again for the session. + Instead, use the previous one or the next one. + - `mise test:init -m in-process -k in-memory --no-dry-run`: Fixes the + KV store and message queue and tests all web framework and package + manager combinations. This test is mandatory if you modified logic + beyond just writing the `WebFrameworkDescription` object. + +For details on options, run `mise test:init --help`. + +Some frameworks or combinations may be untestable. Analyze the test +results; if there are impossible combinations, identify the reason and add +the combination and reason as a key-value pair to the +`BANNED_LOOKUP_REASONS` object in +`packages/init/src/test/lookup.ts`. + + +Add an example +-------------- + +Create an `examples/framework/` app and write an example for the new +package. If Deno is supported, add a *deno.json* based on ; +if Node.js is supported, add *package.json* based on +and *tsdown.config.ts*. Depending on the supported environments, +add the example path to the `workspace` field in +the root *deno.json* and to the `packages` field in +*pnpm-workspace.yaml*. + +If the framework is backend-only and needs a frontend framework, and there +is no natural pairing like solidstart-solid, use Hono. + +Base the example on the files under the path. + describes the example's architecture. + describes the example's design. Both documents are +references for writing the example and are not needed in the actual +generated example app — do not create these two files. Copy the remaining +files as-is and modify as needed. + +If the framework does not have a prescribed entry point, use `src/main.ts` +as the application entry point. Define and export the framework app in +`src/app.ts`, then import and run it from the entry file. Register the +Fedify middleware in `src/app.ts`. Import `src/logging.ts` in the entry +file to initialize `@logtape/logtape`. When logging is needed, use the +`getLogger` function from `@logtape/logtape` to create a logger. + +### Test the example with `mise test:examples` + +Register the new example in `examples/test-examples/mod.ts`. Read the +comments above the example registry arrays in that file to determine +which array is appropriate and what fields are required. Follow the +patterns of existing entries. + +Before running the tests, ensure that the tunneling service is usable. +The tests use the tunneling service `pinggy.io` to make the example app +accessible to the test suite. If the tunneling service is not usable, +the tests may not finish forever or may fail due to a connection error. + +While developing the example, run only the new example to iterate +quickly: + +~~~~ bash +mise test:examples framework +~~~~ + +where `framework` is the `name` field of the registered entry. Pass +`--debug` for verbose output if the test fails. + +After the example is complete, run the full suite once to confirm nothing +is broken: + +~~~~ bash +mise test:examples +~~~~ + + +Lint, format, and final checks +------------------------------ + +Add keywords related to the framework in `.hongdown.toml` and `cspell.json` in +root path. Especially, the package name `@fedify/framework` should be added to +the `.hongdown.toml`. + +After implementation, run `mise run fmt && mise check`. +If there are lint or format errors, fix them and run the command again until +there are no errors. diff --git a/.agents/skills/create-integration-package/example/ARCHITECTURE.md b/.agents/skills/create-integration-package/example/ARCHITECTURE.md new file mode 100644 index 000000000..92a4d646b --- /dev/null +++ b/.agents/skills/create-integration-package/example/ARCHITECTURE.md @@ -0,0 +1,191 @@ + + +Fedify example architecture +=========================== + +This document defines the shared architecture for Fedify example applications. +Every example should follow these conventions regardless of the web framework +used, so that learners can compare examples and transfer knowledge between them. + + +Middleware integration +---------------------- + +Every Fedify framework adapter exposes a middleware or hook function that +intercepts incoming requests. Register this middleware at the top level of +the server so that it runs before any application routes. + +The middleware inspects the `Accept` and `Content-Type` headers. Requests +carrying ActivityPub media types (`application/activity+json`, +`application/ld+json`, etc.) or targeting well-known federation endpoints +are forwarded to the `Federation` instance. All other requests fall through +to the application's own routes. + +The specific API differs, but the role is identical: delegate federation +traffic to Fedify, let everything else pass through. + + +Reverse proxy support +--------------------- + +If needed, wrap the middleware (or the request handler it receives) with +`getXForwardedRequest` from the `x-forwarded-fetch` package. This rewrites +the request URL to respect `X-Forwarded-Host` and related headers, which is +required when the server runs behind a tunneling tool or reverse proxy during +local development. Apply this wrapping at the same level as the Fedify +middleware registration, before any routing logic executes. + + +Routing +------- + +### `GET /` + +The main page. Contains the following sections: + +**Search** + +A text input for searching fediverse accounts by handle. The client +debounces input with a 300ms delay, then sends a `GET` request with the +handle as a URL query parameter (e.g. `/?q=@user@example.com`). The server +resolves the handle using Fedify's `lookupObject` and returns the result. +The result shows: profile image, display name, handle, and a follow button. +If the local actor already follows the target, show an unfollow button +instead. + +**User info** + +Displays the local actor's profile. Because this is a demo there is exactly +one actor, `@demo`. + + - Profile image: `/demo-profile.png` + - Name: `"Fedify Demo"` + - Handle: `@demo` + - Summary: `"This is a Fedify Demo account."` + +**Following** + +Lists accounts the local actor follows. Shows the total count and, for +each account: profile image, display name, handle, and an unfollow button. + +**Followers** + +Lists accounts that follow the local actor. Shows the total count and, for +each account: profile image, display name, and handle. + +The following and followers sections update in real time via SSE (see below). + +**Compose** + +A text area and a submit button for writing a new post. On submission the +server creates a `Note`, stores it in `postStore`, wraps it in a `Create` +activity, and sends it to followers. If sending fails, the post is removed +from the store. + +**Posts** + +Lists all posts by the local actor in reverse chronological order. Each +entry shows the post content, published timestamp, and a link to the +single post detail page (`/users/{identifier}/posts/{id}`). + +### `GET /users/{identifier}` + +Actor profile page. Shares its path with the Fedify actor dispatcher. +When a federation peer requests this URL with an ActivityPub media type, the +middleware handles it. Otherwise the request falls through to this route, +which renders an HTML page showing: + + - Profile image + - Name + - Handle + - Summary + - Following count + - Followers count + +### `GET /users/{identifier}/posts/{id}` + +Single post detail page. Shares its path with the Fedify `Note` object +dispatcher. Same content-negotiation fallback as the actor profile: the +middleware serves ActivityPub JSON to federation peers, and this route +renders HTML for browsers. Shows: + + - Author profile (same layout as the actor profile page) + - Post content + - Published timestamp + +### `POST /post` + +Accepts post content from the compose form, creates a `Note`, stores it in +`postStore`, wraps it in a `Create` activity, and sends it to followers. +If sending fails, the post is removed from the store. Redirects back to +`/` on completion. + +### `POST /follow` + +Accepts a target actor URI, sends a `Follow` activity from the local actor, +and stores the relationship locally. + +### `POST /unfollow` + +Accepts a target actor URI, sends an `Undo(Follow)` activity, and removes +the relationship locally. + +### `GET /events` + +SSE endpoint. See the SSE section below. + + +Server-sent events +------------------ + +The `/events` endpoint keeps an open SSE connection to the client. +When the following or followers list changes (a follow is accepted, a +remote follow arrives, an unfollow occurs, etc.), the server pushes an +event so the page can update without a full reload. + +The server maintains a set of active SSE connections. Whenever the +follower or following store is mutated — inside inbox listeners or after a +local follow/unfollow request — it broadcasts an event to every open +connection. + +The client listens on an `EventSource` and replaces the relevant DOM +section with the received data. + + +Server-side data access +----------------------- + +Use Fedify's `RequestContext` to bridge between the framework routing layer +and the federation layer. Obtain a context by calling +`federation.createContext(request, contextData)` inside a route handler. +Through this context, routes can look up actors, resolve object URIs, and +invoke `sendActivity` without coupling to Fedify internals. + +Avoid accessing the data stores directly from route handlers when a +`RequestContext` method exists for the same purpose. This keeps the +routing layer thin and ensures that Fedify's internal bookkeeping (key +resolution, URI canonicalization, etc.) is applied consistently. + + +Federation +---------- + +Use `src/federation.ts`. + + +Storing +------- + +Use `src/store.ts` and the provided in-memory stores. + + +View rendering +-------------- + +See `DESIGN.md`. + + +Logging +------- + +Use `@logtape/logtape` and `src/logging.ts`. diff --git a/.agents/skills/create-integration-package/example/DESIGN.md b/.agents/skills/create-integration-package/example/DESIGN.md new file mode 100644 index 000000000..fbd8db29f --- /dev/null +++ b/.agents/skills/create-integration-package/example/DESIGN.md @@ -0,0 +1,295 @@ +Fedify example design system +============================ + +Visual theme & atmosphere +------------------------- + +Clean, functional, and developer-friendly. The aesthetic is minimal and +modern: a neutral canvas with a single bold gradient accent for profile +sections. The overall feel is “documentation site meets social app” —- +sparse enough to read comfortably, colorful enough to feel alive. + +Dark and light themes are mandatory. The system detects +`prefers-color-scheme` and switches automatically; there is no manual +toggle. + +**Key Characteristics:** + + - Neutral canvas that inverts cleanly between light and dark + - Single gradient accent (purple) reserved for the profile header and + primary actions + - Card-based content layout with subtle shadows + - Monospace typesetting for handles and federation addresses + - No framework-specific branding in UI chrome —- only the demo profile + and Fedify logo + + +Color palette & roles +--------------------- + +### Surface & background + +Two CSS custom properties control the entire theme inversion. +`--background` is `#ffffff` in light mode and `#0a0a0a` in dark mode. +`--foreground` is `#171717` in light mode and `#ededed` in dark mode. +All other surface colors derive from these two tokens through `rgba()` +or `color-mix()`. + +### Accent & brand + +Link text and input focus rings use `#3b82f6`. The focus ring shadow is +`rgba(59, 130, 246, 0.3)`. The profile gradient is +`linear-gradient(135deg, #667eea, #764ba2)` and applies exclusively to +the profile header background and the primary action button. + +### Neutral & semantic + +Handle badges and follower items use `#f3f4f6` background with `#000` +text. Card borders use `rgba(0, 0, 0, 0.05)` for subtle dividers and +`rgba(0, 0, 0, 0.1)` for post cards and forms. Textarea borders are +`rgba(0, 0, 0, 0.2)`. Post avatar rings are `#e5e7eb`. Text on +gradient backgrounds is always `white`. + +### Shadow system + +Four elevation levels. Elevation 1 (`0 2px 8px rgba(0,0,0,0.05)`) for +post cards and forms. Elevation 2 (`0 4px 20px rgba(0,0,0,0.08)`) for +info cards and detail cards. Elevation 3 +(`0 8px 32px rgba(0,0,0,0.1)`) for the profile header. Hover lift +(`0 8px 24px rgba(0,0,0,0.1)`) for card hover states. + + +Typography rules +---------------- + +### Font family + +Body text uses the system font stack: +`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif`. +No custom fonts or font loading. Monospace (`monospace`) is reserved for +federation handles and follower addresses. + +### Hierarchy + +Base font size is `16px`. Line height for readable content is `1.625`. + + - **User name** (profile header): `2.25rem`, weight `700` + - **Section title** (card headings, posts title): `1.5rem`, + weight `600`—`700` + - **User handle** (profile header): `1.25rem`, weight `500` + - **Body large** (bio, post detail content): `1.125rem`, weight `400`, + line-height `1.625` + - **Body** (post content, forms): `1rem`, weight `400`, + line-height `1.625` + - **Label** (info labels, metadata, timestamps): `0.875rem`, + weight `600` + +### Principles + +Weight `600`—`700` for headings; `400`—`500` for body and subtext. +Opacity (`0.6`—`0.9`) creates text hierarchy on gradient backgrounds +instead of color changes. + + +Component stylings +------------------ + +### Profile header + +Background is the profile gradient. Text is `white`. Padding `2rem`, +gap `2rem` between avatar and info. Border radius `1rem`. Shadow is +elevation 3. Layout is `flex row`, collapsing to `column` on mobile. + +### Avatar + +Profile header avatar is `7.5rem` square, `border-radius: 50%`, with a +`4px solid rgba(255,255,255,0.2)` border. Post card avatars are `3rem` +with a `2px solid #e5e7eb` border. Post detail avatars are `4rem` with +the same border. + +### Cards + +Background is `var(--background)`. Border is +`1px solid rgba(0,0,0,0.1)`. Border radius is `0.75rem`. Shadow is +elevation 1 or 2 depending on context. Post cards gain +`translateY(-2px)` and hover-lift shadow on hover. Transitions are +`transform 0.2s, box-shadow 0.2s`. + +### Search input + +Full-width text input with `border-radius: 0.5rem` and +`padding: 0.75rem`. Border is `1px solid rgba(0,0,0,0.2)`. On focus +the border becomes `#3b82f6` with a `0 0 0 2px` focus ring shadow. +Placeholder text reads “Search by handle (e.g. @user@example.com)”. + +### Search result + +Inline card below the search input. Shows a row with the target's +avatar (`3rem`, rounded), display name, handle (monospace badge), and an +action button (follow or unfollow depending on current state). Appears +only when a result is available; hidden otherwise. + +### Compose form + +Textarea is full width with `border-radius: 0.5rem` and +`padding: 0.75rem`. On focus the border becomes `#3b82f6` with a +`0 0 0 2px` focus ring shadow. Font inherits body font family. Resize +is vertical only. A submit button sits below the textarea, right-aligned. + +### Buttons (primary) + +Background is the profile gradient. Text is `white`. +Padding `0.5rem 1.5rem`. Border radius `0.5rem`. Font weight `600`. +On hover the button lifts `translateY(-1px)` and the shadow intensifies. +Transition matches cards. + +### Buttons (danger) + +Used for unfollow actions. Background is `#ef4444`. Text is `white`. +Same padding, radius, weight, and hover behavior as primary buttons. + +### Back link + +Background is `color-mix(in srgb, var(--foreground) 10%, transparent)`. +Padding `0.5rem 1rem`. Border radius `0.5rem`. Hover increases the +foreground mix to 15%. + +### Fedify badge + +Background `#7dd3fc`, text `white`, height `1.5rem`, +border radius `0.375rem`. A `::before` pseudo-element renders a 16x16 +Fedify logo icon. + + +Layout principles +----------------- + +### Spacing + +Base unit is `1rem` (16px). Common spacing values are `0.25rem`, +`0.5rem`, `0.75rem`, `1rem`, `1.5rem`, and `2rem`. Section gaps range +from `1.5rem` to `2rem`. + +### Containers + +Profile, posts, and post detail containers max out at `56rem` with +`2rem` padding. The home page container maxes at `780px` with `1rem` +padding. Profile container stretches to `min-height: 100vh`. + +### Grid + +All grids are single-column. Post grid gap is `1.5rem`. Info grid gap +is `1rem`. Home grid gap is `1rem`. Profile content grid gap is `2rem`. + +### Whitespace + +Generous vertical breathing room between sections. Card internal +padding is `1.5rem`—`2rem`. Dividers are bottom borders on list items +(`1px solid rgba(0,0,0,0.05)`); the last item has no border. + + +Responsive behavior +------------------- + +Single breakpoint at `768px`. + +Below the breakpoint: + + - Profile header switches to `flex-direction: column`, + `align-items: center`, `text-align: center` + - User name shrinks from `2.25rem` to `1.875rem` + - Container padding reduces from `2rem` to `1rem` + - Post detail card padding: `2rem` to `1.5rem` + - Author avatar: `4rem` to `3.5rem` + - Author name: `1.5rem` to `1.25rem` + - Post detail content: `1.125rem` to `1rem` + - Info items stack vertically with `0.25rem` gap + +No hover-dependent information. Hover effects add visual polish only. +Tap targets meet at least `44px` effective height through padding. + + +Do's and don'ts +--------------- + +### Do + + - Use CSS custom properties (`--background`, `--foreground`) for + theme-dependent values. + - Detect theme via `prefers-color-scheme`; apply class (`light`/`dark`) + on `` at runtime. + - Keep all layout in a single static CSS file under *public/*. + - Use `rgba()` or `color-mix()` for transparent overlays rather than + hard-coded gray values. + - Render handles and federation addresses in monospace with a light gray + badge background. + - Provide *demo-profile.png* and *fedify-logo.svg* in *public/*. + - Maintain the gradient accent exclusively for profile headers and + primary action buttons. + +### Don't + + - Don't add a CSS framework (Tailwind, Bootstrap). The example must + stay dependency-free on the styling side so that any framework + integration can adopt it. + - Don't introduce custom fonts or font loading. + - Don't use JavaScript for layout or styling beyond the dark-mode class + toggle. + - Don't create multiple themes or color schemes beyond light/dark. + - Don't use the gradient accent on secondary elements (back links, info + cards, text). + - Don't add animations beyond the card hover lift and button press + feedback. + + +Static assets +------------- + +All visual assets live in *public/* and are served at the site root: + + - *style.css* —- Complete stylesheet + - *theme.js* —- Dark/light class toggle script + - *demo-profile.png* —- Demo actor avatar + - *fedify-logo.svg* —- Fedify logo for badge and branding + +### Following / followers list + +Each list is a vertical stack of rows. Each row contains an avatar +(`3rem`, rounded), display name, and handle (monospace badge). Following +rows additionally include an unfollow button (danger style). A count +label sits above each list (e.g. “Following (3)”). When the list is +empty, show a single line of muted text. Both lists update in real time +via SSE without page reload. + + +Page structure +-------------- + +Every example must implement these pages. See *ARCHITECTURE.md* for the +full routing specification. + +### Home (`/`) + +Top to bottom: + +1. **Search** —- text input with debounced lookup; result card appears + inline below +2. **User info** —- profile header (gradient, avatar, name, handle, + bio) +3. **Following** —- count + account list with unfollow buttons +4. **Followers** —- count + account list +5. **Compose** —- textarea + submit button +6. **Posts** —- reverse-chronological post cards, each linking to the + detail page + +### Actor profile (`/users/{identifier}`) + +Profile header (gradient, avatar, name, handle, bio) followed by +following count and followers count. Content-negotiated: serves HTML to +browsers and ActivityPub JSON to federation peers. + +### Post detail (`/users/{identifier}/posts/{id}`) + +Back link to home, then author profile section (same layout as the actor +profile page), then the post content and a formatted timestamp. +Content-negotiated like the actor profile. diff --git a/.agents/skills/create-integration-package/example/README.md b/.agents/skills/create-integration-package/example/README.md new file mode 100644 index 000000000..5f0cadf26 --- /dev/null +++ b/.agents/skills/create-integration-package/example/README.md @@ -0,0 +1,55 @@ + + + + +프레임워크 example application +============================== + +A comprehensive example of building a federated server application using +[Fedify] with [프레임워크]. This example demonstrates how to create an +ActivityPub-compatible federated social media server that can interact with +other federated platforms like Mastodon, Pleroma, and other ActivityPub +implementations using the Fedify and [프레임워크]. + +[Fedify]: https://fedify.dev +[프레임워크]: https://프레임.워크/ + + +Running the example +------------------- + + + +~~~~ sh +# For Deno +deno task dev + +# For pnpm(Node.js) +pnpm dev +~~~~ + + +Communicate with other federated servers +---------------------------------------- + + + +1. Tunnel your local server to the internet using `fedify tunnel` + + ~~~~ sh + fedify tunnel 0000 + ~~~~ + +2. Open your browser tunneled URL and check the server is running properly. + +3. Search your handle and follow from other federated servers such as Mastodon + or Misskey. + + > [!NOTE] + > [ActivityPub Academy] is a great resource to learn how to interact + > with other federated servers using ActivityPub protocol. + +[ActivityPub Academy]: https://www.activitypub.academy/ diff --git a/.agents/skills/create-integration-package/example/deno.jsonc b/.agents/skills/create-integration-package/example/deno.jsonc new file mode 100644 index 000000000..44ac01f3e --- /dev/null +++ b/.agents/skills/create-integration-package/example/deno.jsonc @@ -0,0 +1,13 @@ +{ + "imports": { + // Add imports required for the framework you are integrating with. + // If packages are already added in the workspace, + // you don't need to add import maps for here. + }, + "tasks": { + // `dev` task STRONGLY RECOMMENDED for `mise test:example`. + // Other tasks can be added as needed. + // Follow the convention of the framework you are integrating with. + "dev": "deno run --watch -A src/main.ts" + } +} diff --git a/.agents/skills/create-integration-package/example/package.jsonc b/.agents/skills/create-integration-package/example/package.jsonc new file mode 100644 index 000000000..7c6bbb114 --- /dev/null +++ b/.agents/skills/create-integration-package/example/package.jsonc @@ -0,0 +1,29 @@ +{ + // Fill 프레임워크 with the name of the framework you want to integrate with + "name": "프레임워크-example", + "version": "0.0.1", + "private": true, + "type": "module", + "description": "Fedify app with 프레임워크 integration", + "scripts": { + // `dev` script STRONGLY RECOMMENDED for `mise test:example`. + // Other scripts can be added as needed. + // Follow the convention of the framework you are integrating with. + "dev": "" + }, + "dependencies": { + // Add packages required for the 프레임워크 integration here + // If packages are already added in the workspace, + // you can reference them with "catalog:". + // Check `pnpm-workspace.yaml` for more packages in the workspace. + "@fedify/fedify": "workspace:^", + "@fedify/프레임워크": "workspace:^", + "@fedify/vocab": "workspace:^", + "@logtape/logtape": "catalog:" + }, + "devDependencies": { + "typescript": "catalog:", + "@types/node": "catalog:" + // Add dev dependencies required for the 프레임워크 integration here + } +} diff --git a/.agents/skills/create-integration-package/example/public/demo-profile.png b/.agents/skills/create-integration-package/example/public/demo-profile.png new file mode 100644 index 000000000..d91cf5956 Binary files /dev/null and b/.agents/skills/create-integration-package/example/public/demo-profile.png differ diff --git a/.agents/skills/create-integration-package/example/public/fedify-logo.svg b/.agents/skills/create-integration-package/example/public/fedify-logo.svg new file mode 100644 index 000000000..ba4a7e371 --- /dev/null +++ b/.agents/skills/create-integration-package/example/public/fedify-logo.svg @@ -0,0 +1,206 @@ + + + + + + + + Fedify + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fedify + + + + diff --git a/.agents/skills/create-integration-package/example/public/style.css b/.agents/skills/create-integration-package/example/public/style.css new file mode 100644 index 000000000..0f9a07ef0 --- /dev/null +++ b/.agents/skills/create-integration-package/example/public/style.css @@ -0,0 +1,504 @@ +:root { + --background: #ffffff; + --foreground: #171717; +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background: var(--background); + color: var(--foreground); + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Oxygen, Ubuntu, Cantarell, sans-serif; +} + +a { + color: #3b82f6; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} + +/* Profile Header */ +.profile-header { + display: flex; + gap: 2rem; + padding: 2rem; + margin-bottom: 2rem; + border-radius: 1rem; + color: white; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); +} + +.avatar-section { + flex-shrink: 0; +} + +.avatar { + width: 7.5rem; + height: 7.5rem; + border-radius: 50%; + object-fit: cover; + border: 4px solid rgba(255, 255, 255, 0.2); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2); +} + +.user-info { + display: flex; + flex-direction: column; + justify-content: center; + flex: 1; +} + +.user-name { + font-size: 2.25rem; + font-weight: bold; + margin: 0 0 0.5rem 0; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.user-handle { + font-size: 1.25rem; + font-weight: 500; + margin-bottom: 1rem; + opacity: 0.9; +} + +.user-bio { + font-size: 1.125rem; + line-height: 1.625; + opacity: 0.95; + margin: 0; +} + +/* Profile Container & Content */ +.profile-container { + max-width: 56rem; + margin: 0 auto; + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; + padding: 2rem; + min-height: 100vh; +} + +.profile-content { + display: grid; + gap: 2rem; +} + +.info-card { + border-radius: 0.75rem; + border: 1px solid rgba(0, 0, 0, 0.05); + background: var(--background); + color: var(--foreground); + padding: 2rem; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); +} + +.info-card h3 { + font-size: 1.5rem; + font-weight: 600; + margin: 0 0 1.5rem 0; +} + +.info-grid { + display: grid; + gap: 1rem; +} + +.info-item { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 0.75rem 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.info-item:last-child { + border-bottom: none; +} + +.info-label { + font-size: 0.875rem; + font-weight: 600; + color: color-mix(in srgb, var(--foreground) 60%, transparent); +} + +.fedify-anchor { + display: inline-flex; + align-items: center; + gap: 0.25rem; + height: 1.5rem; + padding: 0.125rem 0.25rem; + border-radius: 0.375rem; + background: #7dd3fc; + color: white; + font-weight: 500; + text-decoration: none; +} + +.fedify-anchor::before { + content: ""; + display: inline-block; + width: 16px; + height: 16px; + background-image: url("/fedify-logo.svg"); + background-size: 16px 16px; + vertical-align: middle; + margin-bottom: 0.125rem; +} + +/* Post Form */ +.post-form { + max-width: 56rem; + margin: 2rem auto; + padding: 1.5rem; + border-radius: 0.75rem; + border: 1px solid rgba(0, 0, 0, 0.1); + background: var(--background); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); +} + +.form-group { + margin-bottom: 1rem; +} + +.form-label { + display: block; + font-size: 1.125rem; + font-weight: 600; + margin-bottom: 0.5rem; + color: var(--foreground); +} + +.form-textarea { + width: 100%; + resize: none; + border-radius: 0.5rem; + border: 1px solid rgba(0, 0, 0, 0.2); + padding: 0.75rem; + font-size: 1rem; + background: var(--background); + color: var(--foreground); + transition: border-color 0.2s, box-shadow 0.2s; + font-family: inherit; +} + +.form-textarea:focus { + outline: none; + border-color: #3b82f6; + box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3); +} + +.post-button { + padding: 0.5rem 1.5rem; + border: none; + border-radius: 0.5rem; + font-size: 1rem; + font-weight: 600; + color: white; + cursor: pointer; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + transition: transform 0.2s, box-shadow 0.2s; +} + +.post-button:hover { + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} + +/* Posts Container & Grid */ +.posts-container { + max-width: 56rem; + margin: 0 auto; + padding: 0 2rem; +} + +.posts-title { + font-size: 1.5rem; + font-weight: bold; + margin-bottom: 1.5rem; + color: var(--foreground); +} + +.posts-grid { + display: grid; + gap: 1.5rem; +} + +.post-card { + border-radius: 0.75rem; + border: 1px solid rgba(0, 0, 0, 0.1); + background: var(--background); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + transition: transform 0.2s, box-shadow 0.2s; +} + +.post-card:hover { + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); +} + +.post-link { + display: block; + padding: 1.5rem; + text-decoration: none; + color: inherit; +} +.post-link:hover { + text-decoration: none; +} + +.post-header { + display: flex; + align-items: center; + gap: 0.75rem; + margin-bottom: 1rem; +} + +.post-avatar { + width: 3rem; + height: 3rem; + border-radius: 50%; + object-fit: cover; + border: 2px solid #e5e7eb; +} + +.post-user-info { + flex: 1; +} + +.post-user-name { + font-size: 1.125rem; + font-weight: 600; + margin: 0 0 0.25rem 0; + color: var(--foreground); +} + +.post-user-handle { + font-size: 0.875rem; + opacity: 0.7; + color: var(--foreground); + margin: 0; +} + +.post-content { + font-size: 1rem; + line-height: 1.625; + color: var(--foreground); +} + +.post-content p { + margin: 0; +} + +/* Post Detail */ +.post-detail-container { + max-width: 56rem; + margin: 0 auto; + padding: 2rem; +} + +.post-detail-card { + border-radius: 0.75rem; + border: 1px solid rgba(0, 0, 0, 0.1); + background: var(--background); + padding: 2rem; + margin-bottom: 2rem; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); +} + +.post-detail-author { + display: flex; + align-items: flex-start; + gap: 1rem; + padding-bottom: 1.5rem; + margin-bottom: 1.5rem; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + text-decoration: none; + color: inherit; +} +.post-detail-author:hover { + text-decoration: none; +} + +.author-avatar { + width: 4rem; + height: 4rem; + border-radius: 50%; + object-fit: cover; + border: 2px solid #e5e7eb; +} + +.author-info { + flex: 1; +} + +.author-name { + font-size: 1.5rem; + font-weight: bold; + margin: 0 0 0.25rem 0; + color: var(--foreground); +} + +.author-handle { + font-size: 1rem; + font-weight: 500; + opacity: 0.7; + margin: 0 0 0.5rem 0; + color: var(--foreground); +} + +.post-timestamp { + font-size: 0.875rem; + opacity: 0.6; + color: var(--foreground); +} + +.post-detail-content { + padding: 1.5rem 0; + font-size: 1.125rem; + line-height: 1.625; + color: var(--foreground); +} + +.post-detail-content p { + margin: 0; +} + +.back-link { + display: inline-block; + margin-bottom: 1.5rem; + padding: 0.5rem 1rem; + border-radius: 0.5rem; + font-weight: 500; + color: var(--foreground); + background: color-mix(in srgb, var(--foreground) 10%, transparent); + text-decoration: none; + transition: background 0.2s; +} + +.back-link:hover { + background: color-mix(in srgb, var(--foreground) 15%, transparent); + text-decoration: none; +} + +/* Home Page */ +.home-container { + max-width: 780px; + margin: 2rem auto; + display: grid; + gap: 1rem; + padding: 1rem; +} + +.home-logo { + display: block; + width: 8rem; + height: 8rem; + margin: 0 auto; +} + +.home-banner { + display: flex; + flex-wrap: wrap; + justify-content: center; + font-family: monospace; + line-height: 1.2; + white-space: pre; +} + +.home-handle { + font-family: monospace; + background: #f3f4f6; + color: #000; + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; + user-select: all; +} + +.follower-item { + font-family: monospace; + background: #f3f4f6; + color: #000; + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; +} + +.follower-list { + display: flex; + flex-direction: column; + gap: 0.25rem; + width: max-content; + list-style: none; +} + +/* Responsive */ +@media (max-width: 768px) { + .profile-container { + padding: 1rem; + } + + .profile-header { + flex-direction: column; + align-items: center; + gap: 1rem; + text-align: center; + } + + .user-name { + font-size: 1.875rem; + } + + .info-item { + flex-direction: column; + align-items: flex-start; + gap: 0.25rem; + } + + .posts-container { + padding: 0 1rem; + } + + .post-form { + padding: 1rem; + } + + .post-detail-container { + padding: 1rem; + } + + .post-detail-card { + padding: 1.5rem; + } + + .author-avatar { + width: 3.5rem; + height: 3.5rem; + } + + .author-name { + font-size: 1.25rem; + } + + .post-detail-content { + font-size: 1rem; + } +} diff --git a/.agents/skills/create-integration-package/example/public/theme.js b/.agents/skills/create-integration-package/example/public/theme.js new file mode 100644 index 000000000..8d521d625 --- /dev/null +++ b/.agents/skills/create-integration-package/example/public/theme.js @@ -0,0 +1,7 @@ +"use strict"; +var mq = window.matchMedia("(prefers-color-scheme: dark)"); +document.body.classList.add(mq.matches ? "dark" : "light"); +mq.addEventListener("change", function (e) { + document.body.classList.remove("light", "dark"); + document.body.classList.add(e.matches ? "dark" : "light"); +}); diff --git a/.agents/skills/create-integration-package/example/src/federation.ts b/.agents/skills/create-integration-package/example/src/federation.ts new file mode 100644 index 000000000..d4952e85d --- /dev/null +++ b/.agents/skills/create-integration-package/example/src/federation.ts @@ -0,0 +1,163 @@ +import { + createFederation, + generateCryptoKeyPair, + InProcessMessageQueue, + MemoryKvStore, +} from "@fedify/fedify"; +import { + Accept, + Endpoints, + Follow, + Image, + Note, + Person, + PUBLIC_COLLECTION, + type Recipient, + Undo, +} from "@fedify/vocab"; + +const federation = createFederation({ + kv: new MemoryKvStore(), + queue: new InProcessMessageQueue(), +}); + +const IDENTIFIER = "demo"; + +federation + .setActorDispatcher( + "/users/{identifier}", + async (context, identifier) => { + if (identifier != IDENTIFIER) { + return null; + } + const keyPairs = await context.getActorKeyPairs(identifier); + return new Person({ + id: context.getActorUri(identifier), + name: "Fedify Demo", + summary: "This is a Fedify Demo account.", + preferredUsername: identifier, + icon: new Image({ url: new URL("/demo-profile.png", context.url) }), + url: new URL("/", context.url), + inbox: context.getInboxUri(identifier), + endpoints: new Endpoints({ sharedInbox: context.getInboxUri() }), + publicKey: keyPairs[0].cryptographicKey, + assertionMethods: keyPairs.map((keyPair) => keyPair.multikey), + }); + }, + ) + .setKeyPairsDispatcher(async (_, identifier) => { + if (identifier != IDENTIFIER) { + return []; + } + const keyPairs = keyPairsStore.get(identifier); + if (keyPairs) { + return keyPairs; + } + const { privateKey, publicKey } = await generateCryptoKeyPair(); + keyPairsStore.set(identifier, [{ privateKey, publicKey }]); + return [{ privateKey, publicKey }]; + }); + +federation + .setInboxListeners("/users/{identifier}/inbox", "/inbox") + .on(Follow, async (context, follow) => { + if ( + follow.id == null || + follow.actorId == null || + follow.objectId == null + ) { + return; + } + const result = context.parseUri(follow.objectId); + if (result?.type !== "actor" || result.identifier !== IDENTIFIER) { + return; + } + const follower = await follow.getActor(context) as Person; + if (!follower?.id || follower.id === null) { + throw new Error("follower is null"); + } + await context.sendActivity( + { identifier: result.identifier }, + follower, + new Accept({ + id: new URL( + `#accepts/${follower.id.href}`, + context.getActorUri(IDENTIFIER), + ), + actor: follow.objectId, + object: follow, + }), + ); + relationStore.set(follower.id.href, follower); + }) + .on(Undo, async (context, undo) => { + const activity = await undo.getObject(context); + if (activity instanceof Follow) { + if (activity.id == null) { + return; + } + if (undo.actorId == null) { + return; + } + relationStore.delete(undo.actorId.href); + } else { + console.debug(undo); + } + }); + +federation.setObjectDispatcher( + Note, + "/users/{identifier}/posts/{id}", + (ctx, values) => { + const id = ctx.getObjectUri(Note, values); + const post = postStore.get(id); + if (post == null) return null; + return new Note({ + id, + attribution: ctx.getActorUri(values.identifier), + to: PUBLIC_COLLECTION, + cc: ctx.getFollowersUri(values.identifier), + content: post.content, + mediaType: "text/html", + published: post.published, + url: id, + }); + }, +); + +federation + .setFollowersDispatcher( + "/users/{identifier}/followers", + () => { + const followers = Array.from(relationStore.values()); + const items: Recipient[] = followers.map((f) => ({ + id: f.id, + inboxId: f.inboxId, + endpoints: f.endpoints, + })); + return { items }; + }, + ); + +federation.setNodeInfoDispatcher("/nodeinfo/2.1", (ctx) => { + return { + software: { + /** + * Fill `` with the actual framework name. + * Lowercase, digits, and hyphens only. + */ + name: "fedify-", + version: "0.0.1", + homepage: new URL(ctx.canonicalOrigin), + }, + protocols: ["activitypub"], + usage: { + // Usage statistics is hard-coded here for demonstration purposes. + // You should replace these with real statistics: + users: { total: 1, activeHalfyear: 1, activeMonth: 1 }, + localPosts: postStore.getAll().length, + }, + }; +}); + +export default federation; diff --git a/.agents/skills/create-integration-package/example/src/logging.ts b/.agents/skills/create-integration-package/example/src/logging.ts new file mode 100644 index 000000000..b6c55b34a --- /dev/null +++ b/.agents/skills/create-integration-package/example/src/logging.ts @@ -0,0 +1,23 @@ +import { configure, getConsoleSink } from "@logtape/logtape"; +import { AsyncLocalStorage } from "node:async_hooks"; + +await configure({ + contextLocalStorage: new AsyncLocalStorage(), + sinks: { + console: getConsoleSink(), + }, + filters: {}, + loggers: [ + { + category: "default example", + lowestLevel: "debug", + sinks: ["console"], + }, + { category: "fedify", lowestLevel: "info", sinks: ["console"] }, + { + category: ["logtape", "meta"], + lowestLevel: "warning", + sinks: ["console"], + }, + ], +}); diff --git a/.agents/skills/create-integration-package/example/src/main.ts b/.agents/skills/create-integration-package/example/src/main.ts new file mode 100644 index 000000000..54324dcb0 --- /dev/null +++ b/.agents/skills/create-integration-package/example/src/main.ts @@ -0,0 +1,2 @@ +import "./logging.ts"; +import "./app.ts"; diff --git a/.agents/skills/create-integration-package/example/src/store.ts b/.agents/skills/create-integration-package/example/src/store.ts new file mode 100644 index 000000000..154e71f5e --- /dev/null +++ b/.agents/skills/create-integration-package/example/src/store.ts @@ -0,0 +1,45 @@ +import { Note, Person } from "@fedify/vocab"; + +declare global { + var keyPairsStore: Map>; + var relationStore: Map; + var postStore: PostStore; +} + +class PostStore { + #map: Map = new Map(); + #timeline: URL[] = []; + constructor() {} + append(posts: Note[]) { + posts.filter((p) => p.id && !this.#map.has(p.id.toString())) + .forEach((p) => { + this.#map.set(p.id!.toString(), p); + this.#timeline.push(p.id!); + }); + } + get(id: URL) { + return this.#map.get(id.toString()); + } + getAll() { + return this.#timeline.toReversed() + .map((id) => id.toString()) + .map((id) => this.#map.get(id)!) + .filter((p) => p); + } + delete(id: URL) { + const existed = this.#map.delete(id.toString()); + if (existed) { + this.#timeline = this.#timeline.filter((i) => i !== id); + } + } +} + +const keyPairsStore = globalThis.keyPairsStore ?? new Map(); +const relationStore = globalThis.relationStore ?? new Map(); +const postStore = globalThis.postStore ?? new PostStore(); + +// this is just a hack for the demo +// never do this in production, use safe and secure storage +globalThis.keyPairsStore = keyPairsStore; +globalThis.relationStore = relationStore; +globalThis.postStore = postStore; diff --git a/.agents/skills/create-integration-package/init/framework.ts b/.agents/skills/create-integration-package/init/framework.ts new file mode 100644 index 000000000..a6d6f4fc5 --- /dev/null +++ b/.agents/skills/create-integration-package/init/framework.ts @@ -0,0 +1,58 @@ +// packages/init/src/webframeworks/프레임워크.ts +// The import paths are written based on the files in +// `packages/init/src/webframeworks/` where the actual files must exist, +// so do not modify them unless necessary. + +import deps from "../json/deps.json" with { type: "json" }; +import { WebFrameworkDescription } from "../types.ts"; +import { defaultDenoDependencies, defaultDevDependencies } from "./const.ts"; +import { getInstruction } from "./utils.ts"; + +const frameworkDescription: WebFrameworkDescription = { + name: "프레임워크", // Fill 프레임워크 with the official framework name + packageManagers: [ + // List the package managers that support this framework, + // the list should be a subset of `PACKAGE_MANAGER` from `../const.ts`. + // If the framework is compatible with all package managers, + // you can just use `packageManagers: PACKAGE_MANAGER`. + ], + defaultPort: 0, // Fill in the default port of the framework + init: ({ + // Destructure necessary parameters from the argument + packageManager: pm, + }) => ({ + command: [ + // Optional shell command to run before scaffolding e.g., `create-next-app`. + // Split the command into an array of command and arguments, + // e.g., `["npx", "create-next-app@latest"]`. + ], + dependencies: pm === "deno" + ? { + // Use `deps.json` for version numbers, + // e.g., `"@fedify/프레임워크": deps["@fedify/프레임워크"]`. + ...defaultDenoDependencies, + } + : { + // Use `deps.json` for version numbers, + // e.g., `"@fedify/프레임워크": deps["@fedify/프레임워크"]`. + }, + devDependencies: { + // Use `deps.json` for version numbers, + // e.g., `"@fedify/프레임워크": deps["@fedify/프레임워크"]`. + ...defaultDevDependencies, + }, + federationFile: "**/federation.ts", + loggingFile: "**/logging.ts", + tasks: { + // If `command` create a project with `tasks` in `deno.json` (or `script`s in + // `package.json`) to run application, this could be unnecessary. + // In the tasks of the finally generated application, at least include + // a `dev` task to run the development server. `dev` task is used by + // `mise test:init` to run tests against the generated project. + // For Node.js/Bun, `lint: "eslint ."` is needed. + }, + instruction: getInstruction(pm, 0 /* Replace with default port */), + }), +}; + +export default frameworkDescription; diff --git a/.agents/skills/create-integration-package/package/README.md b/.agents/skills/create-integration-package/package/README.md new file mode 100644 index 000000000..2ef2525e9 --- /dev/null +++ b/.agents/skills/create-integration-package/package/README.md @@ -0,0 +1,72 @@ + + + + +@fedify/프레임워크: Integrate Fedify with 프레임워크 +==================================================== + +[![JSR][JSR badge]][JSR] +[![npm][npm badge]][npm] +[![Matrix][Matrix badge]][Matrix] +[![Follow @fedify@hollo.social][@fedify@hollo.social badge]][@fedify@hollo.social] + +This package provides a simple way to integrate [Fedify] with [프레임워크]. + +[JSR badge]: https://jsr.io/badges/@fedify/nuxt +[JSR]: https://jsr.io/@fedify/nuxt +[npm badge]: https://img.shields.io/npm/v/@fedify/nuxt?logo=npm +[npm]: https://www.npmjs.com/package/@fedify/nuxt +[Matrix badge]: https://img.shields.io/matrix/fedify%3Amatrix.org +[Matrix]: https://matrix.to/#/#fedify:matrix.org +[@fedify@hollo.social badge]: https://fedi-badge.deno.dev/@fedify@hollo.social/followers.svg +[@fedify@hollo.social]: https://hollo.social/@fedify +[Fedify]: https://fedify.dev/ +[프레임워크]: https://프레임.워크/ + + +Installation +------------ + + + +~~~~ bash +deno add jsr:@fedify/프레임워크 +# or +npm add @fedify/프레임워크 +# or +pnpm add @fedify/프레임워크 +# or +yarn add @fedify/프레임워크 +# or +bun add @fedify/프레임워크 +~~~~ + + +Usage +----- + +First, create your `Federation` instance in a server utility file, +e.g., *src/federation.ts*: + +~~~~ typescript +import { createFederation, MemoryKvStore } from "@fedify/fedify"; + +const federation = createFederation({ + kv: new MemoryKvStore(), +}); + +// ... configure your federation ... + +export default federation; +~~~~ + +Then, add Fedify middleware to your server: + +~~~~ typescript +import fedifyHandler from "@fedify/프레임워크"; +import { federation } from "./federation.ts"; + +const fedifyMiddleware = fedifyHandler(federation); + +app.use(fedifyMiddleware); +~~~~ diff --git a/.agents/skills/create-integration-package/package/deno.jsonc b/.agents/skills/create-integration-package/package/deno.jsonc new file mode 100644 index 000000000..879979c29 --- /dev/null +++ b/.agents/skills/create-integration-package/package/deno.jsonc @@ -0,0 +1,22 @@ +{ + "name": "@fedify/프레임워크", // Replace `프레임워크` with the framework name in lowercase + "version": "*.*.*", // Sync with packages/fedify/deno.json + "license": "MIT", + "exports": { + ".": "./src/mod.ts" + }, + "exclude": [ + "dist", + "node_modules" + ], + "publish": { + "exclude": [ + "**/*.test.ts", // If there are test files + "tsdown.config.ts" + ] + }, + "tasks": { + "check": "deno fmt --check && deno lint && deno check src/*.ts", + "test": "deno test" // Add if --allow-* for permissions is needed + } +} diff --git a/.agents/skills/create-integration-package/package/package.jsonc b/.agents/skills/create-integration-package/package/package.jsonc new file mode 100644 index 000000000..552622b92 --- /dev/null +++ b/.agents/skills/create-integration-package/package/package.jsonc @@ -0,0 +1,66 @@ +{ + "name": "@fedify/프레임워크", // Fill 프레임워크 with the framework name in lowercase + "version": "*.*.*", // Sync with packages/fedify/package.json + "description": "Integration Package for Fedify with 프레임워크", // Fill 프레임워크 with the framework name + "keywords": [ + "Fedify", + "Federation", + // Add relevant keywords for the framework + ], + "author": { // Fill in author information + "name": "", + "email": "", + "url": "", + }, + "repository": { + "type": "git", + "url": "git+https://github.com/fedify-dev/fedify.git", + "directory": "packages/프레임워크" // Fill 프레임워크 with the framework name + }, + "homepage": "https://fedify.dev/", + "license": "MIT", + "bugs": { + "url": "https://github.com/fedify-dev/fedify/issues" + }, + "funding": [ + "https://opencollective.com/fedify", + "https://github.com/sponsors/dahlia" + ], + "main": "./dist/mod.js", + "module": "./dist/mod.mjs", + "types": "./dist/mod.d.ts", + "exports": { + ".": { + "types": { + "import": "./dist/mod.d.ts", + "require": "./dist/mod.d.cts", + "default": "./dist/mod.d.ts" + }, + "import": "./dist/mod.js", + "require": "./dist/mod.cjs", + "default": "./dist/mod.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist/", + "package.json" + ], + "peerDependencies": { + "@fedify/fedify": "workspace:^", + "@nestjs/common": "catalog:", + // Add other relevant peer dependencies for the framework + }, + "devDependencies": { + "@types/node": "catalog:", + "tsdown": "catalog:", + "typescript": "catalog:", + // Add other relevant peer dependencies for the framework + }, + "scripts": { + "build:self": "tsdown", + "build": "pnpm --filter @fedify/프레임워크... run build:self", + "prepack": "pnpm build", + "prepublish": "pnpm build" + } +} diff --git a/.agents/skills/create-integration-package/package/src/mod.ts b/.agents/skills/create-integration-package/package/src/mod.ts new file mode 100644 index 000000000..c484666e7 --- /dev/null +++ b/.agents/skills/create-integration-package/package/src/mod.ts @@ -0,0 +1,16 @@ +import { Federation } from "@fedify/fedify"; + +// `FrameworkContext` could be unnecessary. +// Remove it if the framework's middleware handler does not provide a context object. + +export type ContextDataFactory = ( + context: FrameworkContext, +) => TContextData | Promise; + +export function fedifyMiddleware( + federation: Federation, + contextDataFactory?: ContextDataFactory = + (() => void 0 as TContextData), +): FrameworkMiddlewareHandler { + // Implement handler or middleware +} diff --git a/.agents/skills/create-integration-package/package/tsdown.config.ts b/.agents/skills/create-integration-package/package/tsdown.config.ts new file mode 100644 index 000000000..54e25f61b --- /dev/null +++ b/.agents/skills/create-integration-package/package/tsdown.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsdown"; + +export default defineConfig({ + entry: ["src/mod.ts"], + format: ["esm", "cjs"], + platform: "node", + outExtensions({ format }) { + return { + js: format === "cjs" ? ".cjs" : ".js", + dts: format === "cjs" ? ".d.cts" : ".d.ts", + }; + }, +}); diff --git a/.hongdown.toml b/.hongdown.toml index 3357c8eec..780604a05 100644 --- a/.hongdown.toml +++ b/.hongdown.toml @@ -27,6 +27,7 @@ proper_nouns = [ "@fedify/hono", "@fedify/koa", "@fedify/mysql", + "@fedify/nuxt", "@fedify/nestjs", "@fedify/postgres", "@fedify/redis", diff --git a/AGENTS.md b/AGENTS.md index b23d7d2b9..25a27be53 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -158,11 +158,10 @@ Common tasks ### Implementing framework integrations -1. Create a new package in *packages/* directory for new integrations -2. Follow pattern from existing integration packages (*packages/hono/*, - *packages/sveltekit/*) -3. Use standard request/response interfaces for compatibility -4. Consider creating example applications in *examples/* that demonstrate usage +A detailed step-by-step guide is available in +*.agents/skills/create-integration-package/SKILL.md*. It covers the entire +workflow: researching the framework, creating the package, adding it to +`fedify init`, testing, and writing an example. ### Creating database adapters @@ -325,7 +324,7 @@ The monorepo uses different build processes for different packages: 3. **Database adapters and integrations**: Use tsdown for TypeScript compilation: - *packages/amqp/*, *packages/astro/*, *packages/elysia*, - *packages/express/*, *packages/h3/*, + *packages/express/*, *packages/h3/*, *packages/nuxt/*, *packages/mysql/*, *packages/sqlite/*, *packages/postgres/*, *packages/redis/*, *packages/nestjs/* - Built to support Node.js and Bun environments diff --git a/CHANGES.md b/CHANGES.md index 89b9a29fa..f992e862e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -35,6 +35,15 @@ To be released. [FEP-0837]: https://w3id.org/fep/0837 [#578]: https://github.com/fedify-dev/fedify/issues/578 +### @fedify/adonis + + - Added `@fedify/adonis` package for integrating Fedify with [AdonisJS]. + [[#139], [#671] by ChanHaeng Lee] + +[AdonisJS]: https://adonisjs.com/ +[#139]: https://github.com/fedify-dev/fedify/issues/139 +[#671]: https://github.com/fedify-dev/fedify/pull/671 + ### @fedify/solidstart - Added `@fedify/solidstart` package for integrating Fedify with @@ -47,6 +56,17 @@ To be released. [#601]: https://github.com/fedify-dev/fedify/pull/601 [#652]: https://github.com/fedify-dev/fedify/pull/652 +### @fedify/nuxt + + - Added `@fedify/nuxt` for integrating Fedify with [Nuxt] through + `server/middleware` and Nitro's `errorHandler`, so Nuxt routes and + ActivityPub endpoints can share the same paths with proper content + negotiation. + [[#149], [#671] by ChanHaeng Lee] + +[Nuxt]: https://nuxt.com/ +[#149]: https://github.com/fedify-dev/fedify/issues/149 + ### @fedify/init - Fixed errors when using `fedify init` with certain web framework @@ -54,8 +74,15 @@ To be released. Environment variables are now properly loaded at runtime, resolving the `TypeError: Cannot read properties of undefined` from `mysql2`. [[#649], [#656] by ChanHaeng Lee] + - Added AdonisJS to `fedify init`, including middleware registration + templates for newly scaffolded projects. + [[#139], [#653], [#671] by ChanHaeng Lee] + - Added Nuxt to `fedify init`, including middleware and Nitro error handler + templates for newly scaffolded projects. + [[#149], [#653], [#671] by ChanHaeng Lee] [#649]: https://github.com/fedify-dev/fedify/issues/649 +[#653]: https://github.com/fedify-dev/fedify/issues/653 [#656]: https://github.com/fedify-dev/fedify/pull/656 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8b73c580e..33d6c218f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -208,6 +208,15 @@ When adding a new package to the monorepo, the following files must be updated: - If using pnpm catalog for dependency management: Add to `catalog` in *pnpm-workspace.yaml*. +### Adding a web framework integration + +A step-by-step guide for implementing a web framework integration package is +available in *.agents/skills/create-integration-package/SKILL.md*. Although +the file is primarily designed for AI coding agents, the instructions are +written so that human contributors can also read and follow them. The guide +covers the entire workflow from researching the framework through creating +the package, adding it to `fedify init`, testing, and writing an example. + ### Dependency management Fedify uses two package managers: @@ -383,6 +392,7 @@ The repository is organized as a monorepo with the following packages: - *packages/mysql/*: MySQL/MariaDB drivers (@fedify/mysql) for Fedify. - *packages/nestjs/*: NestJS integration (@fedify/nestjs) for Fedify. - *packages/next/*: Next.js integration (@fedify/next) for Fedify. + - *packages/nuxt/*: Nuxt integration (@fedify/nuxt) for Fedify. - *packages/postgres/*: PostgreSQL drivers (@fedify/postgres) for Fedify. - *packages/redis/*: Redis drivers (@fedify/redis) for Fedify. - *packages/relay/*: ActivityPub relay support (@fedify/relay) for Fedify. diff --git a/cspell.json b/cspell.json index 1f22276ec..67ea9a788 100644 --- a/cspell.json +++ b/cspell.json @@ -34,6 +34,7 @@ "elysia", "elysiajs", "fanout", + "fastify", "federatable", "Federatable", "fedi", @@ -77,6 +78,7 @@ "multitenancy", "Nexkey", "nodeinfo", + "nuxt", "optique", "phensley", "Pico", diff --git a/deno.json b/deno.json index 869bc2e36..6954853e6 100644 --- a/deno.json +++ b/deno.json @@ -1,5 +1,6 @@ { "workspace": [ + "./packages/adonis", "./packages/amqp", "./packages/astro", "./packages/cfworkers", @@ -21,6 +22,7 @@ "./packages/redis", "./packages/relay", "./packages/solidstart", + "./packages/nuxt", "./packages/sqlite", "./packages/sveltekit", "./packages/testing", diff --git a/deno.lock b/deno.lock index 85f5d4c9f..37536cd4d 100644 --- a/deno.lock +++ b/deno.lock @@ -1,74 +1,106 @@ { "version": "5", "specifiers": { + "jsr:@alinea/suite@~0.6.3": "0.6.3", "jsr:@david/console-static-text@0.3": "0.3.0", "jsr:@david/dax@~0.43.2": "0.43.2", "jsr:@david/path@0.2": "0.2.0", "jsr:@david/which@~0.4.1": "0.4.1", + "jsr:@deno/esbuild-plugin@^1.2.0": "1.2.1", + "jsr:@deno/loader@~0.3.10": "0.3.14", + "jsr:@deno/loader@~0.3.2": "0.3.14", "jsr:@fresh/build-id@1": "1.0.1", - "jsr:@fresh/core@^2.1.4": "2.2.0", + "jsr:@fresh/core@2": "2.2.2", + "jsr:@fresh/core@^2.1.4": "2.2.2", + "jsr:@fresh/core@^2.2.0": "2.2.2", + "jsr:@fresh/plugin-vite@^1.0.7": "1.0.8", "jsr:@hongminhee/localtunnel@0.3": "0.3.0", - "jsr:@hono/hono@^4.8.3": "4.12.4", + "jsr:@hono/hono@^4.7.1": "4.12.12", + "jsr:@hono/hono@^4.8.3": "4.12.12", "jsr:@logtape/file@^2.0.5": "2.0.5", "jsr:@logtape/logtape@^1.0.4": "1.3.7", "jsr:@logtape/logtape@^2.0.5": "2.0.5", "jsr:@optique/config@~0.10.7": "0.10.7", "jsr:@optique/core@~0.10.7": "0.10.7", "jsr:@optique/run@~0.10.7": "0.10.7", + "jsr:@std/assert@0.224": "0.224.0", + "jsr:@std/assert@0.226": "0.226.0", + "jsr:@std/assert@^1.0.13": "1.0.19", + "jsr:@std/async@^1.0.13": "1.2.0", "jsr:@std/bytes@^1.0.6": "1.0.6", + "jsr:@std/dotenv@~0.225.5": "0.225.6", "jsr:@std/encoding@^1.0.10": "1.0.10", + "jsr:@std/fmt@0.224": "0.224.0", "jsr:@std/fmt@1": "1.0.9", + "jsr:@std/fmt@^1.0.7": "1.0.9", "jsr:@std/fmt@^1.0.8": "1.0.9", + "jsr:@std/fs@0.224": "0.224.0", "jsr:@std/fs@1": "1.0.23", "jsr:@std/fs@^1.0.19": "1.0.23", + "jsr:@std/fs@^1.0.3": "1.0.23", "jsr:@std/html@^1.0.5": "1.0.5", "jsr:@std/http@^1.0.21": "1.0.25", + "jsr:@std/internal@0.224": "0.224.0", + "jsr:@std/internal@1": "1.0.12", "jsr:@std/internal@^1.0.12": "1.0.12", "jsr:@std/io@0.225": "0.225.3", + "jsr:@std/json@^1.0.2": "1.0.3", + "jsr:@std/jsonc@^1.0.2": "1.0.2", + "jsr:@std/media-types@^1.1.0": "1.1.0", + "jsr:@std/path@0.224": "0.224.0", "jsr:@std/path@1": "1.1.4", "jsr:@std/path@^1.0.6": "1.1.4", "jsr:@std/path@^1.1.0": "1.1.4", + "jsr:@std/path@^1.1.1": "1.1.4", "jsr:@std/path@^1.1.2": "1.1.4", "jsr:@std/path@^1.1.4": "1.1.4", - "jsr:@valibot/valibot@^1.2.0": "1.2.0", + "jsr:@std/semver@^1.0.6": "1.0.8", + "jsr:@std/testing@0.224": "0.224.0", + "jsr:@std/uuid@^1.0.9": "1.1.0", + "jsr:@valibot/valibot@^1.2.0": "1.3.1", "npm:@alinea/suite@~0.6.3": "0.6.3", - "npm:@astrojs/node@^10.0.3": "10.0.4_astro@5.18.1__@types+node@24.12.0__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.0_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3", + "npm:@astrojs/node@^10.0.3": "10.0.4_astro@5.18.1__@types+node@24.12.2__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.2_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3", + "npm:@babel/core@^7.28.0": "7.29.0", + "npm:@babel/preset-react@^7.27.1": "7.28.5_@babel+core@7.29.0", "npm:@cfworker/json-schema@^4.1.1": "4.1.1", - "npm:@cloudflare/vitest-pool-workers@~0.8.31": "0.8.71_@vitest+runner@3.2.4_@vitest+snapshot@3.2.4_vitest@3.2.4__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@cloudflare+workers-types@4.20260403.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", - "npm:@cloudflare/workers-types@^4.20250529.0": "4.20260403.1", - "npm:@cloudflare/workers-types@^4.20250906.0": "4.20260403.1", - "npm:@deno/astro-adapter@~0.3.2": "0.3.2_@opentelemetry+api@1.9.1_astro@5.18.1__@types+node@24.12.0__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.0_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3", + "npm:@cloudflare/vitest-pool-workers@~0.8.31": "0.8.71_@vitest+runner@3.2.4_@vitest+snapshot@3.2.4_vitest@3.2.4__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@cloudflare+workers-types@4.20260408.1_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "npm:@cloudflare/workers-types@^4.20250529.0": "4.20260408.1", + "npm:@cloudflare/workers-types@^4.20250906.0": "4.20260408.1", + "npm:@deno/astro-adapter@~0.3.2": "0.3.2_@opentelemetry+api@1.9.1_astro@5.18.1__@types+node@24.12.2__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.2_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3", "npm:@fxts/core@^1.21.1": "1.26.0", "npm:@hongminhee/localtunnel@0.3": "0.3.0", - "npm:@inquirer/prompts@^7.8.4": "7.10.1_@types+node@24.12.0", - "npm:@jimp/core@^1.6.0": "1.6.0", - "npm:@jimp/wasm-webp@^1.6.0": "1.6.0", + "npm:@inquirer/prompts@^7.8.4": "7.10.1_@types+node@24.12.2", + "npm:@jimp/core@^1.6.0": "1.6.1", + "npm:@jimp/wasm-webp@^1.6.0": "1.6.1", "npm:@js-temporal/polyfill@~0.5.1": "0.5.1", "npm:@jsr/std__assert@0.226": "0.226.0", + "npm:@mjackson/node-fetch-server@0.7": "0.7.0", "npm:@multiformats/base-x@^4.0.1": "4.0.1", - "npm:@nestjs/common@^11.0.1": "11.1.17_reflect-metadata@0.2.2_rxjs@7.8.2", + "npm:@nestjs/common@^11.0.1": "11.1.18_reflect-metadata@0.2.2_rxjs@7.8.2", "npm:@opentelemetry/api@^1.9.0": "1.9.1", "npm:@opentelemetry/context-async-hooks@^2.5.0": "2.6.1_@opentelemetry+api@1.9.1", "npm:@opentelemetry/core@^2.5.0": "2.6.1_@opentelemetry+api@1.9.1", "npm:@opentelemetry/sdk-trace-base@^2.5.0": "2.6.1_@opentelemetry+api@1.9.1", "npm:@opentelemetry/semantic-conventions@^1.39.0": "1.40.0", "npm:@poppanator/http-constants@^1.1.1": "1.1.1", - "npm:@preact/signals@^2.2.1": "2.9.0_preact@10.29.0", - "npm:@preact/signals@^2.3.2": "2.9.0_preact@10.29.0", - "npm:@solidjs/start@^1.3.0": "1.3.2_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.0__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.0__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.0_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.0_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_solid-js@1.9.12_tsx@4.21.0_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_yaml@2.8.3", + "npm:@preact/signals@^2.3.2": "2.9.0_preact@10.29.1", + "npm:@preact/signals@^2.5.1": "2.9.0_preact@10.29.1", + "npm:@prefresh/vite@^2.4.8": "2.4.12_preact@10.29.1_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3", + "npm:@solidjs/start@^1.3.0": "1.3.2_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.2__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.2__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.2_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.2_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_solid-js@1.9.12_tsx@4.21.0_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_yaml@2.8.3", "npm:@standard-schema/spec@^1.1.0": "1.1.0", - "npm:@sveltejs/kit@2": "2.55.0_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.0.0__svelte@5.55.1__vite@7.3.1___@types+node@24.12.0___tsx@4.21.0___yaml@2.8.3__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_svelte@5.55.1_typescript@6.0.2_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", + "npm:@sveltejs/kit@2": "2.57.0_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.0.0__svelte@5.55.2__vite@7.3.2___@types+node@24.12.2___tsx@4.21.0___yaml@2.8.3__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_svelte@5.55.2_typescript@6.0.2_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "npm:@types/amqplib@*": "0.10.8", "npm:@types/amqplib@~0.10.7": "0.10.8", "npm:@types/eslint@9": "9.6.1", "npm:@types/estree@^1.0.8": "1.0.8", - "npm:@types/node@^22.16.0": "22.19.15", - "npm:@types/node@^24.2.1": "24.12.0", - "npm:@typescript-eslint/parser@^8.49.0": "8.58.0_eslint@9.39.4_typescript@6.0.2", - "npm:@typescript-eslint/utils@8": "8.58.0_eslint@9.39.4_typescript@6.0.2", + "npm:@types/node@^22.16.0": "22.19.17", + "npm:@types/node@^24.2.1": "24.12.2", + "npm:@typescript-eslint/parser@^8.49.0": "8.58.1_eslint@9.39.4_typescript@6.0.2", + "npm:@typescript-eslint/utils@8": "8.58.1_eslint@9.39.4_typescript@6.0.2", "npm:amqplib@~0.10.9": "0.10.9", "npm:asn1js@^3.0.6": "3.0.7", "npm:asn1js@^3.0.7": "3.0.7", - "npm:astro@^5.17.3": "5.18.1_@types+node@24.12.0_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3", + "npm:astro@^5.17.3": "5.18.1_@types+node@24.12.2_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3", "npm:byte-encodings@^1.0.11": "1.0.11", "npm:chalk@^5.6.2": "5.6.2", "npm:cli-highlight@^2.1.11": "2.1.11", @@ -80,6 +112,9 @@ "npm:es-toolkit@^1.39.10": "1.45.1", "npm:es-toolkit@^1.42.0": "1.45.1", "npm:es-toolkit@^1.43.0": "1.45.1", + "npm:esbuild-wasm@~0.25.11": "0.25.12", + "npm:esbuild@0.25.7": "0.25.7", + "npm:esbuild@~0.25.5": "0.25.12", "npm:eslint@9": "9.39.4", "npm:express@4": "4.22.1", "npm:fast-check@^3.22.0": "3.23.2", @@ -88,25 +123,28 @@ "npm:fetch-mock@^12.5.2": "12.6.0", "npm:fetch-mock@^12.5.4": "12.6.0", "npm:h3@^1.15.0": "1.15.11", - "npm:hono@^4.8.3": "4.12.10", + "npm:hono@^4.8.3": "4.12.12", "npm:icojs@~0.19.5": "0.19.5_@jimp+custom@0.22.12", "npm:inquirer-toggle@^1.0.1": "1.0.1", - "npm:inquirer@^12.9.4": "12.11.1_@types+node@24.12.0", + "npm:inquirer@^12.9.4": "12.11.1_@types+node@24.12.2", "npm:ioredis@^5.8.2": "5.10.1", - "npm:jimp@^1.6.0": "1.6.0", + "npm:jimp@^1.6.0": "1.6.1", "npm:json-canon@^1.0.1": "1.0.1", "npm:json-preserve-indent@^1.1.3": "1.1.3", "npm:jsonld@9": "9.0.0", "npm:koa@2": "2.16.4", "npm:miniflare@^4.20250523.0": "4.20250906.0", - "npm:mysql2@^3.18.0": "3.20.0_@types+node@24.12.0", + "npm:mysql2@^3.18.0": "3.20.0_@types+node@24.12.2", "npm:ora@^8.2.0": "8.2.0", "npm:pkijs@^3.2.5": "3.4.0", "npm:pkijs@^3.3.3": "3.4.0", - "npm:postgres@^3.4.7": "3.4.8", - "npm:preact-render-to-string@^6.6.3": "6.6.5_preact@10.29.0", + "npm:postgres@^3.4.7": "3.4.9", + "npm:preact-render-to-string@^6.6.3": "6.6.7_preact@10.29.1", "npm:preact@10.19.6": "10.19.6", - "npm:preact@^10.27.2": "10.29.0", + "npm:preact@^10.27.2": "10.29.1", + "npm:preact@^10.28.2": "10.29.1", + "npm:preact@^10.28.3": "10.29.1", + "npm:rollup@^4.50.0": "4.60.1", "npm:shiki@^1.6.4": "1.29.2", "npm:smol-toml@^1.6.0": "1.6.1", "npm:srvx@~0.8.7": "0.8.16", @@ -116,13 +154,17 @@ "npm:uri-template-router@1": "1.0.0", "npm:url-template@^3.1.1": "3.1.1", "npm:valibot@^1.2.0": "1.3.1_typescript@6.0.2", - "npm:vite@^7.1.3": "7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", - "npm:vitest@3.2": "3.2.4_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", - "npm:wrangler@^4.17.0": "4.35.0_@cloudflare+workers-types@4.20260403.1", - "npm:wrangler@^4.21.1": "4.35.0_@cloudflare+workers-types@4.20260403.1", + "npm:vite@^7.1.3": "7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "npm:vite@^7.1.4": "7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "npm:vitest@3.2": "3.2.4_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "npm:wrangler@^4.17.0": "4.35.0_@cloudflare+workers-types@4.20260408.1", + "npm:wrangler@^4.21.1": "4.35.0_@cloudflare+workers-types@4.20260408.1", "npm:yaml@^2.8.1": "2.8.3" }, "jsr": { + "@alinea/suite@0.6.3": { + "integrity": "7d24a38729663b84d8a263d64ff7e3f8c72ac7cbb1db8ec5f414d0416b6b72e2" + }, "@david/console-static-text@0.3.0": { "integrity": "2dfb46ecee525755f7989f94ece30bba85bd8ffe3e8666abc1bf926e1ee0698d" }, @@ -148,25 +190,62 @@ "@david/which@0.4.1": { "integrity": "896a682b111f92ab866cc70c5b4afab2f5899d2f9bde31ed00203b9c250f225e" }, + "@deno/esbuild-plugin@1.2.1": { + "integrity": "df629467913adc1f960149fdfa3a3430ba8c20381c310fba096db244e6c3c9f6", + "dependencies": [ + "jsr:@deno/loader@~0.3.10", + "jsr:@std/path@^1.1.1", + "npm:esbuild@~0.25.5" + ] + }, + "@deno/loader@0.3.14": { + "integrity": "97bc63a6cc2d27a60bcdc953f588c5213331d866d44212eebb24cebfb9b011ca" + }, "@fresh/build-id@1.0.1": { "integrity": "12a2ec25fd52ae9ec68c26848a5696cd1c9b537f7c983c7e56e4fb1e7e816c20", "dependencies": [ "jsr:@std/encoding" ] }, - "@fresh/core@2.2.0": { - "integrity": "b3c00f82288a2c4c8ec85e4abb67b080b366ec5971860f2f2898eb281ea1a80f", + "@fresh/core@2.2.2": { + "integrity": "c34873df58457720f7b915a65fef6fe5cd7215f237cf4d1064d1925b320de96c", "dependencies": [ + "jsr:@deno/esbuild-plugin", "jsr:@fresh/build-id", + "jsr:@std/encoding", "jsr:@std/fmt@^1.0.8", "jsr:@std/fs@^1.0.19", "jsr:@std/html", "jsr:@std/http", + "jsr:@std/jsonc", + "jsr:@std/media-types", "jsr:@std/path@^1.1.2", + "jsr:@std/semver", + "jsr:@std/uuid", "npm:@opentelemetry/api", - "npm:@preact/signals@^2.2.1", + "npm:@preact/signals@^2.5.1", + "npm:esbuild-wasm", + "npm:esbuild@0.25.7", "npm:preact-render-to-string", - "npm:preact@^10.27.2" + "npm:preact@^10.28.2", + "npm:preact@^10.28.3" + ] + }, + "@fresh/plugin-vite@1.0.8": { + "integrity": "5780d842ed82e4cbccd93dd8ba2d54bf59dff5aee65921134aab15a4cd457c56", + "dependencies": [ + "jsr:@deno/loader@~0.3.2", + "jsr:@fresh/core@2", + "jsr:@fresh/core@^2.2.0", + "jsr:@std/dotenv", + "jsr:@std/fmt@^1.0.7", + "jsr:@std/path@1", + "npm:@babel/core", + "npm:@babel/preset-react", + "npm:@mjackson/node-fetch-server", + "npm:@prefresh/vite", + "npm:rollup", + "npm:vite@^7.1.4" ] }, "@hongminhee/localtunnel@0.3.0": { @@ -175,8 +254,8 @@ "jsr:@logtape/logtape@^1.0.4" ] }, - "@hono/hono@4.12.4": { - "integrity": "3b80b0165bbcaf8ddf23afc593e40416da8e9a27cb3dd460a1f04c7a44583030" + "@hono/hono@4.12.12": { + "integrity": "dc765178d38b5c4619b358062f6aa5514f7205bb0530b2823ff6265bec69c535" }, "@logtape/file@2.0.5": { "integrity": "368621b15b73fd63c137e47ae43411e350627683ce7e0b4492af3ccb159e098b", @@ -207,19 +286,53 @@ "jsr:@optique/core" ] }, + "@std/assert@0.224.0": { + "integrity": "8643233ec7aec38a940a8264a6e3eed9bfa44e7a71cc6b3c8874213ff401967f", + "dependencies": [ + "jsr:@std/fmt@0.224", + "jsr:@std/internal@0.224" + ] + }, + "@std/assert@0.226.0": { + "integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3", + "dependencies": [ + "jsr:@std/internal@1" + ] + }, + "@std/assert@1.0.19": { + "integrity": "eaada96ee120cb980bc47e040f82814d786fe8162ecc53c91d8df60b8755991e", + "dependencies": [ + "jsr:@std/internal@^1.0.12" + ] + }, + "@std/async@1.2.0": { + "integrity": "c059c6f6d95ca7cc012ae8e8d7164d1697113d54b0b679e4372b354b11c2dee5" + }, "@std/bytes@1.0.6": { "integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a" }, + "@std/dotenv@0.225.6": { + "integrity": "1d6f9db72f565bd26790fa034c26e45ecb260b5245417be76c2279e5734c421b" + }, "@std/encoding@1.0.10": { "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" }, + "@std/fmt@0.224.0": { + "integrity": "e20e9a2312a8b5393272c26191c0a68eda8d2c4b08b046bad1673148f1d69851" + }, "@std/fmt@1.0.9": { "integrity": "2487343e8899fb2be5d0e3d35013e54477ada198854e52dd05ed0422eddcabe0" }, + "@std/fs@0.224.0": { + "integrity": "52a5ec89731ac0ca8f971079339286f88c571a4d61686acf75833f03a89d8e69", + "dependencies": [ + "jsr:@std/path@0.224" + ] + }, "@std/fs@1.0.23": { "integrity": "3ecbae4ce4fee03b180fa710caff36bb5adb66631c46a6460aaad49515565a37", "dependencies": [ - "jsr:@std/internal", + "jsr:@std/internal@^1.0.12", "jsr:@std/path@^1.1.4" ] }, @@ -227,7 +340,16 @@ "integrity": "4e2d693f474cae8c16a920fa5e15a3b72267b94b84667f11a50c6dd1cb18d35e" }, "@std/http@1.0.25": { - "integrity": "577b4252290af1097132812b339fffdd55fb0f4aeb98ff11bdbf67998aa17193" + "integrity": "577b4252290af1097132812b339fffdd55fb0f4aeb98ff11bdbf67998aa17193", + "dependencies": [ + "jsr:@std/encoding" + ] + }, + "@std/internal@0.224.0": { + "integrity": "afc50644f9cdf4495eeb80523a8f6d27226b4b36c45c7c195dfccad4b8509291", + "dependencies": [ + "jsr:@std/fmt@0.224" + ] }, "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" @@ -238,14 +360,47 @@ "jsr:@std/bytes" ] }, + "@std/json@1.0.3": { + "integrity": "97d5710996293a027b7aa5f0d1f4fa29f246f269e6b5597e08807613f37d426c" + }, + "@std/jsonc@1.0.2": { + "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7", + "dependencies": [ + "jsr:@std/json" + ] + }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/path@0.224.0": { + "integrity": "55bca6361e5a6d158b9380e82d4981d82d338ec587de02951e2b7c3a24910ee6" + }, "@std/path@1.1.4": { "integrity": "1d2d43f39efb1b42f0b1882a25486647cb851481862dc7313390b2bb044314b5", "dependencies": [ - "jsr:@std/internal" + "jsr:@std/internal@^1.0.12" + ] + }, + "@std/semver@1.0.8": { + "integrity": "dc830e8b8b6a380c895d53fbfd1258dc253704ca57bbe1629ac65fd7830179b7" + }, + "@std/testing@0.224.0": { + "integrity": "371b8a929aa7132240d5dd766a439be8f780ef5c176ab194e0bcab72370c761e", + "dependencies": [ + "jsr:@std/assert@0.224", + "jsr:@std/fmt@0.224", + "jsr:@std/fs@0.224", + "jsr:@std/path@0.224" + ] + }, + "@std/uuid@1.1.0": { + "integrity": "6268db2ccf172849c9be80763354ca305d49ef4af41fe995623d44fcc3f7457c", + "dependencies": [ + "jsr:@std/bytes" ] }, - "@valibot/valibot@1.2.0": { - "integrity": "61c118a4d027ed55912caf381c78f0a178f335f46ad0c4bcb136498dc1ef2285" + "@valibot/valibot@1.3.1": { + "integrity": "635faaec9d32a25efca7b4614e7a07306cc03937bfd0679e05530d31081bc501" } }, "npm": { @@ -290,7 +445,7 @@ "vfile" ] }, - "@astrojs/node@10.0.4_astro@5.18.1__@types+node@24.12.0__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.0_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3": { + "@astrojs/node@10.0.4_astro@5.18.1__@types+node@24.12.2__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.2_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3": { "integrity": "sha512-7pVgiVSscQHRC2WqjlXcnbbcKMYp2GXrYpmuvdGg5zgA8J1lFm2vmwVhHZFuZK3Ik5PzoxiDROaEgoDGLbfhLw==", "dependencies": [ "@astrojs/internal-helpers@0.8.0", @@ -377,6 +532,12 @@ "jsesc" ] }, + "@babel/helper-annotate-as-pure@7.27.3": { + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dependencies": [ + "@babel/types@7.29.0" + ] + }, "@babel/helper-compilation-targets@7.28.6": { "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dependencies": [ @@ -465,6 +626,51 @@ "@babel/helper-plugin-utils" ] }, + "@babel/plugin-transform-react-display-name@7.28.0_@babel+core@7.29.0": { + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/plugin-transform-react-jsx-development@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dependencies": [ + "@babel/core", + "@babel/plugin-transform-react-jsx" + ] + }, + "@babel/plugin-transform-react-jsx@7.28.6_@babel+core@7.29.0": { + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-module-imports@7.28.6", + "@babel/helper-plugin-utils", + "@babel/plugin-syntax-jsx", + "@babel/types@7.29.0" + ] + }, + "@babel/plugin-transform-react-pure-annotations@7.27.1_@babel+core@7.29.0": { + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dependencies": [ + "@babel/core", + "@babel/helper-annotate-as-pure", + "@babel/helper-plugin-utils" + ] + }, + "@babel/preset-react@7.28.5_@babel+core@7.29.0": { + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils", + "@babel/helper-validator-option", + "@babel/plugin-transform-react-display-name", + "@babel/plugin-transform-react-jsx", + "@babel/plugin-transform-react-jsx-development", + "@babel/plugin-transform-react-pure-annotations" + ] + }, "@babel/template@7.28.6": { "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dependencies": [ @@ -533,7 +739,7 @@ "workerd" ] }, - "@cloudflare/vitest-pool-workers@0.8.71_@vitest+runner@3.2.4_@vitest+snapshot@3.2.4_vitest@3.2.4__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@cloudflare+workers-types@4.20260403.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "@cloudflare/vitest-pool-workers@0.8.71_@vitest+runner@3.2.4_@vitest+snapshot@3.2.4_vitest@3.2.4__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@cloudflare+workers-types@4.20260408.1_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-keu2HCLQfRNwbmLBCDXJgCFpANTaYnQpE01fBOo4CNwiWHUT7SZGN7w64RKiSWRHyYppStXBuE5Ng7F42+flpg==", "dependencies": [ "@vitest/runner", @@ -573,8 +779,8 @@ "os": ["win32"], "cpu": ["x64"] }, - "@cloudflare/workers-types@4.20260403.1": { - "integrity": "sha512-p6oSNt3yUwcxSoXZ7qCog7+kgQbkSx1Beoci7TMb/xbRF05VR0cO/p1XUE2SLHZ7IgSIc3tNMpFKa0L0fa3Lzg==" + "@cloudflare/workers-types@4.20260408.1": { + "integrity": "sha512-kE1tKfHUyIldsj3ea2XEqvLRHkDwc83YM7nar6SS5+cj81IoAFR/OZNDwZWHb6vx+pC31PBJGtROlfZzsgxudQ==" }, "@colors/colors@1.5.0": { "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" @@ -585,7 +791,7 @@ "@jridgewell/trace-mapping@0.3.9" ] }, - "@deno/astro-adapter@0.3.2_@opentelemetry+api@1.9.1_astro@5.18.1__@types+node@24.12.0__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.0_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3": { + "@deno/astro-adapter@0.3.2_@opentelemetry+api@1.9.1_astro@5.18.1__@types+node@24.12.2__ioredis@5.10.1__tsx@4.21.0__typescript@6.0.2__yaml@2.8.3_@types+node@24.12.2_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3": { "integrity": "sha512-nN0kQGobRs2XE3R+O/DWYQanEWpteJNsIf5TD65787qFEw2CrqkFNcNolZFJiKUF/2Y/TKyOLRjMS3F6auECVg==", "dependencies": [ "@opentelemetry/api", @@ -641,6 +847,11 @@ "os": ["aix"], "cpu": ["ppc64"] }, + "@esbuild/aix-ppc64@0.25.7": { + "integrity": "sha512-uD0kKFHh6ETr8TqEtaAcV+dn/2qnYbH/+8wGEdY70Qf7l1l/jmBUbrmQqwiPKAQE6cOQ7dTj6Xr0HzQDGHyceQ==", + "os": ["aix"], + "cpu": ["ppc64"] + }, "@esbuild/aix-ppc64@0.27.7": { "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", "os": ["aix"], @@ -656,6 +867,11 @@ "os": ["android"], "cpu": ["arm64"] }, + "@esbuild/android-arm64@0.25.7": { + "integrity": "sha512-p0ohDnwyIbAtztHTNUTzN5EGD/HJLs1bwysrOPgSdlIA6NDnReoVfoCyxG6W1d85jr2X80Uq5KHftyYgaK9LPQ==", + "os": ["android"], + "cpu": ["arm64"] + }, "@esbuild/android-arm64@0.27.7": { "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", "os": ["android"], @@ -671,6 +887,11 @@ "os": ["android"], "cpu": ["arm"] }, + "@esbuild/android-arm@0.25.7": { + "integrity": "sha512-Jhuet0g1k9rAJHrXGIh7sFknFuT4sfytYZpZpuZl7YKDhnPByVAm5oy2LEBmMbuYf3ejWVYCc2seX81Mk+madA==", + "os": ["android"], + "cpu": ["arm"] + }, "@esbuild/android-arm@0.27.7": { "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", "os": ["android"], @@ -686,6 +907,11 @@ "os": ["android"], "cpu": ["x64"] }, + "@esbuild/android-x64@0.25.7": { + "integrity": "sha512-mMxIJFlSgVK23HSsII3ZX9T2xKrBCDGyk0qiZnIW10LLFFtZLkFD6imZHu7gUo2wkNZwS9Yj3mOtZD3ZPcjCcw==", + "os": ["android"], + "cpu": ["x64"] + }, "@esbuild/android-x64@0.27.7": { "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", "os": ["android"], @@ -701,6 +927,11 @@ "os": ["darwin"], "cpu": ["arm64"] }, + "@esbuild/darwin-arm64@0.25.7": { + "integrity": "sha512-jyOFLGP2WwRwxM8F1VpP6gcdIJc8jq2CUrURbbTouJoRO7XCkU8GdnTDFIHdcifVBT45cJlOYsZ1kSlfbKjYUQ==", + "os": ["darwin"], + "cpu": ["arm64"] + }, "@esbuild/darwin-arm64@0.27.7": { "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", "os": ["darwin"], @@ -716,6 +947,11 @@ "os": ["darwin"], "cpu": ["x64"] }, + "@esbuild/darwin-x64@0.25.7": { + "integrity": "sha512-m9bVWqZCwQ1BthruifvG64hG03zzz9gE2r/vYAhztBna1/+qXiHyP9WgnyZqHgGeXoimJPhAmxfbeU+nMng6ZA==", + "os": ["darwin"], + "cpu": ["x64"] + }, "@esbuild/darwin-x64@0.27.7": { "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", "os": ["darwin"], @@ -731,6 +967,11 @@ "os": ["freebsd"], "cpu": ["arm64"] }, + "@esbuild/freebsd-arm64@0.25.7": { + "integrity": "sha512-Bss7P4r6uhr3kDzRjPNEnTm/oIBdTPRNQuwaEFWT/uvt6A1YzK/yn5kcx5ZxZ9swOga7LqeYlu7bDIpDoS01bA==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, "@esbuild/freebsd-arm64@0.27.7": { "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", "os": ["freebsd"], @@ -746,6 +987,11 @@ "os": ["freebsd"], "cpu": ["x64"] }, + "@esbuild/freebsd-x64@0.25.7": { + "integrity": "sha512-S3BFyjW81LXG7Vqmr37ddbThrm3A84yE7ey/ERBlK9dIiaWgrjRlre3pbG7txh1Uaxz8N7wGGQXmC9zV+LIpBQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, "@esbuild/freebsd-x64@0.27.7": { "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", "os": ["freebsd"], @@ -761,6 +1007,11 @@ "os": ["linux"], "cpu": ["arm64"] }, + "@esbuild/linux-arm64@0.25.7": { + "integrity": "sha512-HfQZQqrNOfS1Okn7PcsGUqHymL1cWGBslf78dGvtrj8q7cN3FkapFgNA4l/a5lXDwr7BqP2BSO6mz9UremNPbg==", + "os": ["linux"], + "cpu": ["arm64"] + }, "@esbuild/linux-arm64@0.27.7": { "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", "os": ["linux"], @@ -776,6 +1027,11 @@ "os": ["linux"], "cpu": ["arm"] }, + "@esbuild/linux-arm@0.25.7": { + "integrity": "sha512-JZMIci/1m5vfQuhKoFXogCKVYVfYQmoZJg8vSIMR4TUXbF+0aNlfXH3DGFEFMElT8hOTUF5hisdZhnrZO/bkDw==", + "os": ["linux"], + "cpu": ["arm"] + }, "@esbuild/linux-arm@0.27.7": { "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", "os": ["linux"], @@ -791,6 +1047,11 @@ "os": ["linux"], "cpu": ["ia32"] }, + "@esbuild/linux-ia32@0.25.7": { + "integrity": "sha512-9Jex4uVpdeofiDxnwHRgen+j6398JlX4/6SCbbEFEXN7oMO2p0ueLN+e+9DdsdPLUdqns607HmzEFnxwr7+5wQ==", + "os": ["linux"], + "cpu": ["ia32"] + }, "@esbuild/linux-ia32@0.27.7": { "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", "os": ["linux"], @@ -806,6 +1067,11 @@ "os": ["linux"], "cpu": ["loong64"] }, + "@esbuild/linux-loong64@0.25.7": { + "integrity": "sha512-TG1KJqjBlN9IHQjKVUYDB0/mUGgokfhhatlay8aZ/MSORMubEvj/J1CL8YGY4EBcln4z7rKFbsH+HeAv0d471w==", + "os": ["linux"], + "cpu": ["loong64"] + }, "@esbuild/linux-loong64@0.27.7": { "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", "os": ["linux"], @@ -821,6 +1087,11 @@ "os": ["linux"], "cpu": ["mips64el"] }, + "@esbuild/linux-mips64el@0.25.7": { + "integrity": "sha512-Ty9Hj/lx7ikTnhOfaP7ipEm/ICcBv94i/6/WDg0OZ3BPBHhChsUbQancoWYSO0WNkEiSW5Do4febTTy4x1qYQQ==", + "os": ["linux"], + "cpu": ["mips64el"] + }, "@esbuild/linux-mips64el@0.27.7": { "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", "os": ["linux"], @@ -836,6 +1107,11 @@ "os": ["linux"], "cpu": ["ppc64"] }, + "@esbuild/linux-ppc64@0.25.7": { + "integrity": "sha512-MrOjirGQWGReJl3BNQ58BLhUBPpWABnKrnq8Q/vZWWwAB1wuLXOIxS2JQ1LT3+5T+3jfPh0tyf5CpbyQHqnWIQ==", + "os": ["linux"], + "cpu": ["ppc64"] + }, "@esbuild/linux-ppc64@0.27.7": { "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", "os": ["linux"], @@ -851,6 +1127,11 @@ "os": ["linux"], "cpu": ["riscv64"] }, + "@esbuild/linux-riscv64@0.25.7": { + "integrity": "sha512-9pr23/pqzyqIZEZmQXnFyqp3vpa+KBk5TotfkzGMqpw089PGm0AIowkUppHB9derQzqniGn3wVXgck19+oqiOw==", + "os": ["linux"], + "cpu": ["riscv64"] + }, "@esbuild/linux-riscv64@0.27.7": { "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", "os": ["linux"], @@ -866,6 +1147,11 @@ "os": ["linux"], "cpu": ["s390x"] }, + "@esbuild/linux-s390x@0.25.7": { + "integrity": "sha512-4dP11UVGh9O6Y47m8YvW8eoA3r8qL2toVZUbBKyGta8j6zdw1cn9F/Rt59/Mhv0OgY68pHIMjGXWOUaykCnx+w==", + "os": ["linux"], + "cpu": ["s390x"] + }, "@esbuild/linux-s390x@0.27.7": { "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", "os": ["linux"], @@ -881,6 +1167,11 @@ "os": ["linux"], "cpu": ["x64"] }, + "@esbuild/linux-x64@0.25.7": { + "integrity": "sha512-ghJMAJTdw/0uhz7e7YnpdX1xVn7VqA0GrWrAO2qKMuqbvgHT2VZiBv1BQ//VcHsPir4wsL3P2oPggfKPzTKoCA==", + "os": ["linux"], + "cpu": ["x64"] + }, "@esbuild/linux-x64@0.27.7": { "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", "os": ["linux"], @@ -896,6 +1187,11 @@ "os": ["netbsd"], "cpu": ["arm64"] }, + "@esbuild/netbsd-arm64@0.25.7": { + "integrity": "sha512-bwXGEU4ua45+u5Ci/a55B85KWaDSRS8NPOHtxy2e3etDjbz23wlry37Ffzapz69JAGGc4089TBo+dGzydQmydg==", + "os": ["netbsd"], + "cpu": ["arm64"] + }, "@esbuild/netbsd-arm64@0.27.7": { "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", "os": ["netbsd"], @@ -911,6 +1207,11 @@ "os": ["netbsd"], "cpu": ["x64"] }, + "@esbuild/netbsd-x64@0.25.7": { + "integrity": "sha512-tUZRvLtgLE5OyN46sPSYlgmHoBS5bx2URSrgZdW1L1teWPYVmXh+QN/sKDqkzBo/IHGcKcHLKDhBeVVkO7teEA==", + "os": ["netbsd"], + "cpu": ["x64"] + }, "@esbuild/netbsd-x64@0.27.7": { "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", "os": ["netbsd"], @@ -926,6 +1227,11 @@ "os": ["openbsd"], "cpu": ["arm64"] }, + "@esbuild/openbsd-arm64@0.25.7": { + "integrity": "sha512-bTJ50aoC+WDlDGBReWYiObpYvQfMjBNlKztqoNUL0iUkYtwLkBQQeEsTq/I1KyjsKA5tyov6VZaPb8UdD6ci6Q==", + "os": ["openbsd"], + "cpu": ["arm64"] + }, "@esbuild/openbsd-arm64@0.27.7": { "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", "os": ["openbsd"], @@ -941,6 +1247,11 @@ "os": ["openbsd"], "cpu": ["x64"] }, + "@esbuild/openbsd-x64@0.25.7": { + "integrity": "sha512-TA9XfJrgzAipFUU895jd9j2SyDh9bbNkK2I0gHcvqb/o84UeQkBpi/XmYX3cO1q/9hZokdcDqQxIi6uLVrikxg==", + "os": ["openbsd"], + "cpu": ["x64"] + }, "@esbuild/openbsd-x64@0.27.7": { "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", "os": ["openbsd"], @@ -951,6 +1262,11 @@ "os": ["openharmony"], "cpu": ["arm64"] }, + "@esbuild/openharmony-arm64@0.25.7": { + "integrity": "sha512-5VTtExUrWwHHEUZ/N+rPlHDwVFQ5aME7vRJES8+iQ0xC/bMYckfJ0l2n3yGIfRoXcK/wq4oXSItZAz5wslTKGw==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, "@esbuild/openharmony-arm64@0.27.7": { "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", "os": ["openharmony"], @@ -966,6 +1282,11 @@ "os": ["sunos"], "cpu": ["x64"] }, + "@esbuild/sunos-x64@0.25.7": { + "integrity": "sha512-umkbn7KTxsexhv2vuuJmj9kggd4AEtL32KodkJgfhNOHMPtQ55RexsaSrMb+0+jp9XL4I4o2y91PZauVN4cH3A==", + "os": ["sunos"], + "cpu": ["x64"] + }, "@esbuild/sunos-x64@0.27.7": { "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", "os": ["sunos"], @@ -981,6 +1302,11 @@ "os": ["win32"], "cpu": ["arm64"] }, + "@esbuild/win32-arm64@0.25.7": { + "integrity": "sha512-j20JQGP/gz8QDgzl5No5Gr4F6hurAZvtkFxAKhiv2X49yi/ih8ECK4Y35YnjlMogSKJk931iNMcd35BtZ4ghfw==", + "os": ["win32"], + "cpu": ["arm64"] + }, "@esbuild/win32-arm64@0.27.7": { "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", "os": ["win32"], @@ -996,6 +1322,11 @@ "os": ["win32"], "cpu": ["ia32"] }, + "@esbuild/win32-ia32@0.25.7": { + "integrity": "sha512-4qZ6NUfoiiKZfLAXRsvFkA0hoWVM+1y2bSHXHkpdLAs/+r0LgwqYohmfZCi985c6JWHhiXP30mgZawn/XrqAkQ==", + "os": ["win32"], + "cpu": ["ia32"] + }, "@esbuild/win32-ia32@0.27.7": { "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", "os": ["win32"], @@ -1011,6 +1342,11 @@ "os": ["win32"], "cpu": ["x64"] }, + "@esbuild/win32-x64@0.25.7": { + "integrity": "sha512-FaPsAHTwm+1Gfvn37Eg3E5HIpfR3i6x1AIcla/MkqAIupD4BW3MrSeUqfoTzwwJhk3WE2/KqUn4/eenEJC76VA==", + "os": ["win32"], + "cpu": ["x64"] + }, "@esbuild/win32-x64@0.27.7": { "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", "os": ["win32"], @@ -1413,38 +1749,38 @@ "@inquirer/ansi@1.0.2": { "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==" }, - "@inquirer/checkbox@4.3.2_@types+node@24.12.0": { + "@inquirer/checkbox@4.3.2_@types+node@24.12.2": { "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/confirm@5.1.21_@types+node@24.12.0": { + "@inquirer/confirm@5.1.21_@types+node@24.12.2": { "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0" + "@inquirer/core@10.3.2_@types+node@24.12.2", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/core@10.3.2_@types+node@24.12.0": { + "@inquirer/core@10.3.2_@types+node@24.12.2": { "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", "dependencies": [ "@inquirer/ansi", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "cli-width", "mute-stream@2.0.0", "signal-exit", @@ -1452,7 +1788,7 @@ "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "@inquirer/core@8.2.4": { @@ -1461,7 +1797,7 @@ "@inquirer/figures", "@inquirer/type@1.5.5", "@types/mute-stream", - "@types/node@20.19.37", + "@types/node@20.19.39", "@types/wrap-ansi", "ansi-escapes", "cli-spinners", @@ -1473,79 +1809,79 @@ "wrap-ansi@6.2.0" ] }, - "@inquirer/editor@4.2.23_@types+node@24.12.0": { + "@inquirer/editor@4.2.23_@types+node@24.12.2": { "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", "@inquirer/external-editor", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0" + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/expand@4.0.23_@types+node@24.12.0": { + "@inquirer/expand@4.0.23_@types+node@24.12.2": { "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/external-editor@1.0.3_@types+node@24.12.0": { + "@inquirer/external-editor@1.0.3_@types+node@24.12.2": { "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dependencies": [ - "@types/node@24.12.0", + "@types/node@24.12.2", "chardet", "iconv-lite@0.7.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "@inquirer/figures@1.0.15": { "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==" }, - "@inquirer/input@4.3.1_@types+node@24.12.0": { + "@inquirer/input@4.3.1_@types+node@24.12.2": { "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0" + "@inquirer/core@10.3.2_@types+node@24.12.2", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/number@3.0.23_@types+node@24.12.0": { + "@inquirer/number@3.0.23_@types+node@24.12.2": { "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0" + "@inquirer/core@10.3.2_@types+node@24.12.2", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/password@4.0.23_@types+node@24.12.0": { + "@inquirer/password@4.0.23_@types+node@24.12.2": { "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@24.12.0", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0" + "@inquirer/core@10.3.2_@types+node@24.12.2", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/prompts@7.10.1_@types+node@24.12.0": { + "@inquirer/prompts@7.10.1_@types+node@24.12.2": { "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", "dependencies": [ "@inquirer/checkbox", @@ -1558,49 +1894,49 @@ "@inquirer/rawlist", "@inquirer/search", "@inquirer/select", - "@types/node@24.12.0" + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/rawlist@4.1.11_@types+node@24.12.0": { + "@inquirer/rawlist@4.1.11_@types+node@24.12.2": { "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/search@3.2.2_@types+node@24.12.0": { + "@inquirer/search@3.2.2_@types+node@24.12.2": { "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", "dependencies": [ - "@inquirer/core@10.3.2_@types+node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, - "@inquirer/select@4.4.2_@types+node@24.12.0": { + "@inquirer/select@4.4.2_@types+node@24.12.2": { "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", "@inquirer/figures", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "yoctocolors-cjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "@inquirer/type@1.5.5": { @@ -1609,13 +1945,13 @@ "mute-stream@1.0.0" ] }, - "@inquirer/type@3.0.10_@types+node@24.12.0": { + "@inquirer/type@3.0.10_@types+node@24.12.2": { "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", "dependencies": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "@ioredis/commands@1.5.1": { @@ -1659,15 +1995,15 @@ "tinycolor2" ] }, - "@jimp/core@1.6.0": { - "integrity": "sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w==", + "@jimp/core@1.6.1": { + "integrity": "sha512-+BoKC5G6hkrSy501zcJ2EpfnllP+avPevcBfRcZe/CW+EwEfY6X1EZ8QWyT7NpDIvEEJb1fdJnMMfUnFkxmw9A==", "dependencies": [ "@jimp/file-ops", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "await-to-js", "exif-parser", - "file-type@16.5.4", + "file-type@21.3.4", "mime@3.0.0" ] }, @@ -1677,155 +2013,155 @@ "@jimp/core@0.22.12" ] }, - "@jimp/diff@1.6.0": { - "integrity": "sha512-+yUAQ5gvRC5D1WHYxjBHZI7JBRusGGSLf8AmPRPCenTzh4PA+wZ1xv2+cYqQwTfQHU5tXYOhA0xDytfHUf1Zyw==", + "@jimp/diff@1.6.1": { + "integrity": "sha512-YkKDPdHjLgo1Api3+Bhc0GLAygldlpt97NfOKoNg1U6IUNXA6X2MgosCjPfSBiSvJvrrz1fsIR+/4cfYXBI/HQ==", "dependencies": [ "@jimp/plugin-resize", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "pixelmatch@5.3.0" ] }, - "@jimp/file-ops@1.6.0": { - "integrity": "sha512-Dx/bVDmgnRe1AlniRpCKrGRm5YvGmUwbDzt+MAkgmLGf+jvBT75hmMEZ003n9HQI/aPnm/YKnXjg/hOpzNCpHQ==" + "@jimp/file-ops@1.6.1": { + "integrity": "sha512-T+gX6osHjprbDRad0/B71Evyre7ZdVY1z/gFGEG9Z8KOtZPKboWvPeP2UjbZYWQLy9UKCPQX1FNAnDiOPkJL7w==" }, - "@jimp/js-bmp@1.6.0": { - "integrity": "sha512-FU6Q5PC/e3yzLyBDXupR3SnL3htU7S3KEs4e6rjDP6gNEOXRFsWs6YD3hXuXd50jd8ummy+q2WSwuGkr8wi+Gw==", + "@jimp/js-bmp@1.6.1": { + "integrity": "sha512-xzWzNT4/u5zGrTT3Tme9sGU7YzIKxi13+BCQwLqACbt5DXf9SAfdzRkopZQnmDko+6In5nqaT89Gjs43/WdnYQ==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "bmp-ts" ] }, - "@jimp/js-gif@1.6.0": { - "integrity": "sha512-N9CZPHOrJTsAUoWkWZstLPpwT5AwJ0wge+47+ix3++SdSL/H2QzyMqxbcDYNFe4MoI5MIhATfb0/dl/wmX221g==", + "@jimp/js-gif@1.6.1": { + "integrity": "sha512-YjY2W26rQa05XhanYhRZ7dingCiNN+T2Ymb1JiigIbABY0B28wHE3v3Cf1/HZPWGu0hOg36ylaKgV5KxF2M58w==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", "gifwrap", "omggif" ] }, - "@jimp/js-jpeg@1.6.0": { - "integrity": "sha512-6vgFDqeusblf5Pok6B2DUiMXplH8RhIKAryj1yn+007SIAQ0khM1Uptxmpku/0MfbClx2r7pnJv9gWpAEJdMVA==", + "@jimp/js-jpeg@1.6.1": { + "integrity": "sha512-HT9H3yOmlOFzYmdI15IYdfy6ggQhSRIaHeA+OTJSEORXBqEo97sUZu/DsgHIcX5NJ7TkJBTgZ9BZXsV6UbsyMg==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", "jpeg-js" ] }, - "@jimp/js-png@1.6.0": { - "integrity": "sha512-AbQHScy3hDDgMRNfG0tPjL88AV6qKAILGReIa3ATpW5QFjBKpisvUaOqhzJ7Reic1oawx3Riyv152gaPfqsBVg==", + "@jimp/js-png@1.6.1": { + "integrity": "sha512-SZ/KVhI5UjcSzzlXsXdIi/LhJ7UShf2NkMOtVrbZQcGzsqNtynAelrOXeoTxcanfVqmNhAoVHg8yR2cYoqrYjA==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", "pngjs@7.0.0" ] }, - "@jimp/js-tiff@1.6.0": { - "integrity": "sha512-zhReR8/7KO+adijj3h0ZQUOiun3mXUv79zYEAKvE0O+rP7EhgtKvWJOZfRzdZSNv0Pu1rKtgM72qgtwe2tFvyw==", + "@jimp/js-tiff@1.6.1": { + "integrity": "sha512-jDG/eJquID1M4MBlKMmDRBmz2TpXMv7TUyu2nIRUxhlUc2ogC82T+VQUkca9GJH1BBJ9dx5sSE5dGkWNjIbZxw==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", "utif2" ] }, - "@jimp/plugin-blit@1.6.0": { - "integrity": "sha512-M+uRWl1csi7qilnSK8uxK4RJMSuVeBiO1AY0+7APnfUbQNZm6hCe0CCFv1Iyw1D/Dhb8ph8fQgm5mwM0eSxgVA==", + "@jimp/plugin-blit@1.6.1": { + "integrity": "sha512-MwnI7C7K81uWddY9FLw1fCOIy6SsPIUftUz36Spt7jisCn8/40DhQMlSxpxTNelnZb/2SnloFimQfRZAmHLOqQ==", "dependencies": [ "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/plugin-blur@1.6.0": { - "integrity": "sha512-zrM7iic1OTwUCb0g/rN5y+UnmdEsT3IfuCXCJJNs8SZzP0MkZ1eTvuwK9ZidCuMo4+J3xkzCidRwYXB5CyGZTw==", + "@jimp/plugin-blur@1.6.1": { + "integrity": "sha512-lIo7Tzp5jQu30EFFSK/phXANK3citKVEjepDjQ6ljHoIFtuMRrnybnmI2Md24ulvWlDaz+hh3n6qrMb8ydwhZQ==", "dependencies": [ - "@jimp/core@1.6.0", - "@jimp/utils@1.6.0" + "@jimp/core@1.6.1", + "@jimp/utils@1.6.1" ] }, - "@jimp/plugin-circle@1.6.0": { - "integrity": "sha512-xt1Gp+LtdMKAXfDp3HNaG30SPZW6AQ7dtAtTnoRKorRi+5yCJjKqXRgkewS5bvj8DEh87Ko1ydJfzqS3P2tdWw==", + "@jimp/plugin-circle@1.6.1": { + "integrity": "sha512-kK1PavY6cKHNNKce37vdV4Tmpc1/zDKngGoeOV3j+EMatoHFZUinV3s6F9aWryPs3A0xhCLZgdJ6Zeea1d5LCQ==", "dependencies": [ "@jimp/types", "zod@3.25.76" ] }, - "@jimp/plugin-color@1.6.0": { - "integrity": "sha512-J5q8IVCpkBsxIXM+45XOXTrsyfblyMZg3a9eAo0P7VPH4+CrvyNQwaYatbAIamSIN1YzxmO3DkIZXzRjFSz1SA==", + "@jimp/plugin-color@1.6.1": { + "integrity": "sha512-LtUN1vAP+LRlZAtTNVhDRSiXx+26Kbz3zJaG6a5k59gQ95jgT5mknnF8lxkHcqJthM4MEk3/tPxkdJpEybyF/A==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "tinycolor2", "zod@3.25.76" ] }, - "@jimp/plugin-contain@1.6.0": { - "integrity": "sha512-oN/n+Vdq/Qg9bB4yOBOxtY9IPAtEfES8J1n9Ddx+XhGBYT1/QTU/JYkGaAkIGoPnyYvmLEDqMz2SGihqlpqfzQ==", + "@jimp/plugin-contain@1.6.1": { + "integrity": "sha512-m0qhrfA8jkTqretGv4w+T/ADFR4GwBpE0sCOC2uJ0dzr44/ddOMsIdrpi89kabqYiPYIrxkgdCVCLm3zn1Vkkg==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/plugin-blit", "@jimp/plugin-resize", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/plugin-cover@1.6.0": { - "integrity": "sha512-Iow0h6yqSC269YUJ8HC3Q/MpCi2V55sMlbkkTTx4zPvd8mWZlC0ykrNDeAy9IJegrQ7v5E99rJwmQu25lygKLA==", + "@jimp/plugin-cover@1.6.1": { + "integrity": "sha512-hZytnsth0zoll6cPf434BrT+p/v569Wr5tyO6Dp0dH1IDPhzhB5F38sZGMLDo7bzQiN9JFVB3fxkcJ/WYCJ3Mg==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/plugin-crop", "@jimp/plugin-resize", "@jimp/types", "zod@3.25.76" ] }, - "@jimp/plugin-crop@1.6.0": { - "integrity": "sha512-KqZkEhvs+21USdySCUDI+GFa393eDIzbi1smBqkUPTE+pRwSWMAf01D5OC3ZWB+xZsNla93BDS9iCkLHA8wang==", + "@jimp/plugin-crop@1.6.1": { + "integrity": "sha512-EerRSLlclXyKDnYc/H9w/1amZW7b7v3OGi/VlerPd2M/pAu5X8TkyYWtfqYCXnNp1Ixtd8oCo9zGfY9zoXT4rg==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/plugin-displace@1.6.0": { - "integrity": "sha512-4Y10X9qwr5F+Bo5ME356XSACEF55485j5nGdiyJ9hYzjQP9nGgxNJaZ4SAOqpd+k5sFaIeD7SQ0Occ26uIng5Q==", + "@jimp/plugin-displace@1.6.1": { + "integrity": "sha512-K07QVl7xQwIfD6KfxRV/c3E9e7ZBXxUXdWuvoTWcKHL2qV48MOF5Nqbz/aJW4ThnQARIsxvYlZjPFiqkCjlU+g==", "dependencies": [ "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/plugin-dither@1.6.0": { - "integrity": "sha512-600d1RxY0pKwgyU0tgMahLNKsqEcxGdbgXadCiVCoGd6V6glyCvkNrnnwC0n5aJ56Htkj88PToSdF88tNVZEEQ==", + "@jimp/plugin-dither@1.6.1": { + "integrity": "sha512-+2V+GCV2WycMoX1/z977TkZ8Zq/4MVSKElHYatgUqtwXMi2fDK2gKYU2g9V39IqFvTJsTIsK0+58VFz/ROBVew==", "dependencies": [ "@jimp/types" ] }, - "@jimp/plugin-fisheye@1.6.0": { - "integrity": "sha512-E5QHKWSCBFtpgZarlmN3Q6+rTQxjirFqo44ohoTjzYVrDI6B6beXNnPIThJgPr0Y9GwfzgyarKvQuQuqCnnfbA==", + "@jimp/plugin-fisheye@1.6.1": { + "integrity": "sha512-XtS5ZyoZ0vxZxJ6gkqI63SivhtI58vX95foMPM+cyzYkRsJXMOYCr8DScxF5bp4Xr003NjYm/P+7+08tibwzHA==", "dependencies": [ "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/plugin-flip@1.6.0": { - "integrity": "sha512-/+rJVDuBIVOgwoyVkBjUFHtP+wmW0r+r5OQ2GpatQofToPVbJw1DdYWXlwviSx7hvixTWLKVgRWQ5Dw862emDg==", + "@jimp/plugin-flip@1.6.1": { + "integrity": "sha512-ws38W/sGj7LobNRayQ83garxiktOyWxM5vO/y4a/2cy9v65SLEUzVkrj+oeAaUSSObdz4HcCEla7XtGlnAGAaA==", "dependencies": [ "@jimp/types", "zod@3.25.76" ] }, - "@jimp/plugin-hash@1.6.0": { - "integrity": "sha512-wWzl0kTpDJgYVbZdajTf+4NBSKvmI3bRI8q6EH9CVeIHps9VWVsUvEyb7rpbcwVLWYuzDtP2R0lTT6WeBNQH9Q==", + "@jimp/plugin-hash@1.6.1": { + "integrity": "sha512-sZt6ZcMX6i8vFWb4GYnw0pR/o9++ef0dTVcboTB5B/g7nrxCODIB4wfEkJ/YqZM5wUvol77K1qeS0/rVO6z21A==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/js-bmp", "@jimp/js-jpeg", "@jimp/js-png", @@ -1833,21 +2169,21 @@ "@jimp/plugin-color", "@jimp/plugin-resize", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "any-base" ] }, - "@jimp/plugin-mask@1.6.0": { - "integrity": "sha512-Cwy7ExSJMZszvkad8NV8o/Z92X2kFUFM8mcDAhNVxU0Q6tA0op2UKRJY51eoK8r6eds/qak3FQkXakvNabdLnA==", + "@jimp/plugin-mask@1.6.1": { + "integrity": "sha512-SIG0/FcmEj3tkwFxc7fAGLO8o4uNzMpSOdQOhbCgxefQKq5wOVMk9BQx/sdMPBwtMLr9WLq0GzLA/rk6t2v20A==", "dependencies": [ "@jimp/types", "zod@3.25.76" ] }, - "@jimp/plugin-print@1.6.0": { - "integrity": "sha512-zarTIJi8fjoGMSI/M3Xh5yY9T65p03XJmPsuNet19K/Q7mwRU6EV2pfj+28++2PV2NJ+htDF5uecAlnGyxFN2A==", + "@jimp/plugin-print@1.6.1": { + "integrity": "sha512-BYVz/X3Xzv8XYilVeDy11NOp0h7BTDjlOtu0BekIFHP1yHVd24AXNzbOy52XlzYZWQ0Dl36HOHEpl/nSNrzc6w==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/js-jpeg", "@jimp/js-png", "@jimp/plugin-blit", @@ -1859,45 +2195,45 @@ "zod@3.25.76" ] }, - "@jimp/plugin-quantize@1.6.0": { - "integrity": "sha512-EmzZ/s9StYQwbpG6rUGBCisc3f64JIhSH+ncTJd+iFGtGo0YvSeMdAd+zqgiHpfZoOL54dNavZNjF4otK+mvlg==", + "@jimp/plugin-quantize@1.6.1": { + "integrity": "sha512-J2En9PLURfP+vwYDtuZ9T8yBW6BWYZBScydAjRiPBmJfEhTcNQqiiQODrZf7EqbbX/Sy5H6dAeRiqkgoV9N6Ww==", "dependencies": [ "image-q", "zod@3.25.76" ] }, - "@jimp/plugin-resize@1.6.0": { - "integrity": "sha512-uSUD1mqXN9i1SGSz5ov3keRZ7S9L32/mAQG08wUwZiEi5FpbV0K8A8l1zkazAIZi9IJzLlTauRNU41Mi8IF9fA==", + "@jimp/plugin-resize@1.6.1": { + "integrity": "sha512-CLkrtJoIz2HdWnpYiN6p8KYcPc00rCH/SUu6o+lfZL05Q4uhecJlnvXuj9x+U6mDn3ldPmJj6aZqMHuUJzdVqg==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/types", "zod@3.25.76" ] }, - "@jimp/plugin-rotate@1.6.0": { - "integrity": "sha512-JagdjBLnUZGSG4xjCLkIpQOZZ3Mjbg8aGCCi4G69qR+OjNpOeGI7N2EQlfK/WE8BEHOW5vdjSyglNqcYbQBWRw==", + "@jimp/plugin-rotate@1.6.1": { + "integrity": "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/plugin-crop", "@jimp/plugin-resize", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/plugin-threshold@1.6.0": { - "integrity": "sha512-M59m5dzLoHOVWdM41O8z9SyySzcDn43xHseOH0HavjsfQsT56GGCC4QzU1banJidbUrePhzoEdS42uFE8Fei8w==", + "@jimp/plugin-threshold@1.6.1": { + "integrity": "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/plugin-color", "@jimp/plugin-hash", "@jimp/types", - "@jimp/utils@1.6.0", + "@jimp/utils@1.6.1", "zod@3.25.76" ] }, - "@jimp/types@1.6.0": { - "integrity": "sha512-7UfRsiKo5GZTAATxm2qQ7jqmUXP0DxTArztllTcYdyw6Xi5oT4RaoXynVtCD4UyLK5gJgkZJcwonoijrhYFKfg==", + "@jimp/types@1.6.1": { + "integrity": "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w==", "dependencies": [ "zod@3.25.76" ] @@ -1908,15 +2244,15 @@ "regenerator-runtime" ] }, - "@jimp/utils@1.6.0": { - "integrity": "sha512-gqFTGEosKbOkYF/WFj26jMHOI5OH2jeP1MmC/zbK6BF6VJBf8rIC5898dPfSzZEbSA0wbbV5slbntWVc5PKLFA==", + "@jimp/utils@1.6.1": { + "integrity": "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw==", "dependencies": [ "@jimp/types", "tinycolor2" ] }, - "@jimp/wasm-webp@1.6.0": { - "integrity": "sha512-P0zUpK6n2XIAn8bt0F6rhSn1+FgteBTrL+TBb6Oqw8v5qEDJoNYkd6LlfZYN8YwtRBTBdZ8GFnWsg2Sar+qOkA==", + "@jimp/wasm-webp@1.6.1": { + "integrity": "sha512-t+Wqkde4xQHP/UZ4bDiDo3pbhFz32E7FvQCUkuFdJDmEDl6gPCs6LQiQVBmumUQYTeVLiLtLzlM9j8s7yF0sXQ==", "dependencies": [ "@jsquash/webp", "zod@3.25.76" @@ -2005,6 +2341,9 @@ ], "bin": true }, + "@mjackson/node-fetch-server@0.7.0": { + "integrity": "sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==" + }, "@multiformats/base-x@4.0.1": { "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" }, @@ -2016,10 +2355,10 @@ "@tybys/wasm-util" ] }, - "@nestjs/common@11.1.17_reflect-metadata@0.2.2_rxjs@7.8.2": { - "integrity": "sha512-hLODw5Abp8OQgA+mUO4tHou4krKgDtUcM9j5Ihxncst9XeyxYBTt2bwZm4e4EQr5E352S4Fyy6V3iFx9ggxKAg==", + "@nestjs/common@11.1.18_reflect-metadata@0.2.2_rxjs@7.8.2": { + "integrity": "sha512-0sLq8Z+TIjLnz1Tqp0C/x9BpLbqpt1qEu0VcH4/fkE0y3F5JxhfK1AdKQ/SPbKhKgwqVDoY4gS8GQr2G6ujaWg==", "dependencies": [ - "file-type@21.3.2", + "file-type@21.3.4", "iterare", "load-esm", "reflect-metadata", @@ -2234,11 +2573,35 @@ "@preact/signals-core@1.14.1": { "integrity": "sha512-vxPpfXqrwUe9lpjqfYNjAF/0RF/eFGeLgdJzdmIIZjpOnTmGmAB4BjWone562mJGMRP4frU6iZ6ei3PDsu52Ng==" }, - "@preact/signals@2.9.0_preact@10.29.0": { + "@preact/signals@2.9.0_preact@10.29.1": { "integrity": "sha512-hYrY0KyUqkDgOl1qba/JGn6y81pXnurn21PMaxfcMwdncdZ3M/oVdmpTvEnsGjh48dIwDVc7bjWHqIsngSjYug==", "dependencies": [ "@preact/signals-core", - "preact@10.29.0" + "preact@10.29.1" + ] + }, + "@prefresh/babel-plugin@0.5.3": { + "integrity": "sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==" + }, + "@prefresh/core@1.5.9_preact@10.29.1": { + "integrity": "sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ==", + "dependencies": [ + "preact@10.29.1" + ] + }, + "@prefresh/utils@1.2.1": { + "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==" + }, + "@prefresh/vite@2.4.12_preact@10.29.1_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3": { + "integrity": "sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==", + "dependencies": [ + "@babel/core", + "@prefresh/babel-plugin", + "@prefresh/core", + "@prefresh/utils", + "@rollup/pluginutils@4.2.1", + "preact@10.29.1", + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ] }, "@quansync/fs@1.0.0": { @@ -2339,7 +2702,7 @@ "@rollup/plugin-commonjs@29.0.2_rollup@4.60.1": { "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==", "dependencies": [ - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "commondir", "estree-walker@2.0.2", "fdir", @@ -2355,7 +2718,7 @@ "@rollup/plugin-inject@5.0.5_rollup@4.60.1": { "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", "dependencies": [ - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "estree-walker@2.0.2", "magic-string", "rollup" @@ -2367,7 +2730,7 @@ "@rollup/plugin-json@6.1.0_rollup@4.60.1": { "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dependencies": [ - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "rollup" ], "optionalPeers": [ @@ -2377,7 +2740,7 @@ "@rollup/plugin-node-resolve@16.0.3_rollup@4.60.1": { "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", "dependencies": [ - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "@types/resolve", "deepmerge", "is-module", @@ -2391,7 +2754,7 @@ "@rollup/plugin-replace@6.0.3_rollup@4.60.1": { "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", "dependencies": [ - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "magic-string", "rollup" ], @@ -2411,6 +2774,13 @@ "rollup" ] }, + "@rollup/pluginutils@4.2.1": { + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dependencies": [ + "estree-walker@2.0.2", + "picomatch@2.3.2" + ] + }, "@rollup/pluginutils@5.3.0_rollup@4.60.1": { "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dependencies": [ @@ -2648,7 +3018,7 @@ "@sindresorhus/merge-streams@4.0.0": { "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==" }, - "@solidjs/start@1.3.2_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.0__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.0__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.0_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.0_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_solid-js@1.9.12_tsx@4.21.0_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_yaml@2.8.3": { + "@solidjs/start@1.3.2_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.2__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.2__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.2_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.2_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_solid-js@1.9.12_tsx@4.21.0_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_yaml@2.8.3": { "integrity": "sha512-tasDl3utVbtP0rr4InB3ntBIFV2upvEiFrOOCkRrAA3yBfjx9elpxnc94sJQXo65PNYdAAAkPIC6h93vLrtwHg==", "dependencies": [ "@tanstack/server-functions-plugin", @@ -2681,8 +3051,8 @@ "acorn@8.16.0" ] }, - "@sveltejs/kit@2.55.0_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.0.0__svelte@5.55.1__vite@7.3.1___@types+node@24.12.0___tsx@4.21.0___yaml@2.8.3__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_svelte@5.55.1_typescript@6.0.2_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { - "integrity": "sha512-MdFRjevVxmAknf2NbaUkDF16jSIzXMWd4Nfah0Qp8TtQVoSp3bV4jKt8mX7z7qTUTWvgSaxtR0EG5WJf53gcuA==", + "@sveltejs/kit@2.57.0_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.0.0__svelte@5.55.2__vite@7.3.2___@types+node@24.12.2___tsx@4.21.0___yaml@2.8.3__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_svelte@5.55.2_typescript@6.0.2_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { + "integrity": "sha512-TMiqCTy9ZW4KBHvmTgeWU/hF6jcFpeMgR+9ekE06uhhGnbUZ7wpIY6l1Uk4ThRzlWYJnCVfzmtVNaHaDjaSiSg==", "dependencies": [ "@opentelemetry/api", "@standard-schema/spec", @@ -2700,7 +3070,7 @@ "sirv", "svelte", "typescript", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ], "optionalPeers": [ "@opentelemetry/api", @@ -2708,18 +3078,18 @@ ], "bin": true }, - "@sveltejs/vite-plugin-svelte@7.0.0_svelte@5.55.1_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "@sveltejs/vite-plugin-svelte@7.0.0_svelte@5.55.2_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==", "dependencies": [ "deepmerge", "magic-string", "obug", "svelte", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", - "vitefu@1.1.3_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "vitefu@1.1.3_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ] }, - "@tanstack/directive-functions-plugin@1.121.21_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "@tanstack/directive-functions-plugin@1.121.21_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-B9z/HbF7gJBaRHieyX7f2uQ4LpLLAVAEutBZipH6w+CYD6RHRJvSVPzECGHF7icFhNWTiJQL2QR6K07s59yzEw==", "dependencies": [ "@babel/code-frame@7.26.2", @@ -2729,7 +3099,7 @@ "@tanstack/router-utils", "babel-dead-code-elimination", "tiny-invariant", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ] }, "@tanstack/router-utils@1.161.6": { @@ -2746,7 +3116,7 @@ "tinyglobby" ] }, - "@tanstack/server-functions-plugin@1.121.21_@types+node@24.12.0_tsx@4.21.0_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_yaml@2.8.3": { + "@tanstack/server-functions-plugin@1.121.21_@types+node@24.12.2_tsx@4.21.0_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_yaml@2.8.3": { "integrity": "sha512-a05fzK+jBGacsSAc1vE8an7lpBh4H0PyIEcivtEyHLomgSeElAJxm9E2It/0nYRZ5Lh23m0okbhzJNaYWZpAOg==", "dependencies": [ "@babel/code-frame@7.26.2", @@ -2780,7 +3150,7 @@ "@types/amqplib@0.10.8": { "integrity": "sha512-vtDp8Pk1wsE/AuQ8/Rgtm6KUZYqcnTgNvEHwzCkX8rL7AGsC6zqAfKAAJhUZXFhM/Pp++tbnUHiam/8vVpPztA==", "dependencies": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "@types/babel__core@7.20.5": { @@ -2877,7 +3247,7 @@ "@types/mute-stream@0.0.4": { "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dependencies": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "@types/nlcst@2.0.3": { @@ -2889,20 +3259,20 @@ "@types/node@16.9.1": { "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" }, - "@types/node@20.19.37": { - "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", + "@types/node@20.19.39": { + "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", "dependencies": [ "undici-types@6.21.0" ] }, - "@types/node@22.19.15": { - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "@types/node@22.19.17": { + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", "dependencies": [ "undici-types@6.21.0" ] }, - "@types/node@24.12.0": { - "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "@types/node@24.12.2": { + "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", "dependencies": [ "undici-types@7.16.0" ] @@ -2919,8 +3289,8 @@ "@types/wrap-ansi@3.0.0": { "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" }, - "@typescript-eslint/parser@8.58.0_eslint@9.39.4_typescript@6.0.2": { - "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", + "@typescript-eslint/parser@8.58.1_eslint@9.39.4_typescript@6.0.2": { + "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", "dependencies": [ "@typescript-eslint/scope-manager", "@typescript-eslint/types", @@ -2931,8 +3301,8 @@ "typescript" ] }, - "@typescript-eslint/project-service@8.58.0_typescript@6.0.2": { - "integrity": "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==", + "@typescript-eslint/project-service@8.58.1_typescript@6.0.2": { + "integrity": "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==", "dependencies": [ "@typescript-eslint/tsconfig-utils", "@typescript-eslint/types", @@ -2940,24 +3310,24 @@ "typescript" ] }, - "@typescript-eslint/scope-manager@8.58.0": { - "integrity": "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==", + "@typescript-eslint/scope-manager@8.58.1": { + "integrity": "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==", "dependencies": [ "@typescript-eslint/types", "@typescript-eslint/visitor-keys" ] }, - "@typescript-eslint/tsconfig-utils@8.58.0_typescript@6.0.2": { - "integrity": "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==", + "@typescript-eslint/tsconfig-utils@8.58.1_typescript@6.0.2": { + "integrity": "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==", "dependencies": [ "typescript" ] }, - "@typescript-eslint/types@8.58.0": { - "integrity": "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==" + "@typescript-eslint/types@8.58.1": { + "integrity": "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==" }, - "@typescript-eslint/typescript-estree@8.58.0_typescript@6.0.2": { - "integrity": "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==", + "@typescript-eslint/typescript-estree@8.58.1_typescript@6.0.2": { + "integrity": "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==", "dependencies": [ "@typescript-eslint/project-service", "@typescript-eslint/tsconfig-utils", @@ -2971,8 +3341,8 @@ "typescript" ] }, - "@typescript-eslint/utils@8.58.0_eslint@9.39.4_typescript@6.0.2": { - "integrity": "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==", + "@typescript-eslint/utils@8.58.1_eslint@9.39.4_typescript@6.0.2": { + "integrity": "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==", "dependencies": [ "@eslint-community/eslint-utils", "@typescript-eslint/scope-manager", @@ -2982,8 +3352,8 @@ "typescript" ] }, - "@typescript-eslint/visitor-keys@8.58.0": { - "integrity": "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==", + "@typescript-eslint/visitor-keys@8.58.1": { + "integrity": "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==", "dependencies": [ "@typescript-eslint/types", "eslint-visitor-keys@5.0.1" @@ -2996,7 +3366,7 @@ "integrity": "sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==", "dependencies": [ "@mapbox/node-pre-gyp", - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "acorn@8.16.0", "acorn-import-attributes", "async-sema", @@ -3033,7 +3403,7 @@ ], "bin": true }, - "@vinxi/plugin-directives@0.5.1_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.0__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.0__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.0_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.0_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_tsx@4.21.0_yaml@2.8.3": { + "@vinxi/plugin-directives@0.5.1_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.2__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.2__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.2_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.2_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-pH/KIVBvBt7z7cXrUH/9uaqcdxjegFC7+zvkZkdOyWzs+kQD5KPf3cl8kC+5ayzXHT+OMlhGhyitytqN3cGmHg==", "dependencies": [ "@babel/parser@7.29.2", @@ -3048,7 +3418,7 @@ "vinxi" ] }, - "@vinxi/server-components@0.5.1_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.0__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.0__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.0_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.0_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_tsx@4.21.0_yaml@2.8.3": { + "@vinxi/server-components@0.5.1_vinxi@0.5.11__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2__@types+node@24.12.2__ioredis@5.10.1__mysql2@3.20.0___@types+node@24.12.2__rolldown@1.0.0-rc.12___@emnapi+core@1.9.2___@emnapi+runtime@1.9.2__tsx@4.21.0__yaml@2.8.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.2_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.2_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-0BsG95qac3dkhfdRZxqzqYWJE4NvPL7ILlV43B6K6ho1etXWB2e5b0IxsUAUbyqpqiXM7mSRivojuXjb2G4OsQ==", "dependencies": [ "@vinxi/plugin-directives", @@ -3071,16 +3441,16 @@ "tinyrainbow" ] }, - "@vitest/mocker@3.2.4_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "@vitest/mocker@3.2.4_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dependencies": [ "@vitest/spy", "estree-walker@3.0.3", "magic-string", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ], "optionalPeers": [ - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ] }, "@vitest/pretty-format@3.2.4": { @@ -3324,7 +3694,7 @@ "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "bin": true }, - "astro@5.18.1_@types+node@24.12.0_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3": { + "astro@5.18.1_@types+node@24.12.2_ioredis@5.10.1_tsx@4.21.0_typescript@6.0.2_yaml@2.8.3": { "integrity": "sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==", "dependencies": [ "@astrojs/compiler", @@ -3333,7 +3703,7 @@ "@astrojs/telemetry", "@capsizecss/unpack", "@oslojs/encoding", - "@rollup/pluginutils", + "@rollup/pluginutils@5.3.0_rollup@4.60.1", "acorn@8.16.0", "aria-query@5.3.2", "axobject-query", @@ -3374,7 +3744,7 @@ "shiki@3.23.0", "smol-toml", "svgo", - "tinyexec@1.0.4", + "tinyexec@1.1.1", "tinyglobby", "tsconfck", "ultrahtml", @@ -3382,8 +3752,8 @@ "unist-util-visit", "unstorage", "vfile", - "vite@6.4.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", - "vitefu@1.1.3_vite@6.4.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", + "vite@6.4.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "vitefu@1.1.3_vite@6.4.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", "xxhash-wasm", "yargs-parser@21.1.1", "yocto-spinner", @@ -3509,8 +3879,8 @@ "base64-js@1.5.1": { "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "baseline-browser-mapping@2.10.13": { - "integrity": "sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==", + "baseline-browser-mapping@2.10.16": { + "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==", "bin": true }, "bindings@1.5.0": { @@ -3695,8 +4065,8 @@ "camelcase@8.0.0": { "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==" }, - "caniuse-lite@1.0.30001784": { - "integrity": "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==" + "caniuse-lite@1.0.30001787": { + "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==" }, "canonicalize@2.1.0": { "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", @@ -4028,7 +4398,7 @@ "undici-types@5.28.4" ] }, - "db0@0.3.4_mysql2@3.20.0__@types+node@24.12.0_@types+node@24.12.0": { + "db0@0.3.4_mysql2@3.20.0__@types+node@24.12.2_@types+node@24.12.2": { "integrity": "sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==", "dependencies": [ "mysql2" @@ -4095,8 +4465,8 @@ "define-lazy-prop@3.0.0": { "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" }, - "defu@6.1.6": { - "integrity": "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==" + "defu@6.1.7": { + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==" }, "delegates@1.0.0": { "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" @@ -4128,8 +4498,8 @@ "base-64" ] }, - "devalue@5.6.4": { - "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==" + "devalue@5.7.0": { + "integrity": "sha512-qCvc8m7cImp1QDCsiY+C2EdSBWSj7Ucfoq87scSdYboDiIKdvMtFbH1U2VReBls6WMhMaUOoK3ZJEDNG/7zm3w==" }, "devlop@1.1.0": { "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", @@ -4174,8 +4544,8 @@ "type-fest@5.5.0" ] }, - "dotenv@17.4.0": { - "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==" + "dotenv@17.4.1": { + "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==" }, "dset@3.1.4": { "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==" @@ -4200,8 +4570,8 @@ "ee-first@1.1.1": { "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "electron-to-chromium@1.5.331": { - "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==" + "electron-to-chromium@1.5.333": { + "integrity": "sha512-skNh4FsE+IpCJV7xAQGbQ4eyOGvcEctVBAk7a5KPzxC3alES9rLrT+2IsPRPgeQr8LVxdJr8BHQ9481+TOr0xg==" }, "emoji-regex-xs@1.0.0": { "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==" @@ -4264,6 +4634,10 @@ "es-toolkit@1.45.1": { "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==" }, + "esbuild-wasm@0.25.12": { + "integrity": "sha512-rZqkjL3Y6FwLpSHzLnaEy8Ps6veCNo1kZa9EOfJvmWtBq5dJH4iVjfmOO6Mlkv9B0tt9WFPFmb/VxlgJOnueNg==", + "bin": true + }, "esbuild@0.25.12": { "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "optionalDependencies": [ @@ -4329,6 +4703,39 @@ "scripts": true, "bin": true }, + "esbuild@0.25.7": { + "integrity": "sha512-daJB0q2dmTzo90L9NjRaohhRWrCzYxWNFTjEi72/h+p5DcY3yn4MacWfDakHmaBaDzDiuLJsCh0+6LK/iX+c+Q==", + "optionalDependencies": [ + "@esbuild/aix-ppc64@0.25.7", + "@esbuild/android-arm@0.25.7", + "@esbuild/android-arm64@0.25.7", + "@esbuild/android-x64@0.25.7", + "@esbuild/darwin-arm64@0.25.7", + "@esbuild/darwin-x64@0.25.7", + "@esbuild/freebsd-arm64@0.25.7", + "@esbuild/freebsd-x64@0.25.7", + "@esbuild/linux-arm@0.25.7", + "@esbuild/linux-arm64@0.25.7", + "@esbuild/linux-ia32@0.25.7", + "@esbuild/linux-loong64@0.25.7", + "@esbuild/linux-mips64el@0.25.7", + "@esbuild/linux-ppc64@0.25.7", + "@esbuild/linux-riscv64@0.25.7", + "@esbuild/linux-s390x@0.25.7", + "@esbuild/linux-x64@0.25.7", + "@esbuild/netbsd-arm64@0.25.7", + "@esbuild/netbsd-x64@0.25.7", + "@esbuild/openbsd-arm64@0.25.7", + "@esbuild/openbsd-x64@0.25.7", + "@esbuild/openharmony-arm64@0.25.7", + "@esbuild/sunos-x64@0.25.7", + "@esbuild/win32-arm64@0.25.7", + "@esbuild/win32-ia32@0.25.7", + "@esbuild/win32-x64@0.25.7" + ], + "scripts": true, + "bin": true + }, "esbuild@0.27.7": { "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "optionalDependencies": [ @@ -4686,8 +5093,8 @@ "uint8array-extras" ] }, - "file-type@21.3.2": { - "integrity": "sha512-DLkUvGwep3poOV2wpzbHCOnSKGk1LzyXTv+aHFgN2VFl96wnp8YA9YjO2qPzg5PuL8q/SW9Pdi6WTkYOIh995w==", + "file-type@21.3.4": { + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", "dependencies": [ "@tokenizer/inflate", "strtok3@10.3.5", @@ -5074,8 +5481,8 @@ "highlight.js@10.7.3": { "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" }, - "hono@4.12.10": { - "integrity": "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==" + "hono@4.12.12": { + "integrity": "sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==" }, "hookable@5.5.3": { "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" @@ -5212,20 +5619,20 @@ "@inquirer/core@8.2.4" ] }, - "inquirer@12.11.1_@types+node@24.12.0": { + "inquirer@12.11.1_@types+node@24.12.2": { "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", "dependencies": [ "@inquirer/ansi", - "@inquirer/core@10.3.2_@types+node@24.12.0", + "@inquirer/core@10.3.2_@types+node@24.12.2", "@inquirer/prompts", - "@inquirer/type@3.0.10_@types+node@24.12.0", - "@types/node@24.12.0", + "@inquirer/type@3.0.10_@types+node@24.12.2", + "@types/node@24.12.2", "mute-stream@2.0.0", "run-async", "rxjs" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ] }, "ioredis@5.10.1": { @@ -5393,10 +5800,10 @@ "@pkgjs/parseargs" ] }, - "jimp@1.6.0": { - "integrity": "sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==", + "jimp@1.6.1": { + "integrity": "sha512-hNQh6rZtWfSVWSNVmvq87N5BPJsNH7k7I7qyrXf9DOma9xATQk3fsyHazCQe51nCjdkoWdTmh0vD7bjVSLoxxw==", "dependencies": [ - "@jimp/core@1.6.0", + "@jimp/core@1.6.1", "@jimp/diff", "@jimp/js-bmp", "@jimp/js-gif", @@ -5422,7 +5829,7 @@ "@jimp/plugin-rotate", "@jimp/plugin-threshold", "@jimp/types", - "@jimp/utils@1.6.0" + "@jimp/utils@1.6.1" ] }, "jiti@1.21.7": { @@ -5657,8 +6064,8 @@ "lru-cache@10.4.3": { "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "lru-cache@11.2.7": { - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==" + "lru-cache@11.3.2": { + "integrity": "sha512-wgWa6FWQ3QRRJbIjbsldRJZxdxYngT/dO0I5Ynmlnin8qy7tC6xYzbcJjtN4wHLXtkbVwHzk0C+OejVw1XM+DQ==" }, "lru-cache@5.1.1": { "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", @@ -6223,10 +6630,10 @@ "mute-stream@2.0.0": { "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==" }, - "mysql2@3.20.0_@types+node@24.12.0": { + "mysql2@3.20.0_@types+node@24.12.2": { "integrity": "sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg==", "dependencies": [ - "@types/node@24.12.0", + "@types/node@24.12.2", "aws-ssl-profiles", "denque", "generate-function", @@ -6264,7 +6671,7 @@ "neotraverse@0.6.18": { "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==" }, - "nitropack@2.13.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.0_mysql2@3.20.0__@types+node@24.12.0_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2": { + "nitropack@2.13.3_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.2_mysql2@3.20.0__@types+node@24.12.2_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2": { "integrity": "sha512-C8vO7RxkU0AQ3HbYUumuG6MVM5JjRaBchke/rYFOp3EvrLtTBHZYhDVGECdpa27vNuOYRzm3GtQMn2YDOjDJLA==", "dependencies": [ "@cloudflare/kv-asset-handler@0.4.2", @@ -6605,7 +7012,7 @@ "path-scurry@2.0.2": { "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dependencies": [ - "lru-cache@11.2.7", + "lru-cache@11.3.2", "minipass" ] }, @@ -6721,31 +7128,31 @@ "pngjs@7.0.0": { "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==" }, - "postcss@8.5.8": { - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "postcss@8.5.9": { + "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", "dependencies": [ "nanoid", "picocolors", "source-map-js" ] }, - "postgres@3.4.8": { - "integrity": "sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==" + "postgres@3.4.9": { + "integrity": "sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw==" }, "powershell-utils@0.1.0": { "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==" }, - "preact-render-to-string@6.6.5_preact@10.29.0": { - "integrity": "sha512-O6MHzYNIKYaiSX3bOw0gGZfEbOmlIDtDfWwN1JJdc/T3ihzRT6tGGSEWE088dWrEDGa1u7101q+6fzQnO9XCPA==", + "preact-render-to-string@6.6.7_preact@10.29.1": { + "integrity": "sha512-3XdbsX3+vn9dQW+jJI/FsI9rlkgl6dbeUpqLsChak6jp3j3auFqBCkno7VChbMFs5Q8ylBj6DrUkKRwtVN3nvw==", "dependencies": [ - "preact@10.29.0" + "preact@10.29.1" ] }, "preact@10.19.6": { "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==" }, - "preact@10.29.0": { - "integrity": "sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==" + "preact@10.29.1": { + "integrity": "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==" }, "prelude-ls@1.2.1": { "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" @@ -7299,14 +7706,14 @@ "serialize-javascript@7.0.5": { "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==" }, - "seroval-plugins@1.5.1_seroval@1.5.1": { - "integrity": "sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==", + "seroval-plugins@1.5.2_seroval@1.5.2": { + "integrity": "sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg==", "dependencies": [ "seroval" ] }, - "seroval@1.5.1": { - "integrity": "sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==" + "seroval@1.5.2": { + "integrity": "sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==" }, "serve-placeholder@2.0.2": { "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", @@ -7495,8 +7902,8 @@ "is-arrayish" ] }, - "simple-xml-to-json@1.2.4": { - "integrity": "sha512-3MY16e0ocMHL7N1ufpdObURGyX+lCo0T/A+y6VCwosLdH1HSda4QZl1Sdt/O+2qWp48WFi26XEp5rF0LoaL0Dg==" + "simple-xml-to-json@1.2.7": { + "integrity": "sha512-mz9VXphOxQWX3eQ/uXCtm6upltoN0DLx8Zb5T4TFC4FHB7S9FDPGre8CfLWqPWQQH/GrQYd2AXhhVM5LDpYx6Q==" }, "sirv@3.0.2": { "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", @@ -7713,8 +8120,8 @@ "supports-preserve-symlinks-flag@1.0.0": { "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "svelte@5.55.1": { - "integrity": "sha512-QjvU7EFemf6mRzdMGlAFttMWtAAVXrax61SZYHdkD6yoVGQ89VeyKfZD4H1JrV1WLmJBxWhFch9H6ig/87VGjw==", + "svelte@5.55.2": { + "integrity": "sha512-z41M/hi0ZPTzrwVKLvB/R1/Oo08gL1uIib8HZ+FncqxxtY9MLb01emg2fqk+WLZ/lNrrtNDFh7BZLDxAHvMgLw==", "dependencies": [ "@jridgewell/remapping", "@jridgewell/sourcemap-codec", @@ -7837,11 +8244,11 @@ "tinyexec@0.3.2": { "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" }, - "tinyexec@1.0.4": { - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==" + "tinyexec@1.1.1": { + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==" }, - "tinyglobby@0.2.15": { - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "tinyglobby@0.2.16": { + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "dependencies": [ "fdir", "picomatch@4.0.4" @@ -7935,7 +8342,7 @@ "rolldown", "rolldown-plugin-dts", "semver@7.7.4", - "tinyexec@1.0.4", + "tinyexec@1.1.1", "tinyglobby", "tree-kill", "typescript", @@ -8204,7 +8611,7 @@ ], "bin": true }, - "unstorage@1.17.5_db0@0.3.4__mysql2@3.20.0___@types+node@24.12.0__@types+node@24.12.0_ioredis@5.10.1_@types+node@24.12.0_mysql2@3.20.0__@types+node@24.12.0": { + "unstorage@1.17.5_db0@0.3.4__mysql2@3.20.0___@types+node@24.12.2__@types+node@24.12.2_ioredis@5.10.1_@types+node@24.12.2_mysql2@3.20.0__@types+node@24.12.2": { "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", "dependencies": [ "anymatch", @@ -8213,7 +8620,7 @@ "destr", "h3@1.15.11", "ioredis", - "lru-cache@11.2.7", + "lru-cache@11.3.2", "node-fetch-native", "ofetch", "ufo" @@ -8330,7 +8737,7 @@ "vfile-message" ] }, - "vinxi@0.5.11_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.0_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.0_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_tsx@4.21.0_yaml@2.8.3": { + "vinxi@0.5.11_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2_@types+node@24.12.2_ioredis@5.10.1_mysql2@3.20.0__@types+node@24.12.2_rolldown@1.0.0-rc.12__@emnapi+core@1.9.2__@emnapi+runtime@1.9.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-82Qm+EG/b2PRFBvXBbz1lgWBGcd9totIL6SJhnrZYfakjloTVG9+5l6gfO6dbCCtztm5pqWFzLY0qpZ3H3ww/w==", "dependencies": [ "@babel/core", @@ -8365,24 +8772,24 @@ "unctx", "unenv@1.10.0", "unstorage", - "vite@6.4.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", + "vite@6.4.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", "zod@4.3.6" ], "bin": true }, - "vite-node@3.2.4_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "vite-node@3.2.4_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dependencies": [ "cac@6.7.14", "debug@4.4.3", "es-module-lexer", "pathe@2.0.3", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ], "bin": true }, - "vite-plugin-solid@2.11.11_solid-js@1.9.12_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { - "integrity": "sha512-YMZCXsLw9kyuvQFEdwLP27fuTQJLmjNoHy90AOJnbRuJ6DwShUxKFo38gdFrWn9v11hnGicKCZEaeI/TFs6JKw==", + "vite-plugin-solid@2.11.12_solid-js@1.9.12_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { + "integrity": "sha512-FgjPcx2OwX9h6f28jli7A4bG7PP3te8uyakE5iqsmpq3Jqi1TWLgSroC9N6cMfGRU2zXsl4Q6ISvTr2VL0QHpA==", "dependencies": [ "@babel/core", "@types/babel__core", @@ -8390,14 +8797,14 @@ "merge-anything", "solid-js", "solid-refresh", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", - "vitefu@1.1.3_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", + "vitefu@1.1.3_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ] }, - "vite@6.4.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "vite@6.4.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", "dependencies": [ - "@types/node@24.12.0", + "@types/node@24.12.2", "esbuild@0.25.12", "fdir", "picomatch@4.0.4", @@ -8411,16 +8818,16 @@ "fsevents" ], "optionalPeers": [ - "@types/node@24.12.0", + "@types/node@24.12.2", "tsx", "yaml" ], "bin": true }, - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", "dependencies": [ - "@types/node@24.12.0", + "@types/node@24.12.2", "esbuild@0.27.7", "fdir", "picomatch@4.0.4", @@ -8434,29 +8841,29 @@ "fsevents" ], "optionalPeers": [ - "@types/node@24.12.0", + "@types/node@24.12.2", "tsx", "yaml" ], "bin": true }, - "vitefu@1.1.3_vite@6.4.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "vitefu@1.1.3_vite@6.4.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==" }, - "vitefu@1.1.3_vite@7.3.1__@types+node@24.12.0__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "vitefu@1.1.3_vite@7.3.2__@types+node@24.12.2__tsx@4.21.0__yaml@2.8.3_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", "dependencies": [ - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ], "optionalPeers": [ - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3" + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3" ] }, - "vitest@3.2.4_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3": { + "vitest@3.2.4_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3": { "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dependencies": [ "@types/chai", - "@types/node@24.12.0", + "@types/node@24.12.2", "@vitest/expect", "@vitest/mocker", "@vitest/pretty-format", @@ -8476,12 +8883,12 @@ "tinyglobby", "tinypool", "tinyrainbow", - "vite@7.3.1_@types+node@24.12.0_tsx@4.21.0_yaml@2.8.3", + "vite@7.3.2_@types+node@24.12.2_tsx@4.21.0_yaml@2.8.3", "vite-node", "why-is-node-running" ], "optionalPeers": [ - "@types/node@24.12.0" + "@types/node@24.12.2" ], "bin": true }, @@ -8553,7 +8960,7 @@ "scripts": true, "bin": true }, - "wrangler@4.35.0_@cloudflare+workers-types@4.20260403.1": { + "wrangler@4.35.0_@cloudflare+workers-types@4.20260408.1": { "integrity": "sha512-HbyXtbrh4Fi3mU8ussY85tVdQ74qpVS1vctUgaPc+bPrXBTqfDLkZ6VRtHAVF/eBhz4SFmhJtCQpN1caY2Ak8A==", "dependencies": [ "@cloudflare/kv-asset-handler@0.4.0", diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index be227c9d7..24b6adf3b 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -62,7 +62,10 @@ function getReferenceItems(): { text: string; link: string }[] { const names = new Set(); for (const workspaceEntry of rootDenoConfig.workspace ?? []) { if (!workspaceEntry.startsWith("./packages/")) continue; - const packageDenoJsonUrl = new URL(`${workspaceEntry}/deno.json`, repoRootUrl); + const packageDenoJsonUrl = new URL( + `${workspaceEntry}/deno.json`, + repoRootUrl, + ); const packageDenoConfig = JSON.parse( readFileSync(packageDenoJsonUrl, "utf-8"), ) as PackageDenoConfig; diff --git a/docs/manual/integration.md b/docs/manual/integration.md index d9829982d..d450e17be 100644 --- a/docs/manual/integration.md +++ b/docs/manual/integration.md @@ -4,10 +4,12 @@ description: >- explains how to integrate Fedify with web frameworks. --- + + Integration =========== -Fedify is designed to be used together with web frameworks. This document +Fedify is designed to be used together with web frameworks. This document explains how to integrate Fedify with web frameworks. @@ -15,17 +17,16 @@ How it works ------------ Usually, Fedify behaves as a middleware that wraps around the web framework's -request handler. The middleware intercepts the incoming HTTP requests and -dispatches them to the appropriate handler based on the request path and -the [`Accept`] header (i.e., [content negotiation]). Basically, this -architecture allows Fedify and your web framework to coexist in the same domain -and port. - -For example, if you make a request to */.well-known/webfinger* Fedify will -handle the request by itself, but if you make a request to */users/alice* +request handler. The middleware intercepts the incoming HTTP requests and +dispatches them to the appropriate handler based on the request path and the +[`Accept`] header (i.e., [content negotiation]). Basically, this architecture +allows Fedify and your web framework to coexist in the same domain and port. + +For example, if you make a request to _/.well-known/webfinger_ Fedify will +handle the request by itself, but if you make a request to _/users/alice_ (assuming your web framework has a handler for `/users/:identifier`) with `Accept: text/html` header, Fedify will dispatch the request to the web -framework's appropriate handler for `/users/:identifier`. Or if you define an +framework's appropriate handler for `/users/:identifier`. Or if you define an actor dispatcher for `/users/{identifier}` in Fedify, and the request is made with `Accept: application/activity+json` header, Fedify will dispatch the request to the appropriate actor dispatcher. @@ -55,27 +56,84 @@ sequenceDiagram > [!NOTE] > -> Why not use a reverse proxy in front of the web framework and Fedify? -> Because you would want to call Fedify's API from the web framework's -> request handler, e.g., to send an ActivityPub activity. If you put a -> reverse proxy in front of them, the web framework cannot call Fedify's API -> directly. +> Why not use a reverse proxy in front of the web framework and Fedify? Because +> you would want to call Fedify's API from the web framework's request handler, +> e.g., to send an ActivityPub activity. If you put a reverse proxy in front of +> them, the web framework cannot call Fedify's API directly. > -> Of course, you can divide your application into two separate services, -> one for ActivityPub and the other for the web application, and put a -> reverse proxy in front of them. But in this case, you need to implement -> the communication between the two services (using a message queue or RPC, -> for example), which is non-trivial. +> Of course, you can divide your application into two separate services, one for +> ActivityPub and the other for the web application, and put a reverse proxy in +> front of them. But in this case, you need to implement the communication +> between the two services (using a message queue or RPC, for example), which is +> non-trivial. [`Accept`]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept [content negotiation]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation +Adonisjs +-------- + +[AdonisJS] is a batteries-included TypeScript framework for building full-stack +web applications on Node.js. The _@fedify/adonis_ package provides a middleware +to integrate Fedify with AdonisJS: + +::: code-group + +~~~~ sh [npm] +npm add @fedify/adonis +~~~~ + +~~~~ sh [pnpm] +pnpm add @fedify/adonis +~~~~ + +~~~~ sh [Yarn] +yarn add @fedify/adonis +~~~~ + +~~~~ sh [Bun] +bun add @fedify/adonis +~~~~ + +::: + +Create a middleware file and register it as a server middleware: + +~~~~ typescript +// app/middleware/fedify_middleware.ts +import { fedifyMiddleware } from "@fedify/adonis"; +import { createFederation } from "@fedify/fedify"; + +export const federation = createFederation({ + // Omitted for brevity; see the related section for details. +}); + +export default fedifyMiddleware(federation); +~~~~ + +~~~~ typescript +// start/kernel.ts +import server from "@adonisjs/core/services/server"; + +server.use([ + () => import("#middleware/fedify_middleware"), + // ... other middleware +]); +~~~~ + +> [!TIP] +> Register the Fedify middleware before the body parser middleware so that +> federation endpoints can read the raw request body. + +[AdonisJS]: https://adonisjs.com/ + + Express ------- -[Express] is a fast, unopinionated, minimalist web framework for Node.js. -The *@fedify/express* package provides a middleware to integrate Fedify with +[Express] is a fast, unopinionated, minimalist web framework for Node.js. The +_@fedify/express_ package provides a middleware to integrate Fedify with Express: ::: code-group @@ -116,19 +174,19 @@ export const app = express(); app.set("trust proxy", true); -app.use(integrateFederation(federation, (req) => "context data goes here")); // [!code highlight] +app.use(integrateFederation(federation, (req) => "context data goes here")); // [!code highlight] ~~~~ > [!NOTE] -> If your application uses Express 4.x behind a reverse proxy with -> a non-standard port (e.g., `Host: example.com:8080`), the reconstructed -> request URL may lose the port number. This is because Express 4.x's -> [`req.host`][trust proxy] (which respects `trust proxy`) strips the port -> from the `Host` header. +> If your application uses Express 4.x behind a reverse proxy with a +> non-standard port (e.g., `Host: example.com:8080`), the reconstructed request +> URL may lose the port number. This is because Express 4.x's +> [`req.host`][trust proxy] (which respects `trust proxy`) strips the port from +> the `Host` header. > -> This does not occur with Express 5.x, where `req.host` retains the port. -> If you rely on `trust proxy` and your origin includes a non-standard port, -> we recommend upgrading to Express 5. +> This does not occur with Express 5.x, where `req.host` retains the port. If +> you rely on `trust proxy` and your origin includes a non-standard port, we +> recommend upgrading to Express 5. [Express]: https://expressjs.com/ [trust proxy]: https://expressjs.com/en/guide/behind-proxies.html @@ -137,11 +195,11 @@ app.use(integrateFederation(federation, (req) => "context data goes here")); // Fastify ------- -*This API is available since Fedify 1.9.0.* +_This API is available since Fedify 1.9.0._ -[Fastify] is a fast and low overhead web framework for Node.js, with -a powerful plugin architecture and sensible defaults. The *@fedify/fastify* -package provides a plugin to integrate Fedify with Fastify: +[Fastify] is a fast and low overhead web framework for Node.js, with a powerful +plugin architecture and sensible defaults. The _@fedify/fastify_ package +provides a plugin to integrate Fedify with Fastify: ::: code-group @@ -176,10 +234,10 @@ export const federation = createFederation({ const fastify = Fastify({ logger: true }); // Register the Fedify plugin: -await fastify.register(fedifyPlugin, { // [!code highlight] - federation, // [!code highlight] - contextDataFactory: () => undefined, // [!code highlight] -}); // [!code highlight] +await fastify.register(fedifyPlugin, { // [!code highlight] + federation, // [!code highlight] + contextDataFactory: () => undefined, // [!code highlight] +}); // [!code highlight] fastify.listen({ port: 3000 }); ~~~~ @@ -190,12 +248,12 @@ fastify.listen({ port: 3000 }); Koa --- -*This API is available since Fedify 1.9.0.* +_This API is available since Fedify 1.9.0._ [Koa] is a lightweight, expressive, and modern web framework for Node.js, -designed by the team behind Express. It uses async functions and provides -a more elegant middleware architecture. The *@fedify/koa* package provides -a middleware to integrate Fedify with Koa: +designed by the team behind Express. It uses async functions and provides a more +elegant middleware architecture. The _@fedify/koa_ package provides a middleware +to integrate Fedify with Koa: ::: code-group @@ -233,9 +291,9 @@ export const federation = createFederation({ export const app = new Koa(); -app.proxy = true; // trust proxy headers +app.proxy = true; // trust proxy headers -app.use(createMiddleware(federation, (ctx) => "context data goes here")); // [!code highlight] +app.use(createMiddleware(federation, (ctx) => "context data goes here")); // [!code highlight] ~~~~ > [!NOTE] @@ -247,11 +305,11 @@ app.use(createMiddleware(federation, (ctx) => "context data goes here")); // [! Hono ---- -*This API is available since Fedify 1.9.0.* +_This API is available since Fedify 1.9.0._ [Hono] is a fast, lightweight, and Web standard-compliant server framework for -TypeScript. The *@fedify/hono* package provides a middleware to integrate -Fedify with Hono: +TypeScript. The _@fedify/hono_ package provides a middleware to integrate Fedify +with Hono: ::: code-group @@ -287,7 +345,7 @@ const fedi = createFederation({ }); const app = new Hono(); -app.use(federation(fedi, (ctx) => "context data")); // [!code highlight] +app.use(federation(fedi, (ctx) => "context data")); // [!code highlight] ~~~~ [Hono]: https://hono.dev/ @@ -297,8 +355,8 @@ h3 -- [h3] is an HTTP server framework behind [Nitro], [Analog], [Vinxi], -[SolidStart], [TanStack Start], and other many web frameworks. -The *@fedify/h3* package provides a middleware to integrate Fedify with h3: +[SolidStart], [TanStack Start], and other many web frameworks. The _@fedify/h3_ +package provides a middleware to integrate Fedify with h3: ::: code-group @@ -338,8 +396,8 @@ export const app = createApp({ onError }); app.use( integrateFederation( federation, - (event, request) => "context data goes here" - ) + (event, request) => "context data goes here", + ), ); const router = createRouter(); @@ -347,8 +405,8 @@ app.use(router); ~~~~ > [!NOTE] -> Your app has to configure `onError` to let Fedify negotiate content types. -> If you don't do this, Fedify will not be able to respond with a proper error +> Your app has to configure `onError` to let Fedify negotiate content types. If +> you don't do this, Fedify will not be able to respond with a proper error > status code when a content negotiation fails. [h3]: https://h3.unjs.io/ @@ -362,10 +420,10 @@ app.use(router); SvelteKit --------- -*This API is available since Fedify 1.3.0.* +_This API is available since Fedify 1.3.0._ -[SvelteKit] is a framework for building web applications with [Svelte]. The -*@fedify/sveltekit* package provides a middleware to integrate Fedify with +[SvelteKit] is a framework for building web applications with [Svelte]. The +_@fedify/sveltekit_ package provides a middleware to integrate Fedify with SvelteKit: ::: code-group @@ -411,12 +469,11 @@ export const handle = fedifyHook(federation, (req) => "context data"); NestJS ------ -*This API is available since Fedify 1.8.0.* +_This API is available since Fedify 1.8.0._ [NestJS] is a modular, versatile, and scalable framework for building efficient, -reliable, and scalable server-side applications with Node.js and TypeScript. -The *@fedify/nestjs* package provides a middleware to integrate Fedify with -NestJS: +reliable, and scalable server-side applications with Node.js and TypeScript. The +_@fedify/nestjs_ package provides a middleware to integrate Fedify with NestJS: ::: code-group @@ -439,11 +496,9 @@ bun add @fedify/nestjs ::: ~~~~ typescript [modules/federation/federation.service.ts] twoslash -import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; -import { - FEDIFY_FEDERATION, -} from '@fedify/nestjs'; -import { Federation } from '@fedify/fedify'; +import { Inject, Injectable, OnModuleInit } from "@nestjs/common"; +import { FEDIFY_FEDERATION } from "@fedify/nestjs"; +import { Federation } from "@fedify/fedify"; @Injectable() export class FederationService implements OnModuleInit { @@ -451,7 +506,7 @@ export class FederationService implements OnModuleInit { constructor( @Inject(FEDIFY_FEDERATION) private federation: Federation, - ) { } + ) {} async onModuleInit() { if (!this.initialized) { @@ -465,7 +520,7 @@ export class FederationService implements OnModuleInit { return { software: { name: "Fedify NestJS sample", - version: "0.0.1" + version: "0.0.1", }, protocols: ["activitypub"], usage: { @@ -478,7 +533,7 @@ export class FederationService implements OnModuleInit { localPosts: 0, localComments: 0, }, - } + }; }); } } @@ -486,11 +541,9 @@ export class FederationService implements OnModuleInit { ~~~~ typescript [modules/federation/federation.module.ts] twoslash // @noErrors: 2395 2307 -import { Injectable, Inject, OnModuleInit } from '@nestjs/common'; -import { - FEDIFY_FEDERATION, -} from '@fedify/nestjs'; -import { Federation } from '@fedify/fedify'; +import { Inject, Injectable, OnModuleInit } from "@nestjs/common"; +import { FEDIFY_FEDERATION } from "@fedify/nestjs"; +import { Federation } from "@fedify/fedify"; @Injectable() export class FederationService implements OnModuleInit { @@ -498,7 +551,7 @@ export class FederationService implements OnModuleInit { constructor( @Inject(FEDIFY_FEDERATION) private federation: Federation, - ) { } + ) {} async onModuleInit() { if (!this.initialized) { @@ -511,8 +564,8 @@ export class FederationService implements OnModuleInit { } } // ---cut-before--- -import { Module } from '@nestjs/common'; -import { FederationService } from './federation.service'; +import { Module } from "@nestjs/common"; +import { FederationService } from "./federation.service"; @Module({ providers: [FederationService], @@ -530,21 +583,25 @@ import { Module, NestModule, RequestMethod, -} from '@nestjs/common'; -import { ConfigModule } from '@nestjs/config'; -import * as express from 'express'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; -import { DatabaseModule } from './database/database.module'; -import { FederationModule } from './modules/federation/federation.module'; -import { InProcessMessageQueue, MemoryKvStore, Federation } from '@fedify/fedify'; -import process from 'node:process'; +} from "@nestjs/common"; +import { ConfigModule } from "@nestjs/config"; +import * as express from "express"; +import { AppController } from "./app.controller"; +import { AppService } from "./app.service"; +import { DatabaseModule } from "./database/database.module"; +import { FederationModule } from "./modules/federation/federation.module"; +import { + Federation, + InProcessMessageQueue, + MemoryKvStore, +} from "@fedify/fedify"; +import process from "node:process"; import { FEDIFY_FEDERATION, FedifyModule, integrateFederation, -} from '@fedify/nestjs'; +} from "@fedify/nestjs"; @Module({ imports: [ @@ -555,7 +612,7 @@ import { FedifyModule.forRoot({ kv: new MemoryKvStore(), queue: new InProcessMessageQueue(), - origin: process.env.FEDERATION_ORIGIN || 'http://localhost:3000', + origin: process.env.FEDERATION_ORIGIN || "http://localhost:3000", }), FederationModule, ], @@ -565,7 +622,7 @@ import { export class AppModule implements NestModule { constructor( @Inject(FEDIFY_FEDERATION) private federation: Federation, - ) { } + ) {} configure(consumer: MiddlewareConsumer) { const fedifyMiddleware = integrateFederation( @@ -582,9 +639,9 @@ export class AppModule implements NestModule { // Fedify middleware requires the raw request body for HTTP signature verification // so we apply `express.raw()` before `fedifyMiddleware` to preserve the body. consumer.apply( - express.raw({ type: '*/*' }), - fedifyMiddleware - ).forRoutes({ path: '*', method: RequestMethod.ALL }); + express.raw({ type: "*/*" }), + fedifyMiddleware, + ).forRoutes({ path: "*", method: RequestMethod.ALL }); } } ~~~~ @@ -595,13 +652,13 @@ export class AppModule implements NestModule { Elysia ------ -*This API is available since Fedify 1.8.0.* +_This API is available since Fedify 1.8.0._ [Elysia] is an ergonomic framework designed for humans, featuring built-in -TypeScript support with end-to-end type safety, type integrity, and -an exceptional developer experience. Powered by Bun, it delivers high -performance and modern tooling. The *@fedify/elysia* package provides -a seamless plugin for integrating Fedify with Elysia: +TypeScript support with end-to-end type safety, type integrity, and an +exceptional developer experience. Powered by Bun, it delivers high performance +and modern tooling. The _@fedify/elysia_ package provides a seamless plugin for +integrating Fedify with Elysia: ::: code-group @@ -629,7 +686,7 @@ yarn add @fedify/elysia ~~~~ typescript import { fedify } from "@fedify/elysia"; -import { federation } from "./federation.ts"; // Your `Federation` instance +import { federation } from "./federation.ts"; // Your `Federation` instance import { Elysia } from "elysia"; const app = new Elysia(); @@ -647,12 +704,12 @@ console.log("Elysia App Start!"); Next.js ------- -*This API is available since Fedify 1.9.0.* +_This API is available since Fedify 1.9.0._ > [!TIP] -> You can see the example in the `examples/next-integration` directory in -> the [Fedify repository]. You can create a Fedify–Next.js app copying the -> example with the following command: +> You can see the example in the `examples/next-integration` directory in the +> [Fedify repository]. You can create a Fedify–Next.js app copying the example +> with the following command: > > ::: code-group > @@ -678,9 +735,9 @@ Next.js > > ::: -[Next.js] is a React framework that enables you to build server-rendered -and statically generated web applications. The *@fedify/next* package provides -a middleware to integrate Fedify with Next.js: +[Next.js] is a React framework that enables you to build server-rendered and +statically generated web applications. The _@fedify/next_ package provides a +middleware to integrate Fedify with Next.js: ::: code-group @@ -722,19 +779,18 @@ fedify init my-next-app ✔ Would you like to customize the import alias (`@/*` by default)? … No ~~~~ -Then you can see the Next.js boilerplate code in the `my-next-app` directory. -If you have created a Next.js app with `create-next-app` before, you'll see -some differences in the code. There is a `middleware.ts` file in the -`my-next-app` directory, which is the entry point to the Fedify middleware -from the Next.js framework. Or, if you just install *@fedify/next* manually, -put the following code in your `middleware.ts` file: +Then you can see the Next.js boilerplate code in the `my-next-app` directory. If +you have created a Next.js app with `create-next-app` before, you'll see some +differences in the code. There is a `middleware.ts` file in the `my-next-app` +directory, which is the entry point to the Fedify middleware from the Next.js +framework. Or, if you just install _@fedify/next_ manually, put the following +code in your `middleware.ts` file: ~~~~ typescript import { fedifyWith } from "@fedify/next"; import federation from "./federation"; // Your `Federation` instance -export default fedifyWith(federation)( -/* +export default fedifyWith(federation)(); /* function (request: Request) { // If you need to handle other requests besides federation // requests in middleware, you can do it here. @@ -743,7 +799,6 @@ export default fedifyWith(federation)( return NextResponse.next(); }, */ -) // This config needs because middleware process only requests with the // "Accept" header matching the federation accept regex. @@ -777,20 +832,94 @@ export const config = { }; ~~~~ -As you can see in the comment, you can handle other requests besides -federation requests in the middleware. If you handle only federation requests -in the middleware, you can omit the function argument of `fedifyWith()`. -The `config` object is necessary to let Next.js know that the middleware -should process requests with the [`Accept`] header matching the federation -accept regex. This is because Next.js middleware processes only requests -with the [`Accept`] header matching the regex by default. More details can be -found in the Next.js official documentation [`config` in `middleware.js`]. +As you can see in the comment, you can handle other requests besides federation +requests in the middleware. If you handle only federation requests in the +middleware, you can omit the function argument of `fedifyWith()`. The `config` +object is necessary to let Next.js know that the middleware should process +requests with the [`Accept`] header matching the federation accept regex. This +is because Next.js middleware processes only requests with the [`Accept`] header +matching the regex by default. More details can be found in the Next.js official +documentation [`config` in `middleware.js`]. [Fedify repository]: https://github.com/fedify-dev/fedify [Next.js]: https://nextjs.org/ [`config` in `middleware.js`]: https://nextjs.org/docs/app/api-reference/file-conventions/middleware#config-object-optional +Nuxt +---- + +_This API is available since Fedify 2.2.0._ + +[Nuxt] is a full-stack framework built on top of Vue, Nitro, and h3. The +_@fedify/nuxt_ package provides a server handler for `server/middleware` and an +error handler for Nitro so that Nuxt pages and Fedify endpoints can share the +same routes with content negotiation: + +::: code-group + +~~~~ sh [Deno] +deno add jsr:@fedify/nuxt +~~~~ + +~~~~ sh [npm] +npm add @fedify/nuxt +~~~~ + +~~~~ sh [pnpm] +pnpm add @fedify/nuxt +~~~~ + +~~~~ sh [Yarn] +yarn add @fedify/nuxt +~~~~ + +~~~~ sh [Bun] +bun add @fedify/nuxt +~~~~ + +::: + +First, configure Nitro's error handler in _nuxt.config.ts_: + +~~~~ typescript +export default defineNuxtConfig({ + nitro: { + errorHandler: "./server/error", // [!code highlight] + }, +}); +~~~~ + +Then, create _server/error.ts_: + +~~~~ typescript +import { fedifyErrorHandler } from "@fedify/nuxt"; + +export default fedifyErrorHandler; // [!code highlight] +~~~~ + +Finally, add the Fedify middleware in _server/middleware/federation.ts_: + +~~~~ typescript +import { createFederation } from "@fedify/fedify"; +import { fedifyHandler } from "@fedify/nuxt"; + +const federation = createFederation({ + // Omitted for brevity; see the related section for details. +}); + +export default fedifyHandler( // [!code highlight] + federation, // [!code highlight] + (event, request) => void 0, // [!code highlight] +); // [!code highlight] +~~~~ + +If you create a Nuxt project through `fedify init`, the initializer writes all +three files for you and configures Nitro's error handler automatically. + +[Nuxt]: https://nuxt.com/ + + Astro ----- @@ -887,11 +1016,11 @@ instead of `astro`: SolidStart ---------- -*This API is available since Fedify 2.2.0.* +_This API is available since Fedify 2.2.0._ [SolidStart] is a JavaScript framework built on top of [Solid] for building -full-stack web applications. The *@fedify/solidstart* package provides -a middleware to integrate Fedify with SolidStart: +full-stack web applications. The _@fedify/solidstart_ package provides a +middleware to integrate Fedify with SolidStart: ::: code-group @@ -917,17 +1046,17 @@ bun add @fedify/solidstart ::: -First, set up the middleware entry point in your *app.config.ts*: +First, set up the middleware entry point in your _app.config.ts_: ~~~~ typescript import { defineConfig } from "@solidjs/start/config"; export default defineConfig({ - middleware: "src/middleware/index.ts", // [!code highlight] + middleware: "src/middleware/index.ts", // [!code highlight] }); ~~~~ -Then, create your middleware in *src/middleware/index.ts*: +Then, create your middleware in _src/middleware/index.ts_: ~~~~ typescript import { createFederation } from "@fedify/fedify"; @@ -937,7 +1066,7 @@ const federation = createFederation({ // Omitted for brevity; see the related section for details. }); -export default fedifyMiddleware(federation, (event) => undefined); // [!code highlight] +export default fedifyMiddleware(federation, (event) => undefined); // [!code highlight] ~~~~ [Solid]: https://www.solidjs.com/ @@ -946,11 +1075,11 @@ export default fedifyMiddleware(federation, (event) => undefined); // [!code hi Fresh ----- -*This API is available since Fedify 2.0.0.* +_This API is available since Fedify 2.0.0._ -[Fresh] is a full stack modern web framework for Deno. Fedify has the -`@fedify/fresh` module that provides a middleware to integrate Fedify -with Fresh. +[Fresh] is a full stack modern web framework for Deno. Fedify has the +`@fedify/fresh` module that provides a middleware to integrate Fedify with +Fresh. ::: code-group @@ -964,9 +1093,9 @@ deno add jsr:@fedify/fresh > The `@fedify/fresh` package only supports Fresh 2.x. > [!NOTE] -> Fresh 2 development mode has been verified with Deno 2.7.7. Deno 2.7.6 had -> an upstream Vite/esbuild regression that caused -> `Callback called multiple times` before Fedify code could run. +> Fresh 2 development mode has been verified with Deno 2.7.7. Deno 2.7.6 had an +> upstream Vite/esbuild regression that caused `Callback called multiple times` +> before Fedify code could run. > [!WARNING] > Due to `@fedify/fedify` use `Temporal` inside, you should add `deno.unstable` @@ -984,7 +1113,7 @@ deno add jsr:@fedify/fresh > ... > ~~~~ -Put the following code in your *routes/\_middleware.ts* file: +Put the following code in your _routes/\_middleware.ts_ file: ~~~~ typescript [_middelware.ts] import { createFederation } from "@fedify/fedify"; @@ -1031,13 +1160,13 @@ Fedify, you can still integrate Fedify with the framework by creating a custom middleware (unless the framework does not support middleware). Web frameworks usually provide a way to intercept incoming requests and outgoing -responses in the middle, which is so-called middleware. If your -web framework has a middleware feature, you can use it to intercept +responses in the middle, which is so-called middleware. If your web +framework has a middleware feature, you can use it to intercept federation-related requests and handle them with the `Federation` object. The key is to create a middleware that calls the `Federation.fetch()` method with the incoming request and context data, and then sends the response from -Fedify to the client. At this point, you can use `onNotFound` and +Fedify to the client. At this point, you can use `onNotFound` and `onNotAcceptable` callbacks to forward the request to the next middleware. The following is an example of a custom middleware for a hypothetical web @@ -1048,7 +1177,7 @@ import { Federation } from "@fedify/fedify"; export type Middleware = ( request: Request, - next: (request: Request) => Promise + next: (request: Request) => Promise, ) => Promise; export function createFedifyMiddleware( @@ -1079,18 +1208,18 @@ export function createFedifyMiddleware( status: 406, headers: { "Content-Type": "text/plain", - Vary: "Accept" + Vary: "Accept", }, - }) - } + }); + }, }); }; } ~~~~ -In some cases, your web framework may not represent requests and responses -as [`Request`] and [`Response`] objects. In that case, you need to convert -the request and response objects to the appropriate types that the `Federation` +In some cases, your web framework may not represent requests and responses as +[`Request`] and [`Response`] objects. In that case, you need to convert the +request and response objects to the appropriate types that the `Federation` object can handle. [`Request`]: https://developer.mozilla.org/en-US/docs/Web/API/Request diff --git a/examples/README.md b/examples/README.md index a0de84ab8..f2a1ffd40 100644 --- a/examples/README.md +++ b/examples/README.md @@ -20,6 +20,7 @@ added in the future.[^1] - [Fedify–Next.js integration example using `@fedify/next`](./next-integration/) - [Fedify–Next.js 14 integration example](./next14-app-router/) - [Fedify–Next.js 15 integration example](./next15-app-router/) + - [Fedify–Nuxt integration example](./nuxt/) - [Fedify–SolidStart integration example](./solidstart/) - [Fedify on Cloudflare Workers example](./cloudflare-workers/) diff --git a/examples/adonis/.gitignore b/examples/adonis/.gitignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/examples/adonis/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/examples/adonis/README.md b/examples/adonis/README.md new file mode 100644 index 000000000..3eb83f560 --- /dev/null +++ b/examples/adonis/README.md @@ -0,0 +1,42 @@ +Fedify–Adonisjs integration example +=================================== + +This is a simple example of how to integrate Fedify into an [AdonisJS] +application using the `@fedify/adonis` package. + +[AdonisJS]: https://adonisjs.com/ + + +Running the example +------------------- + +1. Clone the repository: + + ~~~~ sh + git clone https://github.com/fedify-dev/fedify.git + cd fedify/examples/adonis + ~~~~ + +2. Install dependencies: + + ~~~~ sh + pnpm install + ~~~~ + +3. Start the server: + + ~~~~ sh + pnpm dev & pnpx @fedify/cli tunnel 3333 + ~~~~ + +4. Open your browser tunneled URL and start interacting with the app. You can + see your handle such as `@demo@6c10b40c63d9e1ce7da55667ef0ef8b4.serveo.net`. + +5. Access and search your handle and follow. + +6. You can see following list like: + + ~~~~ + This account has the below 1 followers: + https://activitypub.academy/users/beboes_bedoshs + ~~~~ diff --git a/examples/adonis/package.json b/examples/adonis/package.json new file mode 100644 index 000000000..292787083 --- /dev/null +++ b/examples/adonis/package.json @@ -0,0 +1,23 @@ +{ + "name": "fedify-adonis-example", + "version": "0.0.1", + "private": true, + "type": "module", + "description": "Fedify AdonisJS integration example", + "scripts": { + "dev": "tsx src/main.ts", + "test": "true" + }, + "dependencies": { + "@adonisjs/core": ">=6.0.0", + "@fedify/adonis": "workspace:^", + "@fedify/fedify": "workspace:^", + "@fedify/vocab": "workspace:^", + "@logtape/logtape": "catalog:" + }, + "devDependencies": { + "@types/node": "^22.5.1", + "tsx": "^4.19.0", + "typescript": "^5.5.4" + } +} diff --git a/examples/adonis/src/app.ts b/examples/adonis/src/app.ts new file mode 100644 index 000000000..a8f55e825 --- /dev/null +++ b/examples/adonis/src/app.ts @@ -0,0 +1,65 @@ +import { type AdonisHttpContext, fedifyMiddleware } from "@fedify/adonis"; +import { + createServer, + type IncomingMessage, + type ServerResponse, +} from "node:http"; +import process from "node:process"; +import federation, { relationStore } from "./federation.ts"; + +const FedifyMiddleware = fedifyMiddleware(federation, () => undefined); +const middleware = new FedifyMiddleware(); + +function createHttpContext( + req: IncomingMessage, + res: ServerResponse, +): AdonisHttpContext { + const host = req.headers.host ?? "localhost"; + return { + request: { + method: () => req.method ?? "GET", + protocol: () => "http", + hostname: () => host.split(":")[0], + url: () => req.url ?? "/", + headers: () => req.headers as Record, + request: req, + }, + response: { + response: res, + }, + }; +} + +export const server = createServer(async (req, res) => { + const ctx = createHttpContext(req, res); + await middleware.handle(ctx, () => { + const host = req.headers.host ?? "localhost"; + res.writeHead(200, { "Content-Type": "text/plain" }); + res.end(`\ + _____ _ _ __ ____ +| ___|__ __| (_)/ _|_ _ | _ \\ ___ _ __ ___ ___ +| |_ / _ \\/ _\` | | |_| | | | | | | |/ _ \\ '_ \` _ \\ / _ \\ +| _| __/ (_| | | _| |_| | | |_| | __/ | | | | | (_) | +|_| \\___|\\__,_|_|_| \\__, | |____/ \\___|_| |_| |_|\\___/ + |___/ + +This small federated server app is a demo of Fedify with AdonisJS integration. +The only thing it does is to accept follow requests. + +You can follow this demo app via the below handle: + + @demo@${host} + +This account has the below ${relationStore.size} followers: + + ${Array.from(relationStore.values()).join("\n ")} +`); + }); +}); + +export default server; + +const PORT = process.env.PORT ?? 3333; +server.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); +}); diff --git a/examples/adonis/src/federation.ts b/examples/adonis/src/federation.ts new file mode 100644 index 000000000..8268f96aa --- /dev/null +++ b/examples/adonis/src/federation.ts @@ -0,0 +1,78 @@ +import { + createFederation, + generateCryptoKeyPair, + MemoryKvStore, +} from "@fedify/fedify"; +import { Accept, Endpoints, Follow, Person, Undo } from "@fedify/vocab"; + +export const keyPairsStore = new Map>(); +export const relationStore = new Map(); + +const federation = createFederation({ + kv: new MemoryKvStore(), +}); + +federation + .setActorDispatcher("/users/{identifier}", async (ctx, identifier) => { + if (identifier !== "demo") return null; + const keyPairs = await ctx.getActorKeyPairs(identifier); + return new Person({ + id: ctx.getActorUri(identifier), + name: "Fedify Demo", + summary: "This is a Fedify Demo account.", + preferredUsername: identifier, + url: new URL("/", ctx.url), + inbox: ctx.getInboxUri(identifier), + endpoints: new Endpoints({ sharedInbox: ctx.getInboxUri() }), + publicKey: keyPairs[0].cryptographicKey, + assertionMethods: keyPairs.map((kp) => kp.multikey), + }); + }) + .setKeyPairsDispatcher(async (_, identifier) => { + if (identifier !== "demo") return []; + const existing = keyPairsStore.get(identifier); + if (existing) return existing; + const { privateKey, publicKey } = await generateCryptoKeyPair(); + keyPairsStore.set(identifier, [{ privateKey, publicKey }]); + return [{ privateKey, publicKey }]; + }); + +federation + .setInboxListeners("/users/{identifier}/inbox", "/inbox") + .on(Follow, async (context, follow) => { + if ( + follow.id == null || + follow.actorId == null || + follow.objectId == null + ) { + return; + } + const result = context.parseUri(follow.objectId); + if (result?.type !== "actor" || result.identifier !== "demo") return; + const follower = await follow.getActor(context); + if (follower?.id == null) throw new Error("follower is null"); + await context.sendActivity( + { identifier: result.identifier }, + follower, + new Accept({ + id: new URL( + `#accepts/${follower.id.href}`, + context.getActorUri("demo"), + ), + actor: follow.objectId, + object: follow, + }), + ); + relationStore.set(follower.id.href, follow.objectId.href); + }) + .on(Undo, async (context, undo) => { + const activity = await undo.getObject(context); + if (activity instanceof Follow) { + if (activity.id == null || undo.actorId == null) return; + relationStore.delete(undo.actorId.href); + } else { + console.debug(undo); + } + }); + +export default federation; diff --git a/examples/adonis/src/logging.ts b/examples/adonis/src/logging.ts new file mode 100644 index 000000000..baa379766 --- /dev/null +++ b/examples/adonis/src/logging.ts @@ -0,0 +1,20 @@ +import { configure, getConsoleSink } from "@logtape/logtape"; + +await configure({ + sinks: { console: getConsoleSink() }, + filters: {}, + loggers: [ + { + category: "fedify", + lowestLevel: "debug", + sinks: ["console"], + filters: [], + }, + { + category: ["logtape", "meta"], + lowestLevel: "warning", + sinks: ["console"], + filters: [], + }, + ], +}); diff --git a/examples/adonis/src/main.ts b/examples/adonis/src/main.ts new file mode 100644 index 000000000..0306a0afa --- /dev/null +++ b/examples/adonis/src/main.ts @@ -0,0 +1,2 @@ +import "./app.ts"; +import "./logging.ts"; diff --git a/examples/adonis/tsconfig.json b/examples/adonis/tsconfig.json new file mode 100644 index 000000000..00da9edd4 --- /dev/null +++ b/examples/adonis/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "allowJs": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} diff --git a/examples/nuxt/.gitignore b/examples/nuxt/.gitignore new file mode 100644 index 000000000..56efb2882 --- /dev/null +++ b/examples/nuxt/.gitignore @@ -0,0 +1,4 @@ +.nuxt +.output +dist +node_modules \ No newline at end of file diff --git a/examples/nuxt/app/app.vue b/examples/nuxt/app/app.vue new file mode 100644 index 000000000..16d886ad3 --- /dev/null +++ b/examples/nuxt/app/app.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/examples/nuxt/app/pages/index.vue b/examples/nuxt/app/pages/index.vue new file mode 100644 index 000000000..f5cb0b911 --- /dev/null +++ b/examples/nuxt/app/pages/index.vue @@ -0,0 +1,95 @@ + + + \ No newline at end of file diff --git a/examples/nuxt/app/pages/users/[identifier].vue b/examples/nuxt/app/pages/users/[identifier].vue new file mode 100644 index 000000000..81b09448a --- /dev/null +++ b/examples/nuxt/app/pages/users/[identifier].vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/examples/nuxt/nuxt.config.ts b/examples/nuxt/nuxt.config.ts new file mode 100644 index 000000000..f0c7a1645 --- /dev/null +++ b/examples/nuxt/nuxt.config.ts @@ -0,0 +1,7 @@ +export default defineNuxtConfig({ + compatibilityDate: "2025-07-15", + devtools: { enabled: true }, + nitro: { + errorHandler: "./server/error", + }, +}); diff --git a/examples/nuxt/package.json b/examples/nuxt/package.json new file mode 100644 index 000000000..03c72ee05 --- /dev/null +++ b/examples/nuxt/package.json @@ -0,0 +1,22 @@ +{ + "name": "nuxt-example", + "private": true, + "type": "module", + "scripts": { + "dev": "nuxt dev", + "build": "nuxt build", + "preview": "nuxt preview", + "postinstall": "nuxt prepare" + }, + "dependencies": { + "@fedify/fedify": "workspace:^", + "@fedify/nuxt": "workspace:^", + "@fedify/vocab": "workspace:^", + "nuxt": "catalog:", + "vue": "catalog:", + "vue-router": "catalog:" + }, + "devDependencies": { + "typescript": "catalog:" + } +} diff --git a/examples/nuxt/server/error.ts b/examples/nuxt/server/error.ts new file mode 100644 index 000000000..4f5be49ff --- /dev/null +++ b/examples/nuxt/server/error.ts @@ -0,0 +1,3 @@ +import { fedifyErrorHandler } from "@fedify/nuxt"; + +export default fedifyErrorHandler; diff --git a/examples/nuxt/server/federation.ts b/examples/nuxt/server/federation.ts new file mode 100644 index 000000000..a9122582f --- /dev/null +++ b/examples/nuxt/server/federation.ts @@ -0,0 +1,132 @@ +import { + createFederation, + generateCryptoKeyPair, + MemoryKvStore, +} from "@fedify/fedify"; +import { + Accept, + Endpoints, + Follow, + Note, + Person, + type Recipient, + Undo, +} from "@fedify/vocab"; +import { keyPairsStore, relationStore } from "./store"; + +const federation = createFederation({ + kv: new MemoryKvStore(), +}); + +const IDENTIFIER = "demo"; + +federation.setNodeInfoDispatcher("/nodeinfo/2.1", (_ctx) => ({ + software: { + name: "fedify-nuxt", + version: "0.0.1", + }, + protocols: ["activitypub"], + usage: { + users: { total: 1, activeHalfyear: 1, activeMonth: 1 }, + localPosts: 0, + localComments: 0, + }, +})); + +federation + .setActorDispatcher("/users/{identifier}", async (context, identifier) => { + if (identifier !== IDENTIFIER) { + return null; + } + const keyPairs = await context.getActorKeyPairs(identifier); + return new Person({ + id: context.getActorUri(identifier), + name: "Fedify Demo", + summary: "This is a Fedify demo account on Nuxt.", + preferredUsername: identifier, + url: new URL(`/users/${identifier}`, context.url), + inbox: context.getInboxUri(identifier), + endpoints: new Endpoints({ sharedInbox: context.getInboxUri() }), + publicKey: keyPairs[0].cryptographicKey, + assertionMethods: keyPairs.map((keyPair) => keyPair.multikey), + }); + }) + .setKeyPairsDispatcher(async (_, identifier) => { + if (identifier !== IDENTIFIER) { + return []; + } + const keyPairs = keyPairsStore.get(identifier); + if (keyPairs != null) { + return keyPairs.map(({ privateKey, publicKey }) => ({ + privateKey, + publicKey, + })); + } + const { privateKey, publicKey } = await generateCryptoKeyPair(); + const generated = [{ privateKey, publicKey }]; + keyPairsStore.set(identifier, generated); + return generated; + }); + +federation + .setInboxListeners("/users/{identifier}/inbox", "/inbox") + .on(Follow, async (context, follow) => { + if ( + follow.id == null || + follow.actorId == null || + follow.objectId == null + ) { + return; + } + const result = context.parseUri(follow.objectId); + if (result?.type !== "actor" || result.identifier !== IDENTIFIER) { + return; + } + const follower = await follow.getActor(context); + if (!(follower instanceof Person) || follower.id == null) { + throw new Error("follower is null"); + } + await context.sendActivity( + { identifier: result.identifier }, + follower, + new Accept({ + id: new URL( + `#accepts/${follower.id.href}`, + context.getActorUri(IDENTIFIER), + ), + actor: follow.objectId, + object: follow, + }), + ); + relationStore.set(follower.id.href, follower); + }) + .on(Undo, async (_context, undo) => { + const activity = await undo.getObject(); + if (!(activity instanceof Follow) || undo.actorId == null) { + return; + } + relationStore.delete(undo.actorId.href); + }); + +federation.setObjectDispatcher( + Note, + "/users/{identifier}/posts/{id}", + (context, values) => + new Note({ + id: context.getObjectUri(Note, values), + attribution: context.getActorUri(values.identifier), + name: values.id, + }), +); + +federation.setFollowersDispatcher("/users/{identifier}/followers", () => { + const followers = Array.from(relationStore.values()); + const items: Recipient[] = followers.map((follower) => ({ + id: follower.id, + inboxId: follower.inboxId, + endpoints: follower.endpoints, + })); + return { items }; +}); + +export default federation; diff --git a/examples/nuxt/server/middleware/federation.ts b/examples/nuxt/server/middleware/federation.ts new file mode 100644 index 000000000..013ea4c94 --- /dev/null +++ b/examples/nuxt/server/middleware/federation.ts @@ -0,0 +1,4 @@ +import { fedifyHandler } from "@fedify/nuxt"; +import federation from "../federation"; + +export default fedifyHandler(federation); diff --git a/examples/nuxt/server/store.ts b/examples/nuxt/server/store.ts new file mode 100644 index 000000000..b7394ca05 --- /dev/null +++ b/examples/nuxt/server/store.ts @@ -0,0 +1,4 @@ +import type { Person } from "@fedify/vocab"; + +export const keyPairsStore = new Map(); +export const relationStore = new Map(); diff --git a/examples/nuxt/tsconfig.json b/examples/nuxt/tsconfig.json new file mode 100644 index 000000000..4b34df157 --- /dev/null +++ b/examples/nuxt/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./.nuxt/tsconfig.json" +} diff --git a/examples/test-examples/mod.ts b/examples/test-examples/mod.ts index 0ed78181f..14f9bdd4d 100644 --- a/examples/test-examples/mod.ts +++ b/examples/test-examples/mod.ts @@ -126,8 +126,37 @@ type TestResult = | { name: string; status: "skip"; reason: string }; // ─── Example Registry ───────────────────────────────────────────────────────── +// +// Every example directory under examples/ must be registered in exactly one of +// the arrays below. The test runner scans the examples/ directory and reports +// any unregistered directories as warnings. +// +// - SERVER_EXAMPLES – Long-running HTTP servers. The runner starts the +// server, opens a tunnel, and verifies federation via +// `fedify lookup`. Most integration framework examples +// belong here. +// - SCRIPT_EXAMPLES – Standalone scripts (no server). The runner executes +// the command and checks the exit code. +// - MULTI_HANDLE_EXAMPLES – Scripts that accept an ActivityPub handle as +// their last argument. Multiple handles are tried in +// order; the test passes if any exits with code 0. +// - SKIPPED_EXAMPLES – Examples that cannot be tested automatically. +// Provide a reason string explaining why. +// +// See the interface definitions above for the full set of fields each entry +// accepts. const SERVER_EXAMPLES: ServerExample[] = [ + { + // AdonisJS server with @fedify/adonis middleware; + // actor path is /users/{identifier}. + name: "adonis", + dir: "adonis", + startCmd: ["pnpm", "dev"], + port: 3333, + actor: "demo", + readyUrl: "http://localhost:3333/", + }, { // Deno-native Hono server; actor path is /{identifier} but only "sample" // is registered. @@ -228,6 +257,18 @@ const SERVER_EXAMPLES: ServerExample[] = [ readyUrl: "http://localhost:3000/", readyTimeout: 30_000, }, + { + // Nuxt app using @fedify/nuxt server middleware and Nitro error handler. + // Requires a build step before starting. + name: "nuxt", + dir: "nuxt", + buildCmd: ["pnpm", "build"], + startCmd: ["pnpm", "preview"], + port: 3000, + actor: "demo", + readyUrl: "http://localhost:3000/", + readyTimeout: 30_000, + }, { // SvelteKit sample using @fedify/sveltekit; actor path is /users/{identifier}. // Built with vite; served with vite preview on port 4173. diff --git a/packages/adonis/README.md b/packages/adonis/README.md new file mode 100644 index 000000000..dfde360a4 --- /dev/null +++ b/packages/adonis/README.md @@ -0,0 +1,80 @@ + + +@fedify/adonis: Integrate Fedify with adonisjs +============================================== + +[![JSR][JSR badge]][JSR] +[![npm][npm badge]][npm] +[![Matrix][Matrix badge]][Matrix] +[![Follow @fedify@hollo.social][@fedify@hollo.social badge]][@fedify@hollo.social] + +This package provides a simple way to integrate [Fedify] with [AdonisJS] +(v6 and v7). + +[JSR badge]: https://jsr.io/badges/@fedify/adonis +[JSR]: https://jsr.io/@fedify/adonis +[npm badge]: https://img.shields.io/npm/v/@fedify/adonis?logo=npm +[npm]: https://www.npmjs.com/package/@fedify/adonis +[Matrix badge]: https://img.shields.io/matrix/fedify%3Amatrix.org +[Matrix]: https://matrix.to/#/#fedify:matrix.org +[@fedify@hollo.social badge]: https://fedi-badge.deno.dev/@fedify@hollo.social/followers.svg +[@fedify@hollo.social]: https://hollo.social/@fedify +[Fedify]: https://fedify.dev/ +[AdonisJS]: https://adonisjs.com/ + + +Installation +------------ + +~~~~ bash +npm add @fedify/adonis +# or +pnpm add @fedify/adonis +# or +yarn add @fedify/adonis +# or +bun add @fedify/adonis +~~~~ + + +Usage +----- + +First, create your `Federation` instance in a service file, +e.g., *app/services/federation.ts*: + +~~~~ typescript +import { createFederation, MemoryKvStore } from "@fedify/fedify"; + +const federation = createFederation({ + kv: new MemoryKvStore(), +}); + +// ... configure your federation ... + +export default federation; +~~~~ + +Then, create a middleware file, e.g., *app/middleware/fedify\_middleware.ts*: + +~~~~ typescript +import { fedifyMiddleware } from "@fedify/adonis"; +import federation from "#services/federation"; + +export default fedifyMiddleware(federation); +~~~~ + +Finally, register it as a server middleware in *start/kernel.ts*: + +~~~~ typescript +import server from "@adonisjs/core/services/server"; + +server.use([ + () => import("#middleware/fedify_middleware"), + // ... other middleware +]); +~~~~ + +The middleware intercepts incoming requests and delegates federation traffic +(ActivityPub, WebFinger, etc.) to Fedify. All other requests pass through +to your AdonisJS routes. diff --git a/packages/adonis/deno.json b/packages/adonis/deno.json new file mode 100644 index 000000000..51e73837a --- /dev/null +++ b/packages/adonis/deno.json @@ -0,0 +1,21 @@ +{ + "name": "@fedify/adonis", + "version": "2.2.0", + "license": "MIT", + "exports": { + ".": "./src/mod.ts" + }, + "exclude": [ + "dist", + "node_modules" + ], + "publish": { + "exclude": [ + "**/*.test.ts", + "tsdown.config.ts" + ] + }, + "tasks": { + "check": "deno fmt --check && deno lint && deno check src/*.ts" + } +} diff --git a/packages/adonis/package.json b/packages/adonis/package.json new file mode 100644 index 000000000..09cd5533e --- /dev/null +++ b/packages/adonis/package.json @@ -0,0 +1,66 @@ +{ + "name": "@fedify/adonis", + "version": "2.2.0", + "description": "Integrate Fedify with AdonisJS", + "keywords": [ + "Fedify", + "ActivityPub", + "Fediverse", + "AdonisJS" + ], + "author": { + "name": "Hong Minhee", + "email": "hong@minhee.org", + "url": "https://hongminhee.org/" + }, + "homepage": "https://fedify.dev/", + "repository": { + "type": "git", + "url": "git+https://github.com/fedify-dev/fedify.git", + "directory": "packages/adonis" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/fedify-dev/fedify/issues" + }, + "funding": [ + "https://opencollective.com/fedify", + "https://github.com/sponsors/dahlia" + ], + "type": "module", + "main": "./dist/mod.cjs", + "module": "./dist/mod.js", + "types": "./dist/mod.d.ts", + "exports": { + ".": { + "types": { + "import": "./dist/mod.d.ts", + "require": "./dist/mod.d.cts", + "default": "./dist/mod.d.ts" + }, + "import": "./dist/mod.js", + "require": "./dist/mod.cjs", + "default": "./dist/mod.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist/", + "package.json" + ], + "peerDependencies": { + "@fedify/fedify": "workspace:^", + "@adonisjs/core": ">=6.0.0" + }, + "devDependencies": { + "@types/node": "catalog:", + "tsdown": "catalog:", + "typescript": "catalog:" + }, + "scripts": { + "build:self": "tsdown", + "build": "pnpm --filter @fedify/adonis... run build:self", + "prepack": "pnpm build", + "prepublish": "pnpm build" + } +} diff --git a/packages/adonis/src/mod.ts b/packages/adonis/src/mod.ts new file mode 100644 index 000000000..98ba7a31b --- /dev/null +++ b/packages/adonis/src/mod.ts @@ -0,0 +1,191 @@ +/** + * Fedify with AdonisJS + * ==================== + * + * This package provides an [AdonisJS] middleware to integrate with Fedify. + * + * [AdonisJS]: https://adonisjs.com/ + * + * @module + */ +import type { Federation } from "@fedify/fedify/federation"; +import { Buffer } from "node:buffer"; +import type { IncomingMessage, ServerResponse } from "node:http"; +import { Readable } from "node:stream"; + +/** + * Minimal interface for the AdonisJS request object. + * Compatible with both AdonisJS v6 and v7. + */ +interface AdonisRequest { + method(): string; + protocol(): string; + hostname(): string | null; + url(): string; + headers(): Record; + request: IncomingMessage; +} + +/** + * Minimal interface for the AdonisJS response object. + * Compatible with both AdonisJS v6 and v7. + */ +interface AdonisResponse { + response: ServerResponse; +} + +/** + * Minimal interface for the AdonisJS HTTP context. + * Compatible with both AdonisJS v6 and v7. + */ +export interface AdonisHttpContext { + request: AdonisRequest; + response: AdonisResponse; +} + +/** + * A factory function to create context data for the {@link Federation} object. + * + * @template TContextData A type of the context data for the {@link Federation} + * object. + * @param ctx An AdonisJS HTTP context object. + * @returns A context data for the {@link Federation} object. + */ +export type ContextDataFactory = ( + ctx: AdonisHttpContext, +) => TContextData | Promise; + +/** + * The interface that the middleware class returned by + * {@link fedifyMiddleware} implements. + */ +export interface FedifyMiddlewareHandler { + handle(ctx: AdonisHttpContext, next: () => Promise): Promise; +} + +/** + * Create an AdonisJS middleware class to integrate with the + * {@link Federation} object. + * + * The returned class can be used as an AdonisJS server middleware: + * + * ```typescript + * // app/middleware/fedify_middleware.ts + * import { fedifyMiddleware } from "@fedify/adonis"; + * import federation from "#services/federation"; + * + * export default fedifyMiddleware(federation); + * ``` + * + * Then register it in `start/kernel.ts`: + * + * ```typescript + * server.use([ + * () => import("#middleware/fedify_middleware"), + * // ... other middleware + * ]); + * ``` + * + * @template TContextData A type of the context data for the {@link Federation} + * object. + * @param federation A {@link Federation} object to integrate with AdonisJS. + * @param contextDataFactory A function to create context data for the + * {@link Federation} object. + * @returns An AdonisJS middleware class. + */ +export function fedifyMiddleware( + federation: Federation, + contextDataFactory: ContextDataFactory = () => + void 0 as TContextData, +): { new (): FedifyMiddlewareHandler } { + return class FedifyMiddleware implements FedifyMiddlewareHandler { + async handle( + ctx: AdonisHttpContext, + next: () => Promise, + ): Promise { + const request = fromAdonisRequest(ctx); + let contextData = contextDataFactory(ctx); + if (contextData instanceof Promise) contextData = await contextData; + + let notFound = false; + let notAcceptable = false; + + const response = await federation.fetch(request, { + contextData, + onNotFound: async () => { + notFound = true; + await next(); + return new Response("Not found", { status: 404 }); + }, + onNotAcceptable: async () => { + notAcceptable = true; + await next(); + return new Response("Not acceptable", { + status: 406, + headers: { + "Content-Type": "text/plain", + Vary: "Accept", + }, + }); + }, + }); + + if (notFound || notAcceptable) return; + await writeResponse(ctx, response); + } + }; +} + +export default fedifyMiddleware; + +function fromAdonisRequest(ctx: AdonisHttpContext): Request { + const allHeaders = ctx.request.headers(); + const host = allHeaders["host"] ?? ctx.request.hostname() ?? "localhost"; + const url = `${ctx.request.protocol()}://${host}${ctx.request.url()}`; + const headers = new Headers(); + for (const [key, value] of Object.entries(allHeaders)) { + if (value == null) continue; + if (Array.isArray(value)) { + for (const v of value) headers.append(key, v); + } else { + headers.append(key, value); + } + } + const method = ctx.request.method(); + return new Request(url, { + method, + headers, + // @ts-ignore: duplex is not supported in Deno, but it is in Node.js + duplex: "half", + body: method === "GET" || method === "HEAD" + ? undefined + : Readable.toWeb(ctx.request.request as unknown as Readable), + }); +} + +function writeResponse( + ctx: AdonisHttpContext, + response: Response, +): Promise { + const nodeRes = ctx.response.response; + nodeRes.statusCode = response.status; + response.headers.forEach((value, key) => nodeRes.setHeader(key, value)); + if (response.body == null) { + nodeRes.end(); + return Promise.resolve(); + } + const body = response.body; + const reader = body.getReader(); + return new Promise((resolve) => { + reader.read().then(function read({ done, value }) { + if (done) { + reader.releaseLock(); + nodeRes.end(); + resolve(); + return; + } + nodeRes.write(Buffer.from(value)); + reader.read().then(read); + }); + }); +} diff --git a/packages/adonis/tsdown.config.ts b/packages/adonis/tsdown.config.ts new file mode 100644 index 000000000..0ed4ae9fd --- /dev/null +++ b/packages/adonis/tsdown.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from "tsdown"; + +export default defineConfig({ + entry: ["src/mod.ts"], + dts: { compilerOptions: { isolatedDeclarations: true, declaration: true } }, + format: ["esm", "cjs"], + platform: "node", + outExtensions({ format }) { + return { + js: format === "cjs" ? ".cjs" : ".js", + dts: format === "cjs" ? ".d.cts" : ".d.ts", + }; + }, +}); diff --git a/packages/fedify/README.md b/packages/fedify/README.md index 53a2d3918..b4559ba89 100644 --- a/packages/fedify/README.md +++ b/packages/fedify/README.md @@ -96,6 +96,7 @@ Here is the list of packages: | [@fedify/fedify](/packages/fedify/) | [JSR] | [npm] | The core framework of Fedify | | [@fedify/cli](/packages/cli/) | [JSR][jsr:@fedify/cli] | [npm][npm:@fedify/cli] | CLI toolchain for testing and debugging | | [@fedify/create](/packages/create/) | | [npm][npm:@fedify/create] | Create a new Fedify project | +| [@fedify/adonis](/packages/adonis/) | [JSR][jsr:@fedify/adonis] | [npm][npm:@fedify/adonis] | AdonisJS integration | | [@fedify/amqp](/packages/amqp/) | [JSR][jsr:@fedify/amqp] | [npm][npm:@fedify/amqp] | AMQP/RabbitMQ driver | | [@fedify/astro](/packages/astro/) | [JSR][jsr:@fedify/astro] | [npm][npm:@fedify/astro] | Astro integration | | [@fedify/cfworkers](/packages/cfworkers/) | [JSR][jsr:@fedify/cfworkers] | [npm][npm:@fedify/cfworkers] | Cloudflare Workers integration | @@ -112,6 +113,7 @@ Here is the list of packages: | [@fedify/lint](/packages/lint/) | [JSR][jsr:@fedify/lint] | [npm][npm:@fedify/lint] | Linting utilities | | [@fedify/nestjs](/packages/nestjs/) | | [npm][npm:@fedify/nestjs] | NestJS integration | | [@fedify/next](/packages/next/) | | [npm][npm:@fedify/next] | Next.js integration | +| [@fedify/nuxt](/packages/nuxt/) | [JSR][jsr:@fedify/nuxt] | [npm][npm:@fedify/nuxt] | Nuxt integration | | [@fedify/mysql](/packages/mysql/) | [JSR][jsr:@fedify/mysql] | [npm][npm:@fedify/mysql] | MySQL/MariaDB driver | | [@fedify/postgres](/packages/postgres/) | [JSR][jsr:@fedify/postgres] | [npm][npm:@fedify/postgres] | PostgreSQL driver | | [@fedify/redis](/packages/redis/) | [JSR][jsr:@fedify/redis] | [npm][npm:@fedify/redis] | Redis driver | @@ -128,6 +130,8 @@ Here is the list of packages: [jsr:@fedify/cli]: https://jsr.io/@fedify/cli [npm:@fedify/cli]: https://www.npmjs.com/package/@fedify/cli [npm:@fedify/create]: https://www.npmjs.com/package/@fedify/create +[jsr:@fedify/adonis]: https://jsr.io/@fedify/adonis +[npm:@fedify/adonis]: https://www.npmjs.com/package/@fedify/adonis [jsr:@fedify/amqp]: https://jsr.io/@fedify/amqp [npm:@fedify/amqp]: https://www.npmjs.com/package/@fedify/amqp [jsr:@fedify/astro]: https://jsr.io/@fedify/astro @@ -155,6 +159,8 @@ Here is the list of packages: [npm:@fedify/lint]: https://www.npmjs.com/package/@fedify/lint [npm:@fedify/nestjs]: https://www.npmjs.com/package/@fedify/nestjs [npm:@fedify/next]: https://www.npmjs.com/package/@fedify/next +[jsr:@fedify/nuxt]: https://jsr.io/@fedify/nuxt +[npm:@fedify/nuxt]: https://www.npmjs.com/package/@fedify/nuxt [jsr:@fedify/mysql]: https://jsr.io/@fedify/mysql [npm:@fedify/mysql]: https://www.npmjs.com/package/@fedify/mysql [jsr:@fedify/postgres]: https://jsr.io/@fedify/postgres diff --git a/packages/init/src/action/templates.ts b/packages/init/src/action/templates.ts index 8e489c11e..72051dee7 100644 --- a/packages/init/src/action/templates.ts +++ b/packages/init/src/action/templates.ts @@ -21,10 +21,15 @@ export const loadFederation = async ( kv, mq, packageManager, + webFramework, }: InitCommandData & { imports: string }, ) => pipe( - await readTemplate("defaults/federation.ts"), + await readTemplate( + webFramework === "nuxt" && hasTopLevelAwait(kv.object, mq.object) + ? "nuxt/server/federation.ts" + : "defaults/federation.ts", + ), replace(/\/\* imports \*\//, imports), replace(/\/\* logger \*\//, JSON.stringify(projectName)), replace(/\/\* kv \*\//, convertEnv(kv.object, packageManager)), @@ -111,3 +116,6 @@ export const convertEnv = (obj: string, pm: PackageManager) => pm === "deno" && ENV_REG_EXP.test(obj) ? obj.replaceAll(ENV_REG_EXP, (_, g1) => `Deno.env.get("${g1}")`) : obj; + +const hasTopLevelAwait = (...values: string[]) => + values.some((value) => /\bawait\b/.test(value)); diff --git a/packages/init/src/const.ts b/packages/init/src/const.ts index 363922a78..f2970557e 100644 --- a/packages/init/src/const.ts +++ b/packages/init/src/const.ts @@ -14,6 +14,8 @@ export const WEB_FRAMEWORK = [ "astro", "express", "solidstart", + "nuxt", + "adonis", ] as const; /** All supported message queue backend identifiers. */ export const MESSAGE_QUEUE = Object.keys(mq) as readonly (keyof typeof mq)[]; diff --git a/packages/init/src/json/deps.json b/packages/init/src/json/deps.json index 414ded649..19cda7ab4 100644 --- a/packages/init/src/json/deps.json +++ b/packages/init/src/json/deps.json @@ -1,4 +1,5 @@ { + "npm:@adonisjs/core": "^7.3.0", "@hongminhee/x-forwarded-fetch": "^0.2.0", "@hono/hono": "^4.12.9", "@logtape/logtape": "^2.0.5", diff --git a/packages/init/src/templates/adonis/app.ts.tpl b/packages/init/src/templates/adonis/app.ts.tpl new file mode 100644 index 000000000..a66934992 --- /dev/null +++ b/packages/init/src/templates/adonis/app.ts.tpl @@ -0,0 +1,46 @@ +import { + createServer, + type IncomingMessage, + type ServerResponse, +} from "node:http"; +import { + fedifyMiddleware, + type AdonisHttpContext, +} from "@fedify/adonis"; +import { getLogger } from "@logtape/logtape"; +import federation from "./federation.ts"; + +const logger = getLogger("/* logger */"); + +const FedifyMiddleware = fedifyMiddleware(federation, () => undefined); +const middleware = new FedifyMiddleware(); + +function createHttpContext( + req: IncomingMessage, + res: ServerResponse, +): AdonisHttpContext { + const host = req.headers.host ?? "localhost"; + return { + request: { + method: () => req.method ?? "GET", + protocol: () => "http", + hostname: () => host.split(":")[0], + url: () => req.url ?? "/", + headers: () => req.headers as Record, + request: req, + }, + response: { + response: res, + }, + }; +} + +export const server = createServer(async (req, res) => { + const ctx = createHttpContext(req, res); + await middleware.handle(ctx, async () => { + res.writeHead(200, { "Content-Type": "text/plain" }); + res.end("Hello, Fedify!"); + }); +}); + +export default server; diff --git a/packages/init/src/templates/adonis/index.ts.tpl b/packages/init/src/templates/adonis/index.ts.tpl new file mode 100644 index 000000000..f721bcab5 --- /dev/null +++ b/packages/init/src/templates/adonis/index.ts.tpl @@ -0,0 +1,6 @@ +import server from "./app.ts"; +import "./logging.ts"; + +server.listen(3333, () => { + console.log("Server started at http://localhost:3333"); +}); diff --git a/packages/init/src/templates/nuxt/nuxt.config.ts.tpl b/packages/init/src/templates/nuxt/nuxt.config.ts.tpl new file mode 100644 index 000000000..ccccb78c1 --- /dev/null +++ b/packages/init/src/templates/nuxt/nuxt.config.ts.tpl @@ -0,0 +1,7 @@ +export default defineNuxtConfig({ + compatibilityDate: "2025-07-15", + devtools: { enabled: true }, + nitro: { + errorHandler: "./server/error", + }, +}); \ No newline at end of file diff --git a/packages/init/src/templates/nuxt/server/error.ts.tpl b/packages/init/src/templates/nuxt/server/error.ts.tpl new file mode 100644 index 000000000..a3223616d --- /dev/null +++ b/packages/init/src/templates/nuxt/server/error.ts.tpl @@ -0,0 +1,3 @@ +import { fedifyErrorHandler } from "@fedify/nuxt"; + +export default fedifyErrorHandler; \ No newline at end of file diff --git a/packages/init/src/templates/nuxt/server/federation.ts.tpl b/packages/init/src/templates/nuxt/server/federation.ts.tpl new file mode 100644 index 000000000..8f004172c --- /dev/null +++ b/packages/init/src/templates/nuxt/server/federation.ts.tpl @@ -0,0 +1,26 @@ +import { createFederation } from "@fedify/fedify"; +import { Person } from "@fedify/vocab"; +import { getLogger } from "@logtape/logtape"; +/* imports */ + +const logger = getLogger(/* logger */); + +export default (async () => { + const federation = createFederation({ + kv: /* kv */, + queue: /* queue */, + }); + + federation.setActorDispatcher( + "/users/{identifier}", + async (ctx, identifier) => { + return new Person({ + id: ctx.getActorUri(identifier), + preferredUsername: identifier, + name: identifier, + }); + }, + ); + + return federation; +})(); \ No newline at end of file diff --git a/packages/init/src/templates/nuxt/server/middleware/federation.ts.tpl b/packages/init/src/templates/nuxt/server/middleware/federation.ts.tpl new file mode 100644 index 000000000..d6bf4f0ed --- /dev/null +++ b/packages/init/src/templates/nuxt/server/middleware/federation.ts.tpl @@ -0,0 +1,4 @@ +import { fedifyHandler } from "@fedify/nuxt"; +import federation from "../federation"; + +export default fedifyHandler(federation); \ No newline at end of file diff --git a/packages/init/src/test/port.ts b/packages/init/src/test/port.ts index ef63da9f8..924ac69e2 100644 --- a/packages/init/src/test/port.ts +++ b/packages/init/src/test/port.ts @@ -94,6 +94,7 @@ export function reservePort(): Promise< } const ENTRY_FILES: Partial> = { + adonis: "src/index.ts", "bare-bones": "src/main.ts", express: "src/index.ts", hono: "src/index.ts", @@ -145,6 +146,20 @@ export async function replacePortInApp( return; } + if (wf === "nuxt") { + // Insert devServer.port into the Nuxt config + const configPath = join(dir, "nuxt.config.ts"); + const content = await readFile(configPath, "utf8"); + await writeFile( + configPath, + content.replace( + "defineNuxtConfig({", + `defineNuxtConfig({\n devServer: { port: ${newPort} },`, + ), + ); + return; + } + printErrorMessage`Unknown framework ${wf} — cannot replace port.`; } diff --git a/packages/init/src/test/server.ts b/packages/init/src/test/server.ts index 25be5d982..a455fa4ac 100644 --- a/packages/init/src/test/server.ts +++ b/packages/init/src/test/server.ts @@ -1,6 +1,8 @@ -import $ from "@david/dax"; +import { spawn } from "node:child_process"; import { createWriteStream, type WriteStream } from "node:fs"; import { join as joinPath } from "node:path"; +import process from "node:process"; +import { Readable } from "node:stream"; import { printErrorMessage } from "../utils.ts"; import { ensurePortReleased, killProcessOnPort } from "./port.ts"; @@ -45,20 +47,22 @@ export async function serverClosure( await releasePort?.(); const devCommand = cmd.split(" "); - const serverProcess = $`${devCommand}` - .cwd(dir) - .env("PORT", String(defaultPort)) - .stdin("null") - .stdout("piped") - .stderr("piped") - .noThrow() - .spawn(); + const child = spawn(devCommand[0], devCommand.slice(1), { + cwd: dir, + env: { ...process.env, PORT: String(defaultPort) }, + stdio: ["ignore", "pipe", "pipe"], + detached: true, // creates a new process group so we can kill the tree + }); + + // Prevent unhandled exception when the process is killed + child.on("error", () => {}); - // Prevent unhandled rejection when the process is killed - serverProcess.catch(() => {}); + // Convert Node.js readable streams to Web ReadableStreams for tee() + const stdoutWeb = Readable.toWeb(child.stdout!) as ReadableStream; + const stderrWeb = Readable.toWeb(child.stderr!) as ReadableStream; - const [stdoutForFile, stdoutForPort] = serverProcess.stdout().tee(); - const [stderrForFile, stderrForPort] = serverProcess.stderr().tee(); + const [stdoutForFile, stdoutForPort] = stdoutWeb.tee(); + const [stderrForFile, stderrForPort] = stderrWeb.tee(); // Shared signal to cancel all background stream readers on cleanup const cleanup = new AbortController(); @@ -82,8 +86,18 @@ export async function serverClosure( }); return await callback(port); } finally { + // Kill the entire process group (tsx watch + all its children) + try { + if (child.pid != null) { + process.kill(-child.pid, "SIGKILL"); + } + } catch { + // Process group already exited + } + + // Also kill the child directly in case it wasn't in the group try { - serverProcess.kill("SIGKILL"); + child.kill("SIGKILL"); } catch { // Process already exited } diff --git a/packages/init/src/types.ts b/packages/init/src/types.ts index fb46c9f0e..885a8ecde 100644 --- a/packages/init/src/types.ts +++ b/packages/init/src/types.ts @@ -11,7 +11,7 @@ import type { RequiredNotNull } from "./utils.ts"; /** Supported package manager identifiers: `"deno"`, `"pnpm"`, `"bun"`, `"yarn"`, `"npm"`. */ export type PackageManager = typeof PACKAGE_MANAGER[number]; -/** Supported web framework identifiers: `"hono"`, `"nitro"`, `"next"`, `"elysia"`, `"astro"`, `"express"`. */ +/** Supported web framework identifiers: `"hono"`, `"nitro"`, `"next"`, `"elysia"`, `"astro"`, `"express"`, `"solidstart"`, `"nuxt"`. */ export type WebFramework = typeof WEB_FRAMEWORK[number]; /** Supported message queue identifiers: `"denokv"`, `"redis"`, `"postgres"`, `"amqp"`. */ diff --git a/packages/init/src/webframeworks/adonis.ts b/packages/init/src/webframeworks/adonis.ts new file mode 100644 index 000000000..ea5f55c65 --- /dev/null +++ b/packages/init/src/webframeworks/adonis.ts @@ -0,0 +1,65 @@ +import deps from "../json/deps.json" with { type: "json" }; +import { PACKAGE_VERSION, readTemplate } from "../lib.ts"; +import type { WebFrameworkDescription } from "../types.ts"; +import { defaultDevDependencies } from "./const.ts"; +import { getInstruction, pmToRt } from "./utils.ts"; + +const adonisDescription: WebFrameworkDescription = { + label: "AdonisJS", + packageManagers: ["pnpm", "bun", "yarn", "npm"], + defaultPort: 3333, + init: async ({ projectName, packageManager: pm }) => ({ + dependencies: { + "@adonisjs/core": deps["npm:@adonisjs/core"], + "@fedify/adonis": PACKAGE_VERSION, + ...(pmToRt(pm) === "node" && { + "@dotenvx/dotenvx": deps["npm:@dotenvx/dotenvx"], + tsx: deps["npm:tsx"], + }), + }, + devDependencies: { + ...(pm === "bun" + ? { "@types/bun": deps["npm:@types/bun"] } + : { "@types/node": deps["npm:@types/node@22"] }), + ...defaultDevDependencies, + }, + federationFile: "src/federation.ts", + loggingFile: "src/logging.ts", + files: { + "src/app.ts": (await readTemplate("adonis/app.ts")) + .replace(/\/\* logger \*\//, projectName), + "src/index.ts": await readTemplate("adonis/index.ts"), + "eslint.config.ts": await readTemplate("defaults/eslint.config.ts"), + }, + compilerOptions: { + "lib": ["ESNext"], + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "strict": true, + }, + tasks: TASKS[pmToRt(pm)], + instruction: getInstruction(pm, 3333), + }), +}; + +export default adonisDescription; + +const TASKS: Record<"deno" | "bun" | "node", Record> = { + deno: { + dev: "deno run -A --watch ./src/index.ts", + }, + bun: { + dev: "bun run --hot ./src/index.ts", + prod: "bun run ./src/index.ts", + lint: "eslint .", + }, + node: { + dev: "dotenvx run -- tsx watch ./src/index.ts", + prod: "dotenvx run -- node --import tsx ./src/index.ts", + lint: "eslint .", + }, +}; diff --git a/packages/init/src/webframeworks/mod.ts b/packages/init/src/webframeworks/mod.ts index f5baa6855..02ec9ebef 100644 --- a/packages/init/src/webframeworks/mod.ts +++ b/packages/init/src/webframeworks/mod.ts @@ -1,4 +1,5 @@ import type { WebFrameworks } from "../types.ts"; +import adonis from "./adonis.ts"; import astro from "./astro.ts"; import bareBones from "./bare-bones.ts"; import elysia from "./elysia.ts"; @@ -6,6 +7,7 @@ import express from "./express.ts"; import hono from "./hono.ts"; import next from "./next.ts"; import nitro from "./nitro.ts"; +import nuxt from "./nuxt.ts"; import solidstart from "./solidstart.ts"; /** @@ -17,12 +19,14 @@ import solidstart from "./solidstart.ts"; */ const webFrameworks: WebFrameworks = { "bare-bones": bareBones, + adonis, astro, elysia, express, hono, next, nitro, + nuxt, solidstart, } as const; diff --git a/packages/init/src/webframeworks/nuxt.ts b/packages/init/src/webframeworks/nuxt.ts new file mode 100644 index 000000000..e5ffaa459 --- /dev/null +++ b/packages/init/src/webframeworks/nuxt.ts @@ -0,0 +1,60 @@ +import { PACKAGE_VERSION, readTemplate } from "../lib.ts"; +import type { PackageManager, WebFrameworkDescription } from "../types.ts"; +import { getInstruction } from "./utils.ts"; + +const SUPPORTED_PACKAGE_MANAGERS = [ + "pnpm", + "bun", + "yarn", + "npm", +] as const satisfies readonly PackageManager[]; + +const nuxtDescription: WebFrameworkDescription = { + label: "Nuxt", + packageManagers: SUPPORTED_PACKAGE_MANAGERS, + defaultPort: 3000, + init: async ({ packageManager: pm }) => ({ + command: getNuxtInitCommand(pm), + dependencies: { + "@fedify/nuxt": PACKAGE_VERSION, + }, + federationFile: "server/federation.ts", + loggingFile: "server/logging.ts", + files: { + "nuxt.config.ts": await readTemplate("nuxt/nuxt.config.ts"), + "server/error.ts": await readTemplate("nuxt/server/error.ts"), + "server/middleware/federation.ts": await readTemplate( + "nuxt/server/middleware/federation.ts", + ), + }, + instruction: getInstruction(pm, 3000), + }), +}; + +export default nuxtDescription; + +const getNuxtInitCommand = (pm: PackageManager): string[] => [ + "env", + "CI=1", + ...createNuxtAppCommand(pm), + ".", + "--template", + "minimal", + "--force", + "--no-install", + "--packageManager", + pm, + "--gitInit=false", + "&&", + "rm", + "nuxt.config.ts", +]; + +const createNuxtAppCommand = (pm: PackageManager): string[] => + pm === "bun" + ? ["bunx", "nuxi@latest", "init"] + : pm === "npm" + ? ["npx", "nuxi@latest", "init"] + : pm === "pnpm" + ? ["pnpm", "dlx", "nuxi@latest", "init"] + : ["yarn", "dlx", "nuxi@latest", "init"]; diff --git a/packages/nuxt/README.md b/packages/nuxt/README.md new file mode 100644 index 000000000..b9464ecfa --- /dev/null +++ b/packages/nuxt/README.md @@ -0,0 +1,87 @@ + + +@fedify/nuxt: Integrate Fedify with Nuxt +======================================== + +[![JSR][JSR badge]][JSR] +[![npm][npm badge]][npm] +[![Matrix][Matrix badge]][Matrix] +[![Follow @fedify@hollo.social][@fedify@hollo.social badge]][@fedify@hollo.social] + +This package provides a simple way to integrate [Fedify] with [Nuxt] 4.x. +It installs a server middleware handler that lets Nuxt and Fedify share the +same routes with content negotiation, and it also provides an error handler +for the final 406 fallback when Nuxt cannot serve HTML for the same path. + +[JSR badge]: https://jsr.io/badges/@fedify/nuxt +[JSR]: https://jsr.io/@fedify/nuxt +[npm badge]: https://img.shields.io/npm/v/@fedify/nuxt?logo=npm +[npm]: https://www.npmjs.com/package/@fedify/nuxt +[Matrix badge]: https://img.shields.io/matrix/fedify%3Amatrix.org +[Matrix]: https://matrix.to/#/#fedify:matrix.org +[@fedify@hollo.social badge]: https://fedi-badge.deno.dev/@fedify@hollo.social/followers.svg +[@fedify@hollo.social]: https://hollo.social/@fedify +[Fedify]: https://fedify.dev/ +[Nuxt]: https://nuxt.com/ + + +Installation +------------ + +::: code-group + +~~~~ sh [Deno] +deno add jsr:@fedify/nuxt +~~~~ + +~~~~ sh [npm] +npm add @fedify/nuxt +~~~~ + +~~~~ sh [pnpm] +pnpm add @fedify/nuxt +~~~~ + +~~~~ sh [Yarn] +yarn add @fedify/nuxt +~~~~ + +~~~~ sh [Bun] +bun add @fedify/nuxt +~~~~ + +::: + + +Usage +----- + +Configure Nuxt's Nitro error handler in *nuxt.config.ts*: + +~~~~ typescript +export default defineNuxtConfig({ + nitro: { + errorHandler: "./server/error", + }, +}); +~~~~ + +Then create *server/error.ts*: + +~~~~ typescript +import { fedifyErrorHandler } from "@fedify/nuxt"; + +export default fedifyErrorHandler; +~~~~ + +Finally, add the Fedify middleware in *server/middleware/federation.ts*: + +~~~~ typescript +import federation from "../federation"; +import { fedifyHandler } from "@fedify/nuxt"; + +export default fedifyHandler( + federation, + (event, request) => undefined, +); +~~~~ diff --git a/packages/nuxt/deno.json b/packages/nuxt/deno.json new file mode 100644 index 000000000..6b5f1d986 --- /dev/null +++ b/packages/nuxt/deno.json @@ -0,0 +1,21 @@ +{ + "name": "@fedify/nuxt", + "version": "2.2.0", + "license": "MIT", + "exports": { + ".": "./src/index.ts" + }, + "exclude": [ + "dist", + "node_modules" + ], + "publish": { + "exclude": [ + "**/*.test.ts", + "tsdown.config.ts" + ] + }, + "tasks": { + "check": "deno fmt --check && deno lint && deno check src/*.ts" + } +} diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json new file mode 100644 index 000000000..1cf7e64a2 --- /dev/null +++ b/packages/nuxt/package.json @@ -0,0 +1,64 @@ +{ + "name": "@fedify/nuxt", + "version": "2.2.0", + "description": "Integrate Fedify with Nuxt", + "keywords": [ + "Fedify", + "ActivityPub", + "Fediverse", + "Nuxt", + "Nitro" + ], + "homepage": "https://fedify.dev/", + "repository": { + "type": "git", + "url": "git+https://github.com/fedify-dev/fedify.git", + "directory": "packages/nuxt" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/fedify-dev/fedify/issues" + }, + "funding": [ + "https://opencollective.com/fedify", + "https://github.com/sponsors/dahlia" + ], + "type": "module", + "module": "dist/index.js", + "main": "dist/index.cjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": { + "import": "./dist/index.d.ts", + "require": "./dist/index.d.cts", + "default": "./dist/index.d.ts" + }, + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "dist/", + "package.json" + ], + "dependencies": { + "h3": "catalog:" + }, + "peerDependencies": { + "@fedify/fedify": "workspace:^", + "nuxt": "catalog:" + }, + "devDependencies": { + "tsdown": "catalog:", + "typescript": "catalog:" + }, + "scripts": { + "build:self": "tsdown", + "build": "pnpm --filter @fedify/nuxt... run build:self", + "prepack": "pnpm build", + "prepublish": "pnpm build" + } +} diff --git a/packages/nuxt/src/index.ts b/packages/nuxt/src/index.ts new file mode 100644 index 000000000..7458b8f67 --- /dev/null +++ b/packages/nuxt/src/index.ts @@ -0,0 +1,120 @@ +/** + * Fedify with Nuxt + * ================ + * + * This package provides a [Nuxt] server handler to integrate with Fedify. + * + * [Nuxt]: https://nuxt.com/ + * + * @module + * @since 2.2.0 + */ + +import type { Federation } from "@fedify/fedify/federation"; +import { + defineEventHandler, + type EventHandler, + type EventHandlerRequest, + type EventHandlerResponse, + type H3Error, + type H3Event, + toWebRequest, +} from "h3"; + +/** + * A factory function that creates the context data that will be passed to the + * {@link Federation} instance. + * + * @template TContextData The type of the context data. + * @param event The Nuxt/Nitro event for the current request. + * @param request The Web API request converted from the event. + * @returns The context data, or a promise resolving to the context data. + * @since 2.2.0 + */ +export type ContextDataFactory = ( + event: H3Event, + request: Request, +) => Promise | TContextData; + +/** + * Create a Nuxt server handler to integrate with the {@link Federation} + * object. + * + * This handler is intended to be used from a file under + * *server/middleware/*. When Fedify does not own the route, it delegates to + * the rest of the Nuxt request pipeline. When content negotiation fails, it + * stores the 406 response so that {@link fedifyErrorHandler} can return it if + * Nuxt later resolves the same request to a 404. + * + * @example server/middleware/federation.ts + * ``` typescript + * import federation from "../federation"; + * import { fedifyHandler } from "@fedify/nuxt"; + * + * export default fedifyHandler(federation); + * ``` + * + * @template TContextData A type of the context data for the + * {@link Federation} object. + * @param federation A {@link Federation} object to integrate with Nuxt. + * @param contextDataFactory A function to create context data for the + * {@link Federation} object. + * @returns A Nuxt-compatible event handler. + * @since 2.2.0 + */ +export function fedifyHandler( + federation: Federation | Promise>, + contextDataFactory: ContextDataFactory = () => + undefined as TContextData, +): EventHandler { + return defineEventHandler({ + async handler(event) { + const resolvedFederation = await federation; + const request = toWebRequest(event); + const response = await resolvedFederation.fetch(request, { + contextData: await contextDataFactory(event, request), + }); + if (response.status === 404) return; + if (response.status === 406) { + event.context[NOT_ACCEPTABLE_RESPONSE_KEY] = response; + return; + } + await event.respondWith(response); + }, + }); +} + +/** + * A Nitro error handler that finalizes Fedify content negotiation for Nuxt. + * + * Configure this as `nitro.errorHandler` in *nuxt.config.ts*. If + * {@link fedifyHandler} stored a 406 response and Nuxt later resolves the same + * request to a 404, this handler returns the stored 406 instead. + * + * @example server/error.ts + * ``` typescript + * import { fedifyErrorHandler } from "@fedify/nuxt"; + * + * export default fedifyErrorHandler; + * ``` + * + * @param error The H3 error raised by Nitro. + * @param event The H3 event for the request. + * @returns Nothing. The response is written directly to the event when + * needed. + * @since 2.2.0 + */ +export async function fedifyErrorHandler( + error: H3Error, + event: H3Event, +): Promise { + if ( + NOT_ACCEPTABLE_RESPONSE_KEY in event.context && + event.context[NOT_ACCEPTABLE_RESPONSE_KEY] instanceof Response && + error.statusCode === 404 + ) { + await event.respondWith(event.context[NOT_ACCEPTABLE_RESPONSE_KEY]); + } +} + +const NOT_ACCEPTABLE_RESPONSE_KEY = "__fedify_response__"; diff --git a/packages/nuxt/tsdown.config.ts b/packages/nuxt/tsdown.config.ts new file mode 100644 index 000000000..4c38656b6 --- /dev/null +++ b/packages/nuxt/tsdown.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from "tsdown"; + +export default defineConfig({ + entry: ["src/index.ts"], + dts: { compilerOptions: { isolatedDeclarations: true, declaration: true } }, + format: ["esm", "cjs"], + platform: "neutral", + outExtensions({ format }) { + return { + js: format === "cjs" ? ".cjs" : ".js", + dts: format === "cjs" ? ".d.cts" : ".d.ts", + }; + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53107c1d5..3c9873084 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,6 +138,9 @@ catalogs: next: specifier: ^15.4.6 version: 15.5.0 + nuxt: + specifier: ^4.1.3 + version: 4.4.2 pkijs: specifier: ^3.3.3 version: 3.3.3 @@ -153,6 +156,12 @@ catalogs: urlpattern-polyfill: specifier: ^10.1.0 version: 10.1.0 + vue: + specifier: ^3.5.17 + version: 3.5.17 + vue-router: + specifier: ^4.5.1 + version: 4.6.4 importers: @@ -342,28 +351,56 @@ importers: version: 5.9.3 vitepress: specifier: ^1.6.3 - version: 1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) + version: 1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(fuse.js@7.3.0)(lightningcss@1.30.1)(postcss@8.5.9)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) vitepress-plugin-group-icons: specifier: ^1.3.5 - version: 1.6.1(markdown-it@14.1.0)(vite@7.1.3(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 1.6.1(markdown-it@14.1.0)(vite@7.3.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) vitepress-plugin-llms: specifier: ^1.1.0 version: 1.6.0 vitepress-plugin-mermaid: specifier: ^2.0.17 - version: 2.0.17(mermaid@11.7.0)(vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)) + version: 2.0.17(mermaid@11.7.0)(vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(fuse.js@7.3.0)(lightningcss@1.30.1)(postcss@8.5.9)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)) x-forwarded-fetch: specifier: ^0.2.0 version: 0.2.0 + examples/adonis: + dependencies: + '@adonisjs/core': + specifier: '>=6.0.0' + version: 7.3.0(youch@4.1.0) + '@fedify/adonis': + specifier: workspace:^ + version: link:../../packages/adonis + '@fedify/fedify': + specifier: workspace:^ + version: link:../../packages/fedify + '@fedify/vocab': + specifier: workspace:^ + version: link:../../packages/vocab + '@logtape/logtape': + specifier: 'catalog:' + version: 2.0.5 + devDependencies: + '@types/node': + specifier: ^22.5.1 + version: 22.19.1 + tsx: + specifier: ^4.19.0 + version: 4.20.3 + typescript: + specifier: ^5.5.4 + version: 5.9.3 + examples/astro: dependencies: '@astrojs/node': specifier: ^10.0.3 - version: 10.0.4(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1)) + version: 10.0.4(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3)) '@deno/astro-adapter': specifier: ^0.3.2 - version: 0.3.2(@opentelemetry/api@1.9.0)(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1)) + version: 0.3.2(@opentelemetry/api@1.9.0)(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3)) '@fedify/astro': specifier: workspace:^ version: link:../../packages/astro @@ -375,7 +412,7 @@ importers: version: link:../../packages/vocab astro: specifier: 'catalog:' - version: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1) + version: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3) examples/cloudflare-workers: dependencies: @@ -409,7 +446,7 @@ importers: version: link:../../packages/vocab elysia: specifier: 'catalog:' - version: 1.3.8(exact-mirror@0.1.3(@sinclair/typebox@0.34.38))(file-type@21.0.0)(typescript@5.9.3) + version: 1.3.8(exact-mirror@0.1.3(@sinclair/typebox@0.34.38))(file-type@21.3.4)(typescript@5.9.3) devDependencies: bun-types: specifier: ^1.2.19 @@ -649,6 +686,31 @@ importers: specifier: 'catalog:' version: 5.9.3 + examples/nuxt: + dependencies: + '@fedify/fedify': + specifier: workspace:^ + version: link:../../packages/fedify + '@fedify/nuxt': + specifier: workspace:^ + version: link:../../packages/nuxt + '@fedify/vocab': + specifier: workspace:^ + version: link:../../packages/vocab + nuxt: + specifier: 'catalog:' + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3) + vue: + specifier: 'catalog:' + version: 3.5.17(typescript@5.9.3) + vue-router: + specifier: 'catalog:' + version: 4.6.4(vue@3.5.17(typescript@5.9.3)) + devDependencies: + typescript: + specifier: 'catalog:' + version: 5.9.3 + examples/solidstart: dependencies: '@fedify/fedify': @@ -665,13 +727,13 @@ importers: version: 0.15.4(solid-js@1.9.11) '@solidjs/start': specifier: ^1.3.2 - version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) solid-js: specifier: ^1.9.11 version: 1.9.11 vinxi: specifier: ^0.5.11 - version: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + version: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) devDependencies: typescript: specifier: ^5.5.4 @@ -700,16 +762,16 @@ importers: version: 9.32.0 '@sveltejs/adapter-auto': specifier: ^6.0.0 - version: 6.1.0(@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))) + version: 6.1.0(@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.22.0 - version: 2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^6.0.0 - version: 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) '@tailwindcss/vite': specifier: ^4.0.0 - version: 4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) eslint: specifier: ^9.18.0 version: 9.32.0(jiti@2.6.1) @@ -748,7 +810,26 @@ importers: version: 8.41.0(eslint@9.32.0(jiti@2.6.1))(typescript@5.9.2) vite: specifier: ^7.0.4 - version: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + version: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + + packages/adonis: + dependencies: + '@adonisjs/core': + specifier: '>=6.0.0' + version: 7.3.0(youch@4.1.0) + '@fedify/fedify': + specifier: workspace:^ + version: link:../fedify + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 22.19.1 + tsdown: + specifier: 'catalog:' + version: 0.21.7(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(typescript@5.9.3) + typescript: + specifier: 'catalog:' + version: 5.9.3 packages/amqp: dependencies: @@ -791,7 +872,7 @@ importers: version: link:../fedify astro: specifier: 'catalog:' - version: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1) + version: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3) devDependencies: tsdown: specifier: 'catalog:' @@ -811,7 +892,7 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: ^0.8.31 - version: 0.8.71(@cloudflare/workers-types@4.20251221.0)(@vitest/runner@3.2.4)(@vitest/snapshot@3.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 0.8.71(@cloudflare/workers-types@4.20251221.0)(@vitest/runner@3.2.4)(@vitest/snapshot@3.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) tsdown: specifier: 'catalog:' version: 0.21.7(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(typescript@5.9.3) @@ -820,7 +901,7 @@ importers: version: 5.9.3 vitest: specifier: ~3.2.0 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) wrangler: specifier: ^4.21.1 version: 4.22.0(@cloudflare/workers-types@4.20251221.0) @@ -1018,7 +1099,7 @@ importers: version: link:../fedify elysia: specifier: ^1.3.6 - version: 1.3.8(exact-mirror@0.1.3(@sinclair/typebox@0.34.38))(file-type@21.0.0)(typescript@5.9.3) + version: 1.3.8(exact-mirror@0.1.3(@sinclair/typebox@0.34.38))(file-type@21.3.4)(typescript@5.9.3) devDependencies: bun-types: specifier: ^1.2.19 @@ -1387,6 +1468,25 @@ importers: specifier: 'catalog:' version: 5.9.3 + packages/nuxt: + dependencies: + '@fedify/fedify': + specifier: workspace:^ + version: link:../fedify + h3: + specifier: 'catalog:' + version: 1.15.3 + nuxt: + specifier: 'catalog:' + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3) + devDependencies: + tsdown: + specifier: 'catalog:' + version: 0.21.7(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(typescript@5.9.3) + typescript: + specifier: 'catalog:' + version: 5.9.3 + packages/postgres: dependencies: '@fedify/fedify': @@ -1487,7 +1587,7 @@ importers: version: link:../fedify '@solidjs/start': specifier: ^1.3.0 - version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) devDependencies: tsdown: specifier: 'catalog:' @@ -1531,7 +1631,7 @@ importers: version: link:../fedify '@sveltejs/kit': specifier: 'catalog:' - version: 2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + version: 2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) devDependencies: tsdown: specifier: 'catalog:' @@ -1718,6 +1818,125 @@ importers: packages: + '@adonisjs/ace@14.1.0': + resolution: {integrity: sha512-8N8z1YKePBiXz7wLxHFz/HSqjCRSL/9Vzs4XQt8gk8G17u4PXwNncWt0vSgYEcDrvPAt+QOavY1vMeKOOWe29w==} + engines: {node: '>=24.0.0'} + peerDependencies: + youch: ^4.1.0-beta.11 || ^4.1.0 + + '@adonisjs/application@9.0.0': + resolution: {integrity: sha512-iQpq/JRJsnrqOMHfu72CYjmlkH5FwT28DhUKEOjktccmFh8OLdVZ2Sieb8b2/qNv4c+w8Yo7keOGEzOYUrU+kA==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@adonisjs/assembler': ^8.0.0-next.23 || ^8.0.0 + '@adonisjs/config': ^6.1.0-next.0 || ^6.0.0 + '@adonisjs/fold': ^11.0.0-next.3 || ^11.0.0 + peerDependenciesMeta: + '@adonisjs/assembler': + optional: true + + '@adonisjs/bodyparser@11.0.1': + resolution: {integrity: sha512-RUpkRRSvCSMLmVJcYUyaAwC9Z1tWlThBvVGiIU5bkWwwe5CcbG2f9sifzod04B+hcgJ4xWSs+FF/WNdbwWFwhQ==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@adonisjs/http-server': ^8.0.0-next.17 || ^8.0.0 + + '@adonisjs/config@6.1.0': + resolution: {integrity: sha512-YVDRL8xHCtM6iMnAefOBaz6iXVpojwBPDQWPKxnVSucycYeNGrGitJiLy+cGaeAU7Gjm8al9SJRJt3rRPr5PKg==} + engines: {node: '>=24.0.0'} + + '@adonisjs/core@7.3.0': + resolution: {integrity: sha512-HtjnYq7JhmLggXXSjude4mJyDmgHcFu51FO/k0e1sf5o0UeMQGPc+9iK6GFAorFXBNv/2uKIEKSM0vi53gwaXQ==} + engines: {node: '>=24.0.0'} + hasBin: true + peerDependencies: + '@adonisjs/assembler': ^8.0.0-next.23 || ^8.0.0 + '@vinejs/vine': ^4.0.0 + argon2: ^0.44.0 + bcrypt: ^6.0.0 + edge.js: ^6.2.0 + pino-pretty: ^13.1.3 + youch: ^4.1.0-beta.13 || ^4.1.0 + peerDependenciesMeta: + '@adonisjs/assembler': + optional: true + '@vinejs/vine': + optional: true + argon2: + optional: true + bcrypt: + optional: true + edge.js: + optional: true + pino-pretty: + optional: true + youch: + optional: true + + '@adonisjs/env@7.0.0': + resolution: {integrity: sha512-9lSGONI4B1E7LxyVZiUd1yCH9BOri4Ybp4b9x3ojT9AkKfYwqvj4S2USIvFAlkE7eHUC2WMvPgMLX17342Y3ww==} + engines: {node: '>=24.0.0'} + + '@adonisjs/events@10.2.0': + resolution: {integrity: sha512-SzwzbmTLsybSZd47zZMZ3df7puwhY7D8vZ5Uy79SiHjLKbr2eVzUuKjjoYB6/0pZu6IwK9Qx06dI43sl+tLoDw==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@adonisjs/application': ^9.0.0-next.14 || ^9.0.0 + '@adonisjs/fold': ^11.0.0-next.4 || ^11.0.0 + + '@adonisjs/fold@11.0.0': + resolution: {integrity: sha512-RnmDPWz2imVp/B74xitxCPqTdoP07bZvfJe1bh9CD9Rmia4jjDvehZF67KFyGNMZ24MuKasqs3jOcM1vGJp0GA==} + engines: {node: '>=24.0.0'} + + '@adonisjs/hash@10.1.0': + resolution: {integrity: sha512-lW0lGwpscu9PUo3Sb3PF580jYU29I9wsPn3dIKzZbTVedqkpaNpBK3YKedwZYkDpYmiyYXi08eTTNhdWjiGLQw==} + engines: {node: '>=20.6.0'} + peerDependencies: + argon2: ^0.31.2 || ^0.41.0 || ^0.43.0 || ^0.44.0 + bcrypt: ^5.1.1 || ^6.0.0 + peerDependenciesMeta: + argon2: + optional: true + bcrypt: + optional: true + + '@adonisjs/health@3.1.0': + resolution: {integrity: sha512-m3doBnSwi/l9v1DO79xmjAoSPl9b2XCp+crGwF8QUlhe5CgWgtfnL0SeFNEiZGliD3c4gYdihKz4Pnydctva8A==} + engines: {node: '>=24.0.0'} + + '@adonisjs/http-server@8.1.2': + resolution: {integrity: sha512-dALp+CC86pMWB9yrEi9FPCm8IS/G3TqpdARNgWa5z+UqVM8zDjMmGb0DcQlQopwxD1xgBGJSrWH+2cJ+YEcEOw==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@adonisjs/application': ^9.0.0-next.14 || ^9.0.0 + '@adonisjs/events': ^10.1.0-next.4 || ^10.1.0 + '@adonisjs/fold': ^11.0.0-next.4 || ^11.0.0 + '@adonisjs/logger': ^7.1.0-next.3 || ^7.1.0 + '@boringnode/encryption': ^0.2.0 || ^1.0.0 + youch: ^4.1.0-beta.13 || ^4.1.0 + peerDependenciesMeta: + youch: + optional: true + + '@adonisjs/http-transformers@2.3.1': + resolution: {integrity: sha512-N3gBcKyoPHDeVvVIedTzc+ARSUURwNGTPid/e3iLdM4v/myoSnXd76FL/GGzMmjfqqxegpjI2IEMibG7ylrKSQ==} + engines: {node: '>=24.0.0'} + peerDependencies: + '@adonisjs/fold': ^11.0.0-next.2 + + '@adonisjs/logger@7.1.1': + resolution: {integrity: sha512-MmUlp8xBMT6zZy0+vnQcQjHIlNfU4pUJARlINr7Bqha9BvhIn03QZgJL5QJ+kJe1tl6ZpNAryoRTJUiOk/wINQ==} + engines: {node: '>=24.0.0'} + peerDependencies: + pino-pretty: ^13.1.1 + peerDependenciesMeta: + pino-pretty: + optional: true + + '@adonisjs/repl@5.0.0': + resolution: {integrity: sha512-cPp0w5svYUA3M1gdxQBO2Mx5g+SZfPweqKCAxk7C1Os/Qu67JKgWqXqNnl1q0Tzv/l0L19Ms1C7ivzQxeBNajg==} + engines: {node: '>=24.0.0'} + '@algolia/autocomplete-core@1.17.7': resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} @@ -1807,6 +2026,10 @@ packages: '@antfu/utils@8.1.1': resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + '@arr/every@1.0.1': + resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} + engines: {node: '>=4'} + '@astrojs/compiler@2.13.1': resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} @@ -1856,14 +2079,28 @@ packages: resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==} engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.18.6': resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} @@ -1878,10 +2115,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -1911,6 +2162,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/parser@8.0.0-rc.3': resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1928,6 +2184,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -1944,6 +2206,28 @@ packages: resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} engines: {node: ^20.19.0 || >=22.12.0} + '@bomb.sh/tab@0.0.14': + resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==} + hasBin: true + peerDependencies: + cac: ^6.7.14 + citty: ^0.1.6 || ^0.2.0 + commander: ^13.1.0 + peerDependenciesMeta: + cac: + optional: true + citty: + optional: true + commander: + optional: true + + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + + '@boringnode/encryption@1.0.0': + resolution: {integrity: sha512-wGGOE7ywA4W6KAVoVC7s1P4ULzFLIQA/JvthGAa41EA0CaH7kGGawkBB5t5tvWopgBNMhOpIg3uxvULxqf2rQw==} + engines: {node: '>=20.6'} + '@braintree/sanitize-url@6.0.4': resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} @@ -1975,6 +2259,12 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + '@clack/core@1.2.0': + resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} + + '@clack/prompts@1.2.0': + resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -2071,6 +2361,9 @@ packages: '@cloudflare/workers-types@4.20251221.0': resolution: {integrity: sha512-VVTEhY29TtwIwjBjpRrdT51Oqu0JlXijc5TiEKFCjwouUSn+5VhzoTSaz7UBjVOu4vfvcQmjqt/dzwBUR7c95w==} + '@colordx/core@5.0.3': + resolution: {integrity: sha512-xBQ0MYRTNNxW3mS2sJtlQTT7C3Sasqgh1/PsHva7fyDb5uqYY+gv9V0utDdX8X80mqzbGz3u/IDJdn2d/uW09g==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2151,6 +2444,14 @@ packages: search-insights: optional: true + '@dxup/nuxt@0.4.0': + resolution: {integrity: sha512-28LDotpr9G2knUse3cQYsOo6NJq5yhABv4ByRVRYJUmzf9Q31DI7rpRek4POlKy1aAcYyKgu5J2616pyqLohYg==} + peerDependencies: + typescript: '*' + + '@dxup/unimport@0.1.2': + resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==} + '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} @@ -3449,6 +3750,9 @@ packages: '@jridgewell/trace-mapping@0.3.28': resolution: {integrity: sha512-KNNHHwW3EIp4EDYOvYFGyIFfx36R2dNJYH4knnZlF8T5jdbD5Wx8xmSaQ2gP9URkJ04LGEtlcCtwArKcmFcwKw==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -3477,6 +3781,12 @@ packages: '@jsr/std__path@1.1.0': resolution: {integrity: sha512-rnxGg/nJGfDbJO+xIJ9YEzLD7dCzjr3NHShf4dbnlt44WEYNwMjg+TcDO6F2NPHBnn/6iUFwbnNzysrZvyD1Og==, tarball: https://npm.jsr.io/~/11/@jsr/std__path/1.1.0.tgz} + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@logtape/file@2.0.5': resolution: {integrity: sha512-SJ2UZ00IJptilqDMFwPIGmZLMTYNZbP7k4+7aBfP5DoLVifSmQoaxP2HtXMdExXhGP4/JrFepLE86ryPBUKB/Q==} peerDependencies: @@ -3716,6 +4026,86 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@nuxt/cli@3.34.0': + resolution: {integrity: sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@nuxt/schema': ^4.3.1 + peerDependenciesMeta: + '@nuxt/schema': + optional: true + + '@nuxt/devalue@2.0.2': + resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} + + '@nuxt/devtools-kit@3.2.4': + resolution: {integrity: sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ==} + peerDependencies: + vite: '>=6.0' + + '@nuxt/devtools-wizard@3.2.4': + resolution: {integrity: sha512-5tu2+Quu9XTxwtpzM8CUN0UKn/bzZIfJcoGd+at5Yy1RiUQJ4E52tRK0idW1rMSUDkbkvX3dSnu8Tpj7SAtWdQ==} + hasBin: true + + '@nuxt/devtools@3.2.4': + resolution: {integrity: sha512-VPbFy7hlPzWpEZk4BsuVpNuHq1ZYGV9xezjb7/NGuePuNLqeNn74YZugU+PCtva7OwKhEeTXmMK0Mqo/6+nwNA==} + hasBin: true + peerDependencies: + '@vitejs/devtools': '*' + vite: '>=6.0' + peerDependenciesMeta: + '@vitejs/devtools': + optional: true + + '@nuxt/kit@4.4.2': + resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==} + engines: {node: '>=18.12.0'} + + '@nuxt/nitro-server@4.4.2': + resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@babel/plugin-proposal-decorators': ^7.25.0 + '@rollup/plugin-babel': ^6.0.0 || ^7.0.0 + nuxt: ^4.4.2 + peerDependenciesMeta: + '@babel/plugin-proposal-decorators': + optional: true + '@rollup/plugin-babel': + optional: true + + '@nuxt/schema@4.4.2': + resolution: {integrity: sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w==} + engines: {node: ^14.18.0 || >=16.10.0} + + '@nuxt/telemetry@2.8.0': + resolution: {integrity: sha512-zAwXY24KYvpLTmiV+osagd2EHkfs5IF+7oDZYTQoit5r0kPlwaCNlzHp5I/wUAWT4LBw6lG8gZ6bWidAdv/erQ==} + engines: {node: '>=18.12.0'} + hasBin: true + peerDependencies: + '@nuxt/kit': '>=3.0.0' + + '@nuxt/vite-builder@4.4.2': + resolution: {integrity: sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@babel/plugin-proposal-decorators': ^7.25.0 + '@babel/plugin-syntax-jsx': ^7.25.0 + nuxt: 4.4.2 + rolldown: ^1.0.0-beta.38 + rollup-plugin-visualizer: ^6.0.0 || ^7.0.1 + vue: ^3.3.4 + peerDependenciesMeta: + '@babel/plugin-proposal-decorators': + optional: true + '@babel/plugin-syntax-jsx': + optional: true + rolldown: + optional: true + rollup-plugin-visualizer: + optional: true + '@opentelemetry/api-logs@0.211.0': resolution: {integrity: sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==} engines: {node: '>=8.0.0'} @@ -4121,70 +4511,430 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-minify/binding-android-arm-eabi@0.117.0': + resolution: {integrity: sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-android-arm64@0.117.0': + resolution: {integrity: sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-darwin-arm64@0.117.0': + resolution: {integrity: sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-darwin-x64@0.117.0': + resolution: {integrity: sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-freebsd-x64@0.117.0': + resolution: {integrity: sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0': + resolution: {integrity: sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-linux-arm-musleabihf@0.117.0': + resolution: {integrity: sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-linux-arm64-gnu@0.117.0': + resolution: {integrity: sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-linux-arm64-musl@0.117.0': + resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-linux-ppc64-gnu@0.117.0': + resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-minify/binding-linux-riscv64-gnu@0.117.0': + resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-minify/binding-linux-riscv64-musl@0.117.0': + resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-minify/binding-linux-s390x-gnu@0.117.0': + resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-minify/binding-linux-x64-gnu@0.117.0': + resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} - engines: {node: '>= 10.0.0'} + '@oxc-minify/binding-linux-x64-musl@0.117.0': + resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@parcel/watcher-wasm@2.3.0': + '@oxc-minify/binding-openharmony-arm64@0.117.0': + resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-minify/binding-wasm32-wasi@0.117.0': + resolution: {integrity: sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-minify/binding-win32-arm64-msvc@0.117.0': + resolution: {integrity: sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-minify/binding-win32-ia32-msvc@0.117.0': + resolution: {integrity: sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-minify/binding-win32-x64-msvc@0.117.0': + resolution: {integrity: sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-parser/binding-android-arm-eabi@0.117.0': + resolution: {integrity: sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.117.0': + resolution: {integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.117.0': + resolution: {integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.117.0': + resolution: {integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.117.0': + resolution: {integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0': + resolution: {integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.117.0': + resolution: {integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.117.0': + resolution: {integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.117.0': + resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-ppc64-gnu@0.117.0': + resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.117.0': + resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-musl@0.117.0': + resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.117.0': + resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.117.0': + resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.117.0': + resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-openharmony-arm64@0.117.0': + resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.117.0': + resolution: {integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.117.0': + resolution: {integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.117.0': + resolution: {integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.117.0': + resolution: {integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.117.0': + resolution: {integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==} + + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + + '@oxc-transform/binding-android-arm-eabi@0.117.0': + resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-transform/binding-android-arm64@0.117.0': + resolution: {integrity: sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-transform/binding-darwin-arm64@0.117.0': + resolution: {integrity: sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-transform/binding-darwin-x64@0.117.0': + resolution: {integrity: sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-transform/binding-freebsd-x64@0.117.0': + resolution: {integrity: sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0': + resolution: {integrity: sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-transform/binding-linux-arm-musleabihf@0.117.0': + resolution: {integrity: sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-transform/binding-linux-arm64-gnu@0.117.0': + resolution: {integrity: sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-arm64-musl@0.117.0': + resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-ppc64-gnu@0.117.0': + resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-transform/binding-linux-riscv64-gnu@0.117.0': + resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-transform/binding-linux-riscv64-musl@0.117.0': + resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-transform/binding-linux-s390x-gnu@0.117.0': + resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-transform/binding-linux-x64-gnu@0.117.0': + resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-linux-x64-musl@0.117.0': + resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-openharmony-arm64@0.117.0': + resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-transform/binding-wasm32-wasi@0.117.0': + resolution: {integrity: sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-transform/binding-win32-arm64-msvc@0.117.0': + resolution: {integrity: sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-transform/binding-win32-ia32-msvc@0.117.0': + resolution: {integrity: sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-transform/binding-win32-x64-msvc@0.117.0': + resolution: {integrity: sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-wasm@2.3.0': resolution: {integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==} engines: {node: '>= 10.0.0'} bundledDependencies: @@ -4218,6 +4968,13 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} + '@phc/format@1.0.0': + resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} + engines: {node: '>=10'} + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -4228,6 +4985,9 @@ packages: '@poppanator/http-constants@1.1.1': resolution: {integrity: sha512-TPPmQ2OsZDsQZqU80XEEO47E3zex/s1x4DYPoD0AXreW1SUqGvJQY71GTa2AiI0PE2OF2lHf18TGAVOck0Ic0w==} + '@poppinss/cliui@6.8.1': + resolution: {integrity: sha512-o/ssbwr+r6woG65rk9eFHnn9dVUphZr/Rk+4+05ENVMBWYpYhTJGdE9RobTG5JLFubvO4gWIyFeNlC+I4EM6eA==} + '@poppinss/colors@4.1.6': resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} @@ -4240,6 +5000,44 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@poppinss/hooks@7.3.0': + resolution: {integrity: sha512-/H35z/bWqHg7085QOxWUDYMidx6Kl6b8kIyzIXlRYzWvsk1xm9hQOlXWdWEYch+Gmn8eL7tThx59MBj8BLxDrQ==} + + '@poppinss/macroable@1.1.2': + resolution: {integrity: sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==} + + '@poppinss/matchit@3.2.0': + resolution: {integrity: sha512-9SoMICN+LMO7ZtMj2ja8N7RHlC4mmuv5WwIBXWjabMd2SyXE1dIydh29exlgm+dGMP84PjwvfJH1TmWL4qz1og==} + + '@poppinss/middleware@3.2.7': + resolution: {integrity: sha512-MZC0Z97ozSz+PpfyxUPUy/ImuthpqvBbY7qku7f4Q2maHz+2uXfchfO8OggXLS6zEJ078l+jpAHZ2rDIRdjeVg==} + + '@poppinss/multiparty@3.0.0': + resolution: {integrity: sha512-z9jchUzsv7E+7sa4tWHb0+95Byx7w0ydlPGxg3nzyb7h3QlRdeW8/QkU9SexUY4lsT12do93AfNBAhSuOoVqjA==} + + '@poppinss/object-builder@1.1.0': + resolution: {integrity: sha512-FOrOq52l7u8goR5yncX14+k+Ewi5djnrt1JwXeS/FvnwAPOiveFhiczCDuvXdssAwamtrV2hp5Rw9v+n2T7hQg==} + engines: {node: '>=20.6.0'} + + '@poppinss/prompts@3.1.6': + resolution: {integrity: sha512-cKHfkID6b3wl1kbHJJRC/pznQ3KnRVydyk7CE38NfTV3VS45BDYCxeZZ7bfDin71qMzITh18lKnu8iuLxBngHA==} + + '@poppinss/qs@6.15.0': + resolution: {integrity: sha512-QzfMhxrRB5EPeGz0l8hTwKZ5dFX6ed0aETGbuD369StCO8Ad3SW4wWBYamOK5IKeM/dfOeKaCwUZPTnGcj+jKg==} + engines: {node: '>=0.6'} + + '@poppinss/string@1.7.1': + resolution: {integrity: sha512-OrLzv/nGDU6l6dLXIQHe8nbNSWWfuSbpB/TW5nRpZFf49CLuQlIHlSPN9IdSUv2vG+59yGM6LoibsaHn8B8mDw==} + + '@poppinss/types@1.2.1': + resolution: {integrity: sha512-qUYnzl0m9HJTWsXtr8Xo7CwDx6wcjrvo14bOVbIMIlKJCzKrm3LX55dRTDr1/x4PpSvKVgmxvC6Ly2YiqXKOvQ==} + + '@poppinss/utils@7.0.1': + resolution: {integrity: sha512-mveSvLI2YPC114mK5HCuSYfUtjpClf1wHG1VCqZJCp4U2ypPhIt62Iku5urh0kPAFvnvCVHx2bXBSH14qMTOlQ==} + + '@poppinss/validator-lite@2.1.2': + resolution: {integrity: sha512-UhSG1ouT6r67VbEFHK/8ax3EMZYHioew9PqGmEZjV41G15aPZi6cyhXtBVvF9xqkHMflA5V680k7bQzV0kfD5w==} + '@prisma/instrumentation@5.22.0': resolution: {integrity: sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q==} @@ -4368,6 +5166,9 @@ packages: '@rolldown/pluginutils@1.0.0-rc.12': resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} engines: {node: '>=20.19.0'} @@ -4767,11 +5568,17 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@simple-git/args-pathspec@1.0.2': + resolution: {integrity: sha512-nEFVejViHUoL8wU8GTcwqrvqfUG40S5ts6S4fr1u1Ki5CklXlRDYThPVA/qurTmCYFGnaX3XpVUmICLHdvhLaA==} + + '@simple-git/argv-parser@1.0.3': + resolution: {integrity: sha512-NMKv9sJcSN2VvnPT9Ja7eKfGy8Q8mMFLwPTCcuZMtv3+mYcLIZflg31S/tp2XCCyiY7YAx6cgBHQ0fwA2fWHpQ==} + '@sinclair/typebox@0.34.38': resolution: {integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==} - '@sindresorhus/is@7.1.1': - resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} '@sindresorhus/merge-streams@4.0.0': @@ -4788,9 +5595,6 @@ packages: peerDependencies: vinxi: ^0.5.7 - '@speed-highlight/core@1.2.12': - resolution: {integrity: sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==} - '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} @@ -5044,6 +5848,10 @@ packages: resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} engines: {node: '>=18'} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} + engines: {node: '>=18'} + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -5221,6 +6029,9 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/he@1.2.3': + resolution: {integrity: sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==} + '@types/http-assert@1.5.6': resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} @@ -5296,6 +6107,9 @@ packages: '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + '@types/pluralize@0.0.33': + resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} + '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -5569,6 +6383,11 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@unhead/vue@2.1.13': + resolution: {integrity: sha512-HYy0shaHRnLNW9r85gppO8IiGz0ONWVV3zGdlT8CQ0tbTwixznJCIiyqV4BSV1aIF1jJIye0pd1p/k6Eab8Z/A==} + peerDependencies: + vue: '>=3.5.18' + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -5683,6 +6502,13 @@ packages: peerDependencies: vinxi: ^0.5.5 + '@vitejs/plugin-vue-jsx@5.1.5': + resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.0.0 + '@vitejs/plugin-vue@5.2.4': resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -5690,6 +6516,13 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 + '@vitejs/plugin-vue@6.0.5': + resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -5725,30 +6558,84 @@ packages: '@volar/source-map@2.4.15': resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==} + '@vue-macros/common@3.1.2': + resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} + engines: {node: '>=20.19.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/babel-helper-vue-transform-on@2.0.1': + resolution: {integrity: sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==} + + '@vue/babel-plugin-jsx@2.0.1': + resolution: {integrity: sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@2.0.1': + resolution: {integrity: sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@vue/compiler-core@3.5.17': resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==} + '@vue/compiler-core@3.5.32': + resolution: {integrity: sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==} + '@vue/compiler-dom@3.5.17': resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==} + '@vue/compiler-dom@3.5.32': + resolution: {integrity: sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==} + '@vue/compiler-sfc@3.5.17': resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==} + '@vue/compiler-sfc@3.5.32': + resolution: {integrity: sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==} + '@vue/compiler-ssr@3.5.17': resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==} + '@vue/compiler-ssr@3.5.32': + resolution: {integrity: sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==} + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/devtools-api@7.7.7': resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} + '@vue/devtools-api@8.1.1': + resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==} + + '@vue/devtools-core@8.1.1': + resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==} + peerDependencies: + vue: ^3.0.0 + '@vue/devtools-kit@7.7.7': resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} + '@vue/devtools-kit@8.1.1': + resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==} + '@vue/devtools-shared@7.7.7': resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} + '@vue/devtools-shared@8.1.1': + resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==} + '@vue/language-core@2.1.10': resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==} peerDependencies: @@ -5760,20 +6647,37 @@ packages: '@vue/reactivity@3.5.17': resolution: {integrity: sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==} + '@vue/reactivity@3.5.32': + resolution: {integrity: sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==} + '@vue/runtime-core@3.5.17': resolution: {integrity: sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==} + '@vue/runtime-core@3.5.32': + resolution: {integrity: sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==} + '@vue/runtime-dom@3.5.17': resolution: {integrity: sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==} + '@vue/runtime-dom@3.5.32': + resolution: {integrity: sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==} + '@vue/server-renderer@3.5.17': resolution: {integrity: sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==} peerDependencies: vue: 3.5.17 + '@vue/server-renderer@3.5.32': + resolution: {integrity: sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==} + peerDependencies: + vue: 3.5.32 + '@vue/shared@3.5.17': resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} + '@vue/shared@3.5.32': + resolution: {integrity: sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==} + '@vueuse/core@12.8.2': resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} @@ -5917,20 +6821,24 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansis@4.2.0: @@ -6021,6 +6929,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + ast-kit@3.0.0-beta.1: resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} engines: {node: '>=20.19.0'} @@ -6032,6 +6944,10 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} + ast-walker-scope@0.8.3: + resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} + engines: {node: '>=20.19.0'} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true @@ -6055,6 +6971,13 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + autoprefixer@10.4.27: + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -6175,6 +7098,9 @@ packages: birpc@2.4.0: resolution: {integrity: sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==} + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} @@ -6244,6 +7170,10 @@ packages: bun-types@1.3.3: resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -6312,6 +7242,9 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + caniuse-lite@1.0.30001727: resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} @@ -6322,6 +7255,10 @@ packages: resolution: {integrity: sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==} hasBin: true + case-anything@3.1.2: + resolution: {integrity: sha512-wljhAjDDIv/hM2FzgJnYQg90AWmZMNtESCjTeLH680qTzdo0nErlCxOmgzgX4ZsZAtIvqHyD87ES8QyriXB+BQ==} + engines: {node: '>=18'} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -6349,6 +7286,10 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + check-disk-space@3.4.0: + resolution: {integrity: sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==} + engines: {node: '>=16'} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -6394,6 +7335,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-boxes@4.0.1: + resolution: {integrity: sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==} + engines: {node: '>=18.20 <19 || >=20.10'} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -6411,6 +7356,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -6499,6 +7448,9 @@ packages: confbox@0.2.2: resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -6507,6 +7459,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -6517,6 +7473,9 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} + cookie-es@2.0.0: resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} @@ -6580,6 +7539,12 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + css-declaration-sorter@7.4.0: + resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -6600,6 +7565,24 @@ packages: engines: {node: '>=4'} hasBin: true + cssnano-preset-default@7.0.12: + resolution: {integrity: sha512-B3Eoouzw/sl2zANI0AL9KbacummJTCww+fkHaDBMZad/xuVx8bUduPLly6hKVQAlrmvYkS1jB1CVQEKm3gn0AA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + cssnano-utils@5.0.1: + resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + cssnano@7.1.4: + resolution: {integrity: sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -6607,6 +7590,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + cytoscape-cose-bilkent@4.1.0: resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: @@ -6876,6 +7862,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -6884,6 +7878,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -6891,6 +7889,9 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} @@ -7022,6 +8023,10 @@ packages: file-type: '>= 20.0.0' typescript: '>= 5.0.0' + emittery@1.2.1: + resolution: {integrity: sha512-sFz64DCRjirhwHLxofFqxYQm6DCp6o0Ix7jwKQvuCHPn4GMRZNuBZyLPu9Ccmk/QSCAMZt6FOUqA8JZCQvA9fw==} + engines: {node: '>=14.16'} + emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -7066,12 +8071,23 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + errx@0.1.0: + resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==} + es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} @@ -7091,6 +8107,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -7386,9 +8405,6 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -7429,12 +8445,29 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-npm-meta@1.4.2: + resolution: {integrity: sha512-XXyd9d3ie/JeIIjm6WeKalvapGGFI4ShAjPJM78vgUFYzoEsuNSjvvVTuht0XZcwbVdOnEEGzhxwguRbxkIcDg==} + hasBin: true + fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + fast-string-truncated-width@1.2.1: + resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} + + fast-string-width@1.1.0: + resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-wrap-ansi@0.1.6: + resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastify-plugin@5.1.0: resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} @@ -7483,6 +8516,10 @@ packages: resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} engines: {node: '>=20'} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -7564,6 +8601,9 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -7590,6 +8630,13 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + fuse.js@7.3.0: + resolution: {integrity: sha512-plz8RVjfcDedTGfVngWH1jmJvBvAwi1v2jecfDerbEnMcmOYUEEwKFTHbNoCiYyzaK2Ws8lABkTCcRSqCY1q4w==} + engines: {node: '>=10'} + + fzf@0.5.2: + resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} + generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} @@ -7605,6 +8652,10 @@ packages: resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -7644,6 +8695,10 @@ packages: resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} hasBin: true + giget@3.2.0: + resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==} + hasBin: true + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -7660,6 +8715,7 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob 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 hasBin: true glob@13.0.6: @@ -7668,7 +8724,11 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob 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 + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -7716,6 +8776,9 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + h3@1.15.11: + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + h3@1.15.3: resolution: {integrity: sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==} @@ -7876,6 +8939,9 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + image-meta@0.2.2: + resolution: {integrity: sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==} + image-q@4.0.0: resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} @@ -7896,10 +8962,17 @@ packages: resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} engines: {node: '>=20.19.0'} + impound@1.1.5: + resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflation@2.1.0: + resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} + engines: {node: '>= 0.8.0'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -7907,6 +8980,10 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inquirer-toggle@1.0.1: resolution: {integrity: sha512-0cReq29SpyO4JnoVmGBZJPoBv8sBzsGXw3MDjNxilOzhAFxIvC8mOFj34bCMtlFYKfkBKNYVLmmnP/qmrVuVMg==} @@ -8017,6 +9094,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + is-generator-function@1.1.0: resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} @@ -8030,6 +9111,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -8159,6 +9244,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} + isomorphic-fetch@3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} @@ -8181,10 +9270,6 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} - hasBin: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -8249,6 +9334,9 @@ packages: resolution: {integrity: sha512-pjMIdkXfC1T2wrX9B9i2uXhGdyCmgec3qgMht+TDj+S0qX3bjWMQUfL7NeqEhuRTi8G5ESzmL9uGlST7nzSEWg==} engines: {node: '>=18'} + jsonschema@1.5.0: + resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -8322,6 +9410,9 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + launch-editor@2.13.2: + resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} + layout-base@1.0.2: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} @@ -8425,10 +9516,6 @@ packages: resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==} engines: {node: '>=13.2.0'} - local-pkg@1.1.1: - resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} - engines: {node: '>=14'} - local-pkg@1.1.2: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} @@ -8452,9 +9539,15 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} @@ -8462,6 +9555,10 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + log-update@7.2.0: + resolution: {integrity: sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==} + engines: {node: '>=20'} + long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -8493,6 +9590,13 @@ packages: resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + magic-regexp@0.10.0: + resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} + + magic-string-ast@1.0.3: + resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} + engines: {node: '>=20.19.0'} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -8790,10 +9894,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -8813,12 +9913,12 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - mlly@1.8.1: resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + mocked-exports@0.1.1: + resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==} + module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -8869,6 +9969,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanotar@0.3.0: + resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==} + napi-postinstall@0.3.2: resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -8982,9 +10085,6 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-mock-http@1.0.1: - resolution: {integrity: sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==} - node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} @@ -9007,9 +10107,26 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nuxt@4.4.2: + resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + '@types/node': '>=18.12.0' + peerDependenciesMeta: + '@parcel/watcher': + optional: true + '@types/node': + optional: true + nypm@0.6.5: resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} engines: {node: '>=18'} @@ -9057,12 +10174,19 @@ packages: ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + ofetch@2.0.0-alpha.3: + resolution: {integrity: sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==} + ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + on-change@6.0.2: + resolution: {integrity: sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==} + engines: {node: '>=20'} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -9097,6 +10221,10 @@ packages: only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -9116,6 +10244,23 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + oxc-minify@0.117.0: + resolution: {integrity: sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-parser@0.117.0: + resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-transform@0.117.0: + resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-walker@0.7.0: + resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==} + peerDependencies: + oxc-parser: '>=0.98.0' + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -9158,6 +10303,10 @@ packages: parse-bmfont-xml@1.1.6: resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==} + parse-imports@3.0.0: + resolution: {integrity: sha512-IwiqoJANa4O6M76LBWEvoS2iPIUqBOnKG1lV3/J0oVM6V2XjED+mYAXedEMX5xUglVjfGpZOfaEyuOUjBuUE4g==} + engines: {node: '>= 22'} + parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} @@ -9284,9 +10433,16 @@ packages: pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + hasBin: true + pino@9.12.0: resolution: {integrity: sha512-0Gd0OezGvqtqMwgYxpL7P0pSHHzTJ0Lx992h+mNlMtRVfNnqweWmf0JmRWk5gJzHalyd2mxTzKjhiNbGS2Ztfw==} hasBin: true @@ -9306,9 +10462,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.2.0: - resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} - pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} @@ -9316,6 +10469,10 @@ packages: resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} engines: {node: '>=16.0.0'} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + pngjs@3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} @@ -9338,6 +10495,48 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postcss-calc@10.1.1: + resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} + engines: {node: ^18.12 || ^20.9 || >=22.0} + peerDependencies: + postcss: ^8.4.38 + + postcss-colormin@7.0.7: + resolution: {integrity: sha512-sBQ628lSj3VQpDquQel8Pen5mmjFPsO4pH9lDLaHB1AVkMRHtkl0pRB5DCWznc9upWsxint/kV+AveSj7W1tew==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-convert-values@7.0.9: + resolution: {integrity: sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-comments@7.0.6: + resolution: {integrity: sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-duplicates@7.0.2: + resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-empty@7.0.1: + resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-overridden@7.0.1: + resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -9374,12 +10573,120 @@ packages: ts-node: optional: true + postcss-merge-longhand@7.0.5: + resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-merge-rules@7.0.8: + resolution: {integrity: sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-font-values@7.0.1: + resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-gradients@7.0.2: + resolution: {integrity: sha512-fVY3AB8Um7SJR5usHqTY2Ngf9qh8IRN+FFzrBP0ONJy6yYXsP7xyjK2BvSAIrpgs1cST+H91V0TXi3diHLYJtw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-params@7.0.6: + resolution: {integrity: sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-selectors@7.0.6: + resolution: {integrity: sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 + postcss-normalize-charset@7.0.1: + resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-display-values@7.0.1: + resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-positions@7.0.1: + resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-repeat-style@7.0.1: + resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-string@7.0.1: + resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-timing-functions@7.0.1: + resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-unicode@7.0.6: + resolution: {integrity: sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-url@7.0.1: + resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-whitespace@7.0.1: + resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-ordered-values@7.0.2: + resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-reduce-initial@7.0.6: + resolution: {integrity: sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-reduce-transforms@7.0.1: + resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + postcss-safe-parser@7.0.1: resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} engines: {node: '>=18.0'} @@ -9400,6 +10707,22 @@ packages: resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-svgo@7.1.1: + resolution: {integrity: sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==} + engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + peerDependencies: + postcss: ^8.4.32 + + postcss-unique-selectors@7.0.5: + resolution: {integrity: sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -9411,6 +10734,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.9: + resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -9514,6 +10841,10 @@ packages: resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} engines: {node: '>=20'} + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + printable-characters@1.0.42: resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} @@ -9607,9 +10938,16 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + rc9@3.0.1: + resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} + rdf-canonize@5.0.0: resolution: {integrity: sha512-g8OUrgMXAR9ys/ZuJVfBr05sPPoMA7nHIVs8VEvg9QwM5W4GR2qSFEEHjsyHF1eWlBaf8Ev40WNjQFQ+nJTO3w==} engines: {node: '>=18'} @@ -9705,6 +11043,10 @@ packages: regex@6.0.1: resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -9868,9 +11210,16 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rou3@0.8.1: + resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} + roughjs@4.6.6: resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-async@4.0.6: resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} engines: {node: '>=0.12.0'} @@ -9919,6 +11268,10 @@ packages: sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + scheduler@0.25.0-rc-7771d3a7-20240827: resolution: {integrity: sha512-n4nHmAoerbIOSrH24w0+fcdCUwQ4Npm7yXfsrn09FL01OWIaxpuo4P0rj3qPyLFgsJDbn18sWvLVB/e/KPnR+A==} @@ -9973,6 +11326,10 @@ packages: resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} engines: {node: '>=10'} + seroval@1.5.2: + resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==} + engines: {node: '>=10'} + serve-placeholder@2.0.2: resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==} @@ -10024,6 +11381,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + shiki@1.29.2: resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} @@ -10059,6 +11420,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-git@3.35.2: + resolution: {integrity: sha512-ZMjl06lzTm1EScxEGuM6+mEX+NQd14h/B3x0vWU+YOXAMF8sicyi1K4cjTfj5is+35ChJEHDl1EjypzYFWH2FA==} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -10070,6 +11434,10 @@ packages: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -10081,9 +11449,20 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + slow-redact@0.3.0: resolution: {integrity: sha512-cf723wn9JeRIYP9tdtd86GuqoR5937u64Io+CYjlm2i7jvu7g0H+Cp0l0ShAf/4ZL+ISUTVT+8Qzz7RZmp9FjA==} + slugify@1.6.9: + resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==} + engines: {node: '>=8.0.0'} + smob@1.6.1: resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==} engines: {node: '>=20.0.0'} @@ -10131,6 +11510,10 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} + split-lines@3.0.0: + resolution: {integrity: sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==} + engines: {node: '>=12'} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -10142,6 +11525,11 @@ packages: resolution: {integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==} engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} + srvx@0.11.15: + resolution: {integrity: sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==} + engines: {node: '>=20.16.0'} + hasBin: true + srvx@0.8.16: resolution: {integrity: sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ==} engines: {node: '>=20.16.0'} @@ -10177,6 +11565,9 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} @@ -10208,6 +11599,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -10248,6 +11643,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom-string@1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} @@ -10271,6 +11670,10 @@ packages: resolution: {integrity: sha512-or9w505RhhY66+uoe5YOC5QO/bRuATaoim3XTh+pGKx5VMWi/HDhMKuCjDLsLJouU2zg9Hf1nLPcNW7IHv80kQ==} engines: {node: '>=18'} + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + strtok3@6.3.0: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} @@ -10279,6 +11682,9 @@ packages: resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} engines: {node: '>=16'} + structured-clone-es@2.0.0: + resolution: {integrity: sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==} + structured-field-values@2.0.4: resolution: {integrity: sha512-5zpJXYLPwW3WYUD/D58tQjIBs10l3Yx64jZfcKGs/RH79E2t9Xm/b9+ydwdMNVSksnsIY+HR/2IlQmgo0AcTAg==} @@ -10308,6 +11714,12 @@ packages: babel-plugin-macros: optional: true + stylehacks@7.0.8: + resolution: {integrity: sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} @@ -10358,6 +11770,11 @@ packages: engines: {node: '>=16'} hasBin: true + svgo@4.0.1: + resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} + engines: {node: '>=16'} + hasBin: true + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -10390,10 +11807,19 @@ packages: tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} 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 teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + tempura@0.4.1: + resolution: {integrity: sha512-NQ4Cs23jM6UUp3CcS5vjmyjTC6dtA5EsflBG2cyG0wZvP65AV26tJ920MGvTRYIImCY13RBpOhc7q4/pu+FG5A==} + engines: {node: '>=10'} + + terminal-size@4.0.1: + resolution: {integrity: sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==} + engines: {node: '>=18'} + terracotta@1.1.0: resolution: {integrity: sha512-kfQciWUBUBgYkXu7gh3CK3FAJng/iqZslAaY08C+k1Hdx17aVEpcFFb/WPaysxAfcupNH3y53s/pc53xxZauww==} engines: {node: '>=10'} @@ -10421,6 +11847,10 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + thread-stream@4.0.0: + resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==} + engines: {node: '>=20'} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -10430,6 +11860,10 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyclip@0.1.12: + resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} + engines: {node: ^16.14.0 || >= 17.3.0} + tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} @@ -10464,6 +11898,10 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} + tmp-cache@1.1.0: + resolution: {integrity: sha512-j040fkL/x+XAZQ9K3bKGEPwgYhOZNBQLa3NXEADUiuno9C+3N2JJA4bVPDREixp604G3/vTXWA3DIPpA9lu1RQ==} + engines: {node: '>=6'} + to-data-view@1.1.0: resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} @@ -10491,6 +11929,10 @@ packages: resolution: {integrity: sha512-IKJ6EzuPPWtKtEIEPpIdXv9j5j2LGJEYk0CKY2efgKoYKLBiZdh6iQkLVBow/CB3phyWAWCyk+bZeaimJn6uRQ==} engines: {node: '>=14.16'} + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + tokenx@1.1.0: resolution: {integrity: sha512-KCjtiC2niPwTSuz4ktM82Ki5bjqBwYpssiHDsGr5BpejN/B3ksacRvrsdoxljdMIh2nCX78alnDkeemBmYUmTA==} @@ -10632,6 +12074,9 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} + type-level-regexp@0.1.17: + resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -10673,9 +12118,6 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} @@ -10736,6 +12178,13 @@ packages: unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + unhead@2.1.13: + resolution: {integrity: sha512-jO9M1sI6b2h/1KpIu4Jeu+ptumLmUKboRRLxys5pYHFeT+lqTzfNHbYUX9bxVDhC1FBszAGuWcUVlmvIPsah8Q==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unicorn-magic@0.4.0: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} @@ -10750,6 +12199,10 @@ packages: resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==} engines: {node: '>=18.12.0'} + unimport@6.0.2: + resolution: {integrity: sha512-ZSOkrDw380w+KIPniY3smyXh2h7H9v2MNr9zejDuh239o5sdea44DRAYrv+rfUi2QGT186P2h0GPGKvy8avQ5g==} + engines: {node: '>=18.12.0'} + unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} @@ -10792,6 +12245,13 @@ packages: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + unrouting@0.1.7: + resolution: {integrity: sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ==} + unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} @@ -10942,11 +12402,73 @@ packages: resolution: {integrity: sha512-82Qm+EG/b2PRFBvXBbz1lgWBGcd9totIL6SJhnrZYfakjloTVG9+5l6gfO6dbCCtztm5pqWFzLY0qpZ3H3ww/w==} hasBin: true + vite-dev-rpc@1.1.0: + resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 + + vite-hot-client@2.1.0: + resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + vite-node@3.2.4: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-node@5.3.0: + resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + vite-plugin-checker@0.12.0: + resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==} + engines: {node: '>=16.11'} + peerDependencies: + '@biomejs/biome': '>=1.7' + eslint: '>=9.39.1' + meow: ^13.2.0 + optionator: ^0.9.4 + oxlint: '>=1' + stylelint: '>=16' + typescript: '*' + vite: '>=5.4.21' + vls: '*' + vti: '*' + vue-tsc: ~2.2.10 || ^3.0.0 + peerDependenciesMeta: + '@biomejs/biome': + optional: true + eslint: + optional: true + meow: + optional: true + optionator: + optional: true + oxlint: + optional: true + stylelint: + optional: true + typescript: + optional: true + vls: + optional: true + vti: + optional: true + vue-tsc: + optional: true + + vite-plugin-inspect@11.3.3: + resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + vite-plugin-solid@2.11.10: resolution: {integrity: sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==} peerDependencies: @@ -10957,6 +12479,12 @@ packages: '@testing-library/jest-dom': optional: true + vite-plugin-vue-tracer@1.3.0: + resolution: {integrity: sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==} + peerDependencies: + vite: ^6.0.0 || ^7.0.0 + vue: ^3.5.0 + vite@5.4.19: resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10997,10 +12525,50 @@ packages: jiti: '>=1.21.0' less: '*' lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + 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 + + vite@7.1.3: + resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} + 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 @@ -11028,8 +12596,8 @@ packages: yaml: optional: true - vite@7.1.3: - resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -11151,11 +12719,40 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + + vue-bundle-renderer@2.2.0: + resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==} + + vue-devtools-stub@0.1.0: + resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==} + vue-resize@2.0.0-alpha.1: resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} peerDependencies: vue: ^3.0.0 + vue-router@4.6.4: + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} + peerDependencies: + vue: ^3.5.0 + + vue-router@5.0.4: + resolution: {integrity: sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==} + peerDependencies: + '@pinia/colada': '>=0.21.2' + '@vue/compiler-sfc': ^3.5.17 + pinia: ^3.0.4 + vue: ^3.5.0 + peerDependenciesMeta: + '@pinia/colada': + optional: true + '@vue/compiler-sfc': + optional: true + pinia: + optional: true + vue@3.5.17: resolution: {integrity: sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==} peerDependencies: @@ -11164,6 +12761,14 @@ packages: typescript: optional: true + vue@3.5.32: + resolution: {integrity: sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + wasm-feature-detect@1.8.0: resolution: {integrity: sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==} @@ -11212,6 +12817,11 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + which@6.0.1: + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -11255,6 +12865,10 @@ packages: '@cloudflare/workers-types': optional: true + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -11286,6 +12900,22 @@ packages: utf-8-validate: optional: true + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + x-forwarded-fetch@0.2.0: resolution: {integrity: sha512-2qsguQrLHFvP3/rnvxSSaw3DlK9eOOx9iyL+Qv+1YH8jzq6nbRk+P6gyFFNdWanyusyCHuE3/CnX3+gmLeYEeg==} @@ -11330,6 +12960,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -11338,6 +12973,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -11414,6 +13053,153 @@ packages: snapshots: + '@adonisjs/ace@14.1.0(youch@4.1.0)': + dependencies: + '@poppinss/cliui': 6.8.1 + '@poppinss/hooks': 7.3.0 + '@poppinss/macroable': 1.1.2 + '@poppinss/prompts': 3.1.6 + '@poppinss/utils': 7.0.1 + fastest-levenshtein: 1.0.16 + jsonschema: 1.5.0 + string-width: 8.2.0 + yargs-parser: 22.0.0 + youch: 4.1.0 + + '@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0)': + dependencies: + '@adonisjs/config': 6.1.0 + '@adonisjs/fold': 11.0.0 + '@poppinss/hooks': 7.3.0 + '@poppinss/macroable': 1.1.2 + '@poppinss/utils': 7.0.1 + glob-parent: 6.0.2 + tempura: 0.4.1 + + '@adonisjs/bodyparser@11.0.1(@adonisjs/http-server@8.1.2(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/events@10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0)(@adonisjs/logger@7.1.1)(@boringnode/encryption@1.0.0)(youch@4.1.0))': + dependencies: + '@adonisjs/http-server': 8.1.2(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/events@10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0)(@adonisjs/logger@7.1.1)(@boringnode/encryption@1.0.0)(youch@4.1.0) + '@poppinss/macroable': 1.1.2 + '@poppinss/middleware': 3.2.7 + '@poppinss/multiparty': 3.0.0 + '@poppinss/qs': 6.15.0 + '@poppinss/utils': 7.0.1 + file-type: 21.3.4 + inflation: 2.1.0 + media-typer: 1.1.0 + raw-body: 3.0.2 + transitivePeerDependencies: + - supports-color + + '@adonisjs/config@6.1.0': + dependencies: + '@poppinss/utils': 7.0.1 + + '@adonisjs/core@7.3.0(youch@4.1.0)': + dependencies: + '@adonisjs/ace': 14.1.0(youch@4.1.0) + '@adonisjs/application': 9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0) + '@adonisjs/bodyparser': 11.0.1(@adonisjs/http-server@8.1.2(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/events@10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0)(@adonisjs/logger@7.1.1)(@boringnode/encryption@1.0.0)(youch@4.1.0)) + '@adonisjs/config': 6.1.0 + '@adonisjs/env': 7.0.0 + '@adonisjs/events': 10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0) + '@adonisjs/fold': 11.0.0 + '@adonisjs/hash': 10.1.0 + '@adonisjs/health': 3.1.0 + '@adonisjs/http-server': 8.1.2(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/events@10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0)(@adonisjs/logger@7.1.1)(@boringnode/encryption@1.0.0)(youch@4.1.0) + '@adonisjs/http-transformers': 2.3.1(@adonisjs/fold@11.0.0) + '@adonisjs/logger': 7.1.1 + '@adonisjs/repl': 5.0.0 + '@boringnode/encryption': 1.0.0 + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.7.0 + '@poppinss/macroable': 1.1.2 + '@poppinss/utils': 7.0.1 + '@sindresorhus/is': 7.2.0 + '@types/he': 1.2.3 + error-stack-parser-es: 1.0.5 + he: 1.2.0 + pretty-hrtime: 1.0.3 + string-width: 8.2.0 + optionalDependencies: + youch: 4.1.0 + transitivePeerDependencies: + - supports-color + + '@adonisjs/env@7.0.0': + dependencies: + '@poppinss/utils': 7.0.1 + '@poppinss/validator-lite': 2.1.2 + split-lines: 3.0.0 + + '@adonisjs/events@10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0)': + dependencies: + '@adonisjs/application': 9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0) + '@adonisjs/fold': 11.0.0 + '@poppinss/utils': 7.0.1 + '@sindresorhus/is': 7.2.0 + emittery: 1.2.1 + + '@adonisjs/fold@11.0.0': + dependencies: + '@poppinss/utils': 7.0.1 + parse-imports: 3.0.0 + + '@adonisjs/hash@10.1.0': + dependencies: + '@phc/format': 1.0.0 + '@poppinss/utils': 7.0.1 + + '@adonisjs/health@3.1.0': + dependencies: + '@poppinss/utils': 7.0.1 + check-disk-space: 3.4.0 + + '@adonisjs/http-server@8.1.2(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/events@10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0)(@adonisjs/logger@7.1.1)(@boringnode/encryption@1.0.0)(youch@4.1.0)': + dependencies: + '@adonisjs/application': 9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0) + '@adonisjs/events': 10.2.0(@adonisjs/application@9.0.0(@adonisjs/config@6.1.0)(@adonisjs/fold@11.0.0))(@adonisjs/fold@11.0.0) + '@adonisjs/fold': 11.0.0 + '@adonisjs/logger': 7.1.1 + '@boringnode/encryption': 1.0.0 + '@poppinss/macroable': 1.1.2 + '@poppinss/matchit': 3.2.0 + '@poppinss/middleware': 3.2.7 + '@poppinss/qs': 6.15.0 + '@poppinss/utils': 7.0.1 + '@sindresorhus/is': 7.2.0 + content-disposition: 1.1.0 + cookie-es: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + etag: 1.8.1 + fresh: 0.5.2 + mime-types: 3.0.2 + on-finished: 2.4.1 + proxy-addr: 2.0.7 + tmp-cache: 1.1.0 + type-is: 2.0.1 + vary: 1.1.2 + optionalDependencies: + youch: 4.1.0 + + '@adonisjs/http-transformers@2.3.1(@adonisjs/fold@11.0.0)': + dependencies: + '@adonisjs/fold': 11.0.0 + '@poppinss/exception': 1.2.3 + '@poppinss/types': 1.2.1 + + '@adonisjs/logger@7.1.1': + dependencies: + '@poppinss/utils': 7.0.1 + abstract-logging: 2.0.1 + pino: 10.3.1 + + '@adonisjs/repl@5.0.0': + dependencies: + '@poppinss/colors': 4.1.6 + string-width: 8.2.0 + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.29.0)(algoliasearch@5.29.0)(search-insights@2.17.3) @@ -11535,6 +13321,8 @@ snapshots: '@antfu/utils@8.1.1': {} + '@arr/every@1.0.1': {} + '@astrojs/compiler@2.13.1': {} '@astrojs/internal-helpers@0.7.5': {} @@ -11569,10 +13357,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@10.0.4(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1))': + '@astrojs/node@10.0.4(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3))': dependencies: '@astrojs/internal-helpers': 0.8.0 - astro: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1) + astro: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3) send: 1.2.1 server-destroy: 1.0.1 transitivePeerDependencies: @@ -11645,6 +13433,10 @@ snapshots: '@types/jsesc': 2.5.1 jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.0 @@ -11653,8 +13445,28 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.18.6': dependencies: '@babel/types': 7.29.0 @@ -11675,8 +13487,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-string-parser@8.0.0-rc.3': {} @@ -11696,6 +13528,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/parser@8.0.0-rc.3': dependencies: '@babel/types': 8.0.0-rc.3 @@ -11710,6 +13546,17 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -11738,6 +13585,17 @@ snapshots: '@babel/helper-string-parser': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.1)': + optionalDependencies: + cac: 6.7.14 + citty: 0.2.1 + + '@borewit/text-codec@0.2.2': {} + + '@boringnode/encryption@1.0.0': + dependencies: + '@poppinss/utils': 7.0.1 + '@braintree/sanitize-url@6.0.4': optional: true @@ -11768,6 +13626,18 @@ snapshots: '@chevrotain/utils@11.0.3': {} + '@clack/core@1.2.0': + dependencies: + fast-wrap-ansi: 0.1.6 + sisteransi: 1.0.5 + + '@clack/prompts@1.2.0': + dependencies: + '@clack/core': 1.2.0 + fast-string-width: 1.1.0 + fast-wrap-ansi: 0.1.6 + sisteransi: 1.0.5 + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 @@ -11786,7 +13656,7 @@ snapshots: optionalDependencies: workerd: 1.20250906.0 - '@cloudflare/vitest-pool-workers@0.8.71(@cloudflare/workers-types@4.20251221.0)(@vitest/runner@3.2.4)(@vitest/snapshot@3.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@cloudflare/vitest-pool-workers@0.8.71(@cloudflare/workers-types@4.20251221.0)(@vitest/runner@3.2.4)(@vitest/snapshot@3.2.4)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -11795,7 +13665,7 @@ snapshots: devalue: 5.6.1 miniflare: 4.20250906.0 semver: 7.7.2 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) wrangler: 4.35.0(@cloudflare/workers-types@4.20251221.0) zod: 3.22.3 transitivePeerDependencies: @@ -11835,6 +13705,8 @@ snapshots: '@cloudflare/workers-types@4.20251221.0': {} + '@colordx/core@5.0.3': {} + '@colors/colors@1.5.0': optional: true @@ -11842,9 +13714,9 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@deno/astro-adapter@0.3.2(@opentelemetry/api@1.9.0)(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1))': + '@deno/astro-adapter@0.3.2(@opentelemetry/api@1.9.0)(astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3))': dependencies: - astro: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1) + astro: 5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3) optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -11909,6 +13781,19 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' + '@dxup/nuxt@0.4.0(magicast@0.5.2)(typescript@5.9.3)': + dependencies: + '@dxup/unimport': 0.1.2 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + chokidar: 5.0.0 + pathe: 2.0.3 + tinyglobby: 0.2.15 + typescript: 5.9.3 + transitivePeerDependencies: + - magicast + + '@dxup/unimport@0.1.2': {} + '@emnapi/core@1.4.3': dependencies: '@emnapi/wasi-threads': 1.0.2 @@ -12395,8 +14280,8 @@ snapshots: debug: 4.4.3 globals: 15.15.0 kolorist: 1.8.0 - local-pkg: 1.1.1 - mlly: 1.7.4 + local-pkg: 1.1.2 + mlly: 1.8.1 transitivePeerDependencies: - supports-color @@ -12720,14 +14605,14 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@jimp/bmp@0.22.12(@jimp/custom@0.22.12)': dependencies: @@ -12978,6 +14863,11 @@ snapshots: '@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 + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -13007,6 +14897,14 @@ snapshots: '@jsr/std__path@1.1.0': {} + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + '@logtape/file@2.0.5(@logtape/logtape@2.0.5)': dependencies: '@logtape/logtape': 2.0.5 @@ -13168,19 +15066,291 @@ snapshots: '@noble/hashes@1.4.0': {} - '@nodelib/fs.scandir@2.1.5': + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@nuxt/cli@3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)': + dependencies: + '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.1) + '@clack/prompts': 1.2.0 + c12: 3.3.3(magicast@0.5.2) + citty: 0.2.1 + confbox: 0.2.4 + consola: 3.4.2 + debug: 4.4.3 + defu: 6.1.4 + exsolve: 1.0.8 + fuse.js: 7.3.0 + fzf: 0.5.2 + giget: 3.2.0 + jiti: 2.6.1 + listhen: 1.9.0 + nypm: 0.6.5 + ofetch: 1.5.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + scule: 1.3.0 + semver: 7.7.4 + srvx: 0.11.15 + std-env: 3.10.0 + tinyclip: 0.1.12 + tinyexec: 1.0.4 + ufo: 1.6.3 + youch: 4.1.0 + optionalDependencies: + '@nuxt/schema': 4.4.2 + transitivePeerDependencies: + - cac + - commander + - magicast + - supports-color + + '@nuxt/devalue@2.0.2': {} + + '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + execa: 8.0.1 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + transitivePeerDependencies: + - magicast + + '@nuxt/devtools-wizard@3.2.4': + dependencies: + '@clack/prompts': 1.2.0 + consola: 3.4.2 + diff: 8.0.3 + execa: 8.0.1 + magicast: 0.5.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + semver: 7.7.4 + + '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + '@nuxt/devtools-wizard': 3.2.4 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3)) + '@vue/devtools-kit': 8.1.1 + birpc: 4.0.0 + consola: 3.4.2 + destr: 2.0.5 + error-stack-parser-es: 1.0.5 + execa: 8.0.1 + fast-npm-meta: 1.4.2 + get-port-please: 3.2.0 + hookable: 6.1.0 + image-meta: 0.2.2 + is-installed-globally: 1.0.0 + launch-editor: 2.13.2 + local-pkg: 1.1.2 + magicast: 0.5.2 + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + semver: 7.7.4 + simple-git: 3.35.2 + sirv: 3.0.2 + structured-clone-es: 2.0.0 + tinyglobby: 0.2.15 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + which: 6.0.1 + ws: 8.20.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + - vue + + '@nuxt/kit@4.4.2(magicast@0.5.2)': + dependencies: + c12: 3.3.3(magicast@0.5.2) + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.8 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + mlly: 1.8.1 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.7.4 + tinyglobby: 0.2.15 + ufo: 1.6.3 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(typescript@5.9.3)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@nuxt/devalue': 2.0.2 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@unhead/vue': 2.1.13(vue@3.5.32(typescript@5.9.3)) + '@vue/shared': 3.5.32 + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + devalue: 5.6.3 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + h3: 1.15.11 + impound: 1.1.5 + klona: 2.0.6 + mocked-exports: 0.1.1 + nitropack: 2.13.1(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3) + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rou3: 0.8.1 + std-env: 4.0.0 + ufo: 1.6.3 + unctx: 2.5.0 + unstorage: 1.17.4(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0) + vue: 3.5.32(typescript@5.9.3) + vue-bundle-renderer: 2.2.0 + vue-devtools-stub: 0.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/core' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@libsql/client' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - db0 + - drizzle-orm + - encoding + - idb-keyval + - ioredis + - magicast + - mysql2 + - react-native-b4a + - rolldown + - sqlite3 + - supports-color + - typescript + - uploadthing + - xml2js - '@nodelib/fs.stat@2.0.5': {} + '@nuxt/schema@4.4.2': + dependencies: + '@vue/shared': 3.5.32 + defu: 6.1.4 + pathe: 2.0.3 + pkg-types: 2.3.0 + std-env: 4.0.0 - '@nodelib/fs.walk@1.2.8': + '@nuxt/telemetry@2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + citty: 0.2.1 + consola: 3.4.2 + ofetch: 2.0.0-alpha.3 + rc9: 3.0.1 + std-env: 4.0.0 - '@nolyfill/is-core-module@1.0.39': {} + '@nuxt/vite-builder@4.4.2(6665f5c81513a7b45d22969d069e1cae)': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@rollup/plugin-replace': 6.0.3(rollup@4.59.0) + '@vitejs/plugin-vue': 6.0.5(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + autoprefixer: 10.4.27(postcss@8.5.9) + consola: 3.4.2 + cssnano: 7.1.4(postcss@8.5.9) + defu: 6.1.4 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + get-port-please: 3.2.0 + jiti: 2.6.1 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.1 + mocked-exports: 0.1.1 + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3) + nypm: 0.6.5 + pathe: 2.0.3 + pkg-types: 2.3.0 + postcss: 8.5.9 + seroval: 1.5.2 + std-env: 4.0.0 + ufo: 1.6.3 + unenv: 2.0.0-rc.24 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + vue: 3.5.32(typescript@5.9.3) + vue-bundle-renderer: 2.2.0 + optionalDependencies: + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + rolldown: 1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + rollup-plugin-visualizer: 6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0) + transitivePeerDependencies: + - '@biomejs/biome' + - '@types/node' + - eslint + - less + - lightningcss + - magicast + - meow + - optionator + - oxlint + - rollup + - sass + - sass-embedded + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - vls + - vti + - vue-tsc + - yaml '@opentelemetry/api-logs@0.211.0': dependencies: @@ -13721,8 +15891,205 @@ snapshots: '@oslojs/encoding@1.1.0': {} + '@oxc-minify/binding-android-arm-eabi@0.117.0': + optional: true + + '@oxc-minify/binding-android-arm64@0.117.0': + optional: true + + '@oxc-minify/binding-darwin-arm64@0.117.0': + optional: true + + '@oxc-minify/binding-darwin-x64@0.117.0': + optional: true + + '@oxc-minify/binding-freebsd-x64@0.117.0': + optional: true + + '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0': + optional: true + + '@oxc-minify/binding-linux-arm-musleabihf@0.117.0': + optional: true + + '@oxc-minify/binding-linux-arm64-gnu@0.117.0': + optional: true + + '@oxc-minify/binding-linux-arm64-musl@0.117.0': + optional: true + + '@oxc-minify/binding-linux-ppc64-gnu@0.117.0': + optional: true + + '@oxc-minify/binding-linux-riscv64-gnu@0.117.0': + optional: true + + '@oxc-minify/binding-linux-riscv64-musl@0.117.0': + optional: true + + '@oxc-minify/binding-linux-s390x-gnu@0.117.0': + optional: true + + '@oxc-minify/binding-linux-x64-gnu@0.117.0': + optional: true + + '@oxc-minify/binding-linux-x64-musl@0.117.0': + optional: true + + '@oxc-minify/binding-openharmony-arm64@0.117.0': + optional: true + + '@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-minify/binding-win32-arm64-msvc@0.117.0': + optional: true + + '@oxc-minify/binding-win32-ia32-msvc@0.117.0': + optional: true + + '@oxc-minify/binding-win32-x64-msvc@0.117.0': + optional: true + + '@oxc-parser/binding-android-arm-eabi@0.117.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.117.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.117.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.117.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.117.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.117.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.117.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.117.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.117.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.117.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.117.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.117.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.117.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.117.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.117.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.117.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.117.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.117.0': + optional: true + + '@oxc-project/types@0.117.0': {} + '@oxc-project/types@0.122.0': {} + '@oxc-transform/binding-android-arm-eabi@0.117.0': + optional: true + + '@oxc-transform/binding-android-arm64@0.117.0': + optional: true + + '@oxc-transform/binding-darwin-arm64@0.117.0': + optional: true + + '@oxc-transform/binding-darwin-x64@0.117.0': + optional: true + + '@oxc-transform/binding-freebsd-x64@0.117.0': + optional: true + + '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0': + optional: true + + '@oxc-transform/binding-linux-arm-musleabihf@0.117.0': + optional: true + + '@oxc-transform/binding-linux-arm64-gnu@0.117.0': + optional: true + + '@oxc-transform/binding-linux-arm64-musl@0.117.0': + optional: true + + '@oxc-transform/binding-linux-ppc64-gnu@0.117.0': + optional: true + + '@oxc-transform/binding-linux-riscv64-gnu@0.117.0': + optional: true + + '@oxc-transform/binding-linux-riscv64-musl@0.117.0': + optional: true + + '@oxc-transform/binding-linux-s390x-gnu@0.117.0': + optional: true + + '@oxc-transform/binding-linux-x64-gnu@0.117.0': + optional: true + + '@oxc-transform/binding-linux-x64-musl@0.117.0': + optional: true + + '@oxc-transform/binding-openharmony-arm64@0.117.0': + optional: true + + '@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + '@oxc-transform/binding-win32-arm64-msvc@0.117.0': + optional: true + + '@oxc-transform/binding-win32-ia32-msvc@0.117.0': + optional: true + + '@oxc-transform/binding-win32-x64-msvc@0.117.0': + optional: true + '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -13793,6 +16160,10 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.6 '@parcel/watcher-win32-x64': 2.5.6 + '@phc/format@1.0.0': {} + + '@pinojs/redact@0.4.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -13800,6 +16171,18 @@ snapshots: '@poppanator/http-constants@1.1.1': {} + '@poppinss/cliui@6.8.1': + dependencies: + '@poppinss/colors': 4.1.6 + cli-boxes: 4.0.1 + cli-table3: 0.6.5 + cli-truncate: 5.2.0 + log-update: 7.2.0 + pretty-hrtime: 1.0.3 + string-width: 8.2.0 + supports-color: 10.2.2 + terminal-size: 4.0.1 + '@poppinss/colors@4.1.6': dependencies: kleur: 4.1.5 @@ -13807,17 +16190,61 @@ snapshots: '@poppinss/dumper@0.6.5': dependencies: '@poppinss/colors': 4.1.6 - '@sindresorhus/is': 7.1.1 + '@sindresorhus/is': 7.2.0 supports-color: 10.2.2 '@poppinss/dumper@0.7.0': dependencies: '@poppinss/colors': 4.1.6 - '@sindresorhus/is': 7.1.1 + '@sindresorhus/is': 7.2.0 supports-color: 10.2.2 '@poppinss/exception@1.2.3': {} + '@poppinss/hooks@7.3.0': {} + + '@poppinss/macroable@1.1.2': {} + + '@poppinss/matchit@3.2.0': + dependencies: + '@arr/every': 1.0.1 + + '@poppinss/middleware@3.2.7': {} + + '@poppinss/multiparty@3.0.0': + dependencies: + http-errors: 2.0.1 + + '@poppinss/object-builder@1.1.0': {} + + '@poppinss/prompts@3.1.6': + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/exception': 1.2.3 + '@poppinss/object-builder': 1.1.0 + enquirer: 2.4.1 + + '@poppinss/qs@6.15.0': {} + + '@poppinss/string@1.7.1': + dependencies: + '@types/pluralize': 0.0.33 + case-anything: 3.1.2 + pluralize: 8.0.0 + slugify: 1.6.9 + + '@poppinss/types@1.2.1': {} + + '@poppinss/utils@7.0.1': + dependencies: + '@poppinss/exception': 1.2.3 + '@poppinss/object-builder': 1.1.0 + '@poppinss/string': 1.7.1 + '@poppinss/types': 1.2.1 + flattie: 1.1.1 + + '@poppinss/validator-lite@2.1.2': {} + '@prisma/instrumentation@5.22.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -13905,6 +16332,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/pluginutils@1.0.0-rc.2': {} + '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': optionalDependencies: rollup: 4.59.0 @@ -14302,10 +16731,16 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@simple-git/args-pathspec@1.0.2': {} + + '@simple-git/argv-parser@1.0.3': + dependencies: + '@simple-git/args-pathspec': 1.0.2 + '@sinclair/typebox@0.34.38': optional: true - '@sindresorhus/is@7.1.1': {} + '@sindresorhus/is@7.2.0': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -14313,11 +16748,11 @@ snapshots: dependencies: solid-js: 1.9.11 - '@solidjs/start@1.3.2(solid-js@1.9.11)(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@solidjs/start@1.3.2(solid-js@1.9.11)(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) cookie-es: 2.0.0 defu: 6.1.4 error-stack-parser: 2.1.4 @@ -14329,16 +16764,14 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.1.0(solid-js@1.9.11) tinyglobby: 0.2.15 - vinxi: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) - vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + vinxi: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js - supports-color - vite - '@speed-highlight/core@1.2.12': {} - '@speed-highlight/core@1.2.14': {} '@standard-schema/spec@1.0.0': {} @@ -14347,15 +16780,36 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))': + '@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))': + dependencies: + '@sveltejs/kit': 2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + + '@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: - '@sveltejs/kit': 2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 0.6.0 + devalue: 5.1.1 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.17 + mrmime: 2.0.1 + sade: 1.8.1 + set-cookie-parser: 2.7.1 + sirv: 3.0.1 + svelte: 5.38.3 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + optionalDependencies: + '@opentelemetry/api': 1.9.0 - '@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/kit@2.36.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -14368,29 +16822,51 @@ snapshots: set-cookie-parser: 2.7.1 sirv: 3.0.1 svelte: 5.38.3 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) optionalDependencies: '@opentelemetry/api': 1.9.0 - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + debug: 4.4.3 + svelte: 5.38.3 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) debug: 4.4.3 svelte: 5.38.3 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + debug: 4.4.1 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.17 + svelte: 5.38.3 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)))(svelte@5.38.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 5.38.3 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vitefu: 1.1.1(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) transitivePeerDependencies: - supports-color @@ -14409,7 +16885,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.2 - jiti: 2.5.1 + jiti: 2.6.1 lightningcss: 1.30.1 magic-string: 0.30.21 source-map-js: 1.2.1 @@ -14541,14 +17017,14 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.1.12 '@tailwindcss/oxide': 4.1.12 tailwindcss: 4.1.12 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) - '@tanstack/directive-functions-plugin@1.121.21(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -14557,7 +17033,7 @@ snapshots: '@tanstack/router-utils': 1.161.4 babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -14575,7 +17051,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.121.21(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -14584,7 +17060,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/directive-functions-plugin': 1.121.21(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -14601,6 +17077,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@tokenizer/inflate@0.4.1': + dependencies: + debug: 4.4.3 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + '@tokenizer/token@0.3.0': {} '@tybys/wasm-util@0.10.1': @@ -14833,6 +17316,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/he@1.2.3': {} + '@types/http-assert@1.5.6': {} '@types/http-errors@2.0.5': {} @@ -14921,6 +17406,8 @@ snapshots: pg-protocol: 1.10.3 pg-types: 2.2.0 + '@types/pluralize@0.0.33': {} + '@types/prop-types@15.7.15': {} '@types/qs@6.14.0': {} @@ -15421,6 +17908,12 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@unhead/vue@2.1.13(vue@3.5.32(typescript@5.9.3))': + dependencies: + hookable: 6.1.0 + unhead: 2.1.13 + vue: 3.5.32(typescript@5.9.3) + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -15484,8 +17977,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.3 '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -15511,7 +18004,7 @@ snapshots: h3: 1.15.5 http-shutdown: 1.2.2 jiti: 1.21.7 - mlly: 1.7.4 + mlly: 1.8.1 node-forge: 1.3.3 pathe: 1.1.2 std-env: 3.10.0 @@ -15519,35 +18012,53 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@babel/parser': 7.29.0 - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) acorn-loose: 8.5.2 - acorn-typescript: 1.4.13(acorn@8.15.0) + acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vinxi: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) - '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) - acorn: 8.15.0 + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + acorn: 8.16.0 acorn-loose: 8.5.2 - acorn-typescript: 1.4.13(acorn@8.15.0) + acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vinxi: 0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + + '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.12 + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vue: 3.5.32(typescript@5.9.3) + transitivePeerDependencies: + - supports-color '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.19.1)(lightningcss@1.30.1)(terser@5.46.0))(vue@3.5.17(typescript@5.9.3))': dependencies: vite: 5.4.19(@types/node@22.19.1)(lightningcss@1.30.1)(terser@5.46.0) vue: 3.5.17(typescript@5.9.3) + '@vitejs/plugin-vue@6.0.5(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vue: 3.5.32(typescript@5.9.3) + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.3 @@ -15556,13 +18067,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -15596,6 +18107,45 @@ snapshots: '@volar/source-map@2.4.15': {} + '@vue-macros/common@3.1.2(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@vue/compiler-sfc': 3.5.32 + ast-kit: 2.2.0 + local-pkg: 1.1.2 + magic-string-ast: 1.0.3 + unplugin-utils: 0.3.1 + optionalDependencies: + vue: 3.5.32(typescript@5.9.3) + + '@vue/babel-helper-vue-transform-on@2.0.1': {} + + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.0)': + dependencies: + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@vue/babel-helper-vue-transform-on': 2.0.1 + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0) + '@vue/shared': 3.5.32 + optionalDependencies: + '@babel/core': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.0)': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/parser': 7.29.0 + '@vue/compiler-sfc': 3.5.32 + transitivePeerDependencies: + - supports-color + '@vue/compiler-core@3.5.17': dependencies: '@babel/parser': 7.29.0 @@ -15604,11 +18154,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.32': + dependencies: + '@babel/parser': 7.29.2 + '@vue/shared': 3.5.32 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.17': dependencies: '@vue/compiler-core': 3.5.17 '@vue/shared': 3.5.17 + '@vue/compiler-dom@3.5.32': + dependencies: + '@vue/compiler-core': 3.5.32 + '@vue/shared': 3.5.32 + '@vue/compiler-sfc@3.5.17': dependencies: '@babel/parser': 7.29.0 @@ -15621,20 +18184,49 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.32': + dependencies: + '@babel/parser': 7.29.2 + '@vue/compiler-core': 3.5.32 + '@vue/compiler-dom': 3.5.32 + '@vue/compiler-ssr': 3.5.32 + '@vue/shared': 3.5.32 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.9 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.17': dependencies: '@vue/compiler-dom': 3.5.17 '@vue/shared': 3.5.17 + '@vue/compiler-ssr@3.5.32': + dependencies: + '@vue/compiler-dom': 3.5.32 + '@vue/shared': 3.5.32 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 he: 1.2.0 + '@vue/devtools-api@6.6.4': {} + '@vue/devtools-api@7.7.7': dependencies: '@vue/devtools-kit': 7.7.7 + '@vue/devtools-api@8.1.1': + dependencies: + '@vue/devtools-kit': 8.1.1 + + '@vue/devtools-core@8.1.1(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@vue/devtools-kit': 8.1.1 + '@vue/devtools-shared': 8.1.1 + vue: 3.5.32(typescript@5.9.3) + '@vue/devtools-kit@7.7.7': dependencies: '@vue/devtools-shared': 7.7.7 @@ -15645,10 +18237,19 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.2 + '@vue/devtools-kit@8.1.1': + dependencies: + '@vue/devtools-shared': 8.1.1 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + '@vue/devtools-shared@7.7.7': dependencies: rfdc: 1.4.1 + '@vue/devtools-shared@8.1.1': {} + '@vue/language-core@2.1.10(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.15 @@ -15666,11 +18267,20 @@ snapshots: dependencies: '@vue/shared': 3.5.17 + '@vue/reactivity@3.5.32': + dependencies: + '@vue/shared': 3.5.32 + '@vue/runtime-core@3.5.17': dependencies: '@vue/reactivity': 3.5.17 '@vue/shared': 3.5.17 + '@vue/runtime-core@3.5.32': + dependencies: + '@vue/reactivity': 3.5.32 + '@vue/shared': 3.5.32 + '@vue/runtime-dom@3.5.17': dependencies: '@vue/reactivity': 3.5.17 @@ -15678,14 +18288,29 @@ snapshots: '@vue/shared': 3.5.17 csstype: 3.1.3 + '@vue/runtime-dom@3.5.32': + dependencies: + '@vue/reactivity': 3.5.32 + '@vue/runtime-core': 3.5.32 + '@vue/shared': 3.5.32 + csstype: 3.2.3 + '@vue/server-renderer@3.5.17(vue@3.5.17(typescript@5.9.3))': dependencies: '@vue/compiler-ssr': 3.5.17 '@vue/shared': 3.5.17 vue: 3.5.17(typescript@5.9.3) + '@vue/server-renderer@3.5.32(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.32 + '@vue/shared': 3.5.32 + vue: 3.5.32(typescript@5.9.3) + '@vue/shared@3.5.17': {} + '@vue/shared@3.5.32': {} + '@vueuse/core@12.8.2(typescript@5.9.3)': dependencies: '@types/web-bluetooth': 0.0.21 @@ -15695,13 +18320,14 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(typescript@5.9.3)': + '@vueuse/integrations@12.8.2(focus-trap@7.6.5)(fuse.js@7.3.0)(typescript@5.9.3)': dependencies: '@vueuse/core': 12.8.2(typescript@5.9.3) '@vueuse/shared': 12.8.2(typescript@5.9.3) vue: 3.5.17(typescript@5.9.3) optionalDependencies: focus-trap: 7.6.5 + fuse.js: 7.3.0 transitivePeerDependencies: - typescript @@ -15726,21 +18352,21 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-loose@8.5.2: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-typescript@1.4.13(acorn@8.15.0): + acorn-typescript@1.4.13(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-walk@8.3.2: {} @@ -15803,15 +18429,19 @@ snapshots: dependencies: type-fest: 0.21.3 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} ansis@4.2.0: {} @@ -15943,6 +18573,11 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.29.0 + pathe: 2.0.3 + ast-kit@3.0.0-beta.1: dependencies: '@babel/parser': 8.0.0-rc.3 @@ -15955,9 +18590,14 @@ snapshots: dependencies: tslib: 2.8.1 + ast-walker-scope@0.8.3: + dependencies: + '@babel/parser': 7.29.0 + ast-kit: 2.2.0 + astring@1.9.0: {} - astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.1): + astro@5.17.3(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(yaml@2.8.3): dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/internal-helpers': 0.7.5 @@ -16014,8 +18654,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.4(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0) vfile: 6.0.3 - vite: 6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vitefu: 1.1.1(vite@6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -16067,6 +18707,15 @@ snapshots: atomic-sleep@1.0.0: {} + autoprefixer@10.4.27(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + caniuse-lite: 1.0.30001776 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -16166,6 +18815,8 @@ snapshots: birpc@2.4.0: {} + birpc@2.9.0: {} + birpc@4.0.0: {} blake3-wasm@2.1.5: {} @@ -16258,6 +18909,10 @@ snapshots: dependencies: '@types/node': 24.3.0 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -16319,12 +18974,21 @@ snapshots: camelcase@8.0.0: {} + caniuse-api@3.0.0: + dependencies: + browserslist: 4.28.1 + caniuse-lite: 1.0.30001776 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + caniuse-lite@1.0.30001727: {} caniuse-lite@1.0.30001776: {} canonicalize@2.1.0: {} + case-anything@3.1.2: {} + ccount@2.0.1: {} chai@5.3.3: @@ -16350,6 +19014,8 @@ snapshots: chardet@2.1.1: {} + check-disk-space@3.4.0: {} + check-error@2.1.1: {} chevrotain-allstar@0.3.1(chevrotain@11.0.3): @@ -16400,6 +19066,8 @@ snapshots: cli-boxes@3.0.0: {} + cli-boxes@4.0.1: {} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -16421,6 +19089,11 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-truncate@5.2.0: + dependencies: + slice-ansi: 8.0.0 + string-width: 8.2.0 + cli-width@4.1.0: {} client-only@0.0.1: {} @@ -16497,18 +19170,24 @@ snapshots: confbox@0.2.2: {} + confbox@0.2.4: {} + consola@3.4.2: {} content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 + content-disposition@1.1.0: {} + content-type@1.0.5: {} convert-source-map@2.0.0: {} cookie-es@1.2.2: {} + cookie-es@1.2.3: {} + cookie-es@2.0.0: {} cookie-signature@1.0.6: {} @@ -16561,6 +19240,10 @@ snapshots: dependencies: uncrypto: 0.1.3 + css-declaration-sorter@7.4.0(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + css-select@5.2.2: dependencies: boolbase: 1.0.0 @@ -16583,12 +19266,58 @@ snapshots: cssesc@3.0.0: {} + cssnano-preset-default@7.0.12(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + css-declaration-sorter: 7.4.0(postcss@8.5.9) + cssnano-utils: 5.0.1(postcss@8.5.9) + postcss: 8.5.9 + postcss-calc: 10.1.1(postcss@8.5.9) + postcss-colormin: 7.0.7(postcss@8.5.9) + postcss-convert-values: 7.0.9(postcss@8.5.9) + postcss-discard-comments: 7.0.6(postcss@8.5.9) + postcss-discard-duplicates: 7.0.2(postcss@8.5.9) + postcss-discard-empty: 7.0.1(postcss@8.5.9) + postcss-discard-overridden: 7.0.1(postcss@8.5.9) + postcss-merge-longhand: 7.0.5(postcss@8.5.9) + postcss-merge-rules: 7.0.8(postcss@8.5.9) + postcss-minify-font-values: 7.0.1(postcss@8.5.9) + postcss-minify-gradients: 7.0.2(postcss@8.5.9) + postcss-minify-params: 7.0.6(postcss@8.5.9) + postcss-minify-selectors: 7.0.6(postcss@8.5.9) + postcss-normalize-charset: 7.0.1(postcss@8.5.9) + postcss-normalize-display-values: 7.0.1(postcss@8.5.9) + postcss-normalize-positions: 7.0.1(postcss@8.5.9) + postcss-normalize-repeat-style: 7.0.1(postcss@8.5.9) + postcss-normalize-string: 7.0.1(postcss@8.5.9) + postcss-normalize-timing-functions: 7.0.1(postcss@8.5.9) + postcss-normalize-unicode: 7.0.6(postcss@8.5.9) + postcss-normalize-url: 7.0.1(postcss@8.5.9) + postcss-normalize-whitespace: 7.0.1(postcss@8.5.9) + postcss-ordered-values: 7.0.2(postcss@8.5.9) + postcss-reduce-initial: 7.0.6(postcss@8.5.9) + postcss-reduce-transforms: 7.0.1(postcss@8.5.9) + postcss-svgo: 7.1.1(postcss@8.5.9) + postcss-unique-selectors: 7.0.5(postcss@8.5.9) + + cssnano-utils@5.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + cssnano@7.1.4(postcss@8.5.9): + dependencies: + cssnano-preset-default: 7.0.12(postcss@8.5.9) + lilconfig: 3.1.3 + postcss: 8.5.9 + csso@5.0.5: dependencies: css-tree: 2.2.1 csstype@3.1.3: {} + csstype@3.2.3: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.32.0): dependencies: cose-base: 1.0.3 @@ -16852,6 +19581,13 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -16860,6 +19596,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -16868,6 +19606,8 @@ snapshots: defu@6.1.4: {} + defu@6.1.7: {} + delaunator@5.0.1: dependencies: robust-predicates: 3.0.2 @@ -16966,17 +19706,19 @@ snapshots: electron-to-chromium@1.5.307: {} - elysia@1.3.8(exact-mirror@0.1.3(@sinclair/typebox@0.34.38))(file-type@21.0.0)(typescript@5.9.3): + elysia@1.3.8(exact-mirror@0.1.3(@sinclair/typebox@0.34.38))(file-type@21.3.4)(typescript@5.9.3): dependencies: cookie: 1.0.2 exact-mirror: 0.1.3(@sinclair/typebox@0.34.38) fast-decode-uri-component: 1.0.1 - file-type: 21.0.0 + file-type: 21.3.4 typescript: 5.9.3 optionalDependencies: '@sinclair/typebox': 0.34.38 openapi-types: 12.1.3 + emittery@1.2.1: {} + emoji-regex-xs@1.0.0: {} emoji-regex@10.6.0: {} @@ -17010,12 +19752,18 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + + environment@1.1.0: {} + error-stack-parser-es@1.0.5: {} error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 + errx@0.1.0: {} + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -17098,6 +19846,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -17321,7 +20071,7 @@ snapshots: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 eslint: 8.57.1 - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.7 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 @@ -17336,7 +20086,7 @@ snapshots: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 eslint: 9.32.0(jiti@2.6.1) - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.7 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 @@ -17677,14 +20427,14 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -17785,8 +20535,6 @@ snapshots: transitivePeerDependencies: - supports-color - exsolve@1.0.7: {} - exsolve@1.0.8: {} extend-shallow@2.0.1: @@ -17834,12 +20582,26 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-npm-meta@1.4.2: {} + fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 + fast-string-truncated-width@1.2.1: {} + + fast-string-width@1.1.0: + dependencies: + fast-string-truncated-width: 1.2.1 + fast-uri@3.1.0: {} + fast-wrap-ansi@0.1.6: + dependencies: + fast-string-width: 1.1.0 + + fastest-levenshtein@1.0.16: {} + fastify-plugin@5.1.0: {} fastify@5.6.1: @@ -17915,6 +20677,15 @@ snapshots: transitivePeerDependencies: - supports-color + file-type@21.3.4: + dependencies: + '@tokenizer/inflate': 0.4.1 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.4.0 + transitivePeerDependencies: + - supports-color + file-uri-to-path@1.0.0: {} fill-range@7.1.1: @@ -17994,6 +20765,8 @@ snapshots: forwarded@0.2.0: {} + fraction.js@5.3.4: {} + fresh@0.5.2: {} fresh@2.0.0: {} @@ -18016,6 +20789,10 @@ snapshots: functions-have-names@1.2.3: {} + fuse.js@7.3.0: {} + + fzf@0.5.2: {} + generate-function@2.3.1: dependencies: is-property: 1.0.2 @@ -18026,6 +20803,8 @@ snapshots: get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -18086,6 +20865,8 @@ snapshots: nypm: 0.6.5 pathe: 2.0.3 + giget@3.2.0: {} + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -18103,7 +20884,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -18122,6 +20903,10 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -18172,6 +20957,18 @@ snapshots: dependencies: duplexer: 0.1.2 + h3@1.15.11: + dependencies: + cookie-es: 1.2.3 + crossws: 0.3.5 + defu: 6.1.7 + 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 + h3@1.15.3: dependencies: cookie-es: 1.2.2 @@ -18179,9 +20976,9 @@ snapshots: defu: 6.1.4 destr: 2.0.5 iron-webcrypto: 1.2.1 - node-mock-http: 1.0.1 + node-mock-http: 1.0.4 radix3: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 uncrypto: 0.1.3 h3@1.15.5: @@ -18406,6 +21203,8 @@ snapshots: ignore@7.0.5: {} + image-meta@0.2.2: {} + image-q@4.0.0: dependencies: '@types/node': 16.9.1 @@ -18417,15 +21216,15 @@ snapshots: import-in-the-middle@1.14.2: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 import-in-the-middle@2.0.1: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 @@ -18433,8 +21232,18 @@ snapshots: import-without-cache@0.2.5: {} + impound@1.1.5: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + es-module-lexer: 2.0.0 + pathe: 2.0.3 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + imurmurhash@0.1.4: {} + inflation@2.1.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -18442,6 +21251,8 @@ snapshots: inherits@2.0.4: {} + ini@4.1.1: {} + inquirer-toggle@1.0.1: dependencies: '@inquirer/core': 8.2.4 @@ -18566,6 +21377,10 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.4.0 + is-generator-function@1.1.0: dependencies: call-bound: 1.0.4 @@ -18581,6 +21396,11 @@ snapshots: dependencies: is-docker: 3.0.0 + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -18683,6 +21503,8 @@ snapshots: isexe@3.1.1: {} + isexe@4.0.0: {} + isomorphic-fetch@3.0.0: dependencies: node-fetch: 2.7.0 @@ -18739,8 +21561,6 @@ snapshots: jiti@1.21.7: {} - jiti@2.5.1: {} - jiti@2.6.1: {} jpeg-js@0.4.4: {} @@ -18793,6 +21613,8 @@ snapshots: lru-cache: 6.0.0 rdf-canonize: 5.0.0 + jsonschema@1.5.0: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.9 @@ -18900,6 +21722,11 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 + launch-editor@2.13.2: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.3 + layout-base@1.0.2: {} layout-base@2.0.1: {} @@ -18997,12 +21824,6 @@ snapshots: load-esm@1.0.2: {} - local-pkg@1.1.1: - dependencies: - mlly: 1.7.4 - pkg-types: 2.2.0 - quansync: 0.2.11 - local-pkg@1.1.2: dependencies: mlly: 1.8.1 @@ -19023,8 +21844,12 @@ snapshots: lodash.isarguments@3.1.0: {} + lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} + lodash.uniq@4.5.0: {} + lodash@4.17.23: {} log-symbols@6.0.0: @@ -19032,6 +21857,14 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 + log-update@7.2.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 8.0.0 + strip-ansi: 7.2.0 + wrap-ansi: 10.0.0 + long@5.3.2: {} longest-streak@3.1.0: {} @@ -19056,6 +21889,20 @@ snapshots: lru.min@1.1.4: {} + magic-regexp@0.10.0: + dependencies: + estree-walker: 3.0.3 + magic-string: 0.30.21 + mlly: 1.8.1 + regexp-tree: 0.1.27 + type-level-regexp: 0.1.17 + ufo: 1.6.3 + unplugin: 2.3.11 + + magic-string-ast@1.0.3: + dependencies: + magic-string: 0.30.21 + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -19575,27 +22422,18 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} - minipass@7.1.3: {} minisearch@7.1.2: {} minizlib@3.0.2: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mitt@3.0.1: {} mkdirp@3.0.1: {} - mlly@1.7.4: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.3 - mlly@1.8.1: dependencies: acorn: 8.16.0 @@ -19603,6 +22441,8 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.3 + mocked-exports@0.1.1: {} + module-details-from-path@1.0.4: {} mri@1.2.0: {} @@ -19645,6 +22485,8 @@ snapshots: nanoid@3.3.11: {} + nanotar@0.3.0: {} + napi-postinstall@0.3.2: {} natural-compare@1.4.0: {} @@ -19760,7 +22602,7 @@ snapshots: exsolve: 1.0.8 globby: 16.1.1 gzip-size: 7.0.0 - h3: 1.15.5 + h3: 1.15.11 hookable: 5.5.3 httpxy: 0.1.7 ioredis: 5.10.0 @@ -19848,8 +22690,6 @@ snapshots: node-gyp-build@4.8.4: {} - node-mock-http@1.0.1: {} - node-mock-http@1.0.4: {} node-releases@2.0.36: {} @@ -19867,10 +22707,147 @@ snapshots: dependencies: path-key: 4.0.0 + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nth-check@2.1.1: dependencies: boolbase: 1.0.0 + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3): + dependencies: + '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@5.9.3) + '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) + '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)(@parcel/watcher@2.5.6)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(lightningcss@1.30.1)(magicast@0.5.2)(mysql2@3.18.2(@types/node@24.3.0))(optionator@0.9.4)(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup-plugin-visualizer@6.0.11(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(typescript@5.9.3) + '@nuxt/schema': 4.4.2 + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2)) + '@nuxt/vite-builder': 4.4.2(6665f5c81513a7b45d22969d069e1cae) + '@unhead/vue': 2.1.13(vue@3.5.32(typescript@5.9.3)) + '@vue/shared': 3.5.32 + c12: 3.3.3(magicast@0.5.2) + chokidar: 5.0.0 + compatx: 0.2.0 + consola: 3.4.2 + cookie-es: 2.0.0 + defu: 6.1.4 + devalue: 5.6.3 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + hookable: 6.1.0 + ignore: 7.0.5 + impound: 1.1.5 + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.1 + nanotar: 0.3.0 + nypm: 0.6.5 + ofetch: 1.5.1 + ohash: 2.0.11 + on-change: 6.0.2 + oxc-minify: 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + oxc-parser: 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + oxc-transform: 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + picomatch: 4.0.4 + pkg-types: 2.3.0 + rou3: 0.8.1 + scule: 1.3.0 + semver: 7.7.4 + std-env: 4.0.0 + tinyglobby: 0.2.15 + ufo: 1.6.3 + ultrahtml: 1.6.0 + uncrypto: 0.1.3 + unctx: 2.5.0 + unimport: 6.0.2 + unplugin: 3.0.0 + unrouting: 0.1.7 + untyped: 2.0.0 + vue: 3.5.32(typescript@5.9.3) + vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.9.3)) + optionalDependencies: + '@parcel/watcher': 2.5.6 + '@types/node': 24.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/core' + - '@babel/plugin-proposal-decorators' + - '@babel/plugin-syntax-jsx' + - '@biomejs/biome' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@emnapi/core' + - '@emnapi/runtime' + - '@libsql/client' + - '@netlify/blobs' + - '@pinia/colada' + - '@planetscale/database' + - '@rollup/plugin-babel' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - '@vue/compiler-sfc' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bufferutil + - cac + - commander + - db0 + - drizzle-orm + - encoding + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - mysql2 + - optionator + - oxlint + - pinia + - react-native-b4a + - rolldown + - rollup + - rollup-plugin-visualizer + - sass + - sass-embedded + - sqlite3 + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - utf-8-validate + - vite + - vls + - vti + - vue-tsc + - xml2js + - yaml + nypm@0.6.5: dependencies: citty: 0.2.1 @@ -19929,10 +22906,14 @@ snapshots: node-fetch-native: 1.6.7 ufo: 1.6.3 + ofetch@2.0.0-alpha.3: {} + ohash@2.0.11: {} omggif@1.0.10: {} + on-change@6.0.2: {} + on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -19973,6 +22954,13 @@ snapshots: only@0.0.2: {} + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -20009,6 +22997,91 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + oxc-minify@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5): + optionalDependencies: + '@oxc-minify/binding-android-arm-eabi': 0.117.0 + '@oxc-minify/binding-android-arm64': 0.117.0 + '@oxc-minify/binding-darwin-arm64': 0.117.0 + '@oxc-minify/binding-darwin-x64': 0.117.0 + '@oxc-minify/binding-freebsd-x64': 0.117.0 + '@oxc-minify/binding-linux-arm-gnueabihf': 0.117.0 + '@oxc-minify/binding-linux-arm-musleabihf': 0.117.0 + '@oxc-minify/binding-linux-arm64-gnu': 0.117.0 + '@oxc-minify/binding-linux-arm64-musl': 0.117.0 + '@oxc-minify/binding-linux-ppc64-gnu': 0.117.0 + '@oxc-minify/binding-linux-riscv64-gnu': 0.117.0 + '@oxc-minify/binding-linux-riscv64-musl': 0.117.0 + '@oxc-minify/binding-linux-s390x-gnu': 0.117.0 + '@oxc-minify/binding-linux-x64-gnu': 0.117.0 + '@oxc-minify/binding-linux-x64-musl': 0.117.0 + '@oxc-minify/binding-openharmony-arm64': 0.117.0 + '@oxc-minify/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + '@oxc-minify/binding-win32-arm64-msvc': 0.117.0 + '@oxc-minify/binding-win32-ia32-msvc': 0.117.0 + '@oxc-minify/binding-win32-x64-msvc': 0.117.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + oxc-parser@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5): + dependencies: + '@oxc-project/types': 0.117.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.117.0 + '@oxc-parser/binding-android-arm64': 0.117.0 + '@oxc-parser/binding-darwin-arm64': 0.117.0 + '@oxc-parser/binding-darwin-x64': 0.117.0 + '@oxc-parser/binding-freebsd-x64': 0.117.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.117.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.117.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.117.0 + '@oxc-parser/binding-linux-arm64-musl': 0.117.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.117.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.117.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.117.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.117.0 + '@oxc-parser/binding-linux-x64-gnu': 0.117.0 + '@oxc-parser/binding-linux-x64-musl': 0.117.0 + '@oxc-parser/binding-openharmony-arm64': 0.117.0 + '@oxc-parser/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + '@oxc-parser/binding-win32-arm64-msvc': 0.117.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.117.0 + '@oxc-parser/binding-win32-x64-msvc': 0.117.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + oxc-transform@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5): + optionalDependencies: + '@oxc-transform/binding-android-arm-eabi': 0.117.0 + '@oxc-transform/binding-android-arm64': 0.117.0 + '@oxc-transform/binding-darwin-arm64': 0.117.0 + '@oxc-transform/binding-darwin-x64': 0.117.0 + '@oxc-transform/binding-freebsd-x64': 0.117.0 + '@oxc-transform/binding-linux-arm-gnueabihf': 0.117.0 + '@oxc-transform/binding-linux-arm-musleabihf': 0.117.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.117.0 + '@oxc-transform/binding-linux-arm64-musl': 0.117.0 + '@oxc-transform/binding-linux-ppc64-gnu': 0.117.0 + '@oxc-transform/binding-linux-riscv64-gnu': 0.117.0 + '@oxc-transform/binding-linux-riscv64-musl': 0.117.0 + '@oxc-transform/binding-linux-s390x-gnu': 0.117.0 + '@oxc-transform/binding-linux-x64-gnu': 0.117.0 + '@oxc-transform/binding-linux-x64-musl': 0.117.0 + '@oxc-transform/binding-openharmony-arm64': 0.117.0 + '@oxc-transform/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + '@oxc-transform/binding-win32-arm64-msvc': 0.117.0 + '@oxc-transform/binding-win32-ia32-msvc': 0.117.0 + '@oxc-transform/binding-win32-x64-msvc': 0.117.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5)): + dependencies: + magic-regexp: 0.10.0 + oxc-parser: 0.117.0(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5) + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -20047,6 +23120,11 @@ snapshots: xml-parse-from-string: 1.0.1 xml2js: 0.5.0 + parse-imports@3.0.0: + dependencies: + es-module-lexer: 1.7.0 + slashes: 3.0.12 + parse-latin@7.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -20087,7 +23165,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-scurry@2.0.2: dependencies: @@ -20144,8 +23222,26 @@ snapshots: dependencies: split2: 4.2.0 + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + pino-std-serializers@7.0.0: {} + pino@10.3.1: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 4.0.0 + pino@9.12.0: dependencies: atomic-sleep: 1.0.0 @@ -20173,13 +23269,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - - pkg-types@2.2.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 + mlly: 1.8.1 pathe: 2.0.3 pkg-types@2.3.0: @@ -20197,6 +23287,8 @@ snapshots: pvutils: 1.1.3 tslib: 2.8.1 + pluralize@8.0.0: {} + pngjs@3.4.0: {} pngjs@6.0.0: {} @@ -20212,6 +23304,43 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss-calc@10.1.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-colormin@7.0.7(postcss@8.5.9): + dependencies: + '@colordx/core': 5.0.3 + browserslist: 4.28.1 + caniuse-api: 3.0.0 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-convert-values@7.0.9(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@7.0.6(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-discard-duplicates@7.0.2(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-discard-empty@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-discard-overridden@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-import@15.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -20231,17 +23360,118 @@ snapshots: optionalDependencies: postcss: 8.5.6 - postcss-load-config@4.0.2(postcss@8.5.6): + postcss-load-config@4.0.2(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.1 + optionalDependencies: + postcss: 8.5.6 + + postcss-merge-longhand@7.0.5(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + stylehacks: 7.0.8(postcss@8.5.9) + + postcss-merge-rules@7.0.8(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + caniuse-api: 3.0.0 + cssnano-utils: 5.0.1(postcss@8.5.9) + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-minify-font-values@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@7.0.2(postcss@8.5.9): + dependencies: + '@colordx/core': 5.0.3 + cssnano-utils: 5.0.1(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-minify-params@7.0.6(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + cssnano-utils: 5.0.1(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@7.0.6(postcss@8.5.9): + dependencies: + cssesc: 3.0.0 + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-normalize-charset@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + + postcss-normalize-display-values@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@7.0.6(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@7.0.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@7.0.2(postcss@8.5.9): + dependencies: + cssnano-utils: 5.0.1(postcss@8.5.9) + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@7.0.6(postcss@8.5.9): dependencies: - lilconfig: 3.1.3 - yaml: 2.8.1 - optionalDependencies: - postcss: 8.5.6 + browserslist: 4.28.1 + caniuse-api: 3.0.0 + postcss: 8.5.9 - postcss-nested@6.2.0(postcss@8.5.6): + postcss-reduce-transforms@7.0.1(postcss@8.5.9): dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 + postcss: 8.5.9 + postcss-value-parser: 4.2.0 postcss-safe-parser@7.0.1(postcss@8.5.6): dependencies: @@ -20261,6 +23491,22 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@7.1.1(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-value-parser: 4.2.0 + svgo: 4.0.1 + + postcss-unique-selectors@7.0.5(postcss@8.5.9): + dependencies: + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + postcss-value-parser@4.2.0: {} postcss@8.4.31: @@ -20275,6 +23521,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.9: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres-array@2.0.0: {} postgres-bytea@1.0.0: {} @@ -20306,6 +23558,8 @@ snapshots: pretty-bytes@7.1.0: {} + pretty-hrtime@1.0.3: {} + printable-characters@1.0.42: {} prismjs@1.30.0: {} @@ -20407,11 +23661,23 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + rc9@2.1.2: dependencies: defu: 6.1.4 destr: 2.0.5 + rc9@3.0.1: + dependencies: + defu: 6.1.7 + destr: 2.0.5 + rdf-canonize@5.0.0: dependencies: setimmediate: 1.0.5 @@ -20520,6 +23786,8 @@ snapshots: dependencies: regex-utilities: 2.3.0 + regexp-tree@0.1.27: {} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -20805,6 +24073,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + rou3@0.8.1: {} + roughjs@4.6.6: dependencies: hachure-fill: 0.5.2 @@ -20812,6 +24082,8 @@ snapshots: points-on-curve: 0.2.0 points-on-path: 0.2.1 + run-applescript@7.1.0: {} + run-async@4.0.6: {} run-parallel@1.2.0: @@ -20861,6 +24133,8 @@ snapshots: sax@1.4.3: {} + sax@1.6.0: {} + scheduler@0.25.0-rc-7771d3a7-20240827: {} scheduler@0.26.0: {} @@ -20926,6 +24200,8 @@ snapshots: seroval@1.5.0: {} + seroval@1.5.2: {} + serve-placeholder@2.0.2: dependencies: defu: 6.1.4 @@ -21040,6 +24316,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.3: {} + shiki@1.29.2: dependencies: '@shikijs/core': 1.29.2 @@ -21107,6 +24385,16 @@ snapshots: signal-exit@4.1.0: {} + simple-git@3.35.2: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + '@simple-git/args-pathspec': 1.0.2 + '@simple-git/argv-parser': 1.0.3 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -21119,14 +24407,29 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + sisteransi@1.0.5: {} slash@3.0.0: {} slash@5.1.0: {} + slashes@3.0.12: {} + + slice-ansi@8.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + slow-redact@0.3.0: {} + slugify@1.6.9: {} + smob@1.6.1: {} smol-toml@1.6.0: {} @@ -21169,12 +24472,16 @@ snapshots: speakingurl@14.0.1: {} + split-lines@3.0.0: {} + split2@4.2.0: {} sprintf-js@1.0.3: {} sql-escaper@1.3.3: {} + srvx@0.11.15: {} + srvx@0.8.16: {} stable-hash@0.0.5: {} @@ -21198,6 +24505,8 @@ snapshots: std-env@3.10.0: {} + std-env@4.0.0: {} + stdin-discarder@0.2.2: {} stop-iteration-iterator@1.1.0: @@ -21228,13 +24537,18 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 string-width@7.2.0: dependencies: emoji-regex: 10.6.0 get-east-asian-width: 1.4.0 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 + + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 string.prototype.includes@2.0.1: dependencies: @@ -21305,7 +24619,11 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 strip-bom-string@1.0.0: {} @@ -21323,6 +24641,10 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 + strtok3@10.3.5: + dependencies: + '@tokenizer/token': 0.3.0 + strtok3@6.3.0: dependencies: '@tokenizer/token': 0.3.0 @@ -21333,6 +24655,8 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 5.4.2 + structured-clone-es@2.0.0: {} + structured-field-values@2.0.4: {} styled-jsx@5.1.1(react@19.0.0-rc-7771d3a7-20240827): @@ -21345,6 +24669,12 @@ snapshots: client-only: 0.0.1 react: 19.1.0 + stylehacks@7.0.8(postcss@8.5.9): + dependencies: + browserslist: 4.28.1 + postcss: 8.5.9 + postcss-selector-parser: 7.1.1 + stylis@4.3.6: {} sucrase@3.35.0: @@ -21419,6 +24749,16 @@ snapshots: picocolors: 1.1.1 sax: 1.4.3 + svgo@4.0.1: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.1.0 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.0 + system-architecture@0.1.0: {} tabbable@6.2.0: {} @@ -21473,7 +24813,7 @@ snapshots: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 + minipass: 7.1.3 minizlib: 3.0.2 mkdirp: 3.0.1 yallist: 5.0.0 @@ -21485,6 +24825,10 @@ snapshots: - bare-abort-controller - react-native-b4a + tempura@0.4.1: {} + + terminal-size@4.0.1: {} + terracotta@1.1.0(solid-js@1.9.11): dependencies: solid-js: 1.9.11 @@ -21493,7 +24837,7 @@ snapshots: terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -21517,12 +24861,18 @@ snapshots: dependencies: real-require: 0.2.0 + thread-stream@4.0.0: + dependencies: + real-require: 0.2.0 + tiny-inflate@1.0.3: {} tiny-invariant@1.3.3: {} tinybench@2.9.0: {} + tinyclip@0.1.12: {} + tinycolor2@1.6.0: {} tinyexec@0.3.2: {} @@ -21547,6 +24897,8 @@ snapshots: tinyspy@4.0.4: {} + tmp-cache@1.1.0: {} + to-data-view@1.1.0: {} to-data-view@2.0.0: {} @@ -21569,6 +24921,12 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + tokenx@1.1.0: {} totalist@3.0.1: {} @@ -21702,6 +25060,8 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 + type-level-regexp@0.1.17: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -21754,8 +25114,6 @@ snapshots: uc.micro@2.1.0: {} - ufo@1.6.1: {} - ufo@1.6.3: {} uid@2.0.2: @@ -21782,7 +25140,7 @@ snapshots: unctx@2.5.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 estree-walker: 3.0.3 magic-string: 0.30.21 unplugin: 2.3.11 @@ -21812,7 +25170,7 @@ snapshots: unenv@2.0.0-rc.17: dependencies: defu: 6.1.4 - exsolve: 1.0.7 + exsolve: 1.0.8 ohash: 2.0.11 pathe: 2.0.3 ufo: 1.6.3 @@ -21820,7 +25178,7 @@ snapshots: unenv@2.0.0-rc.21: dependencies: defu: 6.1.4 - exsolve: 1.0.7 + exsolve: 1.0.8 ohash: 2.0.11 pathe: 2.0.3 ufo: 1.6.3 @@ -21829,6 +25187,12 @@ snapshots: dependencies: pathe: 2.0.3 + unhead@2.1.13: + dependencies: + hookable: 6.1.0 + + unicorn-magic@0.3.0: {} + unicorn-magic@0.4.0: {} unified@11.0.5: @@ -21864,6 +25228,23 @@ snapshots: unplugin: 2.3.11 unplugin-utils: 0.3.1 + unimport@6.0.2: + dependencies: + acorn: 8.16.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.1 + pathe: 2.0.3 + picomatch: 4.0.4 + pkg-types: 2.3.0 + scule: 1.3.0 + strip-literal: 3.1.0 + tinyglobby: 0.2.15 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -21922,10 +25303,21 @@ snapshots: unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 + acorn: 8.16.0 picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + unrouting@0.1.7: + dependencies: + escape-string-regexp: 5.0.0 + ufo: 1.6.3 + unrs-resolver@1.11.1: dependencies: napi-postinstall: 0.3.2 @@ -21962,7 +25354,7 @@ snapshots: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 - h3: 1.15.5 + h3: 1.15.11 lru-cache: 11.2.6 node-fetch-native: 1.6.7 ofetch: 1.5.1 @@ -22048,7 +25440,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1): + vinxi@0.5.11(@types/node@24.3.0)(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0)(jiti@2.6.1)(lightningcss@1.30.1)(mysql2@3.18.2(@types/node@24.3.0))(rolldown@1.0.0-rc.12(@emnapi/core@1.4.3)(@emnapi/runtime@1.4.5))(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -22082,7 +25474,7 @@ snapshots: unctx: 2.5.0 unenv: 1.10.0 unstorage: 1.17.4(db0@0.3.4(mysql2@3.18.2(@types/node@24.3.0)))(ioredis@5.10.0) - vite: 6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) zod: 4.3.6 transitivePeerDependencies: - '@azure/app-configuration' @@ -22130,13 +25522,23 @@ snapshots: - xml2js - yaml - vite-node@3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1): + vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): + dependencies: + birpc: 2.4.0 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + + vite-hot-client@2.1.0(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): + dependencies: + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + + vite-node@3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -22151,7 +25553,59 @@ snapshots: - tsx - yaml - vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)): + vite-node@5.3.0(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): + dependencies: + cac: 6.7.14 + es-module-lexer: 2.0.0 + obug: 2.1.1 + pathe: 2.0.3 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + + vite-plugin-checker@0.12.0(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): + dependencies: + '@babel/code-frame': 7.29.0 + chokidar: 4.0.3 + npm-run-path: 6.0.0 + picocolors: 1.1.1 + picomatch: 4.0.4 + tiny-invariant: 1.3.3 + tinyglobby: 0.2.15 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vscode-uri: 3.1.0 + optionalDependencies: + optionator: 0.9.4 + typescript: 5.9.3 + + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): + dependencies: + ansis: 4.2.0 + debug: 4.4.3 + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.1.0 + sirv: 3.0.2 + unplugin-utils: 0.3.1 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) + optionalDependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + transitivePeerDependencies: + - supports-color + + vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -22159,29 +25613,39 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) - vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vitefu: 1.1.1(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) transitivePeerDependencies: - supports-color + vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)): + dependencies: + estree-walker: 3.0.3 + exsolve: 1.0.8 + magic-string: 0.30.21 + pathe: 2.0.3 + source-map-js: 1.2.1 + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vue: 3.5.32(typescript@5.9.3) + vite@5.4.19(@types/node@22.19.1)(lightningcss@1.30.1)(terser@5.46.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.44.1 + rollup: 4.59.0 optionalDependencies: '@types/node': 22.19.1 fsevents: 2.3.3 lightningcss: 1.30.1 terser: 5.46.0 - vite@6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1): + vite@6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): dependencies: esbuild: 0.25.5 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.6 - rollup: 4.44.1 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.3.0 @@ -22190,9 +25654,9 @@ snapshots: lightningcss: 1.30.1 terser: 5.46.0 tsx: 4.20.3 - yaml: 2.8.1 + yaml: 2.8.3 - vite@7.1.3(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1): + vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): dependencies: esbuild: 0.25.5 fdir: 6.5.0(picomatch@4.0.3) @@ -22200,6 +25664,23 @@ snapshots: postcss: 8.5.6 rollup: 4.44.1 tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 24.3.0 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.1 + terser: 5.46.0 + tsx: 4.20.3 + yaml: 2.8.3 + + vite@7.3.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.9 + rollup: 4.59.0 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.1 fsevents: 2.3.3 @@ -22207,16 +25688,16 @@ snapshots: lightningcss: 1.30.1 terser: 5.46.0 tsx: 4.20.3 - yaml: 2.8.1 + yaml: 2.8.3 - vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1): + vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): dependencies: - esbuild: 0.25.5 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.44.1 - tinyglobby: 0.2.14 + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.9 + rollup: 4.59.0 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.3.0 fsevents: 2.3.3 @@ -22224,23 +25705,27 @@ snapshots: lightningcss: 1.30.1 terser: 5.46.0 tsx: 4.20.3 - yaml: 2.8.1 + yaml: 2.8.3 + + vitefu@1.1.1(vite@6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): + optionalDependencies: + vite: 6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) - vitefu@1.1.1(vite@6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): optionalDependencies: - vite: 6.4.1(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) - vitefu@1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)): + vitefu@1.1.1(vite@7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): optionalDependencies: - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.3.2(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) - vitepress-plugin-group-icons@1.6.1(markdown-it@14.1.0)(vite@7.1.3(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)): + vitepress-plugin-group-icons@1.6.1(markdown-it@14.1.0)(vite@7.3.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)): dependencies: '@iconify-json/logos': 1.2.4 '@iconify-json/vscode-icons': 1.2.23 '@iconify/utils': 2.3.0 markdown-it: 14.1.0 - vite: 7.1.3(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.3.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -22263,14 +25748,14 @@ snapshots: - '@75lb/nature' - supports-color - vitepress-plugin-mermaid@2.0.17(mermaid@11.7.0)(vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)): + vitepress-plugin-mermaid@2.0.17(mermaid@11.7.0)(vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(fuse.js@7.3.0)(lightningcss@1.30.1)(postcss@8.5.9)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3)): dependencies: mermaid: 11.7.0 - vitepress: 1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) + vitepress: 1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(fuse.js@7.3.0)(lightningcss@1.30.1)(postcss@8.5.9)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3) optionalDependencies: '@mermaid-js/mermaid-mindmap': 9.3.0 - vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(lightningcss@1.30.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): + vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@22.19.1)(@types/react@18.3.23)(fuse.js@7.3.0)(lightningcss@1.30.1)(postcss@8.5.9)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.29.0)(@types/react@18.3.23)(search-insights@2.17.3) @@ -22283,7 +25768,7 @@ snapshots: '@vue/devtools-api': 7.7.7 '@vue/shared': 3.5.17 '@vueuse/core': 12.8.2(typescript@5.9.3) - '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(typescript@5.9.3) + '@vueuse/integrations': 12.8.2(focus-trap@7.6.5)(fuse.js@7.3.0)(typescript@5.9.3) focus-trap: 7.6.5 mark.js: 8.11.1 minisearch: 7.1.2 @@ -22291,7 +25776,7 @@ snapshots: vite: 5.4.19(@types/node@22.19.1)(lightningcss@1.30.1)(terser@5.46.0) vue: 3.5.17(typescript@5.9.3) optionalDependencies: - postcss: 8.5.6 + postcss: 8.5.9 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -22319,11 +25804,11 @@ snapshots: - typescript - universal-cookie - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -22341,8 +25826,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.1) + vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.46.0)(tsx@4.20.3)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -22378,10 +25863,46 @@ snapshots: vscode-uri@3.0.8: {} + vscode-uri@3.1.0: {} + + vue-bundle-renderer@2.2.0: + dependencies: + ufo: 1.6.3 + + vue-devtools-stub@0.1.0: {} + vue-resize@2.0.0-alpha.1(vue@3.5.17(typescript@5.9.3)): dependencies: vue: 3.5.17(typescript@5.9.3) + vue-router@4.6.4(vue@3.5.17(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.17(typescript@5.9.3) + + vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@5.9.3)): + dependencies: + '@babel/generator': 7.29.1 + '@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue/devtools-api': 8.1.1 + ast-walker-scope: 0.8.3 + chokidar: 5.0.0 + json5: 2.2.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.1 + muggle-string: 0.4.1 + pathe: 2.0.3 + picomatch: 4.0.4 + scule: 1.3.0 + tinyglobby: 0.2.15 + unplugin: 3.0.0 + unplugin-utils: 0.3.1 + vue: 3.5.32(typescript@5.9.3) + yaml: 2.8.3 + optionalDependencies: + '@vue/compiler-sfc': 3.5.32 + vue@3.5.17(typescript@5.9.3): dependencies: '@vue/compiler-dom': 3.5.17 @@ -22392,6 +25913,16 @@ snapshots: optionalDependencies: typescript: 5.9.3 + vue@3.5.32(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.32 + '@vue/compiler-sfc': 3.5.32 + '@vue/runtime-dom': 3.5.32 + '@vue/server-renderer': 3.5.32(vue@3.5.32(typescript@5.9.3)) + '@vue/shared': 3.5.32 + optionalDependencies: + typescript: 5.9.3 + wasm-feature-detect@1.8.0: {} web-namespaces@2.0.1: {} @@ -22458,6 +25989,10 @@ snapshots: dependencies: isexe: 3.1.1 + which@6.0.1: + dependencies: + isexe: 4.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -22519,6 +26054,12 @@ snapshots: - bufferutil - utf-8-validate + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.0 + strip-ansi: 7.2.0 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -22533,20 +26074,26 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 wrappy@1.0.2: {} ws@8.18.0: {} + ws@8.20.0: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + x-forwarded-fetch@0.2.0: {} xml-parse-from-string@1.0.1: {} @@ -22574,10 +26121,14 @@ snapshots: yaml@2.8.1: {} + yaml@2.8.3: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -22635,7 +26186,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.6.5 - '@speed-highlight/core': 1.2.12 + '@speed-highlight/core': 1.2.14 cookie: 1.1.1 youch-core: 0.3.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 59aeedee3..a9ccf34fa 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: +- packages/adonis - packages/amqp - packages/astro - packages/cfworkers @@ -18,6 +19,7 @@ packages: - packages/mysql - packages/nestjs - packages/next +- packages/nuxt - packages/postgres - packages/redis - packages/relay @@ -30,6 +32,7 @@ packages: - packages/vocab-tools - packages/webfinger - docs +- examples/adonis - examples/astro - examples/cloudflare-workers - examples/elysia @@ -39,6 +42,7 @@ packages: - examples/fastify - examples/next14-app-router - examples/next15-app-router +- examples/nuxt - examples/solidstart - examples/sveltekit-sample @@ -86,9 +90,12 @@ catalog: ioredis: ^5.8.2 koa: ^2.16.0 next: ^15.4.6 + nuxt: ^4.1.3 pkijs: ^3.3.3 mysql2: ^3.18.0 postgres: ^3.4.7 tsdown: ^0.21.6 typescript: ^5.9.2 urlpattern-polyfill: "^10.1.0" + vue: ^3.5.17 + vue-router: ^4.5.1