diff --git a/.changeset/config.json b/.changeset/config.json
index c3f4e98..d487186 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -4,13 +4,15 @@
"commit": false,
"fixed": [
[
- "saykit",
- "@saykit/react",
- "@saykit/carbon",
"@saykit/config",
"@saykit/format-po",
- "@saykit/babel-plugin",
- "unplugin-saykit"
+ "saykit",
+ "@saykit/carbon",
+ "@saykit/react",
+ "babel-plugin-saykit",
+ "unplugin-saykit",
+ "@saykit/transform-js",
+ "@saykit/transform-jsx"
]
],
"linked": [],
diff --git a/.changeset/nine-zebras-greet.md b/.changeset/nine-zebras-greet.md
index d4468e0..cba20a8 100644
--- a/.changeset/nine-zebras-greet.md
+++ b/.changeset/nine-zebras-greet.md
@@ -4,7 +4,7 @@
"saykit": patch
"@saykit/carbon": patch
"@saykit/react": patch
-"@saykit/babel-plugin": patch
+"babel-plugin-saykit": patch
"unplugin-saykit": patch
---
diff --git a/.changeset/silent-moose-wish.md b/.changeset/silent-moose-wish.md
new file mode 100644
index 0000000..dba6d44
--- /dev/null
+++ b/.changeset/silent-moose-wish.md
@@ -0,0 +1,11 @@
+---
+"@saykit/react": patch
+"unplugin-saykit": patch
+"@saykit/transform-jsx": patch
+"babel-plugin-saykit": patch
+"@saykit/transform-js": patch
+"@saykit/format-po": patch
+"@saykit/config": patch
+---
+
+Split babel transformers into separate transform-js and transform-jsx packages
diff --git a/.github/labeller.yml b/.github/labeller.yml
index 38e4482..9999593 100644
--- a/.github/labeller.yml
+++ b/.github/labeller.yml
@@ -41,3 +41,11 @@
'package: unplugin':
- changed-files:
- any-glob-to-any-file: ['packages/unplugin/**']
+
+'package: transform-js':
+ - changed-files:
+ - any-glob-to-any-file: ['packages/transform-js/**']
+
+'package: transform-jsx':
+ - changed-files:
+ - any-glob-to-any-file: ['packages/transform-jsx/**']
diff --git a/.github/labels.yml b/.github/labels.yml
index f685e02..a70c92e 100644
--- a/.github/labels.yml
+++ b/.github/labels.yml
@@ -49,13 +49,21 @@
color: 84cc16
- name: 'package: babel-plugin'
- description: Related to @saykit/babel-plugin
+ description: Related to babel-plugin-saykit
color: f59e0b
- name: 'package: unplugin'
description: Related to unplugin-saykit
color: 06b6d4
+- name: 'package: transform-js'
+ description: Related to @saykit/transform-js
+ color: 8b5cf6
+
+- name: 'package: transform-jsx'
+ description: Related to @saykit/transform-jsx
+ color: ec4899
+
# Labels primarily for both issues and pull requests
- name: blocked
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
index c4702a8..c9bfed1 100644
--- a/.oxfmtrc.json
+++ b/.oxfmtrc.json
@@ -1,5 +1,5 @@
{
- "ignorePatterns": [".changeset/*.md"],
+ "ignorePatterns": [".changeset/*.md", "*.gen.ts"],
"singleQuote": true,
"experimentalSortImports": {
"groups": ["builtin", "external", "internal", "parent", "sibling", "index", "unknown"],
diff --git a/examples/carbon-tsdown/saykit.config.ts b/examples/carbon-tsdown/saykit.config.ts
deleted file mode 100644
index eda11a4..0000000
--- a/examples/carbon-tsdown/saykit.config.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { defineConfig } from '@saykit/config';
-import createFormatter from '@saykit/format-po';
-
-export default defineConfig({
- sourceLocale: 'en',
- locales: ['en', 'fr'],
- buckets: [
- {
- include: ['src/**/*.{ts,tsx}'],
- output: 'src/locales/{locale}/messages.{extension}',
- formatter: createFormatter(),
- },
- ],
-});
diff --git a/examples/carbon-tsdown/.dev.vars.example b/examples/carbon/.dev.vars.example
similarity index 100%
rename from examples/carbon-tsdown/.dev.vars.example
rename to examples/carbon/.dev.vars.example
diff --git a/examples/carbon-tsdown/.gitignore b/examples/carbon/.gitignore
similarity index 100%
rename from examples/carbon-tsdown/.gitignore
rename to examples/carbon/.gitignore
diff --git a/examples/carbon-tsdown/package.json b/examples/carbon/package.json
similarity index 69%
rename from examples/carbon-tsdown/package.json
rename to examples/carbon/package.json
index b841092..14657b2 100644
--- a/examples/carbon-tsdown/package.json
+++ b/examples/carbon/package.json
@@ -1,5 +1,5 @@
{
- "name": "carbon-tsdown-example",
+ "name": "carbon-example",
"private": true,
"type": "module",
"scripts": {
@@ -10,17 +10,18 @@
"dev": "wrangler dev"
},
"dependencies": {
- "@buape/carbon": "0.14.0",
+ "@buape/carbon": "0.16.0",
"@sapphire/snowflake": "^3.5.5",
"@saykit/carbon": "workspace:^",
"saykit": "workspace:^"
},
"devDependencies": {
- "@cloudflare/workers-types": "^4.20260210.0",
+ "@cloudflare/workers-types": "^4.20260417.1",
"@saykit/config": "workspace:^",
"@saykit/format-po": "workspace:^",
- "typescript": "^5.9.3",
+ "@saykit/transform-js": "workspace:^",
+ "typescript": "^6.0.3",
"unplugin-saykit": "workspace:^",
- "wrangler": "^4.64.0"
+ "wrangler": "^4.83.0"
}
}
diff --git a/examples/nextjs-babel/saykit.config.ts b/examples/carbon/saykit.config.ts
similarity index 50%
rename from examples/nextjs-babel/saykit.config.ts
rename to examples/carbon/saykit.config.ts
index eda11a4..71fa780 100644
--- a/examples/nextjs-babel/saykit.config.ts
+++ b/examples/carbon/saykit.config.ts
@@ -1,14 +1,16 @@
import { defineConfig } from '@saykit/config';
-import createFormatter from '@saykit/format-po';
+import createPoFormatter from '@saykit/format-po';
+import createJsTransformer from '@saykit/transform-js';
export default defineConfig({
sourceLocale: 'en',
locales: ['en', 'fr'],
buckets: [
{
- include: ['src/**/*.{ts,tsx}'],
+ include: ['src/**/*.ts'],
output: 'src/locales/{locale}/messages.{extension}',
- formatter: createFormatter(),
+ formatter: createPoFormatter(),
+ transformer: createJsTransformer(),
},
],
});
diff --git a/examples/carbon-tsdown/src/commands/about.ts b/examples/carbon/src/commands/about.ts
similarity index 100%
rename from examples/carbon-tsdown/src/commands/about.ts
rename to examples/carbon/src/commands/about.ts
diff --git a/examples/carbon-tsdown/src/commands/maths.ts b/examples/carbon/src/commands/maths.ts
similarity index 100%
rename from examples/carbon-tsdown/src/commands/maths.ts
rename to examples/carbon/src/commands/maths.ts
diff --git a/examples/carbon-tsdown/src/commands/ping.ts b/examples/carbon/src/commands/ping.ts
similarity index 100%
rename from examples/carbon-tsdown/src/commands/ping.ts
rename to examples/carbon/src/commands/ping.ts
diff --git a/examples/carbon-tsdown/src/commands/roll.ts b/examples/carbon/src/commands/roll.ts
similarity index 100%
rename from examples/carbon-tsdown/src/commands/roll.ts
rename to examples/carbon/src/commands/roll.ts
diff --git a/examples/carbon-tsdown/src/entry.ts b/examples/carbon/src/entry.ts
similarity index 100%
rename from examples/carbon-tsdown/src/entry.ts
rename to examples/carbon/src/entry.ts
diff --git a/examples/carbon-tsdown/src/i18n.ts b/examples/carbon/src/i18n.ts
similarity index 100%
rename from examples/carbon-tsdown/src/i18n.ts
rename to examples/carbon/src/i18n.ts
diff --git a/examples/carbon-tsdown/src/index.ts b/examples/carbon/src/index.ts
similarity index 100%
rename from examples/carbon-tsdown/src/index.ts
rename to examples/carbon/src/index.ts
diff --git a/examples/carbon-tsdown/src/locales/en/messages.po b/examples/carbon/src/locales/en/messages.po
similarity index 100%
rename from examples/carbon-tsdown/src/locales/en/messages.po
rename to examples/carbon/src/locales/en/messages.po
diff --git a/examples/carbon-tsdown/src/locales/fr/messages.po b/examples/carbon/src/locales/fr/messages.po
similarity index 100%
rename from examples/carbon-tsdown/src/locales/fr/messages.po
rename to examples/carbon/src/locales/fr/messages.po
diff --git a/examples/carbon-tsdown/tsconfig.json b/examples/carbon/tsconfig.json
similarity index 100%
rename from examples/carbon-tsdown/tsconfig.json
rename to examples/carbon/tsconfig.json
diff --git a/examples/carbon-tsdown/tsdown.config.ts b/examples/carbon/tsdown.config.ts
similarity index 100%
rename from examples/carbon-tsdown/tsdown.config.ts
rename to examples/carbon/tsdown.config.ts
diff --git a/examples/carbon-tsdown/wrangler.toml b/examples/carbon/wrangler.toml
similarity index 100%
rename from examples/carbon-tsdown/wrangler.toml
rename to examples/carbon/wrangler.toml
diff --git a/examples/nextjs-babel/.babelrc b/examples/nextjs-babel/.babelrc
deleted file mode 100644
index 3f16912..0000000
--- a/examples/nextjs-babel/.babelrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "presets": ["next/babel"],
- "plugins": ["@saykit/babel-plugin"]
-}
diff --git a/examples/nextjs/.babelrc b/examples/nextjs/.babelrc
new file mode 100644
index 0000000..97c8101
--- /dev/null
+++ b/examples/nextjs/.babelrc
@@ -0,0 +1,4 @@
+{
+ "presets": ["next/babel"],
+ "plugins": ["saykit"]
+}
diff --git a/examples/nextjs-babel/.gitignore b/examples/nextjs/.gitignore
similarity index 100%
rename from examples/nextjs-babel/.gitignore
rename to examples/nextjs/.gitignore
diff --git a/examples/nextjs-babel/next-env.d.ts b/examples/nextjs/next-env.d.ts
similarity index 84%
rename from examples/nextjs-babel/next-env.d.ts
rename to examples/nextjs/next-env.d.ts
index 20e7bcf..1511519 100644
--- a/examples/nextjs-babel/next-env.d.ts
+++ b/examples/nextjs/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import './.next/dev/types/routes.d.ts';
+import './.next/types/routes.d.ts';
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/examples/nextjs-babel/package.json b/examples/nextjs/package.json
similarity index 50%
rename from examples/nextjs-babel/package.json
rename to examples/nextjs/package.json
index b8be10f..5c092b0 100644
--- a/examples/nextjs-babel/package.json
+++ b/examples/nextjs/package.json
@@ -1,5 +1,5 @@
{
- "name": "nextjs-babel-example",
+ "name": "nextjs-example",
"private": true,
"type": "module",
"scripts": {
@@ -12,15 +12,20 @@
},
"dependencies": {
"@saykit/react": "workspace:^",
- "next": "^16.1.6",
- "react": "^19.2.4",
- "react-dom": "^19.2.4",
- "saykit": "workspace:^"
+ "next": "16.2.4",
+ "react": "^19.2.5",
+ "react-dom": "^19.2.5",
+ "saykit": "workspace:^",
+ "server-only": "^0.0.1"
},
"devDependencies": {
- "@saykit/babel-plugin": "workspace:^",
"@saykit/config": "workspace:^",
"@saykit/format-po": "workspace:^",
- "@types/react": "^19.2.13"
+ "@saykit/transform-js": "workspace:^",
+ "@saykit/transform-jsx": "workspace:^",
+ "@types/node": "^25.6.0",
+ "@types/react": "^19.2.14",
+ "@types/react-dom": "^19.2.3",
+ "babel-plugin-saykit": "workspace:^"
}
}
diff --git a/examples/nextjs/saykit.config.ts b/examples/nextjs/saykit.config.ts
new file mode 100644
index 0000000..b8404f8
--- /dev/null
+++ b/examples/nextjs/saykit.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from '@saykit/config';
+import createPoFormatter from '@saykit/format-po';
+import createJsTransformer from '@saykit/transform-js';
+import createJsxTransformer from '@saykit/transform-jsx';
+
+export default defineConfig({
+ sourceLocale: 'en',
+ locales: ['en', 'fr'],
+ buckets: [
+ {
+ include: ['src/**/*.{ts,tsx}'],
+ output: 'src/locales/{locale}/messages.{extension}',
+ formatter: createPoFormatter(),
+ transformer: [createJsTransformer(), createJsxTransformer()],
+ },
+ ],
+});
diff --git a/examples/nextjs-babel/src/app/[locale]/client-component.tsx b/examples/nextjs/src/app/[locale]/client-component.tsx
similarity index 100%
rename from examples/nextjs-babel/src/app/[locale]/client-component.tsx
rename to examples/nextjs/src/app/[locale]/client-component.tsx
diff --git a/examples/nextjs-babel/src/app/[locale]/layout.tsx b/examples/nextjs/src/app/[locale]/layout.tsx
similarity index 100%
rename from examples/nextjs-babel/src/app/[locale]/layout.tsx
rename to examples/nextjs/src/app/[locale]/layout.tsx
diff --git a/examples/nextjs-babel/src/app/[locale]/page.tsx b/examples/nextjs/src/app/[locale]/page.tsx
similarity index 100%
rename from examples/nextjs-babel/src/app/[locale]/page.tsx
rename to examples/nextjs/src/app/[locale]/page.tsx
diff --git a/examples/nextjs-babel/src/app/[locale]/server-component.tsx b/examples/nextjs/src/app/[locale]/server-component.tsx
similarity index 100%
rename from examples/nextjs-babel/src/app/[locale]/server-component.tsx
rename to examples/nextjs/src/app/[locale]/server-component.tsx
diff --git a/examples/nextjs-babel/src/i18n.ts b/examples/nextjs/src/i18n.ts
similarity index 100%
rename from examples/nextjs-babel/src/i18n.ts
rename to examples/nextjs/src/i18n.ts
diff --git a/examples/nextjs-babel/src/locales/en/messages.po b/examples/nextjs/src/locales/en/messages.po
similarity index 100%
rename from examples/nextjs-babel/src/locales/en/messages.po
rename to examples/nextjs/src/locales/en/messages.po
diff --git a/examples/nextjs-babel/src/locales/fr/messages.po b/examples/nextjs/src/locales/fr/messages.po
similarity index 100%
rename from examples/nextjs-babel/src/locales/fr/messages.po
rename to examples/nextjs/src/locales/fr/messages.po
diff --git a/examples/nextjs-babel/src/proxy.ts b/examples/nextjs/src/proxy.ts
similarity index 86%
rename from examples/nextjs-babel/src/proxy.ts
rename to examples/nextjs/src/proxy.ts
index fe42ce2..f5213b4 100644
--- a/examples/nextjs-babel/src/proxy.ts
+++ b/examples/nextjs/src/proxy.ts
@@ -1,14 +1,16 @@
// TODO: abstract this away into @saykit/react/server, @saykit/next or something
import { type NextRequest, NextResponse } from 'next/server';
-import saykitConfig from '../saykit.config';
+
+const SOURCE_LOCALE = 'en';
+const LOCALES = ['en', 'fr'];
export default function proxy(request: NextRequest) {
let respondWith = NextResponse.next();
- const defaultLocale = saykitConfig.sourceLocale;
+ const defaultLocale = SOURCE_LOCALE;
let pathLocale = fromUrlPathname(request.nextUrl.pathname);
- if (pathLocale && !saykitConfig.locales.includes(pathLocale)) pathLocale = undefined;
+ if (pathLocale && !LOCALES.includes(pathLocale)) pathLocale = undefined;
if (pathLocale === defaultLocale) {
// Redirect /{defaultLocale} to /
@@ -19,7 +21,7 @@ export default function proxy(request: NextRequest) {
//
else if (!pathLocale) {
let cookieLocale = fromRequestCookies(request.cookies) ?? defaultLocale;
- if (!saykitConfig.locales.includes(cookieLocale)) cookieLocale = defaultLocale;
+ if (!LOCALES.includes(cookieLocale)) cookieLocale = defaultLocale;
request.nextUrl.pathname = `/${cookieLocale}${request.nextUrl.pathname}`;
if (cookieLocale === defaultLocale) {
diff --git a/examples/nextjs/tsconfig.json b/examples/nextjs/tsconfig.json
new file mode 100644
index 0000000..7b19252
--- /dev/null
+++ b/examples/nextjs/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "include": ["src/**/*", ".next/dev/types/**/*.ts", "next-env.d.ts"],
+ "compilerOptions": { "paths": { "~/*": ["./src/*"] } }
+}
diff --git a/examples/tanstack-start/.gitignore b/examples/tanstack-start/.gitignore
new file mode 100644
index 0000000..10b8615
--- /dev/null
+++ b/examples/tanstack-start/.gitignore
@@ -0,0 +1,3 @@
+.tanstack/
+node_modules/
+src/locales/*/*.json
\ No newline at end of file
diff --git a/examples/tanstack-start/package.json b/examples/tanstack-start/package.json
new file mode 100644
index 0000000..5bfc775
--- /dev/null
+++ b/examples/tanstack-start/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "tanstack-start-example",
+ "private": true,
+ "type": "module",
+ "sideEffects": false,
+ "scripts": {
+ "check": "tsc --noEmit",
+ "extract": "saykit extract",
+ "compile": "saykit compile",
+ "build": "vite build && tsc --noEmit",
+ "dev": "vite dev"
+ },
+ "dependencies": {
+ "@saykit/react": "workspace:^",
+ "@tanstack/react-router": "^1.168.22",
+ "@tanstack/react-router-devtools": "^1.166.13",
+ "@tanstack/react-start": "^1.167.41",
+ "react": "^19.2.5",
+ "react-dom": "^19.2.5",
+ "saykit": "workspace:^"
+ },
+ "devDependencies": {
+ "@saykit/config": "workspace:^",
+ "@saykit/format-po": "workspace:^",
+ "@saykit/transform-js": "workspace:^",
+ "@saykit/transform-jsx": "workspace:^",
+ "@types/node": "^25.6.0",
+ "@types/react": "^19.2.14",
+ "@types/react-dom": "^19.2.3",
+ "@vitejs/plugin-react": "^6.0.1",
+ "unplugin-saykit": "workspace:^",
+ "vite": "^8.0.8"
+ }
+}
diff --git a/examples/tanstack-start/saykit.config.ts b/examples/tanstack-start/saykit.config.ts
new file mode 100644
index 0000000..b8404f8
--- /dev/null
+++ b/examples/tanstack-start/saykit.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from '@saykit/config';
+import createPoFormatter from '@saykit/format-po';
+import createJsTransformer from '@saykit/transform-js';
+import createJsxTransformer from '@saykit/transform-jsx';
+
+export default defineConfig({
+ sourceLocale: 'en',
+ locales: ['en', 'fr'],
+ buckets: [
+ {
+ include: ['src/**/*.{ts,tsx}'],
+ output: 'src/locales/{locale}/messages.{extension}',
+ formatter: createPoFormatter(),
+ transformer: [createJsTransformer(), createJsxTransformer()],
+ },
+ ],
+});
diff --git a/examples/tanstack-start/src/i18n.ts b/examples/tanstack-start/src/i18n.ts
new file mode 100644
index 0000000..18ff8ba
--- /dev/null
+++ b/examples/tanstack-start/src/i18n.ts
@@ -0,0 +1,11 @@
+import { Say } from 'saykit';
+
+const say = new Say({
+ locales: ['en', 'fr'],
+ messages: {
+ en: await import('./locales/en/messages.json').then((m) => m.default),
+ fr: await import('./locales/fr/messages.json').then((m) => m.default),
+ },
+});
+
+export default say;
diff --git a/examples/tanstack-start/src/locales/en/messages.po b/examples/tanstack-start/src/locales/en/messages.po
new file mode 100644
index 0000000..645d445
--- /dev/null
+++ b/examples/tanstack-start/src/locales/en/messages.po
@@ -0,0 +1,15 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: en\n"
+"X-Generator: saykit\n"
+
+msgid "Count: {count}"
+msgstr "Count: {count}"
+
+msgid "Increment"
+msgstr "Increment"
+
+msgid "Reset"
+msgstr "Reset"
diff --git a/examples/tanstack-start/src/locales/fr/messages.po b/examples/tanstack-start/src/locales/fr/messages.po
new file mode 100644
index 0000000..b325550
--- /dev/null
+++ b/examples/tanstack-start/src/locales/fr/messages.po
@@ -0,0 +1,15 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"X-Generator: saykit\n"
+
+msgid "Count: {count}"
+msgstr "Compteur : {count}"
+
+msgid "Increment"
+msgstr "Incrémenter"
+
+msgid "Reset"
+msgstr "Réinitialiser"
diff --git a/examples/tanstack-start/src/routeTree.gen.ts b/examples/tanstack-start/src/routeTree.gen.ts
new file mode 100644
index 0000000..eada16c
--- /dev/null
+++ b/examples/tanstack-start/src/routeTree.gen.ts
@@ -0,0 +1,99 @@
+/* eslint-disable */
+
+// @ts-nocheck
+
+// noinspection JSUnusedGlobalSymbols
+
+// This file was automatically generated by TanStack Router.
+// You should NOT make any changes in this file as it will be overwritten.
+// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
+
+import { Route as rootRouteImport } from './routes/__root'
+import { Route as Char123LocaleChar125RouteRouteImport } from './routes/{-$locale}/route'
+import { Route as Char123LocaleChar125IndexRouteImport } from './routes/{-$locale}/index'
+
+const Char123LocaleChar125RouteRoute =
+ Char123LocaleChar125RouteRouteImport.update({
+ id: '/{-$locale}',
+ path: '/{-$locale}',
+ getParentRoute: () => rootRouteImport,
+ } as any)
+const Char123LocaleChar125IndexRoute =
+ Char123LocaleChar125IndexRouteImport.update({
+ id: '/',
+ path: '/',
+ getParentRoute: () => Char123LocaleChar125RouteRoute,
+ } as any)
+
+export interface FileRoutesByFullPath {
+ '/{-$locale}': typeof Char123LocaleChar125RouteRouteWithChildren
+ '/{-$locale}/': typeof Char123LocaleChar125IndexRoute
+}
+export interface FileRoutesByTo {
+ '/{-$locale}': typeof Char123LocaleChar125IndexRoute
+}
+export interface FileRoutesById {
+ __root__: typeof rootRouteImport
+ '/{-$locale}': typeof Char123LocaleChar125RouteRouteWithChildren
+ '/{-$locale}/': typeof Char123LocaleChar125IndexRoute
+}
+export interface FileRouteTypes {
+ fileRoutesByFullPath: FileRoutesByFullPath
+ fullPaths: '/{-$locale}' | '/{-$locale}/'
+ fileRoutesByTo: FileRoutesByTo
+ to: '/{-$locale}'
+ id: '__root__' | '/{-$locale}' | '/{-$locale}/'
+ fileRoutesById: FileRoutesById
+}
+export interface RootRouteChildren {
+ Char123LocaleChar125RouteRoute: typeof Char123LocaleChar125RouteRouteWithChildren
+}
+
+declare module '@tanstack/react-router' {
+ interface FileRoutesByPath {
+ '/{-$locale}': {
+ id: '/{-$locale}'
+ path: '/{-$locale}'
+ fullPath: '/{-$locale}'
+ preLoaderRoute: typeof Char123LocaleChar125RouteRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/{-$locale}/': {
+ id: '/{-$locale}/'
+ path: '/'
+ fullPath: '/{-$locale}/'
+ preLoaderRoute: typeof Char123LocaleChar125IndexRouteImport
+ parentRoute: typeof Char123LocaleChar125RouteRoute
+ }
+ }
+}
+
+interface Char123LocaleChar125RouteRouteChildren {
+ Char123LocaleChar125IndexRoute: typeof Char123LocaleChar125IndexRoute
+}
+
+const Char123LocaleChar125RouteRouteChildren: Char123LocaleChar125RouteRouteChildren =
+ {
+ Char123LocaleChar125IndexRoute: Char123LocaleChar125IndexRoute,
+ }
+
+const Char123LocaleChar125RouteRouteWithChildren =
+ Char123LocaleChar125RouteRoute._addFileChildren(
+ Char123LocaleChar125RouteRouteChildren,
+ )
+
+const rootRouteChildren: RootRouteChildren = {
+ Char123LocaleChar125RouteRoute: Char123LocaleChar125RouteRouteWithChildren,
+}
+export const routeTree = rootRouteImport
+ ._addFileChildren(rootRouteChildren)
+ ._addFileTypes()
+
+import type { getRouter } from './router.tsx'
+import type { createStart } from '@tanstack/react-start'
+declare module '@tanstack/react-start' {
+ interface Register {
+ ssr: true
+ router: Awaited>
+ }
+}
diff --git a/examples/tanstack-start/src/router.tsx b/examples/tanstack-start/src/router.tsx
new file mode 100644
index 0000000..31c2f2d
--- /dev/null
+++ b/examples/tanstack-start/src/router.tsx
@@ -0,0 +1,19 @@
+import { createRouter } from '@tanstack/react-router';
+import { routeTree } from './routeTree.gen';
+
+export function getRouter() {
+ const router = createRouter({
+ routeTree,
+ defaultErrorComponent: () => 'Error',
+ defaultNotFoundComponent: () => 'Not Found',
+ scrollRestoration: true,
+ });
+
+ return router;
+}
+
+declare module '@tanstack/react-router' {
+ interface Register {
+ router: ReturnType;
+ }
+}
diff --git a/examples/tanstack-start/src/routes/__root.tsx b/examples/tanstack-start/src/routes/__root.tsx
new file mode 100644
index 0000000..28ad184
--- /dev/null
+++ b/examples/tanstack-start/src/routes/__root.tsx
@@ -0,0 +1,44 @@
+import { HeadContent, Outlet, Scripts, createRootRoute } from '@tanstack/react-router';
+import { TanStackRouterDevtools } from '@tanstack/react-router-devtools';
+import * as React from 'react';
+
+export const Route = createRootRoute({
+ head: () => ({
+ meta: [
+ {
+ charSet: 'utf-8',
+ },
+ {
+ name: 'viewport',
+ content: 'width=device-width, initial-scale=1',
+ },
+ {
+ title: 'TanStack Start Starter',
+ },
+ ],
+ }),
+ component: RootComponent,
+});
+
+function RootComponent() {
+ return (
+
+
+
+
+ );
+}
+
+function RootDocument({ children }: { children: React.ReactNode }) {
+ return (
+
+
+
+
+
+ {children}
+
+
+
+ );
+}
diff --git a/examples/tanstack-start/src/routes/{-$locale}/index.tsx b/examples/tanstack-start/src/routes/{-$locale}/index.tsx
new file mode 100644
index 0000000..093d6ce
--- /dev/null
+++ b/examples/tanstack-start/src/routes/{-$locale}/index.tsx
@@ -0,0 +1,27 @@
+import { Say } from '@saykit/react';
+import { createFileRoute } from '@tanstack/react-router';
+import { useState } from 'react';
+
+export const Route = createFileRoute('/{-$locale}/')({
+ component: Home,
+});
+
+function Home() {
+ const [count, setCount] = useState(0);
+
+ return (
+
+
+ Count: {count}
+
+
+
+
+
+
+ );
+}
diff --git a/examples/tanstack-start/src/routes/{-$locale}/route.tsx b/examples/tanstack-start/src/routes/{-$locale}/route.tsx
new file mode 100644
index 0000000..fd32c75
--- /dev/null
+++ b/examples/tanstack-start/src/routes/{-$locale}/route.tsx
@@ -0,0 +1,18 @@
+import { SayProvider } from '@saykit/react/client';
+import { createFileRoute, Outlet } from '@tanstack/react-router';
+import say from '../../i18n';
+
+export const Route = createFileRoute('/{-$locale}')({
+ component: RouteLayout,
+});
+
+function RouteLayout() {
+ const locale = say.match([Route.useParams().locale || 'en']);
+ const messages = say.activate(locale).messages;
+
+ return (
+
+
+
+ );
+}
diff --git a/examples/nextjs-babel/tsconfig.json b/examples/tanstack-start/tsconfig.json
similarity index 50%
rename from examples/nextjs-babel/tsconfig.json
rename to examples/tanstack-start/tsconfig.json
index 86a4dc1..070ea5d 100644
--- a/examples/nextjs-babel/tsconfig.json
+++ b/examples/tanstack-start/tsconfig.json
@@ -1,7 +1,7 @@
{
- "extends": "../../tsconfig.react.json",
- "include": ["${configDir}", ".next/types/**/*.ts"],
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
+ "jsx": "preserve",
"allowJs": true,
"noEmit": true,
"incremental": true
diff --git a/examples/tanstack-start/vite.config.ts b/examples/tanstack-start/vite.config.ts
new file mode 100644
index 0000000..ef04c98
--- /dev/null
+++ b/examples/tanstack-start/vite.config.ts
@@ -0,0 +1,11 @@
+import { tanstackStart } from '@tanstack/react-start/plugin/vite';
+import react from '@vitejs/plugin-react';
+import saykit from 'unplugin-saykit/vite';
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ server: {
+ port: 3000,
+ },
+ plugins: [tanstackStart(), react(), saykit()],
+});
diff --git a/package.json b/package.json
index 7642a25..aaf7b0e 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,8 @@
"private": true,
"workspaces": [
"examples/*",
- "packages/*"
+ "packages/*",
+ "website"
],
"scripts": {
"check": "turbo run check",
@@ -22,18 +23,16 @@
"devDependencies": {
"@changesets/cli": "^2.30.0",
"@changesets/config": "^3.1.3",
- "@types/node": "^25.2.3",
- "@vitest/coverage-v8": "^4.0.18",
+ "@types/node": "^25.6.0",
+ "@vitest/coverage-v8": "^4.1.4",
"husky": "^9.1.7",
- "oxfmt": "^0.36.0",
- "oxlint": "^1.51.0",
+ "oxfmt": "^0.45.0",
+ "oxlint": "^1.60.0",
"ts-patch": "^3.3.0",
- "tsdown": "^0.20.3",
- "turbo": "^2.8.5",
- "typescript": "^5.9.3",
- "typescript-transform-paths": "^3.5.6",
- "vite-tsconfig-paths": "^6.1.0",
- "vitest": "^4.0.18"
+ "tsdown": "^0.21.9",
+ "turbo": "^2.9.6",
+ "typescript": "^6.0.3",
+ "vitest": "^4.1.4"
},
- "packageManager": "pnpm@10.31.0"
+ "packageManager": "pnpm@10.33.0"
}
diff --git a/packages/config/package.json b/packages/config/package.json
index 7ac3017..f28e182 100644
--- a/packages/config/package.json
+++ b/packages/config/package.json
@@ -30,6 +30,14 @@
".": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
+ },
+ "./features/loader": {
+ "types": "./dist/features/loader/index.d.mts",
+ "default": "./dist/features/loader/index.mjs"
+ },
+ "./features/messages": {
+ "types": "./dist/features/messages/index.d.mts",
+ "default": "./dist/features/messages/index.mjs"
}
},
"publishConfig": {
@@ -38,21 +46,27 @@
},
"scripts": {
"check": "tsc --noEmit",
+ "test": "vitest",
+ "coverage": "vitest run --coverage",
"build": "tsdown",
"prepack": "pnpm build"
},
"dependencies": {
"@commander-js/extra-typings": "^14.0.0",
- "@saykit/babel-plugin": "workspace:*",
"commander": "^14.0.3",
- "picomatch": "^4.0.3",
+ "js-sha256": "^0.11.1",
+ "picomatch": "^4.0.4",
"zod": "^4.3.6"
},
"devDependencies": {
- "@types/picomatch": "^4.0.2",
- "typescript": "^5.9.3"
+ "@types/picomatch": "^4.0.3"
},
"peerDependencies": {
"typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
}
diff --git a/packages/config/src/commands/build.ts b/packages/config/src/commands/build.ts
index 3913cfa..7a17587 100644
--- a/packages/config/src/commands/build.ts
+++ b/packages/config/src/commands/build.ts
@@ -1,7 +1,7 @@
import { Command } from '@commander-js/extra-typings';
-import { useConfig } from '~/features/loader/resolve.js';
+import { resolveConfig } from '~/features/loader/resolve.js';
import Logger from '~/features/logger.js';
-import { BucketBuildWorker } from '~/features/worker.js';
+import { BucketBuildWorker } from '~/features/workers/build-worker.js';
export default new Command()
.name('build')
@@ -10,7 +10,7 @@ export default new Command()
.option('-q, --quiet', 'suppress all logging', false)
// .option('-w, --watch', 'watch source files for changes', false)
.action(async (options) => {
- const config = await useConfig('saykit');
+ const config = await resolveConfig('saykit');
const logger = new Logger(options);
logger.header('🏗 Building Messages');
@@ -20,5 +20,5 @@ export default new Command()
// if (options.watch) await worker.watch();
});
- await Promise.allSettled(tasks);
+ await Promise.all(tasks);
});
diff --git a/packages/config/src/commands/compile.ts b/packages/config/src/commands/compile.ts
index 6c380e6..97568f0 100644
--- a/packages/config/src/commands/compile.ts
+++ b/packages/config/src/commands/compile.ts
@@ -1,14 +1,14 @@
import { Command } from '@commander-js/extra-typings';
-import { useConfig } from '~/features/loader/resolve.js';
+import { resolveConfig } from '~/features/loader/resolve.js';
import Logger from '~/features/logger.js';
-import { BucketCompileWorker } from '~/features/worker.js';
+import { BucketCompileWorker } from '~/features/workers/compile-worker.js';
export default new Command('compile')
.description('Compile translations into runtime-ready locale files')
.option('-v, --verbose', 'enable verbose logging', false)
.option('-q, --quiet', 'suppress all logging', false)
.action(async (options) => {
- const config = await useConfig('saykit');
+ const config = await resolveConfig('saykit');
const logger = new Logger(options);
logger.header('🛠 Compiling Translations');
@@ -17,5 +17,5 @@ export default new Command('compile')
await worker.compileAll();
});
- await Promise.allSettled(tasks);
+ await Promise.all(tasks);
});
diff --git a/packages/config/src/commands/extract.ts b/packages/config/src/commands/extract.ts
index 5473a37..b2c1c2c 100644
--- a/packages/config/src/commands/extract.ts
+++ b/packages/config/src/commands/extract.ts
@@ -1,14 +1,14 @@
import { Command } from '@commander-js/extra-typings';
-import { useConfig } from '~/features/loader/resolve.js';
+import { resolveConfig } from '~/features/loader/resolve.js';
import Logger from '~/features/logger.js';
-import { BucketExtractWorker } from '~/features/worker.js';
+import { BucketExtractWorker } from '~/features/workers/extract-worker.js';
export default new Command('extract')
.description('Extract messages from source files')
.option('-v, --verbose', 'enable verbose logging', false)
.option('-q, --quiet', 'suppress all logging', false)
.action(async (options) => {
- const config = await useConfig('saykit');
+ const config = await resolveConfig('saykit');
const logger = new Logger(options);
logger.header('🛠 Extracting Messages');
@@ -18,5 +18,10 @@ export default new Command('extract')
await worker.writeAll();
});
- await Promise.allSettled(tasks);
+ const results = await Promise.allSettled(tasks);
+ const rejections = results.filter((r): r is PromiseRejectedResult => r.status === 'rejected');
+ if (rejections.length > 0) {
+ const errors = rejections.map((r) => r.reason).join('\n');
+ throw new Error(`Bucket extraction failed:\n${errors}`);
+ }
});
diff --git a/packages/config/src/define.ts b/packages/config/src/define.ts
deleted file mode 100644
index 925a8cf..0000000
--- a/packages/config/src/define.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { input } from 'zod';
-import type { Configuration } from './shapes.js';
-
-export function defineConfig>(config: C): C {
- return config;
-}
diff --git a/packages/config/src/features/catalogue/extractor.ts b/packages/config/src/features/catalogue/extractor.ts
new file mode 100644
index 0000000..169cc99
--- /dev/null
+++ b/packages/config/src/features/catalogue/extractor.ts
@@ -0,0 +1,17 @@
+import { readFile } from 'node:fs/promises';
+import { relative } from 'node:path';
+import type { Bucket, Message } from '~/shapes.js';
+
+export async function extractMessagesFromFile(path: string, bucket: Bucket): Promise {
+ const content = await readFile(path, 'utf8').catch(() => '');
+ if (!content) return [];
+
+ const messages = bucket.transformer.extract(content, path);
+ return messages.map((message) => ({
+ ...message,
+ translation: message.translation ?? message.message,
+ references: message.references.map((reference) =>
+ relative(process.cwd(), reference).replaceAll('\\', '/'),
+ ),
+ }));
+}
diff --git a/packages/config/src/features/catalogue/merge.ts b/packages/config/src/features/catalogue/merge.ts
new file mode 100644
index 0000000..d66840a
--- /dev/null
+++ b/packages/config/src/features/catalogue/merge.ts
@@ -0,0 +1,53 @@
+import { generateHash } from '~/features/messages/hash.js';
+import type { Message } from '~/shapes.js';
+
+function mergeUnique(...items: T[]) {
+ return Array.from(new Set(items.flat()));
+}
+
+function getMessageKey(message: Message) {
+ return message.id ?? generateHash(message.message, message.context);
+}
+
+export function mergeExtractedMessages(messages: Message[]) {
+ const mergedMessages = messages.reduce((map, message) => {
+ const key = getMessageKey(message);
+ const existing = map.get(key) ?? message;
+
+ map.set(key, {
+ ...existing,
+ comments: mergeUnique(...existing.comments, ...message.comments),
+ references: mergeUnique(...existing.references, ...message.references),
+ });
+
+ return map;
+ }, new Map());
+
+ return Array.from(mergedMessages.values());
+}
+
+export function reconcileLocaleMessages(existingMessages: Message[], nextMessages: Message[]) {
+ const existingMessagesByKey = existingMessages.reduce((map, message) => {
+ map.set(getMessageKey(message), message);
+ return map;
+ }, new Map());
+
+ const reconciledMessages = nextMessages.reduce((map, message) => {
+ const key = getMessageKey(message);
+ const existingMessage = existingMessagesByKey.get(key);
+
+ map.set(key, {
+ message: message.message,
+ translation: undefined,
+ ...existingMessage,
+ id: message.id,
+ context: message.context,
+ comments: message.comments,
+ references: message.references,
+ });
+
+ return map;
+ }, new Map());
+
+ return Array.from(reconciledMessages.values());
+}
diff --git a/packages/config/src/features/catalogue/path.ts b/packages/config/src/features/catalogue/path.ts
new file mode 100644
index 0000000..3c11021
--- /dev/null
+++ b/packages/config/src/features/catalogue/path.ts
@@ -0,0 +1,13 @@
+import { resolve } from 'node:path';
+import type { Bucket } from '~/shapes.js';
+
+export function expandBucketOutputPath(
+ bucket: Bucket,
+ locale: string,
+ extension = bucket.formatter.extension,
+) {
+ const outputMessageTemplate = bucket.output
+ .replaceAll('{locale}', locale)
+ .replaceAll('{extension}', extension.slice(1));
+ return resolve(outputMessageTemplate);
+}
diff --git a/packages/config/src/features/catalogue/storage.ts b/packages/config/src/features/catalogue/storage.ts
new file mode 100644
index 0000000..f6bb175
--- /dev/null
+++ b/packages/config/src/features/catalogue/storage.ts
@@ -0,0 +1,25 @@
+import { mkdir, readFile, writeFile } from 'node:fs/promises';
+import { dirname } from 'node:path';
+import type { Bucket, Message } from '~/shapes.js';
+import { expandBucketOutputPath } from './path.js';
+
+export async function readCatalogueMessages(
+ bucket: Bucket,
+ locale: string,
+ path = expandBucketOutputPath(bucket, locale),
+) {
+ const content = await readFile(path, 'utf8').catch(() => '');
+ if (!content) return [];
+ return bucket.formatter.parse(content, { locale });
+}
+
+export async function writeCatalogueMessages(
+ bucket: Bucket,
+ locale: string,
+ messages: Message[],
+ path = expandBucketOutputPath(bucket, locale),
+) {
+ const content = bucket.formatter.stringify(messages, { locale });
+ await mkdir(dirname(path), { recursive: true });
+ await writeFile(path, content);
+}
diff --git a/packages/config/src/features/extract.ts b/packages/config/src/features/extract.ts
deleted file mode 100644
index b90dba9..0000000
--- a/packages/config/src/features/extract.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { mkdir, readFile, writeFile } from 'node:fs/promises';
-import { dirname, relative, resolve } from 'node:path';
-import { collectMessages, generateHash } from '@saykit/babel-plugin/core';
-import type { Bucket, Message } from '~/shapes.js';
-
-//
-
-export async function extractMessages(path: string): Promise {
- const content = await readFile(path, 'utf8').catch(() => '');
- const messages = collectMessages(path, content);
- return messages.map((m) => ({
- message: m.toICUString(),
- translation: m.toICUString(),
- id: m.descriptor.id,
- context: m.descriptor.context,
- comments: m.comments,
- references: m.references //
- .map((r) => relative(process.cwd(), r).replaceAll('\\', '/')),
- }));
-}
-
-function mergeUnique(...items: T[]) {
- return Array.from(new Set(items.flat()));
-}
-
-export function mergeMessages(messages: Message[]) {
- const mergedMessages = messages.reduce((map, message) => {
- const key = message.id ?? generateHash(message.message, message.context);
- const existing = map.get(key) ?? message;
- map.set(key, {
- ...existing,
- comments: mergeUnique(...existing.comments, ...message.comments),
- references: mergeUnique(...existing.references, ...message.references),
- });
- return map;
- }, new Map());
-
- return Array.from(mergedMessages.values());
-}
-
-export function reconcileMessages(existingMessages: Message[], newMessages: Message[]) {
- const existingMessagesMap = existingMessages.reduce((map, message) => {
- const key = message.id ?? generateHash(message.message, message.context);
- map.set(key, message);
- return map;
- }, new Map());
-
- const updatedMessagesMap = newMessages.reduce((map, message) => {
- const key = message.id ?? generateHash(message.message, message.context);
- const existingMessage = existingMessagesMap.get(key);
- map.set(key, {
- message: message.message,
- translation: undefined,
- ...existingMessage,
- id: message.id,
- context: message.context,
- comments: message.comments,
- references: message.references,
- });
- return map;
- }, new Map());
-
- return Array.from(updatedMessagesMap.values());
-}
-
-//
-
-export function expandOutputPath(
- bucket: Bucket,
- locale: string,
- extension = bucket.formatter.extension,
-) {
- const outputMessageTemplate = bucket.output
- .replaceAll('{locale}', locale)
- .replaceAll('{extension}', extension.slice(1));
- return resolve(outputMessageTemplate);
-}
-
-export async function readMessagesFromDisk(
- bucket: Bucket,
- locale: string,
- path = expandOutputPath(bucket, locale),
-) {
- const content = await readFile(path, 'utf8').catch(() => '');
- if (!content) return [];
- const messages = await bucket.formatter.parse(content, { locale });
- return messages;
-}
-
-export async function writeMessagesToDisk(
- bucket: Bucket,
- locale: string,
- messages: Message[],
- path = expandOutputPath(bucket, locale),
-) {
- const content = await bucket.formatter.stringify(messages, { locale });
- await mkdir(dirname(path), { recursive: true });
- await writeFile(path, content);
-}
diff --git a/packages/config/src/features/loader/explorer.ts b/packages/config/src/features/loader/explorer.ts
deleted file mode 100644
index 4e7fcf9..0000000
--- a/packages/config/src/features/loader/explorer.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { access, readFile } from 'node:fs/promises';
-import { join } from 'node:path';
-
-function getFilesToTry(name: Name) {
- return [
- `${name}.config.js`,
- `${name}.config.cjs`,
- `${name}.config.mjs`,
- `${name}.config.ts`,
- `${name}.config.mts`,
- `${name}.config.cts`,
- ] as const;
-}
-
-export async function findConfigFile(moduleName: string, projectDir: string) {
- for (const fileName of getFilesToTry(moduleName)) {
- try {
- const id = join(projectDir, fileName);
- await access(id);
- const content = await readFile(id, 'utf8');
- return { id, content };
- } catch {}
- }
-
- return null;
-}
diff --git a/packages/config/src/features/loader/files.ts b/packages/config/src/features/loader/files.ts
new file mode 100644
index 0000000..7002eeb
--- /dev/null
+++ b/packages/config/src/features/loader/files.ts
@@ -0,0 +1,29 @@
+import { existsSync, readFileSync } from 'node:fs';
+import { join } from 'node:path';
+
+const SUPPORTED_CONFIG_FILES = [
+ 'saykit.config.js',
+ 'saykit.config.cjs',
+ 'saykit.config.mjs',
+ 'saykit.config.ts',
+ 'saykit.config.mts',
+ 'saykit.config.cts',
+] as const;
+
+export function getConfigFileCandidates(name: string) {
+ return SUPPORTED_CONFIG_FILES.map((file) => file.replace('saykit', name));
+}
+
+export function findConfigFile(moduleName: string, projectDir: string) {
+ for (const fileName of getConfigFileCandidates(moduleName)) {
+ const id = join(projectDir, fileName);
+ if (!existsSync(id)) continue;
+
+ return {
+ id,
+ content: readFileSync(id, 'utf8'),
+ };
+ }
+
+ return null;
+}
diff --git a/packages/config/src/features/loader/index.ts b/packages/config/src/features/loader/index.ts
new file mode 100644
index 0000000..2dbab53
--- /dev/null
+++ b/packages/config/src/features/loader/index.ts
@@ -0,0 +1 @@
+export { resolveConfig } from './resolve.js';
diff --git a/packages/config/src/features/loader/loaders.ts b/packages/config/src/features/loader/loaders.ts
deleted file mode 100644
index df8518a..0000000
--- a/packages/config/src/features/loader/loaders.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { rm, writeFile } from 'node:fs/promises';
-import { createRequire } from 'node:module';
-import { dirname } from 'node:path';
-import { pathToFileURL } from 'node:url';
-
-export type Loader = (path: string, content: string) => Promise;
-
-export const js: Loader = async (path, _content) => {
- try {
- const { href } = pathToFileURL(path);
- const module = await import(href);
- return module.default;
- } catch (importError) {
- try {
- const require = globalThis.require ?? createRequire(path);
- const module = require(path);
- delete require.cache[require.resolve(path)];
- return module?.default ?? module;
- } catch (requireError) {
- throw new Error('Failed to import module', {
- cause: [importError, requireError],
- });
- }
- }
-};
-
-export const ts: Loader = async (path, content) => {
- const ts = await import('typescript');
- const outputPath = `${path}.${Date.now()}.js`;
-
- try {
- const tsConfigPath = ts.findConfigFile(dirname(path), ts.sys.fileExists) || 'tsconfig.json';
- const { config: tsConfig, error } = ts //
- .readConfigFile(tsConfigPath, ts.sys.readFile);
- if (error) throw error;
-
- tsConfig.compilerOptions = {
- ...tsConfig.compilerOptions,
- module: ts.ModuleKind.ES2022,
- moduleResolution: ts.ModuleResolutionKind.Bundler,
- target: ts.ScriptTarget.ES2022,
- noEmit: false,
- };
-
- const transpiledContent = ts.transpileModule(content, tsConfig).outputText;
- await writeFile(outputPath, transpiledContent);
-
- return await js(outputPath, transpiledContent);
- } catch (error) {
- throw new Error('Failed to import module', {
- cause: error,
- });
- } finally {
- if (ts.sys.fileExists(outputPath)) await rm(outputPath);
- }
-};
-
-export default Object.freeze({
- '.js': js,
- '.mjs': js,
- '.cjs': js,
- '.ts': ts,
- '.mts': ts,
- '.cts': ts,
-});
diff --git a/packages/config/src/features/loader/module.ts b/packages/config/src/features/loader/module.ts
new file mode 100644
index 0000000..afc1121
--- /dev/null
+++ b/packages/config/src/features/loader/module.ts
@@ -0,0 +1,55 @@
+import { rmSync, writeFileSync } from 'node:fs';
+import { createRequire } from 'node:module';
+import { dirname } from 'node:path';
+
+export type Loader = (path: string, content: string) => unknown;
+
+function transpileAndRequire(path: string, content: string) {
+ const require = createRequire(path);
+ const ts = require('typescript');
+ const outputPath = `${path}.${process.pid}.saykit.config.cjs`;
+
+ try {
+ const tsConfigPath = ts.findConfigFile(dirname(path), ts.sys.fileExists);
+ const { config: tsConfig, error } = tsConfigPath
+ ? ts.readConfigFile(tsConfigPath, ts.sys.readFile)
+ : { config: {}, error: null };
+ if (error) throw error;
+
+ tsConfig.compilerOptions = {
+ ...tsConfig.compilerOptions,
+ allowJs: true,
+ esModuleInterop: true,
+ module: ts.ModuleKind.CommonJS,
+ moduleResolution: ts.ModuleResolutionKind.NodeJs,
+ target: ts.ScriptTarget.ES2022,
+ noEmit: false,
+ };
+
+ const transpiledContent = ts.transpileModule(content, tsConfig).outputText;
+ writeFileSync(outputPath, transpiledContent);
+
+ const resolved = require.resolve(outputPath);
+ delete require.cache[resolved];
+
+ const module = require(outputPath);
+ delete require.cache[resolved];
+ return module?.default ?? module;
+ } catch (error) {
+ throw new Error('Failed to import module', { cause: error });
+ } finally {
+ if (ts.sys.fileExists(outputPath)) rmSync(outputPath);
+ }
+}
+
+export const js: Loader = (path, content) => transpileAndRequire(path, content);
+export const ts: Loader = (path, content) => transpileAndRequire(path, content);
+
+export const configLoaders = Object.freeze({
+ '.js': js,
+ '.mjs': js,
+ '.cjs': js,
+ '.ts': ts,
+ '.mts': ts,
+ '.cts': ts,
+});
diff --git a/packages/config/src/features/loader/resolve.ts b/packages/config/src/features/loader/resolve.ts
index 96d5bff..d43d678 100644
--- a/packages/config/src/features/loader/resolve.ts
+++ b/packages/config/src/features/loader/resolve.ts
@@ -1,25 +1,27 @@
import { extname } from 'node:path';
import { Configuration } from '~/shapes.js';
-import { findConfigFile } from './explorer.js';
-import loaders from './loaders.js';
+import { findConfigFile } from './files.js';
+import { configLoaders } from './module.js';
-export async function useConfig(name = 'saykit') {
- const file = await findConfigFile(name, process.cwd());
+function unwrapNamedConfig(config: object, name: string) {
+ if (!(name in config) || !config[name as keyof object]) return config;
+ return config[name as keyof object];
+}
+
+export function resolveConfig(name = 'saykit') {
+ const file = findConfigFile(name, process.cwd());
if (!file) throw new Error(`Could not find config file for "${name}"`);
const ext = extname(file.id).toLowerCase();
- const loader = ext in loaders ? loaders[ext as keyof typeof loaders] : null;
- if (!loader) throw new Error(`Unsupported config file type "${ext}" for "${name}"`);
+ const load = ext in configLoaders ? configLoaders[ext as keyof typeof configLoaders] : null;
+ if (!load) throw new Error(`Unsupported config file type "${ext}" for "${name}"`);
- let config = await loader(file.id, file.content);
+ let config = load(file.id, file.content);
if (!config || typeof config !== 'object') throw new Error(`Invalid config file for "${name}"`);
- if (config && typeof config === 'object' && 'saykit' in config) config = config.saykit;
+ config = unwrapNamedConfig(config, name);
- const result = await Configuration.safeParseAsync(config);
- if (result.error)
- throw new Error(`Invalid config file for "${name}"`, {
- cause: result.error,
- });
+ const result = Configuration.safeParse(config);
+ if (result.error) throw new Error(`Invalid config file for "${name}"`, { cause: result.error });
return result.data;
}
diff --git a/packages/config/src/features/messages/convert.test.ts b/packages/config/src/features/messages/convert.test.ts
new file mode 100644
index 0000000..12a977e
--- /dev/null
+++ b/packages/config/src/features/messages/convert.test.ts
@@ -0,0 +1,121 @@
+import { describe, expect, it } from 'vitest';
+import { convertMessageToIcu } from './convert.js';
+import {
+ ArgumentMessage,
+ ChoiceMessage,
+ CompositeMessage,
+ ElementMessage,
+ LiteralMessage,
+} from './types.js';
+
+const dummy = undefined as any;
+
+describe('convertMessageToIcu', () => {
+ it('should generate literal messages', () => {
+ const message = new LiteralMessage('Hello');
+ expect(convertMessageToIcu(message)) //
+ .toMatchInlineSnapshot('"Hello"');
+ });
+
+ it('should generate argument messages', () => {
+ const message = new ArgumentMessage('name', dummy);
+ expect(convertMessageToIcu(message)) //
+ .toMatchInlineSnapshot('"{name}"');
+ });
+
+ it('should generate element messages', () => {
+ const message = new ElementMessage('0', [new LiteralMessage('Hello world!')], dummy);
+ expect(convertMessageToIcu(message)) //
+ .toMatchInlineSnapshot('"<0>Hello world!0>"');
+ });
+
+ it('should generate choice messages with numeric identifiers as `=n`', () => {
+ const message = new ChoiceMessage(
+ 'plural',
+ 'count',
+ [
+ { identifier: '0', value: new LiteralMessage('none') },
+ { identifier: 'one', value: new LiteralMessage('one') },
+ { identifier: 'other', value: new LiteralMessage('many') },
+ ],
+ dummy,
+ );
+ expect(convertMessageToIcu(message)).toMatchInlineSnapshot(`
+ "{count, plural,
+ =0 {none}
+ one {one}
+ other {many}
+ }"
+ `);
+ });
+
+ it('should generate choice messages with ordinal kind', () => {
+ const message = new ChoiceMessage(
+ 'ordinal',
+ 'place',
+ [
+ { identifier: '1', value: new LiteralMessage('first') },
+ { identifier: '2', value: new LiteralMessage('second') },
+ { identifier: '3', value: new LiteralMessage('third') },
+ { identifier: 'other', value: new LiteralMessage('other') },
+ ],
+ dummy,
+ );
+ expect(convertMessageToIcu(message)).toMatchInlineSnapshot(`
+ "{place, selectordinal,
+ =1 {first}
+ =2 {second}
+ =3 {third}
+ other {other}
+ }"
+ `);
+ });
+
+ it('should generate choice messages with select kind', () => {
+ const message = new ChoiceMessage(
+ 'select',
+ 'gender',
+ [
+ { identifier: 'male', value: new LiteralMessage('He') },
+ { identifier: 'female', value: new LiteralMessage('She') },
+ { identifier: 'other', value: new LiteralMessage('They') },
+ ],
+ dummy,
+ );
+ expect(convertMessageToIcu(message)).toMatchInlineSnapshot(`
+ "{gender, select,
+ male {He}
+ female {She}
+ other {They}
+ }"
+ `);
+ });
+
+ it('should generate composite messages', () => {
+ const message = new CompositeMessage(
+ {},
+ [],
+ [],
+ [new LiteralMessage('Hello, '), new ArgumentMessage('name', dummy), new LiteralMessage('!')],
+ dummy,
+ );
+ expect(convertMessageToIcu(message)) //
+ .toMatchInlineSnapshot('"Hello, {name}!"');
+ });
+
+ it('should normalise jsx related whitespace', () => {
+ const message = new CompositeMessage(
+ {},
+ [],
+ [],
+ [
+ new LiteralMessage('\n Hello, '),
+ new ArgumentMessage('name', dummy),
+ new LiteralMessage('!\n'),
+ ],
+ dummy,
+ );
+ expect(convertMessageToIcu(message)) //
+ .toMatchInlineSnapshot('"Hello, {name}!"');
+ });
+});
diff --git a/packages/plugin-babel/src/core/messages/convert.ts b/packages/config/src/features/messages/convert.ts
similarity index 71%
rename from packages/plugin-babel/src/core/messages/convert.ts
rename to packages/config/src/features/messages/convert.ts
index 3c11b24..b47eac2 100644
--- a/packages/plugin-babel/src/core/messages/convert.ts
+++ b/packages/config/src/features/messages/convert.ts
@@ -14,23 +14,25 @@ export function convertMessageToIcu(message: Message) {
return String(message.text);
case message instanceof ArgumentMessage:
- return `{${message.identifier}}`;
+ return `{${String(message.identifier)}}`;
case message instanceof ElementMessage: {
const children = message.children.map((m) => internalConvertMessageToIcu(m)).join('');
- return `<${message.identifier}>${children}${message.identifier}>`;
+ return `<${String(message.identifier)}>${children}${String(message.identifier)}>`;
}
case message instanceof ChoiceMessage: {
const branches = message.branches
- .map(({ key, value }) => ({
- key: Number.isNaN(+key) ? key : `=${+key}`,
+ .map(({ identifier, value }) => ({
+ identifier: Number.isNaN(+String(identifier))
+ ? String(identifier)
+ : `=${+String(identifier)}`,
value: internalConvertMessageToIcu(value),
}))
- .map(({ key, value }) => ` ${key} {${value}}\n`)
+ .map(({ identifier, value }) => ` ${identifier} {${value}}\n`)
.join('');
const format = message.kind === 'ordinal' ? 'selectordinal' : message.kind;
- return `{${message.identifier}, ${format},\n${branches}}`;
+ return `{${String(message.identifier)}, ${format},\n${branches}}`;
}
case message instanceof CompositeMessage:
diff --git a/packages/plugin-babel/src/core/messages/hash.test.ts b/packages/config/src/features/messages/hash.test.ts
similarity index 70%
rename from packages/plugin-babel/src/core/messages/hash.test.ts
rename to packages/config/src/features/messages/hash.test.ts
index 135358b..10051ff 100644
--- a/packages/plugin-babel/src/core/messages/hash.test.ts
+++ b/packages/config/src/features/messages/hash.test.ts
@@ -4,22 +4,19 @@ import { generateHash } from './hash.js';
describe('generateHash', () => {
it('should generate a hash from an input', () => {
const hash = generateHash('my message');
- expect(hash) //
- .toMatchInlineSnapshot('"vQhkQx"');
+ expect(hash).toMatchInlineSnapshot('"vQhkQx"');
});
it('should generate a hash from an input and context', () => {
const hash = generateHash('my message', 'some context');
- expect(hash) //
- .toMatchInlineSnapshot('"NHsKx2"');
+ expect(hash).toMatchInlineSnapshot('"NHsKx2"');
});
it('should generate different hashes for different contexts', () => {
const withoutContext = generateHash('my message');
const withContext = generateHash('my message', 'some context');
- expect(withContext !== withoutContext) //
- .toBeTruthy();
+ expect(withContext === withoutContext).toBeFalsy();
});
it('should generate the same hash if context is falsy', () => {
@@ -27,9 +24,7 @@ describe('generateHash', () => {
const withUndefinedContext = generateHash('my message', undefined);
const withEmptyStringContext = generateHash('my message', '');
- expect(withUndefinedContext === withoutContext) //
- .toBeTruthy();
- expect(withEmptyStringContext === withoutContext) //
- .toBeTruthy();
+ expect(withUndefinedContext === withoutContext).toBeTruthy();
+ expect(withEmptyStringContext === withoutContext).toBeTruthy();
});
});
diff --git a/packages/plugin-babel/src/core/messages/hash.ts b/packages/config/src/features/messages/hash.ts
similarity index 100%
rename from packages/plugin-babel/src/core/messages/hash.ts
rename to packages/config/src/features/messages/hash.ts
diff --git a/packages/config/src/features/messages/identifier.ts b/packages/config/src/features/messages/identifier.ts
new file mode 100644
index 0000000..6d6cd24
--- /dev/null
+++ b/packages/config/src/features/messages/identifier.ts
@@ -0,0 +1,27 @@
+import {
+ ArgumentMessage,
+ ChoiceMessage,
+ CompositeMessage,
+ ElementMessage,
+ type Message,
+} from './types.js';
+
+export const AUTO_INCREMENT_IDENTIFIER = Symbol('auto-increment');
+
+export function assignSequenceIdentifiers(message: Message, sequence = { current: 0 }) {
+ if (
+ message instanceof ArgumentMessage ||
+ message instanceof ElementMessage ||
+ message instanceof ChoiceMessage
+ )
+ if (message.identifier === AUTO_INCREMENT_IDENTIFIER)
+ message.identifier = `${sequence.current++}`;
+ if (message instanceof CompositeMessage || message instanceof ElementMessage)
+ for (const child of message.children) assignSequenceIdentifiers(child, sequence);
+ if (message instanceof ChoiceMessage)
+ for (const branch of message.branches) {
+ if (branch.identifier === AUTO_INCREMENT_IDENTIFIER)
+ branch.identifier = `${sequence.current++}`;
+ assignSequenceIdentifiers(branch.value, sequence);
+ }
+}
diff --git a/packages/config/src/features/messages/index.ts b/packages/config/src/features/messages/index.ts
new file mode 100644
index 0000000..c829a8f
--- /dev/null
+++ b/packages/config/src/features/messages/index.ts
@@ -0,0 +1,4 @@
+export * from './convert.js';
+export * from './hash.js';
+export * from './identifier.js';
+export * from './types.js';
diff --git a/packages/plugin-babel/src/core/messages/types.ts b/packages/config/src/features/messages/types.ts
similarity index 60%
rename from packages/plugin-babel/src/core/messages/types.ts
rename to packages/config/src/features/messages/types.ts
index 379f8b0..2e1dc35 100644
--- a/packages/plugin-babel/src/core/messages/types.ts
+++ b/packages/config/src/features/messages/types.ts
@@ -1,6 +1,6 @@
-import type * as t from '@babel/types';
import { convertMessageToIcu } from './convert.js';
import { generateHash } from './hash.js';
+import { AUTO_INCREMENT_IDENTIFIER } from './identifier.js';
abstract class Base {
toICUString(this: Message) {
@@ -8,7 +8,8 @@ abstract class Base {
}
toHashString(this: Message) {
- return generateHash(this.toICUString());
+ const context = this instanceof CompositeMessage ? this.descriptor.context : undefined;
+ return generateHash(this.toICUString(), context);
}
}
@@ -20,8 +21,8 @@ export class LiteralMessage extends Base {
export class ArgumentMessage extends Base {
constructor(
- public readonly identifier: string,
- public readonly expression: t.Expression,
+ public identifier: string | typeof AUTO_INCREMENT_IDENTIFIER,
+ public readonly expression: any,
) {
super();
}
@@ -29,9 +30,9 @@ export class ArgumentMessage extends Base {
export class ElementMessage extends Base {
constructor(
- public readonly identifier: string,
+ public identifier: string | typeof AUTO_INCREMENT_IDENTIFIER,
public readonly children: Message[],
- public readonly expression: t.Expression,
+ public readonly expression: any,
) {
super();
}
@@ -40,9 +41,12 @@ export class ElementMessage extends Base {
export class ChoiceMessage extends Base {
constructor(
public readonly kind: string,
- public readonly identifier: string,
- public readonly branches: { key: string; value: Message }[],
- public readonly expression: t.Expression,
+ public identifier: string | typeof AUTO_INCREMENT_IDENTIFIER,
+ public readonly branches: {
+ identifier: string | typeof AUTO_INCREMENT_IDENTIFIER;
+ readonly value: Message;
+ }[],
+ public readonly expression: any,
) {
super();
}
@@ -54,14 +58,10 @@ export class CompositeMessage extends Base {
public readonly comments: string[],
public readonly references: string[],
public readonly children: Message[],
- public readonly accessor: t.Expression,
+ public readonly accessor: any,
) {
super();
}
-
- override toHashString() {
- return generateHash(this.toICUString(), this.descriptor.context);
- }
}
export type Message =
diff --git a/packages/config/src/features/compile.ts b/packages/config/src/features/runtime/translations.ts
similarity index 62%
rename from packages/config/src/features/compile.ts
rename to packages/config/src/features/runtime/translations.ts
index c5ae42a..e13b1a5 100644
--- a/packages/config/src/features/compile.ts
+++ b/packages/config/src/features/runtime/translations.ts
@@ -1,10 +1,13 @@
import { mkdir, writeFile } from 'node:fs/promises';
import { dirname } from 'node:path';
-import { generateHash } from '@saykit/babel-plugin/core';
+import { expandBucketOutputPath } from '~/features/catalogue/path.js';
+import { generateHash } from '~/features/messages/hash.js';
import type { Bucket, Configuration, Message } from '~/shapes.js';
-import { expandOutputPath } from './extract.js';
+import { readCatalogueMessages } from '../catalogue/storage.js';
-//
+function getFallbackLocaleChain(config: Configuration, locale: string) {
+ return [...(config.fallbackLocales?.[locale] ?? []), config.sourceLocale];
+}
export async function hydrateTranslations(
cache: Map>,
@@ -14,17 +17,11 @@ export async function hydrateTranslations(
messages: Message[],
) {
if (cache.has(locale)) return cache.get(locale)!;
-
- const translations = //
- await applyFallbackTranslations(cache, config, bucket, locale, messages);
+ const translations = await applyFallbackTranslations(cache, config, bucket, locale, messages);
cache.set(locale, translations);
return translations;
}
-function getFallbackChain(config: Configuration, locale: string) {
- return [...(config.fallbackLocales?.[locale] ?? []), config.sourceLocale];
-}
-
export async function applyFallbackTranslations(
cache: Map>,
config: Configuration,
@@ -32,8 +29,7 @@ export async function applyFallbackTranslations(
locale: string,
messages: Message[],
) {
- const fallbacks = getFallbackChain(config, locale);
-
+ const fallbackLocales = getFallbackLocaleChain(config, locale);
const translations: Record = {};
for (const message of messages) {
@@ -44,11 +40,14 @@ export async function applyFallbackTranslations(
continue;
}
- for (const fallback of fallbacks) {
+ for (const fallbackLocale of fallbackLocales) {
const fallbackMessages = //
- await hydrateTranslations(cache, config, bucket, fallback, messages);
- if (fallbackMessages[key]) {
- translations[key] = fallbackMessages[key];
+ await readCatalogueMessages(bucket, fallbackLocale);
+ const fallbackTranslations = //
+ await hydrateTranslations(cache, config, bucket, fallbackLocale, fallbackMessages);
+
+ if (fallbackTranslations[key]) {
+ translations[key] = fallbackTranslations[key];
break;
}
}
@@ -57,13 +56,11 @@ export async function applyFallbackTranslations(
return translations;
}
-//
-
-export async function writeTranslationsToDisk(
+export async function writeRuntimeTranslations(
bucket: Bucket,
locale: string,
translations: Record,
- path = expandOutputPath(bucket, locale, '.json'),
+ path = expandBucketOutputPath(bucket, locale, '.json'),
) {
const content = JSON.stringify(translations, null, 2);
await mkdir(dirname(path), { recursive: true });
diff --git a/packages/config/src/features/worker.ts b/packages/config/src/features/worker.ts
deleted file mode 100644
index 708244c..0000000
--- a/packages/config/src/features/worker.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import { join, relative } from 'node:path';
-import type { Bucket, Configuration, Message } from '~/shapes.js';
-import { hydrateTranslations, writeTranslationsToDisk } from './compile.js';
-import {
- extractMessages,
- mergeMessages,
- readMessagesFromDisk,
- reconcileMessages,
- writeMessagesToDisk,
-} from './extract.js';
-import type Logger from './logger.js';
-import { globBucket, watchDebounced } from './watch.js';
-
-function normalisePath(path: string) {
- return relative(process.cwd(), path).replaceAll('\\', '/');
-}
-
-abstract class BucketWorker {
- protected config: Configuration;
- protected bucket: Bucket;
- protected logger: Logger;
-
- constructor(config: Configuration, bucket: Bucket, logger: Logger) {
- this.config = config;
- this.bucket = bucket;
- this.logger = logger;
- }
-}
-
-export class BucketExtractWorker extends BucketWorker {
- private index = new Map();
- private get messages(): Message[] {
- return Array.from(this.index.values()).flat();
- }
-
- private async indexPath(path: string) {
- const rp = normalisePath(path);
- this.logger.step(`Processing ${rp}`);
- const messages = await extractMessages(path);
- if (!messages.length) return false;
- this.index.set(path, messages);
- this.logger.step(`Found ${messages.length} messages(s) in ${rp}`);
- return true;
- }
-
- async scanAll() {
- this.logger.info(`Scanning bucket: ${this.bucket.include}`);
- const paths = await globBucket(this.bucket);
- this.logger.step(`Found ${paths.length} file(s)`);
- await Promise.all(paths.map((p) => this.indexPath(p)));
- this.logger.info(`Total extracted messages: ${this.messages.length}`);
- }
-
- async writeAll() {
- const newMessages = mergeMessages(this.messages);
- this.logger.info(`Writing ${newMessages.length} messages to locales`);
-
- for (const locale of this.config.locales) {
- this.logger.step(`Writing locale file for ${locale} to disk`);
- const existingMessages = await readMessagesFromDisk(this.bucket, locale);
- const updatedMessages =
- locale === this.config.sourceLocale
- ? newMessages
- : reconcileMessages(existingMessages, newMessages);
-
- await writeMessagesToDisk(this.bucket, locale, updatedMessages);
- }
- this.logger.success(`Extraction complete for bucket: ${this.bucket.include}`);
- }
-
- async updatePath(path: string) {
- const changed = await this.indexPath(path);
- if (changed) await this.writeAll();
- return changed;
- }
-}
-
-export class BucketCompileWorker extends BucketWorker {
- private cache = new Map>();
-
- async compileAll() {
- this.logger.info(`Compiling bucket: ${this.bucket.include}`);
- for (const locale of this.config.locales) await this.compileLocale(locale);
- this.logger.success(`Compilation complete for bucket: ${this.bucket.include}`);
- }
-
- async compileLocale(locale: string) {
- this.logger.step(`Compiling locale: ${locale}`);
- const messages = await readMessagesFromDisk(this.bucket, locale);
- const translations = await hydrateTranslations(
- this.cache,
- this.config,
- this.bucket,
- locale,
- messages,
- );
- this.logger.step(`Writing runtime file for ${locale}`);
- await writeTranslationsToDisk(this.bucket, locale, translations);
- }
-}
-
-export class BucketBuildWorker extends BucketWorker {
- extract: BucketExtractWorker;
- compile: BucketCompileWorker;
-
- constructor(config: Configuration, bucket: Bucket, logger: Logger) {
- super(config, bucket, logger);
- this.extract = new BucketExtractWorker(config, bucket, logger);
- this.compile = new BucketCompileWorker(config, bucket, logger);
- }
-
- async buildAll() {
- await this.extract.scanAll();
- await this.extract.writeAll();
- await this.compile.compileAll();
- }
-
- async watch() {
- this.logger.header(`👀 Watching bucket for changes: ${this.bucket.include}`);
-
- for await (const event of watchDebounced('.', { recursive: true })) {
- if (!event.filename || !this.bucket.match(event.filename)) continue;
-
- const filePath = join(process.cwd(), event.filename);
- const changed = await this.extract.updatePath(filePath);
- if (changed) {
- this.logger.info(`Recompiling due to changes in ${normalisePath(filePath)}`);
- await this.compile.compileAll();
- }
- }
- }
-}
diff --git a/packages/config/src/features/workers/build-worker.ts b/packages/config/src/features/workers/build-worker.ts
new file mode 100644
index 0000000..2ccf442
--- /dev/null
+++ b/packages/config/src/features/workers/build-worker.ts
@@ -0,0 +1,41 @@
+import { join } from 'node:path';
+import type Logger from '~/features/logger.js';
+import { watchDebounced } from '~/features/watch.js';
+import type { Bucket, Configuration } from '~/shapes.js';
+import { BucketCompileWorker } from './compile-worker.js';
+import { BucketExtractWorker } from './extract-worker.js';
+import { BucketWorker, normalisePathForLogs } from './shared.js';
+
+export class BucketBuildWorker extends BucketWorker {
+ extract: BucketExtractWorker;
+ compile: BucketCompileWorker;
+
+ constructor(config: Configuration, bucket: Bucket, logger: Logger) {
+ const parameters = [config, bucket, logger] as const;
+ super(...parameters);
+ this.extract = new BucketExtractWorker(...parameters);
+ this.compile = new BucketCompileWorker(...parameters);
+ }
+
+ async buildAll() {
+ await this.extract.scanAll();
+ await this.extract.writeAll();
+ await this.compile.compileAll();
+ }
+
+ async watch() {
+ this.logger.header(`👀 Watching bucket for changes: ${this.bucket.include}`);
+
+ for await (const event of watchDebounced('.', { recursive: true })) {
+ if (!event.filename || !this.bucket.match(event.filename)) continue;
+
+ const filePath = join(process.cwd(), event.filename);
+ const changed = await this.extract.updatePath(filePath);
+
+ if (changed) {
+ this.logger.info(`Recompiling due to changes in ${normalisePathForLogs(filePath)}`);
+ await this.compile.compileAll();
+ }
+ }
+ }
+}
diff --git a/packages/config/src/features/workers/compile-worker.ts b/packages/config/src/features/workers/compile-worker.ts
new file mode 100644
index 0000000..18f2b73
--- /dev/null
+++ b/packages/config/src/features/workers/compile-worker.ts
@@ -0,0 +1,33 @@
+import { readCatalogueMessages } from '~/features/catalogue/storage.js';
+import { hydrateTranslations, writeRuntimeTranslations } from '~/features/runtime/translations.js';
+import { BucketWorker } from './shared.js';
+
+export class BucketCompileWorker extends BucketWorker {
+ #translationsByLocale = new Map>();
+
+ async compileAll() {
+ this.logger.info(`Compiling bucket: ${this.bucket.include}`);
+
+ for (const locale of this.config.locales) {
+ await this.compileLocale(locale);
+ }
+
+ this.logger.success(`Compilation complete for bucket: ${this.bucket.include}`);
+ }
+
+ async compileLocale(locale: string) {
+ this.logger.step(`Compiling locale: ${locale}`);
+
+ const messages = await readCatalogueMessages(this.bucket, locale);
+ const translations = await hydrateTranslations(
+ this.#translationsByLocale,
+ this.config,
+ this.bucket,
+ locale,
+ messages,
+ );
+
+ this.logger.step(`Writing runtime file for ${locale}`);
+ await writeRuntimeTranslations(this.bucket, locale, translations);
+ }
+}
diff --git a/packages/config/src/features/workers/extract-worker.ts b/packages/config/src/features/workers/extract-worker.ts
new file mode 100644
index 0000000..48a542b
--- /dev/null
+++ b/packages/config/src/features/workers/extract-worker.ts
@@ -0,0 +1,68 @@
+import { extractMessagesFromFile } from '~/features/catalogue/extractor.js';
+import { mergeExtractedMessages, reconcileLocaleMessages } from '~/features/catalogue/merge.js';
+import { readCatalogueMessages, writeCatalogueMessages } from '~/features/catalogue/storage.js';
+import { globBucket } from '~/features/watch.js';
+import type { Message } from '~/shapes.js';
+import { BucketWorker, normalisePathForLogs } from './shared.js';
+
+export class BucketExtractWorker extends BucketWorker {
+ #indexedMessagesByPath = new Map();
+
+ get messages(): Message[] {
+ return Array.from(this.#indexedMessagesByPath.values()).flat();
+ }
+
+ async #indexPath(path: string) {
+ const relativePath = normalisePathForLogs(path);
+ this.logger.step(`Processing ${relativePath}`);
+
+ const messages = await extractMessagesFromFile(path, this.bucket);
+ if (!messages.length) {
+ if (this.#indexedMessagesByPath.has(path)) {
+ this.#indexedMessagesByPath.delete(path);
+ this.logger.step(`Removed stale entries for ${relativePath}`);
+ return true;
+ }
+ return false;
+ }
+
+ this.#indexedMessagesByPath.set(path, messages);
+ this.logger.step(`Found ${messages.length} message(s) in ${relativePath}`);
+ return true;
+ }
+
+ async scanAll() {
+ this.logger.info(`Scanning bucket: ${this.bucket.include}`);
+
+ const paths = await globBucket(this.bucket);
+ this.logger.step(`Found ${paths.length} file(s)`);
+ await Promise.all(paths.map((path) => this.#indexPath(path)));
+
+ this.logger.info(`Total extracted messages: ${this.messages.length}`);
+ }
+
+ async writeAll() {
+ const mergedMessages = mergeExtractedMessages(this.messages);
+ this.logger.info(`Writing ${mergedMessages.length} messages to locales`);
+
+ for (const locale of this.config.locales) {
+ this.logger.step(`Writing locale file for ${locale} to disk`);
+
+ const existingMessages = await readCatalogueMessages(this.bucket, locale);
+ const nextMessages =
+ locale === this.config.sourceLocale
+ ? mergedMessages
+ : reconcileLocaleMessages(existingMessages, mergedMessages);
+
+ await writeCatalogueMessages(this.bucket, locale, nextMessages);
+ }
+
+ this.logger.success(`Extraction complete for bucket: ${this.bucket.include}`);
+ }
+
+ async updatePath(path: string) {
+ const changed = await this.#indexPath(path);
+ if (changed) await this.writeAll();
+ return changed;
+ }
+}
diff --git a/packages/config/src/features/workers/index.ts b/packages/config/src/features/workers/index.ts
new file mode 100644
index 0000000..6c472ee
--- /dev/null
+++ b/packages/config/src/features/workers/index.ts
@@ -0,0 +1,3 @@
+export { BucketBuildWorker } from './build-worker.js';
+export { BucketCompileWorker } from './compile-worker.js';
+export { BucketExtractWorker } from './extract-worker.js';
diff --git a/packages/config/src/features/workers/shared.ts b/packages/config/src/features/workers/shared.ts
new file mode 100644
index 0000000..50d2ae2
--- /dev/null
+++ b/packages/config/src/features/workers/shared.ts
@@ -0,0 +1,19 @@
+import { relative } from 'node:path';
+import type Logger from '~/features/logger.js';
+import type { Bucket, Configuration } from '~/shapes.js';
+
+export function normalisePathForLogs(path: string) {
+ return relative(process.cwd(), path).replaceAll('\\', '/');
+}
+
+export abstract class BucketWorker {
+ protected config: Configuration;
+ protected bucket: Bucket;
+ protected logger: Logger;
+
+ constructor(config: Configuration, bucket: Bucket, logger: Logger) {
+ this.config = config;
+ this.bucket = bucket;
+ this.logger = logger;
+ }
+}
diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts
index f5a4c56..4e9e856 100644
--- a/packages/config/src/index.ts
+++ b/packages/config/src/index.ts
@@ -1,2 +1,8 @@
-export * from './define.js';
+import type { input } from 'zod';
+import { Configuration } from './shapes.js';
+
+export function defineConfig>(config: C) {
+ return Configuration.parse(config);
+}
+
export type * from './shapes.js';
diff --git a/packages/config/src/shapes.ts b/packages/config/src/shapes.ts
index 628d946..c08a550 100644
--- a/packages/config/src/shapes.ts
+++ b/packages/config/src/shapes.ts
@@ -13,25 +13,44 @@ export type Message = z.infer;
export const Formatter = z.object({
extension: z.templateLiteral(['.', z.string()]),
- parse: z.custom<(content: string, context: { locale: string }) => Promise>(
+ parse: z.custom<(content: string, context: { locale: string }) => Message[]>(
(v) => typeof v === 'function',
),
- stringify: z.custom<(messages: Message[], context: { locale: string }) => Promise>(
+ stringify: z.custom<(messages: Message[], context: { locale: string }) => string>(
(v) => typeof v === 'function',
),
});
export type Formatter = z.infer;
+export const Transformer = z.object({
+ match: z.custom<(id: string) => boolean>((v) => typeof v === 'function'),
+ extract: z.custom<(code: string, id: string) => Message[]>((v) => typeof v === 'function'),
+ transform: z.custom<(code: string, id: string) => string>((v) => typeof v === 'function'),
+});
+export type Transformer = z.infer;
+
export const Bucket = z
.object({
- include: z.array(z.string()),
- exclude: z.array(z.string()).optional(),
+ include: z.string().array(),
+ exclude: z.string().array().optional(),
output: z.templateLiteral([z.string(), '{locale}', z.string(), '.{extension}']),
formatter: Formatter,
+ transformer: Transformer.transform((t) => [t])
+ .or(Transformer.array())
+ .transform(
+ (t) =>
+ ({
+ match: (id: string) => t.some((t) => t.match(id)),
+ extract: (code: string, id: string) =>
+ t.flatMap((t) => (t.match(id) ? t.extract(code, id) : [])),
+ transform: (code: string, id: string) =>
+ t.reduce((p, t) => (t.match(id) ? t.transform(p, id) : p), code),
+ }) satisfies Transformer,
+ ),
})
.transform((v) => ({
...v,
- match: picomatch(v.include, { ignore: v.exclude }),
+ match: picomatch(v.include, { ignore: v.exclude }) as (id: string) => boolean,
}));
export type Bucket = z.infer;
@@ -39,8 +58,10 @@ export const Configuration = z
.object({
sourceLocale: z.string(),
locales: z.tuple([z.string()], z.string()),
- fallbackLocales: z.record(z.string(), z.array(z.string())).optional(),
- buckets: z.array(Bucket),
+ fallbackLocales: z.record(z.string(), z.string().array()).optional(),
+ buckets: Bucket.array(),
})
- .refine((c) => c.sourceLocale === c.locales[0], 'sourceLocale must be the same as locales[0]');
+ .refine((config) => config.sourceLocale === config.locales[0], {
+ error: 'sourceLocale must be the same as locales[0]',
+ });
export type Configuration = z.infer;
diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json
index b560bec..c034c50 100644
--- a/packages/config/tsconfig.json
+++ b/packages/config/tsconfig.json
@@ -1 +1,4 @@
-{ "extends": "../../tsconfig.base.json" }
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": { "paths": { "~/*": ["./src/*"] } }
+}
diff --git a/packages/config/tsdown.config.ts b/packages/config/tsdown.config.ts
index f9d6529..b9fe239 100644
--- a/packages/config/tsdown.config.ts
+++ b/packages/config/tsdown.config.ts
@@ -1,5 +1,10 @@
import { defineConfig } from 'tsdown';
export default defineConfig({
- entry: ['src/index.ts', 'src/commands/index.ts'],
+ entry: [
+ 'src/index.ts',
+ 'src/commands/index.ts',
+ 'src/features/loader/index.ts',
+ 'src/features/messages/index.ts',
+ ],
});
diff --git a/packages/plugin-babel/vitest.config.ts b/packages/config/vitest.config.ts
similarity index 69%
rename from packages/plugin-babel/vitest.config.ts
rename to packages/config/vitest.config.ts
index d840f28..613c8e7 100644
--- a/packages/plugin-babel/vitest.config.ts
+++ b/packages/config/vitest.config.ts
@@ -1,8 +1,6 @@
-import tsconfigPaths from 'vite-tsconfig-paths';
import { defineConfig } from 'vitest/config';
export default defineConfig({
- plugins: [tsconfigPaths()],
test: {
coverage: {
provider: 'v8',
diff --git a/packages/format-po/src/formatter.ts b/packages/format-po/src/formatter.ts
index 599f9f8..3aa52e1 100644
--- a/packages/format-po/src/formatter.ts
+++ b/packages/format-po/src/formatter.ts
@@ -1,11 +1,11 @@
import type { Formatter } from '@saykit/config';
import PO from 'pofile';
-function createFormatter(): Formatter {
+function createPoFormatter(): Formatter {
return {
extension: '.po',
- async parse(content, context) {
+ parse(content, context) {
const po = PO.parse(content);
if (!po.headers['X-Generator']?.startsWith('saykit'))
@@ -30,7 +30,7 @@ function createFormatter(): Formatter {
});
},
- async stringify(messages, context) {
+ stringify(messages, context) {
const po = new PO();
po.headers['Content-Type'] = 'text/plain; charset=UTF-8';
@@ -59,4 +59,4 @@ function createFormatter(): Formatter {
};
}
-export default createFormatter;
+export default createPoFormatter;
diff --git a/packages/integration-carbon/package.json b/packages/integration-carbon/package.json
index a58618e..cf794d9 100644
--- a/packages/integration-carbon/package.json
+++ b/packages/integration-carbon/package.json
@@ -40,7 +40,7 @@
"prepack": "pnpm build"
},
"devDependencies": {
- "@buape/carbon": "0.14.0",
+ "@buape/carbon": "0.16.0",
"saykit": "workspace:^"
},
"peerDependencies": {
diff --git a/packages/integration-carbon/tsconfig.json b/packages/integration-carbon/tsconfig.json
index b560bec..0ecefeb 100644
--- a/packages/integration-carbon/tsconfig.json
+++ b/packages/integration-carbon/tsconfig.json
@@ -1 +1,5 @@
-{ "extends": "../../tsconfig.base.json" }
+{
+ "extends": "../../tsconfig.base.json",
+ "exclude": ["dist"],
+ "compilerOptions": { "paths": { "~/*": ["./src/*"] } }
+}
diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json
index f7b1d54..a141ab3 100644
--- a/packages/integration-react/package.json
+++ b/packages/integration-react/package.json
@@ -51,8 +51,8 @@
"server-only": "^0.0.1"
},
"devDependencies": {
- "@types/react": "^19.2.13",
- "react": "^19.2.4",
+ "@types/react": "^19.2.14",
+ "react": "^19.2.5",
"saykit": "workspace:^"
},
"peerDependencies": {
diff --git a/packages/integration-react/src/components/renderer.ts b/packages/integration-react/src/components/renderer.ts
index f123ba4..f6440fb 100644
--- a/packages/integration-react/src/components/renderer.ts
+++ b/packages/integration-react/src/components/renderer.ts
@@ -1,9 +1,13 @@
-import { createElement, Fragment, type PropsWithChildren, type ReactNode } from 'react';
+import {
+ type ComponentType,
+ createElement,
+ Fragment,
+ type PropsWithChildren,
+ type ReactNode,
+} from 'react';
-type ComponentsMap = Record>;
-type ComponentResolver = (
- tag?: string,
-) => string | React.ComponentType | undefined;
+type ComponentsMap = Record>;
+type ComponentResolver = (tag?: string) => string | ComponentType | undefined;
type ComponentsProp = ComponentsMap | ComponentResolver;
export function Renderer({ html, components }: { html: string; components: ComponentsProp }) {
diff --git a/packages/integration-react/tsconfig.json b/packages/integration-react/tsconfig.json
index 00066ee..c034c50 100644
--- a/packages/integration-react/tsconfig.json
+++ b/packages/integration-react/tsconfig.json
@@ -1 +1,4 @@
-{ "extends": "../../tsconfig.react.json" }
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": { "paths": { "~/*": ["./src/*"] } }
+}
diff --git a/packages/plugin-babel/package.json b/packages/plugin-babel/package.json
index a057a28..67958fd 100644
--- a/packages/plugin-babel/package.json
+++ b/packages/plugin-babel/package.json
@@ -1,14 +1,14 @@
{
- "name": "@saykit/babel-plugin",
+ "name": "babel-plugin-saykit",
"version": "0.0.0",
- "description": "Babel plugin for saykit macro transforms",
+ "description": "Babel plugin for SayKit",
"keywords": [
- "babel",
"i18n",
- "macros",
- "plugin",
+ "rollup",
"saykit",
- "transform"
+ "unplugin",
+ "vite",
+ "webpack"
],
"homepage": "https://github.com/k0d13/saykit#readme",
"bugs": {
@@ -29,10 +29,6 @@
".": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
- },
- "./core": {
- "types": "./dist/core/index.d.mts",
- "default": "./dist/core/index.mjs"
}
},
"publishConfig": {
@@ -41,22 +37,16 @@
},
"scripts": {
"check": "tsc --noEmit",
- "test": "vitest",
- "coverage": "vitest run --coverage",
"build": "tsdown",
"prepack": "pnpm build"
},
"dependencies": {
- "@babel/generator": "^7.29.1",
- "@babel/parser": "^7.29.0",
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
- "js-sha256": "^0.11.1"
+ "@babel/core": "^7.29.0",
+ "@babel/parser": "^7.29.2",
+ "@saykit/config": "workspace:^",
+ "@types/babel__core": "^7.20.5"
},
"devDependencies": {
- "@babel/core": "^7.29.0",
- "@types/babel__core": "^7.20.5",
- "@types/babel__generator": "^7.27.0",
- "@types/babel__traverse": "^7.28.0"
+ "@types/babel__parser": "^7.1.5"
}
}
diff --git a/packages/plugin-babel/src/core/context.ts b/packages/plugin-babel/src/core/context.ts
deleted file mode 100644
index 6ea473b..0000000
--- a/packages/plugin-babel/src/core/context.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import type { Comment } from '@babel/types';
-import type { CompositeMessage } from './messages/types.js';
-
-export class Context {
- foundMessages: CompositeMessage[] = [];
- identifierStore = new IdentifierStore();
- constructor(public readonly comments: Comment[] | null | undefined) {}
-}
-
-export class IdentifierStore {
- #current = 0;
-
- next() {
- const id = this.#current;
- this.#current += 1;
- return id.toString();
- }
-
- back() {
- this.#current -= 1;
- }
-
- reset() {
- this.#current = 0;
- }
-}
diff --git a/packages/plugin-babel/src/core/index.ts b/packages/plugin-babel/src/core/index.ts
deleted file mode 100644
index 1fe056d..0000000
--- a/packages/plugin-babel/src/core/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { generateHash } from './messages/hash.js';
-export { collectMessages, transformCode } from './program.js';
diff --git a/packages/plugin-babel/src/core/messages/convert.test.ts b/packages/plugin-babel/src/core/messages/convert.test.ts
deleted file mode 100644
index 1e15767..0000000
--- a/packages/plugin-babel/src/core/messages/convert.test.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-import type { Expression } from '@babel/types';
-import { describe, expect, it } from 'vitest';
-import { convertMessageToIcu } from './convert.js';
-import {
- ArgumentMessage,
- ChoiceMessage,
- CompositeMessage,
- ElementMessage,
- LiteralMessage,
-} from './types.js';
-
-const dummy = undefined as unknown as Expression;
-
-describe('convertMessageToIcu', () => {
- it('should generate literal messages', () => {
- const msg = new LiteralMessage('Hello');
- expect(convertMessageToIcu(msg)) //
- .toMatchInlineSnapshot('"Hello"');
- });
-
- it('should generate argument messages', () => {
- const msg = new CompositeMessage(
- {},
- [],
- [],
- [new LiteralMessage('Hello'), new LiteralMessage(' world!')],
- dummy,
- );
- expect(convertMessageToIcu(msg)) //
- .toMatchInlineSnapshot('"Hello world!"');
- });
-
- it('should generate argument messages', () => {
- const msg = new ArgumentMessage('name', undefined as unknown as Expression);
- expect(convertMessageToIcu(msg)) //
- .toMatchInlineSnapshot('"{name}"');
- });
-
- it('should generate element messages', () => {
- const msg = new ElementMessage('0', [new LiteralMessage('Hello world!')], dummy);
- expect(convertMessageToIcu(msg)) //
- .toMatchInlineSnapshot('"<0>Hello world!0>"');
- });
-
- it('should generate choice messages with numeric keys as `=n`', () => {
- const msg = new ChoiceMessage(
- 'plural',
- 'count',
- [
- { key: '0', value: new LiteralMessage('none') },
- { key: 'one', value: new LiteralMessage('one') },
- { key: 'other', value: new LiteralMessage('many') },
- ],
- dummy,
- );
- expect(convertMessageToIcu(msg)).toMatchInlineSnapshot(`
- "{count, plural,
- =0 {none}
- one {one}
- other {many}
- }"
- `); //
- });
-
- it('should generate choice messages with ordinal kind', () => {
- const msg = new ChoiceMessage(
- 'ordinal',
- 'place',
- [
- { key: '1', value: new LiteralMessage('first') },
- { key: '2', value: new LiteralMessage('second') },
- { key: '3', value: new LiteralMessage('third') },
- { key: 'other', value: new LiteralMessage('other') },
- ],
- dummy,
- );
- expect(convertMessageToIcu(msg)).toMatchInlineSnapshot(`
- "{place, selectordinal,
- =1 {first}
- =2 {second}
- =3 {third}
- other {other}
- }"
- `); //
- });
-
- it('should normalise jsx related whitespace', () => {
- const msg = new CompositeMessage(
- {},
- [],
- [],
- [
- new LiteralMessage('\n Hello, '),
- new ArgumentMessage('name', undefined as unknown as Expression),
- new LiteralMessage('!\n'),
- ],
- dummy,
- );
- expect(convertMessageToIcu(msg)) //
- .toMatchInlineSnapshot('"Hello, {name}!"');
- });
-});
diff --git a/packages/plugin-babel/src/core/program.test.ts b/packages/plugin-babel/src/core/program.test.ts
deleted file mode 100644
index f9d7275..0000000
--- a/packages/plugin-babel/src/core/program.test.ts
+++ /dev/null
@@ -1,260 +0,0 @@
-import { describe, expect, it } from 'vitest';
-import * as parser from './program.js';
-
-describe('parseProgram', () => {
- it('should parse JavaScript files', () => {
- const code = 'const x = 42;';
- const result = parser.parseProgram('test.js', code);
-
- expect(result).not.toBeNull();
- expect(result!.context).toBeDefined();
- expect(result!.program).toBeDefined();
- });
-
- it('should parse TypeScript files', () => {
- const code = 'const x: number = 42;';
- const result = parser.parseProgram('test.ts', code);
-
- expect(result).not.toBeNull();
- expect(result!.context).toBeDefined();
- expect(result!.program).toBeDefined();
- });
-
- it('should parse JSX files', () => {
- const code = 'const element = Hello
;';
- const result = parser.parseProgram('test.jsx', code);
-
- expect(result).not.toBeNull();
- expect(result!.context).toBeDefined();
- expect(result!.program).toBeDefined();
- });
-
- it('should parse TypeScript JSX files', () => {
- const code = 'const element: JSX.Element = Hello
;';
- const result = parser.parseProgram('test.tsx', code);
-
- expect(result).not.toBeNull();
- expect(result!.context).toBeDefined();
- expect(result!.program).toBeDefined();
- });
-
- it('should parse all supported extensions', () => {
- const extensions = ['.js', '.cjs', '.mjs', '.jsx', '.ts', '.mts', '.cts', '.tsx'];
- const code = 'const x = 42;';
-
- extensions.forEach((ext) => {
- const result = parser.parseProgram(`test${ext}`, code);
- expect(result).not.toBeNull();
- });
- });
-
- it('should return null for unsupported extensions', () => {
- const code = 'const x = 42;';
- const unsupportedFiles = ['test.json', 'test.css', 'test.txt', 'test.html', 'test.py'];
-
- unsupportedFiles.forEach((file) => {
- const result = parser.parseProgram(file, code);
- expect(result).toBeNull();
- });
- });
-
- it('should pass correct parser options', () => {
- const code = 'const x = 42;';
- const result = parser.parseProgram('test.js', code);
-
- expect(result).not.toBeNull();
- // Program should be successfully parsed with the configured options
- expect(result!.program.program).toBeDefined();
- expect(result!.program.program.type).toBe('Program');
- });
-
- it('should extract comments', () => {
- const code = `
- // This is a comment
- const x = 42;
- /* Another comment */
- `;
- const result = parser.parseProgram('test.js', code);
-
- expect(result).not.toBeNull();
- expect(result!.context.comments).toBeDefined();
- expect(result!.context.comments!.length).toBeGreaterThan(0);
- });
-});
-
-describe('applyVisitor', () => {
- it('should apply visitor to parsed program', () => {
- const code = 'say`Hello World`;';
- const parseResult = parser.parseProgram('test.js', code);
- expect(parseResult).not.toBeNull();
-
- // Apply visitor
- parser.applyVisitor(parseResult!.program, parseResult!.context);
-
- // Should have found a message
- expect(parseResult!.context.foundMessages).toHaveLength(1);
- });
-
- it('should not crash on empty programs', () => {
- const code = '';
- const parseResult = parser.parseProgram('test.js', code);
- expect(parseResult).not.toBeNull();
-
- if (parseResult) {
- // Apply visitor
- expect(() => {
- parser.applyVisitor(parseResult.program, parseResult.context);
- }).not.toThrow();
- }
- });
-});
-
-describe('printProgram', () => {
- it('should print parsed program back to code', () => {
- const code = 'const x = 42;';
- const result = parser.parseProgram('test.js', code);
-
- expect(result).not.toBeNull();
-
- const printed = parser.printProgram(result!.program);
- // Should return some string output (format may vary)
- expect(typeof printed).toBe('object');
- expect(printed.code).toBeDefined();
- expect(printed.code.length).toBeGreaterThan(0);
- });
-
- it('should preserve comments', () => {
- const code = '// Comment\nconst x = 42;';
- const result = parser.parseProgram('test.js', code);
-
- expect(result).not.toBeNull();
-
- const printed = parser.printProgram(result!.program);
- // Should return some string output
- expect(typeof printed).toBe('object');
- expect(printed.code).toBeDefined();
- expect(printed.code.length).toBeGreaterThan(0);
- });
-
- it('should retain lines when possible', () => {
- const code = 'const x = 42;\nconst y = 43;';
- const result = parser.parseProgram('test.js', code);
-
- expect(result).not.toBeNull();
-
- const printed = parser.printProgram(result!.program);
- // Should return some string output
- expect(typeof printed).toBe('object');
- expect(printed.code).toBeDefined();
- expect(printed.code.length).toBeGreaterThan(0);
- });
-});
-
-describe('collectMessages', () => {
- it('should extract messages from tagged templates', () => {
- const code = 'say`Hello ${name}!`;';
- const messages = parser.collectMessages('test.js', code);
-
- expect(messages).toHaveLength(1);
- if (messages[0]) {
- expect(messages[0].descriptor).toEqual({
- id: undefined,
- context: undefined,
- });
- // Let's just check it has children (number may vary based on implementation)
- expect(messages[0].children.length).toBeGreaterThan(0);
- }
- });
-
- it('should extract messages from JSX', () => {
- const code = 'Hello World;';
- const messages = parser.collectMessages('test.jsx', code);
-
- expect(messages).toHaveLength(1);
- if (messages[0]) {
- expect(messages[0].children).toHaveLength(1);
- expect(messages[0].children[0]).toEqual({ text: 'Hello World' });
- }
- });
-
- it('should extract multiple messages', () => {
- const code = `
- say\`Hello\`;
- say\`World\`;
- JSX Message
- `;
- const messages = parser.collectMessages('test.js', code);
-
- expect(messages).toHaveLength(3);
- });
-
- it('should return empty array for files with no messages', () => {
- const code = 'const x = 42; console.log(x);';
- const messages = parser.collectMessages('test.js', code);
-
- expect(messages).toHaveLength(0);
- });
-
- it('should return empty array for unsupported files', () => {
- const code = '{ "key": "value" }';
- const messages = parser.collectMessages('test.json', code);
-
- expect(messages).toHaveLength(0);
- });
-});
-
-describe('transformCode', () => {
- it('should transform code with messages', () => {
- const code = 'say`Hello World`;';
- const result = parser.transformCode('test.js', code);
-
- // Should be different from original (transformed)
- expect(result).not.toBe(code);
- // Should contain transformed output - it returns a GeneratorResult object
- if (typeof result === 'object') {
- expect(result.code).toContain('say');
- }
- });
-
- it('should return original code when no messages found', () => {
- const code = 'const x = 42;';
- const result = parser.transformCode('test.js', code);
-
- expect(result).toBe(code);
- });
-
- it('should transform JSX code', () => {
- const code = 'Hello World;';
- const result = parser.transformCode('test.jsx', code);
-
- // Should be different from original (transformed)
- expect(result).not.toBe(code);
- });
-
- it('should return original code for unsupported files', () => {
- const code = '{ "key": "value" }';
- const result = parser.transformCode('test.json', code);
-
- expect(result).toBe(code);
- });
-
- it('should preserve code structure while transforming', () => {
- const code = `
- const name = 'World';
- const message = say\`Hello \${name}!\`;
- console.log(message);
- `;
- const result = parser.transformCode('test.js', code);
-
- // Should contain the variable declarations and console.log
- if (typeof result === 'object') {
- expect(result.code).toContain('const name');
- expect(result.code).toContain('console.log');
- // Should contain transformation
- expect(result.code).toContain('say');
- } else {
- // If no transformation happened, it should return original code
- expect(result).toBe(code);
- }
- });
-});
diff --git a/packages/plugin-babel/src/core/program.ts b/packages/plugin-babel/src/core/program.ts
deleted file mode 100644
index 826bc47..0000000
--- a/packages/plugin-babel/src/core/program.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { generate } from '@babel/generator';
-import * as parser from '@babel/parser';
-import traverse_ from '@babel/traverse';
-import { Context } from './context.js';
-import { Visitor } from './visitor.js';
-
-const traverse = (traverse_ as any).default || (traverse_ as typeof traverse_);
-
-const supportedExtensions = ['.js', '.cjs', '.mjs', '.jsx', '.ts', '.mts', '.cts', '.tsx'];
-
-export function parseProgram(id: string, code: string) {
- // Check if the file extension is supported
- if (!supportedExtensions.some((ext) => id.endsWith(ext))) return null;
-
- const program = parser.parse(code, {
- sourceType: 'module',
- sourceFilename: id,
- plugins: ['typescript', 'jsx'],
- allowImportExportEverywhere: false,
- allowReturnOutsideFunction: true,
- ranges: true,
- attachComment: true,
- tokens: true,
- });
-
- const context = new Context(program.comments ?? []);
-
- return { program, context };
-}
-
-export function applyVisitor(program: parser.ParseResult, context: Context) {
- const visitor = new Visitor(context);
- traverse(program, visitor.toHandlers());
-}
-
-export function printProgram(program: parser.ParseResult) {
- return generate(program.program, {
- comments: true,
- compact: false,
- retainLines: true,
- });
-}
-
-export function collectMessages(id: string, code: string) {
- const result = parseProgram(id, code);
- if (result) applyVisitor(result.program, result.context);
- return result?.context.foundMessages ?? [];
-}
-
-export function transformCode(id: string, code: string) {
- const result = parseProgram(id, code);
- if (result) applyVisitor(result.program, result.context);
- return result?.context.foundMessages.length ? printProgram(result.program) : code;
-}
diff --git a/packages/plugin-babel/src/core/visitor.test.ts b/packages/plugin-babel/src/core/visitor.test.ts
deleted file mode 100644
index 11eb5ac..0000000
--- a/packages/plugin-babel/src/core/visitor.test.ts
+++ /dev/null
@@ -1,309 +0,0 @@
-import * as t from '@babel/types';
-import { describe, expect, it, vi } from 'vitest';
-import { Context } from '~/core/context.js';
-import { Visitor } from './visitor.js';
-
-describe('Visitor', () => {
- const createMockContext = () => new Context([]);
-
- describe('Expression handler', () => {
- it('should process and replace tagged template expressions', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create a tagged template expression node
- const sayIdentifier = t.identifier('say');
- const quasi = t.templateElement({ raw: 'Hello World', cooked: 'Hello World' }, false);
- const taggedTemplate = t.taggedTemplateExpression(
- sayIdentifier,
- t.templateLiteral([quasi], []),
- );
-
- // Mock path object
- const path = {
- node: taggedTemplate,
- parent: {} as any,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.Expression(path as any);
-
- expect(path.replaceWith).toHaveBeenCalled();
- expect(path.skip).toHaveBeenCalled();
- expect(context.foundMessages).toHaveLength(1);
- });
-
- it('should process and replace call expressions', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create a plural call expression
- const sayIdentifier = t.identifier('say');
- const pluralMember = t.memberExpression(sayIdentifier, t.identifier('plural'));
- const countIdentifier = t.identifier('count');
- const choicesObject = t.objectExpression([
- t.objectProperty(t.stringLiteral('one'), t.stringLiteral('item')),
- t.objectProperty(t.stringLiteral('other'), t.stringLiteral('items')),
- ]);
- const callExpression = t.callExpression(pluralMember, [countIdentifier, choicesObject]);
-
- // Mock path object
- const path = {
- node: callExpression,
- parent: { leadingComments: [] } as any,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.Expression(path as any);
-
- expect(path.replaceWith).toHaveBeenCalled();
- expect(path.skip).toHaveBeenCalled();
- expect(context.foundMessages).toHaveLength(1);
- });
-
- it('should not process non-say expressions', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create a non-say expression
- const notSayIdentifier = t.identifier('console');
- const logMember = t.memberExpression(notSayIdentifier, t.identifier('log'));
- const callExpression = t.callExpression(logMember, [t.stringLiteral('test')]);
-
- // Mock path object
- const path = {
- node: callExpression,
- parent: {} as any,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.Expression(path as any);
-
- expect(path.replaceWith).not.toHaveBeenCalled();
- expect(path.skip).not.toHaveBeenCalled();
- expect(context.foundMessages).toHaveLength(0);
- });
-
- it('should copy leading comments from parent', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create parent with comments
- const leadingComments = [{ type: 'CommentLine', value: ' Some comment' }];
-
- const sayIdentifier = t.identifier('say');
- const quasi = t.templateElement({ raw: 'Hello', cooked: 'Hello' }, false);
- const taggedTemplate = t.taggedTemplateExpression(
- sayIdentifier,
- t.templateLiteral([quasi], []),
- );
-
- // Mock path object with parent comments
- const path = {
- node: taggedTemplate,
- parent: { leadingComments } as any,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.Expression(path as any);
-
- expect(path.node.leadingComments).toEqual(leadingComments);
- });
-
- it('should reset identifier store after processing', () => {
- const context = createMockContext();
-
- // Use identifier store to generate some IDs
- context.identifierStore.next();
- context.identifierStore.next();
- expect(context.identifierStore.next()).toBe('2');
-
- // Now process an expression
- const sayIdentifier = t.identifier('say');
- const quasi = t.templateElement({ raw: 'Hello', cooked: 'Hello' }, false);
- const taggedTemplate = t.taggedTemplateExpression(
- sayIdentifier,
- t.templateLiteral([quasi], []),
- );
-
- const path = {
- node: taggedTemplate,
- parent: {} as any,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- const visitor = new Visitor(context);
- visitor.Expression(path as any);
-
- // Identifier store should be reset
- expect(context.identifierStore.next()).toBe('0');
- });
- });
-
- describe('JSXElement handler', () => {
- it('should process and replace Say container elements', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create a Say container element
- const sayIdentifier = t.jsxIdentifier('Say');
- const openingElement = t.jsxOpeningElement(sayIdentifier, [], false);
- const closingElement = t.jsxClosingElement(sayIdentifier);
- const helloText = t.jsxText('Hello World');
- const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
-
- // Mock path object
- const path = {
- node: jsxElement,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.JSXElement(path as any);
-
- expect(path.replaceWith).toHaveBeenCalled();
- expect(path.skip).toHaveBeenCalled();
- expect(context.foundMessages).toHaveLength(1);
- });
-
- it('should process and replace Say self-closing elements', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create a Say plural self-closing element
- const sayIdentifier = t.jsxIdentifier('Say');
- const pluralProperty = t.jsxIdentifier('plural');
- const sayMember = t.jsxMemberExpression(sayIdentifier, pluralProperty);
-
- const countAttribute = t.jsxAttribute(
- t.jsxIdentifier('_'),
- t.jsxExpressionContainer(t.identifier('count')),
- );
- const oneAttribute = t.jsxAttribute(t.jsxIdentifier('one'), t.stringLiteral('item'));
- const otherAttribute = t.jsxAttribute(t.jsxIdentifier('other'), t.stringLiteral('items'));
-
- const openingElement = t.jsxOpeningElement(
- sayMember,
- [countAttribute, oneAttribute, otherAttribute],
- true,
- );
- const jsxElement = t.jsxElement(openingElement, null, []);
-
- // Mock path object
- const path = {
- node: jsxElement,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.JSXElement(path as any);
-
- expect(path.replaceWith).toHaveBeenCalled();
- expect(path.skip).toHaveBeenCalled();
- expect(context.foundMessages).toHaveLength(1);
- });
-
- it('should not process non-Say JSX elements', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- // Create a non-Say element
- const divIdentifier = t.jsxIdentifier('div');
- const openingElement = t.jsxOpeningElement(divIdentifier, [], false);
- const closingElement = t.jsxClosingElement(divIdentifier);
- const helloText = t.jsxText('Hello World');
- const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
-
- // Mock path object
- const path = {
- node: jsxElement,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- visitor.JSXElement(path as any);
-
- expect(path.replaceWith).not.toHaveBeenCalled();
- expect(path.skip).not.toHaveBeenCalled();
- expect(context.foundMessages).toHaveLength(0);
- });
-
- it('should reset identifier store after processing', () => {
- const context = createMockContext();
-
- // Use identifier store to generate some IDs
- context.identifierStore.next();
- context.identifierStore.next();
- expect(context.identifierStore.next()).toBe('2');
-
- // Process a JSX element
- const sayIdentifier = t.jsxIdentifier('Say');
- const openingElement = t.jsxOpeningElement(sayIdentifier, [], false);
- const closingElement = t.jsxClosingElement(sayIdentifier);
- const helloText = t.jsxText('Hello');
- const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
-
- const path = {
- node: jsxElement,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- const visitor = new Visitor(context);
- visitor.JSXElement(path as any);
-
- // Identifier store should be reset
- expect(context.identifierStore.next()).toBe('0');
- });
- });
-
- describe('toHandlers', () => {
- it('should return properly structured handlers object', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- const handlers = visitor.toHandlers();
-
- expect(handlers).toHaveProperty('Expression');
- expect(handlers).toHaveProperty('JSXElement');
- expect(typeof handlers.Expression).toBe('function');
- expect(typeof handlers.JSXElement).toBe('function');
- });
-
- it('should bind handlers to visitor instance', () => {
- const context = createMockContext();
- const visitor = new Visitor(context);
-
- const handlers = visitor.toHandlers();
-
- // Test that handlers are bound by checking they have access to instance context
- const expressionMockPath = {
- node: {} as any,
- parent: {} as any,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- // JSX handler needs a proper JSX element structure
- const sayIdentifier = t.jsxIdentifier('Say');
- const openingElement = t.jsxOpeningElement(sayIdentifier, [], false);
- const closingElement = t.jsxClosingElement(sayIdentifier);
- const jsxElement = t.jsxElement(openingElement, closingElement, []);
-
- const jsxMockPath = {
- node: jsxElement,
- replaceWith: vi.fn(),
- skip: vi.fn(),
- };
-
- // Calling handlers should not throw and should access the instance context
- expect(() => handlers.Expression(expressionMockPath as any)).not.toThrow();
- expect(() => handlers.JSXElement(jsxMockPath as any)).not.toThrow();
- });
- });
-});
diff --git a/packages/plugin-babel/src/core/visitor.ts b/packages/plugin-babel/src/core/visitor.ts
deleted file mode 100644
index f097243..0000000
--- a/packages/plugin-babel/src/core/visitor.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import type { Visitor as BabelVisitor } from '@babel/core';
-import { generateSayCallExpression } from '~/features/js/generator.js';
-import { parseExpression } from '~/features/js/parser.js';
-import { generateSayJSXElement } from '~/features/jsx/generator.js';
-import { parseJSXElement } from '~/features/jsx/parser.js';
-import type { Context } from './context.js';
-
-// @ts-expect-error
-type P = Parameters[0];
-
-export class Visitor {
- constructor(public readonly context: Context) {}
-
- Expression(path: P<'Expression'>) {
- path.node.leadingComments = path.parent.leadingComments;
- const message = parseExpression(this.context, path.node);
-
- if (message) {
- this.context.foundMessages.push(message);
- this.context.identifierStore.reset();
-
- const replacement = generateSayCallExpression(message);
- path.replaceWith(replacement);
- path.skip();
- }
- }
-
- JSXElement(path: P<'JSXElement'>) {
- const message = parseJSXElement(this.context, path.node);
-
- if (message) {
- this.context.foundMessages.push(message);
- this.context.identifierStore.reset();
-
- const replacement = generateSayJSXElement(message);
- path.replaceWith(replacement);
- path.skip();
- }
- }
-
- toHandlers() {
- return {
- Expression: this.Expression.bind(this),
- JSXElement: this.JSXElement.bind(this),
- };
- }
-}
diff --git a/packages/plugin-babel/src/features/jsx/generator.ts b/packages/plugin-babel/src/features/jsx/generator.ts
deleted file mode 100644
index 09bd649..0000000
--- a/packages/plugin-babel/src/features/jsx/generator.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import * as t from '@babel/types';
-import type { CompositeMessage } from '~/core/messages/types.js';
-import { generateChildExpressions } from '../js/generator.js';
-
-export function generateSayJSXElement(message: CompositeMessage) {
- const id = message.descriptor.id ?? message.toHashString();
- const children = generateChildExpressions(message.children);
-
- const attributes = [
- t.jsxAttribute(t.jsxIdentifier('id'), t.stringLiteral(id)),
- ...children.map(([k, e]) =>
- t.jsxAttribute(t.jsxIdentifier(Number.isNaN(+k) ? k : `_${k}`), t.jsxExpressionContainer(e)),
- ),
- ];
-
- return t.jsxElement(t.jsxOpeningElement(t.jsxIdentifier('Say'), attributes, true), null, []);
-}
diff --git a/packages/plugin-babel/src/index.ts b/packages/plugin-babel/src/index.ts
index 95c8bda..41e5e43 100644
--- a/packages/plugin-babel/src/index.ts
+++ b/packages/plugin-babel/src/index.ts
@@ -1,10 +1,29 @@
+import { relative } from 'node:path';
import type { PluginObj } from '@babel/core';
-import { Context } from './core/context.js';
-import { Visitor } from './core/visitor.js';
+import { parse } from '@babel/parser';
+import { resolveConfig } from '@saykit/config/features/loader';
export default function (): PluginObj {
+ const config = resolveConfig();
+
return {
name: 'saykit',
- visitor: new Visitor(new Context([])).toHandlers(),
+ visitor: {
+ Program(path, state) {
+ const id_ = state.file.opts.filename;
+ if (!id_ || id_.includes('node_modules')) return;
+ const code = state.file.code ?? '';
+
+ const id = relative(process.cwd(), id_).replaceAll('\\', '/').split('?')[0]!;
+ const bucket = config.buckets.find((b) => b.match(id));
+ const transformed = bucket?.transformer.transform(code, id) ?? code;
+
+ if (transformed !== code) {
+ const ast = parse(transformed, state.file.opts.parserOpts as any);
+ path.replaceWith(ast.program);
+ path.skip();
+ }
+ },
+ },
};
}
diff --git a/packages/plugin-babel/tsdown.config.ts b/packages/plugin-babel/tsdown.config.ts
index 8d98b80..e07a8f0 100644
--- a/packages/plugin-babel/tsdown.config.ts
+++ b/packages/plugin-babel/tsdown.config.ts
@@ -1,5 +1,5 @@
import { defineConfig } from 'tsdown';
export default defineConfig({
- entry: ['src/index.ts', 'src/core/index.ts'],
+ entry: ['src/index.ts', 'src/*.ts'],
});
diff --git a/packages/unplugin/package.json b/packages/plugin-unplugin/package.json
similarity index 92%
rename from packages/unplugin/package.json
rename to packages/plugin-unplugin/package.json
index 0c11844..4da2ec5 100644
--- a/packages/unplugin/package.json
+++ b/packages/plugin-unplugin/package.json
@@ -18,7 +18,7 @@
"repository": {
"type": "git",
"url": "git+https://github.com/k0d13/saykit.git",
- "directory": "packages/unplugin"
+ "directory": "packages/plugin-unplugin"
},
"files": [
"dist",
@@ -45,7 +45,7 @@
"prepack": "pnpm build"
},
"dependencies": {
- "@saykit/babel-plugin": "workspace:^",
+ "@saykit/config": "workspace:^",
"unplugin": "^3.0.0"
}
}
diff --git a/packages/unplugin/src/bun.ts b/packages/plugin-unplugin/src/bun.ts
similarity index 100%
rename from packages/unplugin/src/bun.ts
rename to packages/plugin-unplugin/src/bun.ts
diff --git a/packages/unplugin/src/esbuild.ts b/packages/plugin-unplugin/src/esbuild.ts
similarity index 100%
rename from packages/unplugin/src/esbuild.ts
rename to packages/plugin-unplugin/src/esbuild.ts
diff --git a/packages/unplugin/src/farm.ts b/packages/plugin-unplugin/src/farm.ts
similarity index 100%
rename from packages/unplugin/src/farm.ts
rename to packages/plugin-unplugin/src/farm.ts
diff --git a/packages/plugin-unplugin/src/index.ts b/packages/plugin-unplugin/src/index.ts
new file mode 100644
index 0000000..9733ec6
--- /dev/null
+++ b/packages/plugin-unplugin/src/index.ts
@@ -0,0 +1,20 @@
+import { relative } from 'node:path';
+import { resolveConfig } from '@saykit/config/features/loader';
+import { createUnplugin } from 'unplugin';
+
+export default createUnplugin((_options?: never) => {
+ const config = resolveConfig();
+
+ return {
+ name: 'saykit',
+ enforce: 'pre',
+ transform: {
+ filter: { id: { exclude: /node_modules/ } },
+ handler: (code, id_) => {
+ const id = relative(process.cwd(), id_).replaceAll('\\', '/').split('?')[0]!;
+ const bucket = config.buckets.find((b) => b.match(id));
+ return bucket?.transformer.transform(code, id) ?? code;
+ },
+ },
+ };
+});
diff --git a/packages/unplugin/src/rolldown.ts b/packages/plugin-unplugin/src/rolldown.ts
similarity index 100%
rename from packages/unplugin/src/rolldown.ts
rename to packages/plugin-unplugin/src/rolldown.ts
diff --git a/packages/unplugin/src/rollup.ts b/packages/plugin-unplugin/src/rollup.ts
similarity index 100%
rename from packages/unplugin/src/rollup.ts
rename to packages/plugin-unplugin/src/rollup.ts
diff --git a/packages/unplugin/src/rspack.ts b/packages/plugin-unplugin/src/rspack.ts
similarity index 100%
rename from packages/unplugin/src/rspack.ts
rename to packages/plugin-unplugin/src/rspack.ts
diff --git a/packages/unplugin/src/unloader.ts b/packages/plugin-unplugin/src/unloader.ts
similarity index 100%
rename from packages/unplugin/src/unloader.ts
rename to packages/plugin-unplugin/src/unloader.ts
diff --git a/packages/unplugin/src/vite.ts b/packages/plugin-unplugin/src/vite.ts
similarity index 100%
rename from packages/unplugin/src/vite.ts
rename to packages/plugin-unplugin/src/vite.ts
diff --git a/packages/unplugin/src/webpack.ts b/packages/plugin-unplugin/src/webpack.ts
similarity index 100%
rename from packages/unplugin/src/webpack.ts
rename to packages/plugin-unplugin/src/webpack.ts
diff --git a/packages/unplugin/tsconfig.json b/packages/plugin-unplugin/tsconfig.json
similarity index 100%
rename from packages/unplugin/tsconfig.json
rename to packages/plugin-unplugin/tsconfig.json
diff --git a/packages/unplugin/tsdown.config.ts b/packages/plugin-unplugin/tsdown.config.ts
similarity index 100%
rename from packages/unplugin/tsdown.config.ts
rename to packages/plugin-unplugin/tsdown.config.ts
diff --git a/packages/transform-js/package.json b/packages/transform-js/package.json
new file mode 100644
index 0000000..5106d4e
--- /dev/null
+++ b/packages/transform-js/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "@saykit/transform-js",
+ "version": "0.0.0",
+ "description": "JavaScript and TypeScript transformer for SayKit",
+ "keywords": [
+ "i18n",
+ "javascript",
+ "saykit",
+ "transformer",
+ "typescript"
+ ],
+ "homepage": "https://github.com/k0d13/saykit#readme",
+ "bugs": {
+ "url": "https://github.com/k0d13/saykit/issues"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/k0d13/saykit.git",
+ "directory": "packages/transform-js"
+ },
+ "files": [
+ "dist",
+ "!dist/**/*.map"
+ ],
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "./parser": {
+ "types": "./dist/parser.d.mts",
+ "default": "./dist/parser.mjs"
+ },
+ "./generator": {
+ "types": "./dist/generator.d.mts",
+ "default": "./dist/generator.mjs"
+ }
+ },
+ "publishConfig": {
+ "access": "public",
+ "provenance": true
+ },
+ "scripts": {
+ "check": "tsc --noEmit",
+ "test": "vitest",
+ "coverage": "vitest run --coverage",
+ "build": "tsdown",
+ "prepack": "pnpm build"
+ },
+ "dependencies": {
+ "@babel/generator": "^7.29.1",
+ "@babel/parser": "^7.29.2",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@saykit/config": "workspace:^"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.29.0",
+ "@types/babel__core": "^7.20.5",
+ "@types/babel__generator": "^7.27.0",
+ "@types/babel__traverse": "^7.28.0"
+ }
+}
diff --git a/packages/plugin-babel/src/features/js/generator.ts b/packages/transform-js/src/generator.ts
similarity index 74%
rename from packages/plugin-babel/src/features/js/generator.ts
rename to packages/transform-js/src/generator.ts
index f6efcde..3f42d64 100644
--- a/packages/plugin-babel/src/features/js/generator.ts
+++ b/packages/transform-js/src/generator.ts
@@ -5,7 +5,7 @@ import {
CompositeMessage,
ElementMessage,
type Message,
-} from '~/core/messages/types.js';
+} from '@saykit/config/features/messages';
export function generateSayCallExpression(message: CompositeMessage) {
const id = message.descriptor.id ?? message.toHashString();
@@ -13,25 +13,25 @@ export function generateSayCallExpression(message: CompositeMessage) {
const properties = t.objectExpression([
t.objectProperty(t.identifier('id'), t.stringLiteral(id)),
- ...children.map(([key, expr]) => t.objectProperty(t.identifier(key), expr)),
+ ...children.map(([ident, expr]) => t.objectProperty(t.identifier(ident), expr)),
]);
return t.callExpression(t.memberExpression(message.accessor, t.identifier('call')), [properties]);
}
-export function generateChildExpressions(messages: Message[]) {
+function generateChildExpressions(messages: Message[]) {
return messages.reduce<[string, t.Expression][]>((c, m) => {
if (m instanceof ArgumentMessage) {
- c.push([m.identifier, m.expression]);
+ c.push([String(m.identifier), m.expression]);
}
if (m instanceof ElementMessage) {
- c.push([m.identifier, m.expression]);
+ c.push([String(m.identifier), m.expression]);
c.push(...generateChildExpressions(m.children));
}
if (m instanceof ChoiceMessage) {
- c.push([m.identifier, m.expression]);
+ c.push([String(m.identifier), m.expression]);
c.push(...generateChildExpressions(m.branches.map((b) => b.value)));
}
diff --git a/packages/transform-js/src/index.ts b/packages/transform-js/src/index.ts
new file mode 100644
index 0000000..988c797
--- /dev/null
+++ b/packages/transform-js/src/index.ts
@@ -0,0 +1,88 @@
+import { generate } from '@babel/generator';
+import * as parser from '@babel/parser';
+import traverse_ from '@babel/traverse';
+import type { Transformer } from '@saykit/config';
+import { assignSequenceIdentifiers, CompositeMessage } from '@saykit/config/features/messages';
+import { generateSayCallExpression } from './generator.js';
+import { parseExpression } from './parser.js';
+
+const traverse = ((traverse_ as any).default || traverse_) as typeof traverse_;
+
+function createProgram(code: string, id: string) {
+ const program = parser.parse(code, {
+ sourceType: 'module',
+ sourceFilename: id,
+ plugins: ['typescript'],
+ allowImportExportEverywhere: false,
+ allowReturnOutsideFunction: true,
+ ranges: true,
+ attachComment: true,
+ tokens: true,
+ });
+
+ return Object.assign(program, {
+ toString() {
+ return generate(program, {
+ retainLines: true,
+ comments: true,
+ compact: false,
+ }).code;
+ },
+ });
+}
+
+function createJsTransformer(): Transformer {
+ return {
+ match(id: string) {
+ return ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts'].some((e) => id.endsWith(e));
+ },
+
+ extract(code: string, id: string) {
+ const program = createProgram(code, id);
+ const messages: CompositeMessage[] = [];
+
+ traverse(program, {
+ Expression(path) {
+ path.node.leadingComments = path.node.leadingComments ?? [];
+ const message = parseExpression(path.node);
+ if (message) {
+ assignSequenceIdentifiers(message, { current: 0 });
+ messages.push(message);
+ path.skip();
+ }
+ },
+ });
+
+ // TODO: Can this just return the messages themselves, and be converted upstream
+ return messages.map((message) => ({
+ message: message.toICUString(),
+ translation: undefined,
+ id: message.descriptor.id,
+ context: message.descriptor.context,
+ comments: message.comments,
+ references: message.references,
+ }));
+ },
+
+ transform(code: string, id: string) {
+ const program = createProgram(code, id);
+
+ traverse(program, {
+ Expression(path) {
+ path.node.leadingComments = path.node.leadingComments ?? [];
+ const message = parseExpression(path.node);
+ if (message) {
+ assignSequenceIdentifiers(message, { current: 0 });
+ const replacement = generateSayCallExpression(message);
+ path.replaceWith(replacement);
+ path.skip();
+ }
+ },
+ });
+
+ return program.toString();
+ },
+ };
+}
+
+export default createJsTransformer;
diff --git a/packages/plugin-babel/src/features/js/parser.test.ts b/packages/transform-js/src/parser.test.ts
similarity index 83%
rename from packages/plugin-babel/src/features/js/parser.test.ts
rename to packages/transform-js/src/parser.test.ts
index 42a0f1f..1132415 100644
--- a/packages/plugin-babel/src/features/js/parser.test.ts
+++ b/packages/transform-js/src/parser.test.ts
@@ -1,7 +1,12 @@
import * as t from '@babel/types';
+import {
+ ArgumentMessage,
+ AUTO_INCREMENT_IDENTIFIER,
+ ChoiceMessage,
+ CompositeMessage,
+ LiteralMessage,
+} from '@saykit/config/features/messages';
import { describe, expect, it } from 'vitest';
-import { Context } from '~/core/context.js';
-import { ArgumentMessage, ChoiceMessage, LiteralMessage } from '~/core/messages/types.js';
import * as parser from './parser.js';
describe('processExpression', () => {
@@ -65,8 +70,6 @@ describe('processExpression', () => {
});
describe('parseTaggedTemplateExpression', () => {
- const createMockContext = () => new Context([]);
-
it('should parse simple tagged template', () => {
const sayIdentifier = t.identifier('say');
const quasi = t.templateElement({ raw: 'Hello', cooked: 'Hello' }, false);
@@ -75,7 +78,7 @@ describe('parseTaggedTemplateExpression', () => {
t.templateLiteral([quasi], []),
);
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(1);
@@ -92,7 +95,7 @@ describe('parseTaggedTemplateExpression', () => {
t.templateLiteral([quasi1, quasi2], [expression]),
);
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(3);
@@ -114,7 +117,7 @@ describe('parseTaggedTemplateExpression', () => {
const quasi = t.templateElement({ raw: 'Hello', cooked: 'Hello' }, false);
const taggedTemplate = t.taggedTemplateExpression(sayCall, t.templateLiteral([quasi], []));
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result!.descriptor).toEqual({ id: 'greeting', context: undefined });
@@ -130,7 +133,7 @@ describe('parseTaggedTemplateExpression', () => {
const quasi = t.templateElement({ raw: 'Hello', cooked: 'Hello' }, false);
const taggedTemplate = t.taggedTemplateExpression(sayCall, t.templateLiteral([quasi], []));
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result!.descriptor).toEqual({ id: undefined, context: 'greeting' });
@@ -153,7 +156,7 @@ describe('parseTaggedTemplateExpression', () => {
},
] as t.Comment[];
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result!.comments).toEqual(['Use formal greeting', 'Consider cultural context']);
@@ -175,7 +178,7 @@ describe('parseTaggedTemplateExpression', () => {
identifierName: undefined,
};
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result!.references).toEqual(['test.js:10']);
@@ -189,15 +192,13 @@ describe('parseTaggedTemplateExpression', () => {
t.templateLiteral([quasi], []),
);
- const result = parser.parseTaggedTemplateExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseTaggedTemplateExpression(taggedTemplate);
expect(result).toBeNull();
});
});
describe('parseCallExpression', () => {
- const createMockContext = () => new Context([]);
-
it('should parse simple plural call expression', () => {
const sayIdentifier = t.identifier('say');
const pluralMember = t.memberExpression(sayIdentifier, t.identifier('plural'));
@@ -208,7 +209,7 @@ describe('parseCallExpression', () => {
]);
const callExpression = t.callExpression(pluralMember, [countIdentifier, choicesObject]);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(1);
@@ -217,9 +218,9 @@ describe('parseCallExpression', () => {
expect(choiceMessage.kind).toBe('plural');
expect(choiceMessage.identifier).toBe('count');
expect(choiceMessage.branches).toHaveLength(2);
- expect(choiceMessage.branches[0]!.key).toBe('one');
+ expect(choiceMessage.branches[0]!.identifier).toBe('one');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'item' });
- expect(choiceMessage.branches[1]!.key).toBe('other');
+ expect(choiceMessage.branches[1]!.identifier).toBe('other');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'items' });
});
@@ -234,7 +235,7 @@ describe('parseCallExpression', () => {
]);
const callExpression = t.callExpression(ordinalMember, [positionIdentifier, choicesObject]);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
@@ -242,11 +243,11 @@ describe('parseCallExpression', () => {
expect(choiceMessage.kind).toBe('ordinal');
expect(choiceMessage.identifier).toBe('position');
expect(choiceMessage.branches).toHaveLength(3);
- expect(choiceMessage.branches[0]!.key).toBe('1');
+ expect(choiceMessage.branches[0]!.identifier).toBe('1');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'first' });
- expect(choiceMessage.branches[1]!.key).toBe('2');
+ expect(choiceMessage.branches[1]!.identifier).toBe('2');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'second' });
- expect(choiceMessage.branches[2]!.key).toBe('other');
+ expect(choiceMessage.branches[2]!.identifier).toBe('other');
expect(choiceMessage.branches[2]!.value).toEqual({ text: 'other' });
});
@@ -261,7 +262,7 @@ describe('parseCallExpression', () => {
]);
const callExpression = t.callExpression(selectMember, [genderIdentifier, choicesObject]);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
@@ -269,11 +270,11 @@ describe('parseCallExpression', () => {
expect(choiceMessage.kind).toBe('select');
expect(choiceMessage.identifier).toBe('gender');
expect(choiceMessage.branches).toHaveLength(3);
- expect(choiceMessage.branches[0]!.key).toBe('male');
+ expect(choiceMessage.branches[0]!.identifier).toBe('male');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'He' });
- expect(choiceMessage.branches[1]!.key).toBe('female');
+ expect(choiceMessage.branches[1]!.identifier).toBe('female');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'She' });
- expect(choiceMessage.branches[2]!.key).toBe('other');
+ expect(choiceMessage.branches[2]!.identifier).toBe('other');
expect(choiceMessage.branches[2]!.value).toEqual({ text: 'They' });
});
@@ -287,7 +288,7 @@ describe('parseCallExpression', () => {
]);
const callExpression = t.callExpression(pluralMember, [countIdentifier, choicesObject]);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
@@ -295,7 +296,7 @@ describe('parseCallExpression', () => {
expect(choiceMessage.kind).toBe('plural');
expect(choiceMessage.identifier).toBe('count');
expect(choiceMessage.branches).toHaveLength(1);
- expect(choiceMessage.branches[0]!.key).toBe('one');
+ expect(choiceMessage.branches[0]!.identifier).toBe('one');
expect(choiceMessage.branches[0]!.value).toBeInstanceOf(ArgumentMessage);
expect((choiceMessage.branches[0]!.value as ArgumentMessage).identifier).toBe('name');
});
@@ -314,7 +315,7 @@ describe('parseCallExpression', () => {
]);
const callExpression = t.callExpression(pluralMember, [countIdentifier, choicesObject]);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).not.toBeNull();
expect(result!.descriptor).toEqual({ id: 'itemCount', context: undefined });
@@ -325,7 +326,7 @@ describe('parseCallExpression', () => {
const someMember = t.memberExpression(sayIdentifier, t.identifier('something'));
const callExpression = t.callExpression(someMember, []);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).toBeNull();
});
@@ -336,12 +337,12 @@ describe('parseCallExpression', () => {
// Missing required arguments
const callExpression = t.callExpression(pluralMember, []);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).toBeNull();
});
- it('should handle numeric keys as exact matches', () => {
+ it('should handle numeric identifiers as exact matches', () => {
const sayIdentifier = t.identifier('say');
const pluralMember = t.memberExpression(sayIdentifier, t.identifier('plural'));
const countIdentifier = t.identifier('count');
@@ -352,7 +353,7 @@ describe('parseCallExpression', () => {
]);
const callExpression = t.callExpression(pluralMember, [countIdentifier, choicesObject]);
- const result = parser.parseCallExpression(createMockContext(), callExpression);
+ const result = parser.parseCallExpression(callExpression);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
@@ -360,18 +361,16 @@ describe('parseCallExpression', () => {
expect(choiceMessage.kind).toBe('plural');
expect(choiceMessage.identifier).toBe('count');
expect(choiceMessage.branches).toHaveLength(3);
- expect(choiceMessage.branches[0]!.key).toBe('0');
+ expect(choiceMessage.branches[0]!.identifier).toBe('0');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'none' });
- expect(choiceMessage.branches[1]!.key).toBe('1');
+ expect(choiceMessage.branches[1]!.identifier).toBe('1');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'one' });
- expect(choiceMessage.branches[2]!.key).toBe('other');
+ expect(choiceMessage.branches[2]!.identifier).toBe('other');
expect(choiceMessage.branches[2]!.value).toEqual({ text: 'many' });
});
});
describe('parseExpression', () => {
- const createMockContext = () => new Context([]);
-
it('should delegate to tagged template parser', () => {
const sayIdentifier = t.identifier('say');
const quasi = t.templateElement({ raw: 'Hello', cooked: 'Hello' }, false);
@@ -380,10 +379,10 @@ describe('parseExpression', () => {
t.templateLiteral([quasi], []),
);
- const result = parser.parseExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseExpression(taggedTemplate);
expect(result).not.toBeNull();
- expect(result).toBeInstanceOf(Object); // CompositeMessage
+ expect(result).toBeInstanceOf(CompositeMessage);
});
it('should delegate to call expression parser', () => {
@@ -396,16 +395,16 @@ describe('parseExpression', () => {
]);
const callExpression = t.callExpression(pluralMember, [countIdentifier, choicesObject]);
- const result = parser.parseExpression(createMockContext(), callExpression);
+ const result = parser.parseExpression(callExpression);
expect(result).not.toBeNull();
- expect(result).toBeInstanceOf(Object); // CompositeMessage
+ expect(result).toBeInstanceOf(CompositeMessage);
});
it('should return argument message for fallback=true with simple identifier', () => {
const identifier = t.identifier('name');
- const result = parser.parseExpression(createMockContext(), identifier, true);
+ const result = parser.parseExpression(identifier, true);
expect(result).toBeInstanceOf(ArgumentMessage);
expect((result as ArgumentMessage).identifier).toBe('name');
@@ -414,16 +413,16 @@ describe('parseExpression', () => {
it('should return argument message for fallback=true with complex expression', () => {
const expression = t.memberExpression(t.identifier('obj'), t.identifier('prop'));
- const result = parser.parseExpression(createMockContext(), expression, true);
+ const result = parser.parseExpression(expression, true);
expect(result).toBeInstanceOf(ArgumentMessage);
- expect((result as ArgumentMessage).identifier).toBe('0'); // Generated identifier
+ expect((result as ArgumentMessage).identifier).toBe(AUTO_INCREMENT_IDENTIFIER);
});
it('should return null for fallback=false with non-say expression', () => {
const identifier = t.identifier('name');
- const result = parser.parseExpression(createMockContext(), identifier, false);
+ const result = parser.parseExpression(identifier, false);
expect(result).toBeNull();
});
@@ -438,14 +437,14 @@ describe('parseExpression', () => {
t.templateLiteral([quasi1, quasi2], [complexExpression]),
);
- const result = parser.parseExpression(createMockContext(), taggedTemplate);
+ const result = parser.parseExpression(taggedTemplate);
expect(result).not.toBeNull();
expect(result).toBeInstanceOf(Object); // CompositeMessage
if (result) {
expect(result.children).toHaveLength(3);
expect(result.children[1]).toBeInstanceOf(ArgumentMessage);
- expect((result.children[1] as ArgumentMessage).identifier).toBe('0'); // Generated identifier
+ expect((result.children[1] as ArgumentMessage).identifier).toBe(AUTO_INCREMENT_IDENTIFIER);
}
});
});
diff --git a/packages/plugin-babel/src/features/js/parser.ts b/packages/transform-js/src/parser.ts
similarity index 76%
rename from packages/plugin-babel/src/features/js/parser.ts
rename to packages/transform-js/src/parser.ts
index fef1d6d..874e60b 100644
--- a/packages/plugin-babel/src/features/js/parser.ts
+++ b/packages/transform-js/src/parser.ts
@@ -1,17 +1,14 @@
import * as t from '@babel/types';
-import type { Context } from '~/core/context.js';
import {
ArgumentMessage,
ChoiceMessage,
CompositeMessage,
+ AUTO_INCREMENT_IDENTIFIER,
LiteralMessage,
type Message,
-} from '~/core/messages/types.js';
-
-//
+} from '@saykit/config/features/messages';
export function parseTaggedTemplateExpression(
- context: Context,
tagged: t.TaggedTemplateExpression,
): CompositeMessage | null {
const processed = processExpression(tagged.tag);
@@ -19,9 +16,9 @@ export function parseTaggedTemplateExpression(
const [accessor, descriptor] = processed;
const children = tagged.quasi.quasis.reduce((c, q, i) => {
- c.push(new LiteralMessage(q.value.cooked!));
+ c.push(new LiteralMessage(q.value.cooked ?? q.value.raw));
if (t.isExpression(tagged.quasi.expressions[i]))
- c.push(parseExpression(context, tagged.quasi.expressions[i]!, true)!);
+ c.push(parseExpression(tagged.quasi.expressions[i]!, true)!);
return c;
}, []);
@@ -35,16 +32,13 @@ export function parseTaggedTemplateExpression(
return new CompositeMessage(
{ id: descriptorId, context: descriptorContext },
getTranslatorComments(tagged.leadingComments ?? []),
- tagged.loc ? [`${tagged.loc?.filename}:${tagged.loc?.start.line}`] : [],
+ tagged.loc ? [`${tagged.loc.filename}:${tagged.loc.start.line}`] : [],
children,
accessor,
);
}
-export function parseCallExpression(
- context: Context,
- call: t.CallExpression,
-): CompositeMessage | null {
+export function parseCallExpression(call: t.CallExpression): CompositeMessage | null {
const processed = processExpression(call.callee);
if (!processed) return null;
const [accessor, descriptor, kind] = processed;
@@ -60,9 +54,9 @@ export function parseCallExpression(
let message: Message | null = null;
if (!message && t.isStringLiteral(p.value)) message = new LiteralMessage(p.value.value);
- if (!message) message = parseExpression(context, p.value, true);
+ if (!message) message = parseExpression(p.value, true);
c.push({
- key: getPropertyNameAsString(context, p.key),
+ identifier: getPropertyNameAsString(p.key),
value: message!,
});
@@ -70,7 +64,7 @@ export function parseCallExpression(
}, []);
const value = call.arguments[0];
- const identifier = getExpressionAsKey(context, value);
+ const identifier = getExpressionAsKey(value);
const choice = new ChoiceMessage(kind, identifier, branches, value);
const descriptorId = descriptor
@@ -83,7 +77,7 @@ export function parseCallExpression(
return new CompositeMessage(
{ id: descriptorId, context: descriptorContext },
[],
- call.loc ? [`${call.loc?.filename}:${call.loc?.start.line}`] : [],
+ call.loc ? [`${call.loc.filename}:${call.loc.start.line}`] : [],
[choice],
accessor,
);
@@ -94,53 +88,6 @@ export function parseCallExpression(
//
-export function parseExpression(
- context: Context,
- expression: t.Expression,
- fallback?: false,
-): CompositeMessage | null;
-export function parseExpression(
- context: Context,
- expression: t.Expression,
- fallback: true,
-): CompositeMessage | ArgumentMessage;
-export function parseExpression(context: Context, expression: t.Expression, fallback?: boolean) {
- let message: CompositeMessage | null = null;
- switch (true) {
- case t.isTaggedTemplateExpression(expression):
- message = parseTaggedTemplateExpression(context, expression);
- break;
- case t.isCallExpression(expression):
- message = parseCallExpression(context, expression);
- break;
- }
-
- if (message) {
- return message;
- } else if (fallback) {
- const key = getExpressionAsKey(context, expression);
- return new ArgumentMessage(key, expression);
- } else {
- return null;
- }
-}
-
-//
-
-export function getExpressionAsKey(context: Context, node: t.Node) {
- if (t.isIdentifier(node)) return node.name;
- if (t.isJSXIdentifier(node)) return node.name;
- return context.identifierStore.next();
-}
-
-/**
- * Recursively process an expression to extract:
- * - The accessor expression (e.g. `say`, `intl.say`)
- * - An optional descriptor object (e.g. options passed as an argument)
- * - An optional message kind (e.g. `"plural"`, `"select"`)
- *
- * @param expression
- */
export function processExpression(
expression: t.Node,
): [t.Expression, t.ObjectExpression | null, string | null] | null {
@@ -173,12 +120,49 @@ export function processExpression(
return null;
}
-function getPropertyNameAsString(context: Context, key: t.ObjectProperty['key']) {
+function getExpressionAsKey(node: t.Node) {
+ if (t.isIdentifier(node)) return node.name;
+ if (t.isJSXIdentifier(node)) return node.name;
+ return AUTO_INCREMENT_IDENTIFIER;
+}
+
+export function parseExpression(
+ expression: t.Expression,
+ fallback?: false,
+): CompositeMessage | null;
+export function parseExpression(
+ expression: t.Expression,
+ fallback: true,
+): CompositeMessage | ArgumentMessage;
+export function parseExpression(expression: t.Expression, fallback?: boolean) {
+ let message: CompositeMessage | null = null;
+ switch (true) {
+ case t.isTaggedTemplateExpression(expression):
+ message = parseTaggedTemplateExpression(expression);
+ break;
+ case t.isCallExpression(expression):
+ message = parseCallExpression(expression);
+ break;
+ }
+
+ if (message) {
+ return message;
+ } else if (fallback) {
+ const key = getExpressionAsKey(expression);
+ return new ArgumentMessage(key, expression);
+ } else {
+ return null;
+ }
+}
+
+//
+
+function getPropertyNameAsString(key: t.ObjectProperty['key']) {
if (t.isIdentifier(key)) return key.name;
if (t.isStringLiteral(key)) return key.value;
if (t.isNumericLiteral(key)) return key.value.toString();
if (t.isBigIntLiteral(key)) return key.value.toString();
- return context.identifierStore.next();
+ return AUTO_INCREMENT_IDENTIFIER;
}
function findPropertyValueIfStringLiteralAsString(object: t.ObjectExpression, key: string) {
diff --git a/packages/transform-js/tsconfig.json b/packages/transform-js/tsconfig.json
new file mode 100644
index 0000000..b560bec
--- /dev/null
+++ b/packages/transform-js/tsconfig.json
@@ -0,0 +1 @@
+{ "extends": "../../tsconfig.base.json" }
diff --git a/packages/transform-js/tsdown.config.ts b/packages/transform-js/tsdown.config.ts
new file mode 100644
index 0000000..bf9e5e6
--- /dev/null
+++ b/packages/transform-js/tsdown.config.ts
@@ -0,0 +1,5 @@
+import { defineConfig } from 'tsdown';
+
+export default defineConfig({
+ entry: ['src/index.ts', 'src/parser.ts', 'src/generator.ts'],
+});
diff --git a/packages/transform-js/vitest.config.ts b/packages/transform-js/vitest.config.ts
new file mode 100644
index 0000000..613c8e7
--- /dev/null
+++ b/packages/transform-js/vitest.config.ts
@@ -0,0 +1,10 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ coverage: {
+ provider: 'v8',
+ reportsDirectory: './.coverage',
+ },
+ },
+});
diff --git a/packages/transform-jsx/package.json b/packages/transform-jsx/package.json
new file mode 100644
index 0000000..01e0ce2
--- /dev/null
+++ b/packages/transform-jsx/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "@saykit/transform-jsx",
+ "version": "0.0.0",
+ "description": "JSX and TSX source transformer for SayKit",
+ "keywords": [
+ "i18n",
+ "jsx",
+ "saykit",
+ "transformer",
+ "tsx"
+ ],
+ "homepage": "https://github.com/k0d13/saykit#readme",
+ "bugs": {
+ "url": "https://github.com/k0d13/saykit/issues"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/k0d13/saykit.git",
+ "directory": "packages/transform-jsx"
+ },
+ "files": [
+ "dist",
+ "!dist/**/*.map"
+ ],
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "./parser": {
+ "types": "./dist/parser.d.mts",
+ "default": "./dist/parser.mjs"
+ },
+ "./generator": {
+ "types": "./dist/generator.d.mts",
+ "default": "./dist/generator.mjs"
+ }
+ },
+ "publishConfig": {
+ "access": "public",
+ "provenance": true
+ },
+ "scripts": {
+ "check": "tsc --noEmit",
+ "test": "vitest",
+ "coverage": "vitest run --coverage",
+ "build": "tsdown",
+ "prepack": "pnpm build"
+ },
+ "dependencies": {
+ "@babel/generator": "^7.29.1",
+ "@babel/parser": "^7.29.2",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@saykit/config": "workspace:^",
+ "@saykit/transform-js": "workspace:^"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.29.0",
+ "@types/babel__core": "^7.20.5",
+ "@types/babel__generator": "^7.27.0",
+ "@types/babel__traverse": "^7.28.0"
+ }
+}
diff --git a/packages/transform-jsx/src/generator.ts b/packages/transform-jsx/src/generator.ts
new file mode 100644
index 0000000..2bca15d
--- /dev/null
+++ b/packages/transform-jsx/src/generator.ts
@@ -0,0 +1,46 @@
+import * as t from '@babel/types';
+import {
+ ArgumentMessage,
+ ChoiceMessage,
+ CompositeMessage,
+ ElementMessage,
+ type Message,
+} from '@saykit/config/features/messages';
+
+export function generateSayJSXElement(message: CompositeMessage) {
+ const id = message.descriptor.id ?? message.toHashString();
+ const children = generateChildExpressions(message.children);
+
+ const attributes = [
+ t.jsxAttribute(t.jsxIdentifier('id'), t.stringLiteral(id)),
+ ...children.map(([k, e]) =>
+ t.jsxAttribute(t.jsxIdentifier(Number.isNaN(+k) ? k : `_${k}`), t.jsxExpressionContainer(e)),
+ ),
+ ];
+
+ return t.jsxElement(t.jsxOpeningElement(t.jsxIdentifier('Say'), attributes, true), null, []);
+}
+
+function generateChildExpressions(messages: Message[]) {
+ return messages.reduce<[string, t.Expression][]>((c, m) => {
+ if (m instanceof ArgumentMessage) {
+ c.push([String(m.identifier), m.expression]);
+ }
+
+ if (m instanceof ElementMessage) {
+ c.push([String(m.identifier), m.expression]);
+ c.push(...generateChildExpressions(m.children));
+ }
+
+ if (m instanceof ChoiceMessage) {
+ c.push([String(m.identifier), m.expression]);
+ c.push(...generateChildExpressions(m.branches.map((b) => b.value)));
+ }
+
+ if (m instanceof CompositeMessage) {
+ c.push(...generateChildExpressions(m.children));
+ }
+
+ return c;
+ }, []);
+}
diff --git a/packages/transform-jsx/src/index.ts b/packages/transform-jsx/src/index.ts
new file mode 100644
index 0000000..e822811
--- /dev/null
+++ b/packages/transform-jsx/src/index.ts
@@ -0,0 +1,111 @@
+import { generate } from '@babel/generator';
+import * as parser from '@babel/parser';
+import traverse_ from '@babel/traverse';
+import type { Transformer } from '@saykit/config';
+import { assignSequenceIdentifiers, CompositeMessage } from '@saykit/config/features/messages';
+import { generateSayCallExpression } from '@saykit/transform-js/generator';
+import { parseExpression } from '@saykit/transform-js/parser';
+import { generateSayJSXElement } from './generator.js';
+import { parseJSXElement } from './parser.js';
+
+const traverse = ((traverse_ as any).default || traverse_) as typeof traverse_;
+
+function createProgram(code: string, id: string) {
+ const program = parser.parse(code, {
+ sourceType: 'module',
+ sourceFilename: id,
+ plugins: ['typescript', 'jsx'],
+ allowImportExportEverywhere: false,
+ allowReturnOutsideFunction: true,
+ ranges: true,
+ attachComment: true,
+ tokens: true,
+ });
+
+ return Object.assign(program, {
+ toString() {
+ return generate(program, {
+ retainLines: true,
+ comments: true,
+ compact: false,
+ }).code;
+ },
+ });
+}
+
+function createJsxTransformer(): Transformer {
+ return {
+ match(id: string) {
+ return ['.jsx', '.tsx'].some((e) => id.endsWith(e));
+ },
+
+ extract(code: string, id: string) {
+ const program = createProgram(code, id);
+ const messages: CompositeMessage[] = [];
+
+ traverse(program, {
+ Expression(path) {
+ path.node.leadingComments = path.node.leadingComments ?? [];
+ const message = parseExpression(path.node);
+ if (message) {
+ assignSequenceIdentifiers(message, { current: 0 });
+ messages.push(message);
+ path.skip();
+ }
+ },
+
+ JSXElement(path) {
+ path.node.leadingComments = path.node.leadingComments ?? [];
+ const message = parseJSXElement(path.node);
+ if (message) {
+ assignSequenceIdentifiers(message, { current: 0 });
+ messages.push(message);
+ path.skip();
+ }
+ },
+ });
+
+ // TODO: Can this just return the messages themselves, and be converted upstream
+ return messages.map((message) => ({
+ message: message.toICUString(),
+ translation: undefined,
+ id: message.descriptor.id,
+ context: message.descriptor.context,
+ comments: message.comments,
+ references: message.references,
+ }));
+ },
+
+ transform(code: string, id: string) {
+ const program = createProgram(code, id);
+
+ traverse(program, {
+ Expression(path) {
+ path.node.leadingComments = path.node.leadingComments ?? [];
+ const message = parseExpression(path.node);
+ if (message) {
+ assignSequenceIdentifiers(message, { current: 0 });
+ const replacement = generateSayCallExpression(message);
+ path.replaceWith(replacement);
+ path.skip();
+ }
+ },
+
+ JSXElement(path) {
+ path.node.leadingComments = path.node.leadingComments ?? [];
+ const message = parseJSXElement(path.node);
+ if (message) {
+ assignSequenceIdentifiers(message, { current: 0 });
+ const replacement = generateSayJSXElement(message);
+ path.replaceWith(replacement);
+ path.skip();
+ }
+ },
+ });
+
+ return program.toString();
+ },
+ };
+}
+
+export default createJsxTransformer;
diff --git a/packages/plugin-babel/src/features/jsx/parser.test.ts b/packages/transform-jsx/src/parser.test.ts
similarity index 85%
rename from packages/plugin-babel/src/features/jsx/parser.test.ts
rename to packages/transform-jsx/src/parser.test.ts
index c8f81a2..ccc3801 100644
--- a/packages/plugin-babel/src/features/jsx/parser.test.ts
+++ b/packages/transform-jsx/src/parser.test.ts
@@ -1,17 +1,14 @@
import * as t from '@babel/types';
-import { describe, expect, it } from 'vitest';
-import { Context } from '~/core/context.js';
import {
ArgumentMessage,
ChoiceMessage,
ElementMessage,
LiteralMessage,
-} from '~/core/messages/types.js';
+} from '@saykit/config/features/messages';
+import { describe, expect, it } from 'vitest';
import * as parser from './parser.js';
describe('parseJSXContainerElement', () => {
- const createMockContext = () => new Context([]);
-
it('should parse simple JSX Say container element', () => {
const sayIdentifier = t.jsxIdentifier('Say');
const openingElement = t.jsxOpeningElement(sayIdentifier, [], false);
@@ -19,7 +16,7 @@ describe('parseJSXContainerElement', () => {
const helloText = t.jsxText('Hello World');
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(1);
@@ -40,7 +37,7 @@ describe('parseJSXContainerElement', () => {
exclamationText,
]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(3);
@@ -67,7 +64,7 @@ describe('parseJSXContainerElement', () => {
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText, strongElement]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(2);
@@ -89,7 +86,7 @@ describe('parseJSXContainerElement', () => {
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText, fragment]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(2);
@@ -106,7 +103,7 @@ describe('parseJSXContainerElement', () => {
const helloText = t.jsxText('Hello');
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.descriptor).toEqual({ id: 'greeting', context: undefined });
@@ -123,7 +120,7 @@ describe('parseJSXContainerElement', () => {
const helloText = t.jsxText('Hello');
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.descriptor).toEqual({ id: undefined, context: 'greeting' });
@@ -134,7 +131,7 @@ describe('parseJSXContainerElement', () => {
const openingElement = t.jsxOpeningElement(sayIdentifier, [], true);
const jsxElement = t.jsxElement(openingElement, null, []);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).toBeNull();
});
@@ -146,7 +143,7 @@ describe('parseJSXContainerElement', () => {
const helloText = t.jsxText('Hello');
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).toBeNull();
});
@@ -158,7 +155,7 @@ describe('parseJSXContainerElement', () => {
const whitespaceText = t.jsxText('\n Hello, \n World! \n');
const jsxElement = t.jsxElement(openingElement, closingElement, [whitespaceText]);
- const result = parser.parseJSXContainerElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXContainerElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(1);
@@ -168,8 +165,6 @@ describe('parseJSXContainerElement', () => {
});
describe('parseJSXOpeningElement', () => {
- const createMockContext = () => new Context([]);
-
it('should parse plural self-closing element', () => {
const sayIdentifier = t.jsxIdentifier('Say');
const pluralProperty = t.jsxIdentifier('plural');
@@ -188,7 +183,7 @@ describe('parseJSXOpeningElement', () => {
true,
);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(1);
@@ -197,9 +192,9 @@ describe('parseJSXOpeningElement', () => {
expect(choiceMessage.kind).toBe('plural');
expect(choiceMessage.identifier).toBe('count');
expect(choiceMessage.branches).toHaveLength(2);
- expect(choiceMessage.branches[0]!.key).toBe('one');
+ expect(choiceMessage.branches[0]!.identifier).toBe('one');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'item' });
- expect(choiceMessage.branches[1]!.key).toBe('other');
+ expect(choiceMessage.branches[1]!.identifier).toBe('other');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'items' });
});
@@ -222,7 +217,7 @@ describe('parseJSXOpeningElement', () => {
true,
);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
@@ -230,11 +225,11 @@ describe('parseJSXOpeningElement', () => {
expect(choiceMessage.kind).toBe('select');
expect(choiceMessage.identifier).toBe('gender');
expect(choiceMessage.branches).toHaveLength(3);
- expect(choiceMessage.branches[0]!.key).toBe('male');
+ expect(choiceMessage.branches[0]!.identifier).toBe('male');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'He' });
- expect(choiceMessage.branches[1]!.key).toBe('female');
+ expect(choiceMessage.branches[1]!.identifier).toBe('female');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'She' });
- expect(choiceMessage.branches[2]!.key).toBe('other');
+ expect(choiceMessage.branches[2]!.identifier).toBe('other');
expect(choiceMessage.branches[2]!.value).toEqual({ text: 'They' });
});
@@ -257,7 +252,7 @@ describe('parseJSXOpeningElement', () => {
true,
);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
@@ -265,11 +260,11 @@ describe('parseJSXOpeningElement', () => {
expect(choiceMessage.kind).toBe('ordinal');
expect(choiceMessage.identifier).toBe('position');
expect(choiceMessage.branches).toHaveLength(3);
- expect(choiceMessage.branches[0]!.key).toBe('1');
+ expect(choiceMessage.branches[0]!.identifier).toBe('1');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'first' });
- expect(choiceMessage.branches[1]!.key).toBe('2');
+ expect(choiceMessage.branches[1]!.identifier).toBe('2');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'second' });
- expect(choiceMessage.branches[2]!.key).toBe('other');
+ expect(choiceMessage.branches[2]!.identifier).toBe('other');
expect(choiceMessage.branches[2]!.value).toEqual({ text: 'other' });
});
@@ -292,16 +287,16 @@ describe('parseJSXOpeningElement', () => {
true,
);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
expect(choiceMessage.branches).toHaveLength(3);
- expect(choiceMessage.branches[0]!.key).toBe('0');
+ expect(choiceMessage.branches[0]!.identifier).toBe('0');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'none' });
- expect(choiceMessage.branches[1]!.key).toBe('one');
+ expect(choiceMessage.branches[1]!.identifier).toBe('one');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'single' });
- expect(choiceMessage.branches[2]!.key).toBe('other');
+ expect(choiceMessage.branches[2]!.identifier).toBe('other');
expect(choiceMessage.branches[2]!.value).toEqual({ text: 'many' });
});
@@ -323,14 +318,14 @@ describe('parseJSXOpeningElement', () => {
true,
);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
expect(choiceMessage.branches).toHaveLength(2);
- expect(choiceMessage.branches[0]!.key).toBe('1');
+ expect(choiceMessage.branches[0]!.identifier).toBe('1');
expect(choiceMessage.branches[0]!.value).toEqual({ text: 'first' });
- expect(choiceMessage.branches[1]!.key).toBe('2');
+ expect(choiceMessage.branches[1]!.identifier).toBe('2');
expect(choiceMessage.branches[1]!.value).toEqual({ text: 'second' });
});
@@ -350,12 +345,12 @@ describe('parseJSXOpeningElement', () => {
const openingElement = t.jsxOpeningElement(sayMember, [countAttribute, oneAttribute], true);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
expect(choiceMessage.branches).toHaveLength(1);
- expect(choiceMessage.branches[0]!.key).toBe('one');
+ expect(choiceMessage.branches[0]!.identifier).toBe('one');
expect(choiceMessage.branches[0]!.value).toBeInstanceOf(ArgumentMessage);
expect((choiceMessage.branches[0]!.value as ArgumentMessage).identifier).toBe('itemText');
});
@@ -383,12 +378,12 @@ describe('parseJSXOpeningElement', () => {
const openingElement = t.jsxOpeningElement(sayMember, [countAttribute, oneAttribute], true);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
expect(choiceMessage.branches).toHaveLength(1);
- expect(choiceMessage.branches[0]!.key).toBe('one');
+ expect(choiceMessage.branches[0]!.identifier).toBe('one');
expect(choiceMessage.branches[0]!.value).toBeInstanceOf(ElementMessage);
});
@@ -411,12 +406,12 @@ describe('parseJSXOpeningElement', () => {
const openingElement = t.jsxOpeningElement(sayMember, [countAttribute, oneAttribute], true);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
const choiceMessage = result!.children[0] as ChoiceMessage;
expect(choiceMessage.branches).toHaveLength(1);
- expect(choiceMessage.branches[0]!.key).toBe('one');
+ expect(choiceMessage.branches[0]!.identifier).toBe('one');
expect(choiceMessage.branches[0]!.value).toBeInstanceOf(ElementMessage);
});
@@ -438,7 +433,7 @@ describe('parseJSXOpeningElement', () => {
true,
);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).not.toBeNull();
expect(result!.descriptor).toEqual({ id: 'itemCount', context: undefined });
@@ -451,7 +446,7 @@ describe('parseJSXOpeningElement', () => {
const openingElement = t.jsxOpeningElement(sayMember, [], true);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).toBeNull();
});
@@ -460,7 +455,7 @@ describe('parseJSXOpeningElement', () => {
const sayIdentifier = t.jsxIdentifier('Say');
const openingElement = t.jsxOpeningElement(sayIdentifier, [], false);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).toBeNull();
});
@@ -469,15 +464,13 @@ describe('parseJSXOpeningElement', () => {
const divIdentifier = t.jsxIdentifier('div');
const openingElement = t.jsxOpeningElement(divIdentifier, [], true);
- const result = parser.parseJSXOpeningElement(createMockContext(), openingElement);
+ const result = parser.parseJSXOpeningElement(openingElement);
expect(result).toBeNull();
});
});
describe('parseJSXElement', () => {
- const createMockContext = () => new Context([]);
-
it('should delegate to container parser for non-self-closing', () => {
const sayIdentifier = t.jsxIdentifier('Say');
const openingElement = t.jsxOpeningElement(sayIdentifier, [], false);
@@ -485,7 +478,7 @@ describe('parseJSXElement', () => {
const helloText = t.jsxText('Hello');
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
- const result = parser.parseJSXElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXElement(jsxElement);
expect(result).not.toBeNull();
expect(result!.children).toHaveLength(1);
@@ -507,7 +500,7 @@ describe('parseJSXElement', () => {
const openingElement = t.jsxOpeningElement(sayMember, [countAttribute, oneAttribute], true);
const jsxElement = t.jsxElement(openingElement, null, []);
- const result = parser.parseJSXElement(createMockContext(), jsxElement);
+ const result = parser.parseJSXElement(jsxElement);
expect(result).not.toBeNull();
// Self-closing elements that match patterns return CompositeMessage with ChoiceMessage as child
@@ -528,7 +521,7 @@ describe('parseJSXElement', () => {
const openingElement = t.jsxOpeningElement(strongIdentifier, [], true);
const jsxElement = t.jsxElement(openingElement, null, []);
- const result = parser.parseJSXElement(createMockContext(), jsxElement, true);
+ const result = parser.parseJSXElement(jsxElement, true);
expect(result).toBeInstanceOf(ElementMessage);
});
@@ -540,7 +533,7 @@ describe('parseJSXElement', () => {
const helloText = t.jsxText('Hello');
const jsxElement = t.jsxElement(openingElement, closingElement, [helloText]);
- const result = parser.parseJSXElement(createMockContext(), jsxElement, true);
+ const result = parser.parseJSXElement(jsxElement, true);
expect(result).toBeInstanceOf(ElementMessage);
});
@@ -550,7 +543,7 @@ describe('parseJSXElement', () => {
const openingElement = t.jsxOpeningElement(strongIdentifier, [], true);
const jsxElement = t.jsxElement(openingElement, null, []);
- const result = parser.parseJSXElement(createMockContext(), jsxElement, false);
+ const result = parser.parseJSXElement(jsxElement, false);
expect(result).toBeNull();
});
@@ -562,7 +555,7 @@ describe('parseJSXElement', () => {
// Empty children won't match any patterns
const jsxElement = t.jsxElement(openingElement, closingElement, []);
- const result = parser.parseJSXElement(createMockContext(), jsxElement, true);
+ const result = parser.parseJSXElement(jsxElement, true);
// This returns a CompositeMessage wrapping an ElementMessage
expect(result).not.toBeNull();
diff --git a/packages/plugin-babel/src/features/jsx/parser.ts b/packages/transform-jsx/src/parser.ts
similarity index 55%
rename from packages/plugin-babel/src/features/jsx/parser.ts
rename to packages/transform-jsx/src/parser.ts
index a76d99d..7ff26b0 100644
--- a/packages/plugin-babel/src/features/jsx/parser.ts
+++ b/packages/transform-jsx/src/parser.ts
@@ -1,19 +1,15 @@
import * as t from '@babel/types';
-import type { Context } from '~/core/context.js';
import {
ArgumentMessage,
+ AUTO_INCREMENT_IDENTIFIER,
ChoiceMessage,
CompositeMessage,
ElementMessage,
LiteralMessage,
type Message,
-} from '~/core/messages/types.js';
-import { getExpressionAsKey } from '../js/parser.js';
+} from '@saykit/config/features/messages';
-export function parseJSXContainerElement(
- context: Context,
- element: t.JSXElement,
-): CompositeMessage | null {
+export function parseJSXContainerElement(element: t.JSXElement): CompositeMessage | null {
if (element.openingElement.selfClosing) return null;
const processed = processJSXOpeningElement(element.openingElement);
if (!processed) return null;
@@ -26,25 +22,25 @@ export function parseJSXContainerElement(
}
if (t.isJSXElement(e)) {
- c.push(parseJSXElement(context, e, true));
- }
- //
- else if (t.isJSXFragment(e)) {
- c.push(new ElementMessage(context.identifierStore.next(), [], e));
- }
- //
- else if (t.isJSXExpressionContainer(e)) {
+ c.push(parseJSXElement(e, true));
+ } else if (t.isJSXFragment(e)) {
+ c.push(new ElementMessage(AUTO_INCREMENT_IDENTIFIER, [], e));
+ } else if (t.isJSXExpressionContainer(e)) {
if (t.isExpression(e.expression))
- c.push(new ArgumentMessage(getExpressionAsKey(context, e.expression), e.expression));
+ c.push(new ArgumentMessage(getExpressionAsIdentifier(e.expression), e.expression));
}
return c;
}, []);
- const descriptorId = //
- findAttributeValueIfStringLiteralAsString(element.openingElement.attributes, 'id');
- const descriptorContext = //
- findAttributeValueIfStringLiteralAsString(element.openingElement.attributes, 'context');
+ const descriptorId = findAttributeValueIfStringLiteralAsString(
+ element.openingElement.attributes,
+ 'id',
+ );
+ const descriptorContext = findAttributeValueIfStringLiteralAsString(
+ element.openingElement.attributes,
+ 'context',
+ );
return new CompositeMessage(
{ id: descriptorId, context: descriptorContext },
@@ -55,51 +51,43 @@ export function parseJSXContainerElement(
);
}
-export function parseJSXOpeningElement(
- context: Context,
- element: t.JSXOpeningElement,
-): CompositeMessage | null {
+export function parseJSXOpeningElement(element: t.JSXOpeningElement): CompositeMessage | null {
if (!element.selfClosing) return null;
const processed = processJSXOpeningElement(element);
if (!processed) return null;
const [accessor, kind] = processed;
if (typeof kind === 'string' && ['select', 'ordinal', 'plural'].includes(kind)) {
- const branches = element.attributes.reduce<{ key: string; value: Message }[]>((b, a) => {
+ const branches = element.attributes.reduce<{ identifier: string; value: Message }[]>((b, a) => {
if (!t.isJSXAttribute(a)) return b;
- let key = getAttributeNameAsString(a);
- if (key === '_' || key === 'id' || key === 'context') return b;
- if (key.startsWith('_') && key.length > 1 && !Number.isNaN(+key.slice(1))) key = key.slice(1);
+ let identifier = getAttributeNameAsString(a);
+ if (identifier === '_' || identifier === 'id' || identifier === 'context') return b;
+ if (
+ identifier.startsWith('_') &&
+ identifier.length > 1 &&
+ !Number.isNaN(+identifier.slice(1))
+ )
+ identifier = identifier.slice(1);
if (t.isStringLiteral(a.value)) {
- b.push({ key, value: new LiteralMessage(a.value.value) });
- }
- //
- else if (t.isLiteral(a.value)) {
- b.push({ key, value: new ArgumentMessage(key, a.value) });
- }
- //
- else if (t.isJSXExpressionContainer(a.value)) {
+ b.push({ identifier, value: new LiteralMessage(a.value.value) });
+ } else if (t.isJSXExpressionContainer(a.value)) {
if (t.isJSXElement(a.value.expression)) {
b.push({
- key,
- value: parseJSXElement(context, a.value.expression, true),
+ identifier,
+ value: parseJSXElement(a.value.expression, true),
});
- }
- //
- else if (t.isJSXFragment(a.value.expression)) {
+ } else if (t.isJSXFragment(a.value.expression)) {
b.push({
- key,
- value: new ElementMessage(context.identifierStore.next(), [], a.value.expression),
+ identifier,
+ value: new ElementMessage(AUTO_INCREMENT_IDENTIFIER, [], a.value.expression),
});
- }
- //
- else if (t.isExpression(a.value.expression)) {
+ } else if (t.isExpression(a.value.expression)) {
b.push({
- key,
+ identifier,
value: new ArgumentMessage(
- getExpressionAsKey(context, a.value.expression),
+ getExpressionAsIdentifier(a.value.expression),
a.value.expression,
),
});
@@ -109,15 +97,16 @@ export function parseJSXOpeningElement(
return b;
}, []);
- const initialiser = //
- findAttributeValueIfExpressionOrStringLiteral(element.attributes, '_')!;
- const identifier = getExpressionAsKey(context, initialiser);
+ const initialiser = findAttributeValueIfExpressionOrStringLiteral(element.attributes, '_');
+ if (!initialiser) return null;
+ const identifier = getExpressionAsIdentifier(initialiser);
const choice = new ChoiceMessage(kind, identifier, branches, initialiser);
- const descriptorId = //
- findAttributeValueIfStringLiteralAsString(element.attributes, 'id');
- const descriptorContext = //
- findAttributeValueIfStringLiteralAsString(element.attributes, 'context');
+ const descriptorId = findAttributeValueIfStringLiteralAsString(element.attributes, 'id');
+ const descriptorContext = findAttributeValueIfStringLiteralAsString(
+ element.attributes,
+ 'context',
+ );
return new CompositeMessage(
{ id: descriptorId, context: descriptorContext },
@@ -131,8 +120,6 @@ export function parseJSXOpeningElement(
return null;
}
-//
-
function processJSXOpeningElement(element: t.JSXOpeningElement): [t.Node, string | null] | null {
if (t.isJSXIdentifier(element.name) && element.name.name === 'Say') {
return [element.name, null];
@@ -150,42 +137,29 @@ function processJSXOpeningElement(element: t.JSXOpeningElement): [t.Node, string
return null;
}
-//
-
-export function parseJSXElement(
- context: Context,
- element: t.JSXElement,
- fallback?: false,
-): CompositeMessage | null;
+export function parseJSXElement(element: t.JSXElement, fallback?: false): CompositeMessage | null;
export function parseJSXElement(
- context: Context,
element: t.JSXElement,
fallback: true,
): CompositeMessage | ElementMessage;
-export function parseJSXElement(
- context: Context,
- element: t.JSXElement,
- fallback?: boolean,
-): Message | null {
+export function parseJSXElement(element: t.JSXElement, fallback?: boolean): Message | null {
const message = element.openingElement.selfClosing
- ? parseJSXOpeningElement(context, element.openingElement)
- : parseJSXContainerElement(context, element);
+ ? parseJSXOpeningElement(element.openingElement)
+ : parseJSXContainerElement(element);
if (message) return message;
if (!fallback) return null;
if (element.openingElement.selfClosing)
- return new ElementMessage(context.identifierStore.next(), [], element);
+ return new ElementMessage(AUTO_INCREMENT_IDENTIFIER, [], element);
- const preload = context.identifierStore.next();
const fake = t.jsxElement(
t.jsxOpeningElement(t.jsxIdentifier('Say'), []),
t.jsxClosingElement(t.jsxIdentifier('Say')),
element.children,
);
- const wrapped = parseJSXElement(context, fake, true);
- if (wrapped) return new ElementMessage(preload, [wrapped], element);
- context.identifierStore.back();
+ const wrapped = parseJSXElement(fake, true);
+ if (wrapped) return new ElementMessage(AUTO_INCREMENT_IDENTIFIER, [wrapped], element);
return null;
}
@@ -198,11 +172,11 @@ function getAttributeNameAsString(attribute: t.JSXAttribute) {
function findAttributeValueIfStringLiteralAsString(
attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[],
- key: string,
+ identifier: string,
) {
for (const attribute of attributes) {
if (!t.isJSXAttribute(attribute)) continue;
- if (t.isJSXIdentifier(attribute.name) && attribute.name.name === key) {
+ if (t.isJSXIdentifier(attribute.name) && attribute.name.name === identifier) {
if (t.isStringLiteral(attribute.value)) return attribute.value.value;
}
}
@@ -211,11 +185,11 @@ function findAttributeValueIfStringLiteralAsString(
function findAttributeValueIfExpressionOrStringLiteral(
attributes: (t.JSXAttribute | t.JSXSpreadAttribute)[],
- key: string,
+ identifier: string,
) {
for (const attribute of attributes) {
if (!t.isJSXAttribute(attribute)) continue;
- if (t.isJSXIdentifier(attribute.name) && attribute.name.name === key) {
+ if (t.isJSXIdentifier(attribute.name) && attribute.name.name === identifier) {
if (t.isJSXExpressionContainer(attribute.value) && t.isExpression(attribute.value.expression))
return attribute.value.expression;
if (t.isStringLiteral(attribute.value)) return attribute.value;
@@ -223,3 +197,9 @@ function findAttributeValueIfExpressionOrStringLiteral(
}
return undefined;
}
+
+function getExpressionAsIdentifier(node: t.Node) {
+ if (t.isIdentifier(node)) return node.name;
+ if (t.isJSXIdentifier(node)) return node.name;
+ return AUTO_INCREMENT_IDENTIFIER;
+}
diff --git a/packages/transform-jsx/tsconfig.json b/packages/transform-jsx/tsconfig.json
new file mode 100644
index 0000000..b560bec
--- /dev/null
+++ b/packages/transform-jsx/tsconfig.json
@@ -0,0 +1 @@
+{ "extends": "../../tsconfig.base.json" }
diff --git a/packages/transform-jsx/tsdown.config.ts b/packages/transform-jsx/tsdown.config.ts
new file mode 100644
index 0000000..bf9e5e6
--- /dev/null
+++ b/packages/transform-jsx/tsdown.config.ts
@@ -0,0 +1,5 @@
+import { defineConfig } from 'tsdown';
+
+export default defineConfig({
+ entry: ['src/index.ts', 'src/parser.ts', 'src/generator.ts'],
+});
diff --git a/packages/transform-jsx/vitest.config.ts b/packages/transform-jsx/vitest.config.ts
new file mode 100644
index 0000000..613c8e7
--- /dev/null
+++ b/packages/transform-jsx/vitest.config.ts
@@ -0,0 +1,10 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ coverage: {
+ provider: 'v8',
+ reportsDirectory: './.coverage',
+ },
+ },
+});
diff --git a/packages/unplugin/src/index.ts b/packages/unplugin/src/index.ts
deleted file mode 100644
index 81eae7d..0000000
--- a/packages/unplugin/src/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { transformCode } from '@saykit/babel-plugin/core';
-import { createUnplugin } from 'unplugin';
-
-export default createUnplugin(() => {
- return {
- name: 'saykit',
- transform: {
- filter: { id: { exclude: /node_modules/ } },
- handler: (code, id) => transformCode(id, code),
- },
- };
-});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9f7d8eb..8f0e80d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,52 +10,46 @@ importers:
devDependencies:
'@changesets/cli':
specifier: ^2.30.0
- version: 2.30.0(@types/node@25.2.3)
+ version: 2.30.0(@types/node@25.6.0)
'@changesets/config':
specifier: ^3.1.3
version: 3.1.3
'@types/node':
- specifier: ^25.2.3
- version: 25.2.3
+ specifier: ^25.6.0
+ version: 25.6.0
'@vitest/coverage-v8':
- specifier: ^4.0.18
- version: 4.0.18(vitest@4.0.18(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))
+ specifier: ^4.1.4
+ version: 4.1.4(vitest@4.1.4)
husky:
specifier: ^9.1.7
version: 9.1.7
oxfmt:
- specifier: ^0.36.0
- version: 0.36.0
+ specifier: ^0.45.0
+ version: 0.45.0
oxlint:
- specifier: ^1.51.0
- version: 1.51.0
+ specifier: ^1.60.0
+ version: 1.60.0
ts-patch:
specifier: ^3.3.0
version: 3.3.0
tsdown:
- specifier: ^0.20.3
- version: 0.20.3(typescript@5.9.3)
+ specifier: ^0.21.9
+ version: 0.21.9(typescript@6.0.3)
turbo:
- specifier: ^2.8.5
- version: 2.8.5
+ specifier: ^2.9.6
+ version: 2.9.6
typescript:
- specifier: ^5.9.3
- version: 5.9.3
- typescript-transform-paths:
- specifier: ^3.5.6
- version: 3.5.6(typescript@5.9.3)
- vite-tsconfig-paths:
- specifier: ^6.1.0
- version: 6.1.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))
+ specifier: ^6.0.3
+ version: 6.0.3
vitest:
- specifier: ^4.0.18
- version: 4.0.18(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)
+ specifier: ^4.1.4
+ version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
- examples/carbon-tsdown:
+ examples/carbon:
dependencies:
'@buape/carbon':
- specifier: 0.14.0
- version: 0.14.0(hono@4.11.3)
+ specifier: 0.16.0
+ version: 0.16.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
'@sapphire/snowflake':
specifier: ^3.5.5
version: 3.5.5
@@ -67,79 +61,152 @@ importers:
version: link:../../packages/integration
devDependencies:
'@cloudflare/workers-types':
- specifier: ^4.20260210.0
- version: 4.20260210.0
+ specifier: ^4.20260417.1
+ version: 4.20260417.1
'@saykit/config':
specifier: workspace:^
version: link:../../packages/config
'@saykit/format-po':
specifier: workspace:^
version: link:../../packages/format-po
+ '@saykit/transform-js':
+ specifier: workspace:^
+ version: link:../../packages/transform-js
typescript:
- specifier: ^5.9.3
- version: 5.9.3
+ specifier: ^6.0.3
+ version: 6.0.3
unplugin-saykit:
specifier: workspace:^
- version: link:../../packages/unplugin
+ version: link:../../packages/plugin-unplugin
wrangler:
- specifier: ^4.64.0
- version: 4.64.0(@cloudflare/workers-types@4.20260210.0)
+ specifier: ^4.83.0
+ version: 4.83.0(@cloudflare/workers-types@4.20260417.1)
- examples/nextjs-babel:
+ examples/nextjs:
dependencies:
'@saykit/react':
specifier: workspace:^
version: link:../../packages/integration-react
next:
- specifier: ^16.1.6
- version: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ specifier: 16.2.4
+ version: 16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react:
- specifier: ^19.2.4
- version: 19.2.4
+ specifier: ^19.2.5
+ version: 19.2.5
react-dom:
- specifier: ^19.2.4
- version: 19.2.4(react@19.2.4)
+ specifier: ^19.2.5
+ version: 19.2.5(react@19.2.5)
saykit:
specifier: workspace:^
version: link:../../packages/integration
+ server-only:
+ specifier: ^0.0.1
+ version: 0.0.1
devDependencies:
- '@saykit/babel-plugin':
+ '@saykit/config':
+ specifier: workspace:^
+ version: link:../../packages/config
+ '@saykit/format-po':
+ specifier: workspace:^
+ version: link:../../packages/format-po
+ '@saykit/transform-js':
+ specifier: workspace:^
+ version: link:../../packages/transform-js
+ '@saykit/transform-jsx':
+ specifier: workspace:^
+ version: link:../../packages/transform-jsx
+ '@types/node':
+ specifier: ^25.6.0
+ version: 25.6.0
+ '@types/react':
+ specifier: ^19.2.14
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.14)
+ babel-plugin-saykit:
specifier: workspace:^
version: link:../../packages/plugin-babel
+
+ examples/tanstack-start:
+ dependencies:
+ '@saykit/react':
+ specifier: workspace:^
+ version: link:../../packages/integration-react
+ '@tanstack/react-router':
+ specifier: ^1.168.22
+ version: 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/react-router-devtools':
+ specifier: ^1.166.13
+ version: 1.166.13(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.15)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/react-start':
+ specifier: ^1.167.41
+ version: 1.167.41(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ react:
+ specifier: ^19.2.5
+ version: 19.2.5
+ react-dom:
+ specifier: ^19.2.5
+ version: 19.2.5(react@19.2.5)
+ saykit:
+ specifier: workspace:^
+ version: link:../../packages/integration
+ devDependencies:
'@saykit/config':
specifier: workspace:^
version: link:../../packages/config
'@saykit/format-po':
specifier: workspace:^
version: link:../../packages/format-po
+ '@saykit/transform-js':
+ specifier: workspace:^
+ version: link:../../packages/transform-js
+ '@saykit/transform-jsx':
+ specifier: workspace:^
+ version: link:../../packages/transform-jsx
+ '@types/node':
+ specifier: ^25.6.0
+ version: 25.6.0
'@types/react':
- specifier: ^19.2.13
- version: 19.2.13
+ specifier: ^19.2.14
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.14)
+ '@vitejs/plugin-react':
+ specifier: ^6.0.1
+ version: 6.0.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ unplugin-saykit:
+ specifier: workspace:^
+ version: link:../../packages/plugin-unplugin
+ vite:
+ specifier: ^8.0.8
+ version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
packages/config:
dependencies:
'@commander-js/extra-typings':
specifier: ^14.0.0
version: 14.0.0(commander@14.0.3)
- '@saykit/babel-plugin':
- specifier: workspace:*
- version: link:../plugin-babel
commander:
specifier: ^14.0.3
version: 14.0.3
+ js-sha256:
+ specifier: ^0.11.1
+ version: 0.11.1
picomatch:
- specifier: ^4.0.3
- version: 4.0.3
+ specifier: ^4.0.4
+ version: 4.0.4
+ typescript:
+ specifier: '*'
+ version: 6.0.3
zod:
specifier: ^4.3.6
version: 4.3.6
devDependencies:
'@types/picomatch':
- specifier: ^4.0.2
- version: 4.0.2
- typescript:
- specifier: ^5.9.3
- version: 5.9.3
+ specifier: ^4.0.3
+ version: 4.0.3
packages/format-po:
dependencies:
@@ -160,8 +227,8 @@ importers:
packages/integration-carbon:
devDependencies:
'@buape/carbon':
- specifier: 0.14.0
- version: 0.14.0(hono@4.11.3)
+ specifier: 0.16.0
+ version: 0.16.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
saykit:
specifier: workspace:^
version: link:../integration
@@ -173,32 +240,60 @@ importers:
version: 0.0.1
devDependencies:
'@types/react':
- specifier: ^19.2.13
- version: 19.2.13
+ specifier: ^19.2.14
+ version: 19.2.14
react:
- specifier: ^19.2.4
- version: 19.2.4
+ specifier: ^19.2.5
+ version: 19.2.5
saykit:
specifier: workspace:^
version: link:../integration
packages/plugin-babel:
+ dependencies:
+ '@babel/core':
+ specifier: ^7.29.0
+ version: 7.29.0
+ '@babel/parser':
+ specifier: ^7.29.2
+ version: 7.29.2
+ '@saykit/config':
+ specifier: workspace:^
+ version: link:../config
+ '@types/babel__core':
+ specifier: ^7.20.5
+ version: 7.20.5
+ devDependencies:
+ '@types/babel__parser':
+ specifier: ^7.1.5
+ version: 7.1.5
+
+ packages/plugin-unplugin:
+ dependencies:
+ '@saykit/config':
+ specifier: workspace:^
+ version: link:../config
+ unplugin:
+ specifier: ^3.0.0
+ version: 3.0.0
+
+ packages/transform-js:
dependencies:
'@babel/generator':
specifier: ^7.29.1
version: 7.29.1
'@babel/parser':
- specifier: ^7.29.0
- version: 7.29.0
+ specifier: ^7.29.2
+ version: 7.29.2
'@babel/traverse':
specifier: ^7.29.0
version: 7.29.0
'@babel/types':
specifier: ^7.29.0
version: 7.29.0
- js-sha256:
- specifier: ^0.11.1
- version: 0.11.1
+ '@saykit/config':
+ specifier: workspace:^
+ version: link:../config
devDependencies:
'@babel/core':
specifier: ^7.29.0
@@ -213,14 +308,39 @@ importers:
specifier: ^7.28.0
version: 7.28.0
- packages/unplugin:
+ packages/transform-jsx:
dependencies:
- '@saykit/babel-plugin':
+ '@babel/generator':
+ specifier: ^7.29.1
+ version: 7.29.1
+ '@babel/parser':
+ specifier: ^7.29.2
+ version: 7.29.2
+ '@babel/traverse':
+ specifier: ^7.29.0
+ version: 7.29.0
+ '@babel/types':
+ specifier: ^7.29.0
+ version: 7.29.0
+ '@saykit/config':
specifier: workspace:^
- version: link:../plugin-babel
- unplugin:
- specifier: ^3.0.0
- version: 3.0.0
+ version: link:../config
+ '@saykit/transform-js':
+ specifier: workspace:^
+ version: link:../transform-js
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.29.0
+ version: 7.29.0
+ '@types/babel__core':
+ specifier: ^7.20.5
+ version: 7.20.5
+ '@types/babel__generator':
+ specifier: ^7.27.0
+ version: 7.27.0
+ '@types/babel__traverse':
+ specifier: ^7.28.0
+ version: 7.28.0
website:
dependencies:
@@ -231,48 +351,48 @@ importers:
specifier: ^1.1.3
version: 1.1.3
fumadocs-core:
- specifier: 16.6.16
- version: 16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ specifier: 16.7.16
+ version: 16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6)
fumadocs-mdx:
- specifier: 14.2.9
- version: 14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))
+ specifier: 14.3.0
+ version: 14.3.0(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
fumadocs-typescript:
- specifier: ^5.1.5
- version: 5.1.5(625b2c47a136537d69828bedd5efad50)
+ specifier: ^5.2.6
+ version: 5.2.6(578e46be5ed1f2691a7b7125b236657d)
fumadocs-ui:
- specifier: 16.6.16
- version: 16.6.16(@takumi-rs/image-response@0.71.7)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ specifier: 16.7.16
+ version: 16.7.16(@tailwindcss/oxide@4.2.2)(@takumi-rs/image-response@0.71.7)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)
lucide-react:
- specifier: ^0.577.0
- version: 0.577.0(react@19.2.4)
+ specifier: ^1.8.0
+ version: 1.8.0(react@19.2.5)
mermaid:
specifier: ^11.13.0
- version: 11.13.0
+ version: 11.14.0
next:
- specifier: 16.1.6
- version: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ specifier: 16.2.4
+ version: 16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
next-themes:
specifier: ^0.4.6
- version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ version: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react:
- specifier: ^19.2.4
- version: 19.2.4
+ specifier: ^19.2.5
+ version: 19.2.5
react-dom:
- specifier: ^19.2.4
- version: 19.2.4(react@19.2.4)
+ specifier: ^19.2.5
+ version: 19.2.5(react@19.2.5)
tailwind-merge:
specifier: ^3.5.0
version: 3.5.0
devDependencies:
'@tailwindcss/postcss':
specifier: ^4.2.1
- version: 4.2.1
+ version: 4.2.2
'@types/mdx':
specifier: ^2.0.13
version: 2.0.13
'@types/node':
- specifier: ^25.4.0
- version: 25.4.0
+ specifier: ^25.6.0
+ version: 25.6.0
'@types/react':
specifier: ^19.2.14
version: 19.2.14
@@ -280,14 +400,14 @@ importers:
specifier: ^19.2.3
version: 19.2.3(@types/react@19.2.14)
postcss:
- specifier: ^8.5.8
- version: 8.5.8
+ specifier: ^8.5.10
+ version: 8.5.10
tailwindcss:
specifier: ^4.2.1
- version: 4.2.1
+ version: 4.2.2
typescript:
- specifier: ^5.9.3
- version: 5.9.3
+ specifier: ^6.0.3
+ version: 6.0.3
packages:
@@ -298,6 +418,10 @@ packages:
'@antfu/install-pkg@1.1.0':
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/code-frame@7.29.0':
resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
@@ -314,8 +438,8 @@ packages:
resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@8.0.0-rc.1':
- resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==}
+ '@babel/generator@8.0.0-rc.3':
+ resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==}
engines: {node: ^20.19.0 || >=22.12.0}
'@babel/helper-compilation-targets@7.28.6':
@@ -336,42 +460,58 @@ packages:
peerDependencies:
'@babel/core': ^7.0.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-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@8.0.0-rc.1':
- resolution: {integrity: sha512-vi/pfmbrOtQmqgfboaBhaCU50G7mcySVu69VU8z+lYoPPB6WzI9VgV7WQfL908M4oeSH5fDkmoupIqoE0SdApw==}
+ '@babel/helper-string-parser@8.0.0-rc.3':
+ resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==}
engines: {node: ^20.19.0 || >=22.12.0}
'@babel/helper-validator-identifier@7.28.5':
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@8.0.0-rc.1':
- resolution: {integrity: sha512-I4YnARytXC2RzkLNVnf5qFNFMzp679qZpmtw/V3Jt2uGnWiIxyJtaukjG7R8pSx8nG2NamICpGfljQsogj+FbQ==}
+ '@babel/helper-validator-identifier@8.0.0-rc.3':
+ resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==}
engines: {node: ^20.19.0 || >=22.12.0}
'@babel/helper-validator-option@7.27.1':
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.28.6':
- resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ '@babel/helpers@7.29.2':
+ resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.29.0':
- resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/parser@8.0.0-rc.1':
- resolution: {integrity: sha512-6HyyU5l1yK/7h9Ki52i5h6mDAx4qJdiLQO4FdCyJNoB/gy3T3GGJdhQzzbZgvgZCugYBvwtQiWRt94QKedHnkA==}
+ '@babel/parser@8.0.0-rc.3':
+ resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- '@babel/runtime@7.28.6':
- resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.28.6':
+ resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.29.2':
+ resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
engines: {node: '>=6.9.0'}
'@babel/template@7.28.6':
@@ -386,8 +526,8 @@ packages:
resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
- '@babel/types@8.0.0-rc.1':
- resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==}
+ '@babel/types@8.0.0-rc.3':
+ resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==}
engines: {node: ^20.19.0 || >=22.12.0}
'@bcoe/v8-coverage@1.0.2':
@@ -397,8 +537,8 @@ packages:
'@braintree/sanitize-url@7.1.2':
resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==}
- '@buape/carbon@0.14.0':
- resolution: {integrity: sha512-mavllPK2iVpRNRtC4C8JOUdJ1hdV0+LDelFW+pjpJaM31MBLMfIJ+f/LlYTIK5QrEcQsXOC+6lU2e0gmgjWhIQ==}
+ '@buape/carbon@0.16.0':
+ resolution: {integrity: sha512-OJ9Z1WCQ6gY7yBE49MOgcfxxgl2n6NIdtyDdMOGVRP/gs31xKSfxhdnp7mOz7OQfK/rskwCixAI1fsDlTiLvQQ==}
'@changesets/apply-release-plan@7.1.0':
resolution: {integrity: sha512-yq8ML3YS7koKQ/9bk1PqO0HMzApIFNwjlwCnwFEXMzNe8NpzeeYYKCmnhWJGkN8g7E51MnWaSbqRcTcdIxUgnQ==}
@@ -474,50 +614,50 @@ packages:
resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
engines: {node: '>=18.0.0'}
- '@cloudflare/unenv-preset@2.12.1':
- resolution: {integrity: sha512-tP/Wi+40aBJovonSNJSsS7aFJY0xjuckKplmzDs2Xat06BJ68B6iG7YDUWXJL8gNn0gqW7YC5WhlYhO3QbugQA==}
+ '@cloudflare/unenv-preset@2.16.0':
+ resolution: {integrity: sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==}
peerDependencies:
unenv: 2.0.0-rc.24
- workerd: ^1.20260115.0
+ workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0
peerDependenciesMeta:
workerd:
optional: true
- '@cloudflare/workerd-darwin-64@1.20260210.0':
- resolution: {integrity: sha512-e3vMgzr8ZM6VjpJVFrnMBhjvFhlMIkhT+BLpBk3pKaWsrXao+azDlmzzxB3Zf4CZ8LmCEtaP7n5d2mNGL6Dqww==}
+ '@cloudflare/workerd-darwin-64@1.20260415.1':
+ resolution: {integrity: sha512-dsxaKsQm3LnPGNPEdsRv09QN3Y4DqCw7kX5j6noKqbAtro2jTr95sVlYM1jUxZ5FkOl1f7SXgaKKB9t5H5Nkbg==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
- '@cloudflare/workerd-darwin-arm64@1.20260210.0':
- resolution: {integrity: sha512-ng2uLJVMrI5VrcAS26gDGM+qxCuWD4ZA8VR4i88RdyM8TLn+AqPFisrvn7AMA+QSv0+ck+ZdFtXek7qNp2gNuA==}
+ '@cloudflare/workerd-darwin-arm64@1.20260415.1':
+ resolution: {integrity: sha512-+JgSgVA49KyKteHRA1SnonE4Zn5Ei5zdAp5FQMxFmXI8qulZw4Hl7safXxRyK4i9sTO8gl7TFOKO5Q64VPvSDQ==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
- '@cloudflare/workerd-linux-64@1.20260210.0':
- resolution: {integrity: sha512-frn2/+6DV59h13JbGSk9ATvJw3uORWssFIKZ/G/to+WRrIDQgCpSrjLtGbFSSn5eBEhYOvwxPKc7IrppkmIj/w==}
+ '@cloudflare/workerd-linux-64@1.20260415.1':
+ resolution: {integrity: sha512-tU+9pwsqCy8afOVlGtiWrWQc/fedQK4SRm4KPIAt+zOiQWDxWASm6YGBUJis5c648WN80yz47qnmdDi8DQNOcA==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
- '@cloudflare/workerd-linux-arm64@1.20260210.0':
- resolution: {integrity: sha512-0fmxEHaDcAF+7gcqnBcQdBCOzNvGz3mTMwqxEYJc5xZgFwQf65/dYK5fnV8z56GVNqu88NEnLMG3DD2G7Ey1vw==}
+ '@cloudflare/workerd-linux-arm64@1.20260415.1':
+ resolution: {integrity: sha512-bR9uITnV19r5NQ14xnypi2xHXu2iQvfYV8cVgx0JouFUmWwTEEAwFVojDdssGq93VHX9hr/pi2IRUZeegbYBog==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
- '@cloudflare/workerd-windows-64@1.20260210.0':
- resolution: {integrity: sha512-G/Apjk/QLNnwbu8B0JO9FuAJKHNr+gl8X3G/7qaUrpwIkPx5JFQElVE6LKk4teSrycvAy5AzLFAL0lOB1xsUIQ==}
+ '@cloudflare/workerd-windows-64@1.20260415.1':
+ resolution: {integrity: sha512-4NuMLlerI0Ijua3Ir8HXQ+qyNvCUDEG5gDco5Om+sAiK6rnWiz+aGoSlbB8W16yW9QAgzCstbmXLiVknUBflfQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
- '@cloudflare/workers-types@4.20260120.0':
- resolution: {integrity: sha512-B8pueG+a5S+mdK3z8oKu1ShcxloZ7qWb68IEyLLaepvdryIbNC7JVPcY0bWsjS56UQVKc5fnyRge3yZIwc9bxw==}
+ '@cloudflare/workers-types@4.20260405.1':
+ resolution: {integrity: sha512-PokTmySa+D6MY01R1UfYH48korsN462NK/fl3aw47Hg7XuLuSo/RTpjT0vtWaJhJoFY5tHGOBBIbDcIc8wltLg==}
- '@cloudflare/workers-types@4.20260210.0':
- resolution: {integrity: sha512-zHaF0RZVYUQwNCJCECnNAJdMur72Lk3FMiD6wU78Dx3Bv7DQRcuXNmPNuJmsGnosVZCcWintHlPTQ/4BEiDG5w==}
+ '@cloudflare/workers-types@4.20260417.1':
+ resolution: {integrity: sha512-ke3GkFfFyfSxdLRR6LPbnfYAu3RNKqX0eYfu/FNnluBN9rLgYVqT+QEPgSEx1yq7XTOok+Bub1td9xvknaOz4A==}
'@commander-js/extra-typings@14.0.0':
resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==}
@@ -528,36 +668,36 @@ packages:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
- '@discordjs/voice@0.19.0':
- resolution: {integrity: sha512-UyX6rGEXzVyPzb1yvjHtPfTlnLvB5jX/stAMdiytHhfoydX+98hfympdOwsnTktzr+IRvphxTbdErgYDJkEsvw==}
+ '@discordjs/voice@0.19.2':
+ resolution: {integrity: sha512-3yJ255e4ag3wfZu/DSxeOZK1UtnqNxnspmLaQetGT0pDkThNZoHs+Zg6dgZZ19JEVomXygvfHn9lNpICZuYtEA==}
engines: {node: '>=22.12.0'}
- '@emnapi/core@1.7.1':
- resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
+ '@emnapi/core@1.9.2':
+ resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
- '@emnapi/runtime@1.7.1':
- resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
+ '@emnapi/runtime@1.9.2':
+ resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
- '@emnapi/wasi-threads@1.1.0':
- resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
- '@esbuild/aix-ppc64@0.27.2':
- resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.27.3':
- resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ '@esbuild/aix-ppc64@0.27.7':
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.27.2':
- resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ '@esbuild/aix-ppc64@0.28.0':
+ resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
+ cpu: [ppc64]
+ os: [aix]
'@esbuild/android-arm64@0.27.3':
resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
@@ -565,10 +705,16 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.27.2':
- resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ '@esbuild/android-arm64@0.27.7':
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
engines: {node: '>=18'}
- cpu: [arm]
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.28.0':
+ resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.27.3':
@@ -577,10 +723,16 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.27.2':
- resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ '@esbuild/android-arm@0.27.7':
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.28.0':
+ resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
os: [android]
'@esbuild/android-x64@0.27.3':
@@ -589,11 +741,17 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.27.2':
- resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ '@esbuild/android-x64@0.27.7':
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.28.0':
+ resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
'@esbuild/darwin-arm64@0.27.3':
resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
@@ -601,10 +759,16 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.2':
- resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ '@esbuild/darwin-arm64@0.27.7':
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.28.0':
+ resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.27.3':
@@ -613,11 +777,17 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.27.2':
- resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ '@esbuild/darwin-x64@0.27.7':
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.28.0':
+ resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
'@esbuild/freebsd-arm64@0.27.3':
resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
@@ -625,10 +795,16 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.2':
- resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ '@esbuild/freebsd-arm64@0.27.7':
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.28.0':
+ resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.27.3':
@@ -637,11 +813,17 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.27.2':
- resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ '@esbuild/freebsd-x64@0.27.7':
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.28.0':
+ resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
'@esbuild/linux-arm64@0.27.3':
resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
@@ -649,10 +831,16 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.27.2':
- resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ '@esbuild/linux-arm64@0.27.7':
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
engines: {node: '>=18'}
- cpu: [arm]
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.28.0':
+ resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.27.3':
@@ -661,10 +849,16 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.27.2':
- resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ '@esbuild/linux-arm@0.27.7':
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
engines: {node: '>=18'}
- cpu: [ia32]
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.28.0':
+ resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.27.3':
@@ -673,10 +867,16 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.27.2':
- resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ '@esbuild/linux-ia32@0.27.7':
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
engines: {node: '>=18'}
- cpu: [loong64]
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.28.0':
+ resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.27.3':
@@ -685,10 +885,16 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.27.2':
- resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ '@esbuild/linux-loong64@0.27.7':
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
engines: {node: '>=18'}
- cpu: [mips64el]
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.28.0':
+ resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.27.3':
@@ -697,10 +903,16 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.27.2':
- resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ '@esbuild/linux-mips64el@0.27.7':
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
engines: {node: '>=18'}
- cpu: [ppc64]
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.28.0':
+ resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.27.3':
@@ -709,10 +921,16 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.2':
- resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ '@esbuild/linux-ppc64@0.27.7':
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
engines: {node: '>=18'}
- cpu: [riscv64]
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.28.0':
+ resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.27.3':
@@ -721,10 +939,16 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.27.2':
- resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ '@esbuild/linux-riscv64@0.27.7':
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
engines: {node: '>=18'}
- cpu: [s390x]
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.28.0':
+ resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.27.3':
@@ -733,10 +957,16 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.27.2':
- resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ '@esbuild/linux-s390x@0.27.7':
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.28.0':
+ resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.27.3':
@@ -745,11 +975,17 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.27.2':
- resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ '@esbuild/linux-x64@0.27.7':
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.28.0':
+ resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
'@esbuild/netbsd-arm64@0.27.3':
resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
@@ -757,10 +993,16 @@ packages:
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.2':
- resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ '@esbuild/netbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-arm64@0.28.0':
+ resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [netbsd]
'@esbuild/netbsd-x64@0.27.3':
@@ -769,11 +1011,17 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.27.2':
- resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ '@esbuild/netbsd-x64@0.27.7':
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.28.0':
+ resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
'@esbuild/openbsd-arm64@0.27.3':
resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
@@ -781,10 +1029,16 @@ packages:
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.2':
- resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ '@esbuild/openbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-arm64@0.28.0':
+ resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.27.3':
@@ -793,11 +1047,17 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.27.2':
- resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ '@esbuild/openbsd-x64@0.27.7':
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.28.0':
+ resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
'@esbuild/openharmony-arm64@0.27.3':
resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
@@ -805,11 +1065,17 @@ packages:
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.27.2':
- resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ '@esbuild/openharmony-arm64@0.27.7':
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/openharmony-arm64@0.28.0':
+ resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
'@esbuild/sunos-x64@0.27.3':
resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
@@ -817,11 +1083,17 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.27.2':
- resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ '@esbuild/sunos-x64@0.27.7':
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.28.0':
+ resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
'@esbuild/win32-arm64@0.27.3':
resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
@@ -829,10 +1101,16 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.27.2':
- resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ '@esbuild/win32-arm64@0.27.7':
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
engines: {node: '>=18'}
- cpu: [ia32]
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.28.0':
+ resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.27.3':
@@ -841,10 +1119,16 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.27.2':
- resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ '@esbuild/win32-ia32@0.27.7':
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
engines: {node: '>=18'}
- cpu: [x64]
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.28.0':
+ resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.27.3':
@@ -853,6 +1137,18 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.27.7':
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.28.0':
+ resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@floating-ui/core@1.7.5':
resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
@@ -868,34 +1164,25 @@ packages:
'@floating-ui/utils@0.2.11':
resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
- '@formatjs/fast-memoize@3.1.0':
- resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==}
-
- '@formatjs/intl-localematcher@0.8.1':
- resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==}
-
- '@fumadocs/tailwind@0.0.3':
- resolution: {integrity: sha512-/FWcggMz9BhoX+13xBoZLX+XX9mYvJ50dkTqy3IfocJqua65ExcsKfxwKH8hgTO3vA5KnWv4+4jU7LaW2AjAmQ==}
+ '@fumadocs/tailwind@0.0.5':
+ resolution: {integrity: sha512-ENKPWUDRmriccsrUDE4bDBq3FNr/ms3BP2rWlsAEMV1yP23pcCaan+ceGfeBUsAQjw7sj9Q3R4Kl3g/TCStPzQ==}
peerDependencies:
+ '@tailwindcss/oxide': ^4.0.0
tailwindcss: ^4.0.0
peerDependenciesMeta:
+ '@tailwindcss/oxide':
+ optional: true
tailwindcss:
optional: true
- '@hono/node-server@1.19.9':
- resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==}
- engines: {node: '>=18.14.1'}
- peerDependencies:
- hono: ^4
-
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
'@iconify/utils@3.1.0':
resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
- '@img/colour@1.0.0':
- resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
+ '@img/colour@1.1.0':
+ resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.34.5':
@@ -1084,8 +1371,8 @@ packages:
'@mdx-js/mdx@3.1.1':
resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
- '@mermaid-js/parser@1.0.1':
- resolution: {integrity: sha512-opmV19kN1JsK0T6HhhokHpcVkqKpF+x2pPDKKM2ThHtZAB5F4PROopk0amuVYK5qMrIA4erzpNm8gmPNJgMDxQ==}
+ '@mermaid-js/parser@1.1.0':
+ resolution: {integrity: sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==}
'@messageformat/date-skeleton@2.0.0-0':
resolution: {integrity: sha512-gkCatAK4MYlhjKYWxkfRM6Ql0M1VmA1DK6A9rszUBprZpQox/XqX987AI2w7YoEz0p5DgkPOpI6PK1mW08yNqQ==}
@@ -1100,60 +1387,63 @@ packages:
'@messageformat/parser@5.1.1':
resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==}
- '@napi-rs/wasm-runtime@1.1.1':
- resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+ '@napi-rs/wasm-runtime@1.1.4':
+ resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
- '@next/env@16.1.6':
- resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==}
+ '@next/env@16.2.4':
+ resolution: {integrity: sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==}
- '@next/swc-darwin-arm64@16.1.6':
- resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==}
+ '@next/swc-darwin-arm64@16.2.4':
+ resolution: {integrity: sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@16.1.6':
- resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==}
+ '@next/swc-darwin-x64@16.2.4':
+ resolution: {integrity: sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@16.1.6':
- resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==}
+ '@next/swc-linux-arm64-gnu@16.2.4':
+ resolution: {integrity: sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@next/swc-linux-arm64-musl@16.1.6':
- resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==}
+ '@next/swc-linux-arm64-musl@16.2.4':
+ resolution: {integrity: sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@next/swc-linux-x64-gnu@16.1.6':
- resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==}
+ '@next/swc-linux-x64-gnu@16.2.4':
+ resolution: {integrity: sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@next/swc-linux-x64-musl@16.1.6':
- resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==}
+ '@next/swc-linux-x64-musl@16.2.4':
+ resolution: {integrity: sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@next/swc-win32-arm64-msvc@16.1.6':
- resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==}
+ '@next/swc-win32-arm64-msvc@16.2.4':
+ resolution: {integrity: sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@16.1.6':
- resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==}
+ '@next/swc-win32-x64-msvc@16.2.4':
+ resolution: {integrity: sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1170,253 +1460,272 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@oozcitak/dom@2.0.2':
+ resolution: {integrity: sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==}
+ engines: {node: '>=20.0'}
+
+ '@oozcitak/infra@2.0.2':
+ resolution: {integrity: sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==}
+ engines: {node: '>=20.0'}
+
+ '@oozcitak/url@3.0.0':
+ resolution: {integrity: sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==}
+ engines: {node: '>=20.0'}
+
+ '@oozcitak/util@10.0.0':
+ resolution: {integrity: sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==}
+ engines: {node: '>=20.0'}
+
'@orama/orama@3.1.18':
resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==}
engines: {node: '>= 20.0.0'}
- '@oxc-project/types@0.112.0':
- resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==}
+ '@oxc-project/types@0.124.0':
+ resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==}
+
+ '@oxc-project/types@0.126.0':
+ resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==}
- '@oxfmt/binding-android-arm-eabi@0.36.0':
- resolution: {integrity: sha512-Z4yVHJWx/swHHjtr0dXrBZb6LxS+qNz1qdza222mWwPTUK4L790+5i3LTgjx3KYGBzcYpjaiZBw4vOx94dH7MQ==}
+ '@oxfmt/binding-android-arm-eabi@0.45.0':
+ resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxfmt/binding-android-arm64@0.36.0':
- resolution: {integrity: sha512-3ElCJRFNPQl7jexf2CAa9XmAm8eC5JPrIDSjc9jSchkVSFTEqyL0NtZinBB2h1a4i4JgP1oGl/5G5n8YR4FN8Q==}
+ '@oxfmt/binding-android-arm64@0.45.0':
+ resolution: {integrity: sha512-L63z4uZmHjgvvqvMJD7mwff8aSBkM0+X4uFr6l6U5t6+Qc9DCLVZWIunJ7Gm4fn4zHPdSq6FFQnhu9yqqobxIg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxfmt/binding-darwin-arm64@0.36.0':
- resolution: {integrity: sha512-nak4znWCqIExKhYSY/mz/lWsqWIpdsS7o0+SRzXR1Q0m7GrMcG1UrF1pS7TLGZhhkf7nTfEF7q6oZzJiodRDuw==}
+ '@oxfmt/binding-darwin-arm64@0.45.0':
+ resolution: {integrity: sha512-UV34dd623FzqT+outIGndsCA/RBB+qgB3XVQhgmmJ9PJwa37NzPC9qzgKeOhPKxVk2HW+JKldQrVL54zs4Noww==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxfmt/binding-darwin-x64@0.36.0':
- resolution: {integrity: sha512-V4GP96thDnpKx6ADnMDnhIXNdtV+Ql9D4HUU+a37VTeVbs5qQSF/s6hhUP1b3xUqU7iRcwh72jUU2Y12rtGHAw==}
+ '@oxfmt/binding-darwin-x64@0.45.0':
+ resolution: {integrity: sha512-pMNJv0CMa1pDefVPeNbuQxibh8ITpWDFEhMC/IBB9Zlu76EbgzYwrzI4Cb11mqX2+rIYN70UTrh3z06TM59ptQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxfmt/binding-freebsd-x64@0.36.0':
- resolution: {integrity: sha512-/xapWCADfI5wrhxpEUjhI9fnw7MV5BUZizVa8e24n3VSK6A3Y1TB/ClOP1tfxNspykFKXp4NBWl6NtDJP3osqQ==}
+ '@oxfmt/binding-freebsd-x64@0.45.0':
+ resolution: {integrity: sha512-xTcRoxbbo61sW2+ZRPeH+vp/o9G8gkdhiVumFU+TpneiPm14c79l6GFlxPXlCE9bNWikigbsrvJw46zCVAQFfg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxfmt/binding-linux-arm-gnueabihf@0.36.0':
- resolution: {integrity: sha512-1lOmv61XMFIH5uNm27620kRRzWt/RK6tdn250BRDoG9W7OXGOQ5UyI1HVT+SFkoOoKztBiinWgi68+NA1MjBVQ==}
+ '@oxfmt/binding-linux-arm-gnueabihf@0.45.0':
+ resolution: {integrity: sha512-hWL8Hdni+3U1mPFx1UtWeGp3tNb6EhBAUHRMbKUxVkOp3WwoJbpVO2bfUVbS4PfpledviXXNHSTl1veTa6FhkQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxfmt/binding-linux-arm-musleabihf@0.36.0':
- resolution: {integrity: sha512-vMH23AskdR1ujUS9sPck2Df9rBVoZUnCVY86jisILzIQ/QQ/yKUTi7tgnIvydPx7TyB/48wsQ5QMr5Knq5p/aw==}
+ '@oxfmt/binding-linux-arm-musleabihf@0.45.0':
+ resolution: {integrity: sha512-6Blt/0OBT7vvfQpqYuYbpbFLPqSiaYpEJzUUWhinPEuADypDbtV1+LdjM0vYBNGPvnj85ex7lTerEX6JGcPt9w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxfmt/binding-linux-arm64-gnu@0.36.0':
- resolution: {integrity: sha512-Hy1V+zOBHpBiENRx77qrUTt5aPDHeCASRc8K5KwwAHkX2AKP0nV89eL17hsZrE9GmnXFjsNmd80lyf7aRTXsbw==}
+ '@oxfmt/binding-linux-arm64-gnu@0.45.0':
+ resolution: {integrity: sha512-jLjoLfe+hGfjhA8hNBSdw85yCA8ePKq7ME4T+g6P9caQXvmt6IhE2X7iVjnVdkmYUWEzZrxlh4p6RkDmAMJY/A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-arm64-musl@0.36.0':
- resolution: {integrity: sha512-SPGLJkOIHSIC6ABUQ5V8NqJpvYhMJueJv26NYqfCnwi/Mn6A61amkpJJ9Suy0Nmvs+OWESJpcebrBUbXPGZyQQ==}
+ '@oxfmt/binding-linux-arm64-musl@0.45.0':
+ resolution: {integrity: sha512-XQKXZIKYJC3GQJ8FnD3iMntpw69Wd9kDDK/Xt79p6xnFYlGGxSNv2vIBvRTDg5CKByWFWWZLCRDOXoP/m6YN4g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxfmt/binding-linux-ppc64-gnu@0.36.0':
- resolution: {integrity: sha512-3EuoyB8x9x8ysYJjbEO/M9fkSk72zQKnXCvpZMDHXlnY36/1qMp55Nm0PrCwjGO/1pen5hdOVkz9WmP3nAp2IQ==}
+ '@oxfmt/binding-linux-ppc64-gnu@0.45.0':
+ resolution: {integrity: sha512-+g5RiG+xOkdrCWkKodv407nTvMq4vYM18Uox2MhZBm/YoqFxxJpWKsloskFFG5NU13HGPw1wzYjjOVcyd9moCA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-riscv64-gnu@0.36.0':
- resolution: {integrity: sha512-MpY3itLwpGh8dnywtrZtaZ604T1m715SydCKy0+qTxetv+IHzuA+aO/AGzrlzUNYZZmtWtmDBrChZGibvZxbRQ==}
+ '@oxfmt/binding-linux-riscv64-gnu@0.45.0':
+ resolution: {integrity: sha512-V7dXKoSyEbWAkkSF4JJNtF+NJZDmJoSarSoP30WCsB3X636Rehd3CvxBj49FIJxEBFWhvcUjGSHVeU8Erck1bQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-riscv64-musl@0.36.0':
- resolution: {integrity: sha512-mmDhe4Vtx+XwQPRPn/V25+APnkApYgZ23q+6GVsNYY98pf3aU0aI3Me96pbRs/AfJ1jIiGC+/6q71FEu8dHcHw==}
+ '@oxfmt/binding-linux-riscv64-musl@0.45.0':
+ resolution: {integrity: sha512-Vdelft1sAEYojVGgcODEFXSWYQYlIvoyIGWebKCuUibd1tvS1TjTx413xG2ZLuHpYj45CkN/ztMLMX6jrgqpgg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxfmt/binding-linux-s390x-gnu@0.36.0':
- resolution: {integrity: sha512-AYXhU+DmNWLSnvVwkHM92fuYhogtVHab7UQrPNaDf1sxadugg9gWVmcgJDlIwxJdpk5CVW/TFvwUKwI432zhhA==}
+ '@oxfmt/binding-linux-s390x-gnu@0.45.0':
+ resolution: {integrity: sha512-RR7xKgNpqwENnK0aYCGYg0JycY2n93J0reNjHyes+I9Gq52dH95x+CBlnlAQHCPfz6FGnKA9HirgUl14WO6o7w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-x64-gnu@0.36.0':
- resolution: {integrity: sha512-H16QhhQ3usoakMleiAAQ2mg0NsBDAdyE9agUgfC8IHHh3jZEbr0rIKwjEqwbOHK5M0EmfhJmr+aGO/MgZPsneA==}
+ '@oxfmt/binding-linux-x64-gnu@0.45.0':
+ resolution: {integrity: sha512-U/QQ0+BQNSHxjuXR/utvXnQ50Vu5kUuqEomZvQ1/3mhgbBiMc2WU9q5kZ5WwLp3gnFIx9ibkveoRSe2EZubkqg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-x64-musl@0.36.0':
- resolution: {integrity: sha512-EFFGkixA39BcmHiCe2ECdrq02D6FCve5ka6ObbvrheXl4V+R0U/E+/uLyVx1X65LW8TA8QQHdnbdDallRekohw==}
+ '@oxfmt/binding-linux-x64-musl@0.45.0':
+ resolution: {integrity: sha512-o5TLOUCF0RWQjsIS06yVC+kFgp092/yLe6qBGSUvtnmTVw9gxjpdQSXc3VN5Cnive4K11HNstEZF8ROKHfDFSw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxfmt/binding-openharmony-arm64@0.36.0':
- resolution: {integrity: sha512-zr/t369wZWFOj1qf06Z5gGNjFymfUNDrxKMmr7FKiDRVI1sNsdKRCuRL4XVjtcptKQ+ao3FfxLN1vrynivmCYg==}
+ '@oxfmt/binding-openharmony-arm64@0.45.0':
+ resolution: {integrity: sha512-RnGcV3HgPuOjsGx/k9oyRNKmOp+NBLGzZTdPDYbc19r7NGeYPplnUU/BfU35bX2Y/O4ejvHxcfkvW2WoYL/gsg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxfmt/binding-win32-arm64-msvc@0.36.0':
- resolution: {integrity: sha512-FxO7UksTv8h4olzACgrqAXNF6BP329+H322323iDrMB5V/+a1kcAw07fsOsUmqNrb9iJBsCQgH/zqcqp5903ag==}
+ '@oxfmt/binding-win32-arm64-msvc@0.45.0':
+ resolution: {integrity: sha512-v3Vj7iKKsUFwt9w5hsqIIoErKVoENC6LoqfDlteOQ5QMDCXihlqLoxpmviUhXnNncg4zV6U9BPwlBbwa+qm4wg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxfmt/binding-win32-ia32-msvc@0.36.0':
- resolution: {integrity: sha512-OjoMQ89H01M0oLMfr/CPNH1zi48ZIwxAKObUl57oh7ssUBNDp/2Vjf7E1TQ8M4oj4VFQ/byxl2SmcPNaI2YNDg==}
+ '@oxfmt/binding-win32-ia32-msvc@0.45.0':
+ resolution: {integrity: sha512-N8yotPBX6ph0H3toF4AEpdCeVPrdcSetj+8eGiZGsrLsng3bs/Q5HPu4bbSxip5GBPx5hGbGHrZwH4+rcrjhHA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxfmt/binding-win32-x64-msvc@0.36.0':
- resolution: {integrity: sha512-MoyeQ9S36ZTz/4bDhOKJgOBIDROd4dQ5AkT9iezhEaUBxAPdNX9Oq0jD8OSnCj3G4wam/XNxVWKMA52kmzmPtQ==}
+ '@oxfmt/binding-win32-x64-msvc@0.45.0':
+ resolution: {integrity: sha512-w5MMTRCK1dpQeRA+HHqXQXyN33DlG/N2LOYxJmaT4fJjcmZrbNnqw7SmIk7I2/a2493PPLZ+2E/Ar6t2iKVMug==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@oxlint/binding-android-arm-eabi@1.51.0':
- resolution: {integrity: sha512-jJYIqbx4sX+suIxWstc4P7SzhEwb4ArWA2KVrmEuu9vH2i0qM6QIHz/ehmbGE4/2fZbpuMuBzTl7UkfNoqiSgw==}
+ '@oxlint/binding-android-arm-eabi@1.60.0':
+ resolution: {integrity: sha512-YdeJKaZckDQL1qa62a1aKq/goyq48aX3yOxaaWqWb4sau4Ee4IiLbamftNLU3zbePky6QsDj6thnSSzHRBjDfA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxlint/binding-android-arm64@1.51.0':
- resolution: {integrity: sha512-GtXyBCcH4ti98YdiMNCrpBNGitx87EjEWxevnyhcBK12k/Vu4EzSB45rzSC4fGFUD6sQgeaxItRCEEWeVwPafw==}
+ '@oxlint/binding-android-arm64@1.60.0':
+ resolution: {integrity: sha512-7ANS7PpXCfq84xZQ8E5WPs14gwcuPcl+/8TFNXfpSu0CQBXz3cUo2fDpHT8v8HJN+Ut02eacvMAzTnc9s6X4tw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxlint/binding-darwin-arm64@1.51.0':
- resolution: {integrity: sha512-3QJbeYaMHn6Bh2XeBXuITSsbnIctyTjvHf5nRjKYrT9pPeErNIpp5VDEeAXC0CZSwSVTsc8WOSDwgrAI24JolQ==}
+ '@oxlint/binding-darwin-arm64@1.60.0':
+ resolution: {integrity: sha512-pJsgd9AfplLGBm1fIr25V6V14vMrayhx4uIQvlfH7jWs2SZwSrvi3TfgfJySB8T+hvyEH8K2zXljQiUnkgUnfQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxlint/binding-darwin-x64@1.51.0':
- resolution: {integrity: sha512-NzErhMaTEN1cY0E8C5APy74lw5VwsNfJfVPBMWPVQLqAbO0k4FFLjvHURvkUL+Y18Wu+8Vs1kbqPh2hjXYA4pg==}
+ '@oxlint/binding-darwin-x64@1.60.0':
+ resolution: {integrity: sha512-Ue1aXHX49ivwflKqGJc7zcd/LeLgbhaTcDCQStgx5x06AXgjEAZmvrlMuIkWd4AL4FHQe6QJ9f33z04Cg448VQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxlint/binding-freebsd-x64@1.51.0':
- resolution: {integrity: sha512-msAIh3vPAoKoHlOE/oe6Q5C/n9umypv/k81lED82ibrJotn+3YG2Qp1kiR8o/Dg5iOEU97c6tl0utxcyFenpFw==}
+ '@oxlint/binding-freebsd-x64@1.60.0':
+ resolution: {integrity: sha512-YCyQzsQtusQw+gNRW9rRTifSO+Dt/+dtCl2NHoDMZqJlRTEZ/Oht9YnuporI9yiTx7+cB+eqzX3MtHHVHGIWhg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxlint/binding-linux-arm-gnueabihf@1.51.0':
- resolution: {integrity: sha512-CqQPcvqYyMe9ZBot2stjGogEzk1z8gGAngIX7srSzrzexmXixwVxBdFZyxTVM0CjGfDeV+Ru0w25/WNjlMM2Hw==}
+ '@oxlint/binding-linux-arm-gnueabihf@1.60.0':
+ resolution: {integrity: sha512-c7dxM2Zksa45Qw16i2iGY3Fti2NirJ38FrsBsKw+qcJ0OtqTsBgKJLF0xV+yLG56UH01Z8WRPgsw31e0MoRoGQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxlint/binding-linux-arm-musleabihf@1.51.0':
- resolution: {integrity: sha512-dstrlYQgZMnyOssxSbolGCge/sDbko12N/35RBNuqLpoPbft2aeBidBAb0dvQlyBd9RJ6u8D4o4Eh8Un6iTgyQ==}
+ '@oxlint/binding-linux-arm-musleabihf@1.60.0':
+ resolution: {integrity: sha512-ZWALoA42UYqBEP1Tbw9OWURgFGS1nWj2AAvLdY6ZcGx/Gj93qVCBKjcvwXMupZibYwFbi9s/rzqkZseb/6gVtQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxlint/binding-linux-arm64-gnu@1.51.0':
- resolution: {integrity: sha512-QEjUpXO7d35rP1/raLGGbAsBLLGZIzV3ZbeSjqWlD3oRnxpRIZ6iL4o51XQHkconn3uKssc+1VKdtHJ81BBhDA==}
+ '@oxlint/binding-linux-arm64-gnu@1.60.0':
+ resolution: {integrity: sha512-tpy+1w4p9hN5CicMCxqNy6ymfRtV5ayE573vFNjp1k1TN/qhLFgflveZoE/0++RlkHikBz2vY545NWm/hp7big==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxlint/binding-linux-arm64-musl@1.51.0':
- resolution: {integrity: sha512-YSJua5irtG4DoMAjUapDTPhkQLHhBIY0G9JqlZS6/SZPzqDkPku/1GdWs0D6h/wyx0Iz31lNCfIaWKBQhzP0wQ==}
+ '@oxlint/binding-linux-arm64-musl@1.60.0':
+ resolution: {integrity: sha512-eDYDXZGhQAXyn6GwtwiX/qcLS0HlOLPJ/+iiIY8RYr+3P8oKBmgKxADLlniL6FtWfE7pPk7IGN9/xvDEvDvFeg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxlint/binding-linux-ppc64-gnu@1.51.0':
- resolution: {integrity: sha512-7L4Wj2IEUNDETKssB9IDYt16T6WlF+X2jgC/hBq3diGHda9vJLpAgb09+D3quFq7TdkFtI7hwz/jmuQmQFPc1Q==}
+ '@oxlint/binding-linux-ppc64-gnu@1.60.0':
+ resolution: {integrity: sha512-nxehly5XYBHUWI9VJX1bqCf9j/B43DaK/aS/T1fcxCpX3PA4Rm9BB54nPD1CKayT8xg6REN1ao+01hSRNgy8OA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxlint/binding-linux-riscv64-gnu@1.51.0':
- resolution: {integrity: sha512-cBUHqtOXy76G41lOB401qpFoKx1xq17qYkhWrLSM7eEjiHM9sOtYqpr6ZdqCnN9s6ZpzudX4EkeHOFH2E9q0vA==}
+ '@oxlint/binding-linux-riscv64-gnu@1.60.0':
+ resolution: {integrity: sha512-j1qf/NaUfOWQutjeoooNG1Q0zsK0XGmSu1uDLq3cctquRF3j7t9Hxqf/76ehCc5GEUAanth2W4Fa+XT1RFg/nw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxlint/binding-linux-riscv64-musl@1.51.0':
- resolution: {integrity: sha512-WKbg8CysgZcHfZX0ixQFBRSBvFZUHa3SBnEjHY2FVYt2nbNJEjzTxA3ZR5wMU0NOCNKIAFUFvAh5/XJKPRJuJg==}
+ '@oxlint/binding-linux-riscv64-musl@1.60.0':
+ resolution: {integrity: sha512-YELKPRefQ/q/h3RUmeRfPCUhh2wBvgV1RyZ/F9M9u8cDyXsQW2ojv1DeWQTt466yczDITjZnIOg/s05pk7Ve2A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxlint/binding-linux-s390x-gnu@1.51.0':
- resolution: {integrity: sha512-N1QRUvJTxqXNSu35YOufdjsAVmKVx5bkrggOWAhTWBc3J4qjcBwr1IfyLh/6YCg8sYRSR1GraldS9jUgJL/U4A==}
+ '@oxlint/binding-linux-s390x-gnu@1.60.0':
+ resolution: {integrity: sha512-JkO3C6Gki7Y6h/MiIkFKvHFOz98/YWvQ4WYbK9DLXACMP2rjULzkeGyAzorJE5S1dzLQGFgeqvN779kSFwoV1g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxlint/binding-linux-x64-gnu@1.51.0':
- resolution: {integrity: sha512-e0Mz0DizsCoqNIjeOg6OUKe8JKJWZ5zZlwsd05Bmr51Jo3AOL4UJnPvwKumr4BBtBrDZkCmOLhCvDGm95nJM2g==}
+ '@oxlint/binding-linux-x64-gnu@1.60.0':
+ resolution: {integrity: sha512-XjKHdFVCpZZZSWBCKyyqCq65s2AKXykMXkjLoKYODrD+f5toLhlwsMESscu8FbgnJQ4Y/dpR/zdazsahmgBJIA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxlint/binding-linux-x64-musl@1.51.0':
- resolution: {integrity: sha512-wD8HGTWhYBKXvRDvoBVB1y+fEYV01samhWQSy1Zkxq2vpezvMnjaFKRuiP6tBNITLGuffbNDEXOwcAhJ3gI5Ug==}
+ '@oxlint/binding-linux-x64-musl@1.60.0':
+ resolution: {integrity: sha512-js29ZWIuPhNWzY8NC7KoffEMEeWG105vbmm+8EOJsC+T/jHBiKIJEUF78+F/IrgEWMMP9N0kRND4Pp75+xAhKg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxlint/binding-openharmony-arm64@1.51.0':
- resolution: {integrity: sha512-5NSwQ2hDEJ0GPXqikjWtwzgAQCsS7P9aLMNenjjKa+gknN3lTCwwwERsT6lKXSirfU3jLjexA2XQvQALh5h27w==}
+ '@oxlint/binding-openharmony-arm64@1.60.0':
+ resolution: {integrity: sha512-H+PUITKHk04stFpWj3x3Kg08Afp/bcXSBi0EhasR5a0Vw7StXHTzdl655PUI0fB4qdh2Wsu6Dsi+3ACxPoyQnA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxlint/binding-win32-arm64-msvc@1.51.0':
- resolution: {integrity: sha512-JEZyah1M0RHMw8d+jjSSJmSmO8sABA1J1RtrHYujGPeCkYg1NeH0TGuClpe2h5QtioRTaF57y/TZfn/2IFV6fA==}
+ '@oxlint/binding-win32-arm64-msvc@1.60.0':
+ resolution: {integrity: sha512-WA/yc7f7ZfCefBXVzNHn1Ztulb1EFwNBb4jMZ6pjML0zz6pHujlF3Q3jySluz3XHl/GNeMTntG1seUBWVMlMag==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxlint/binding-win32-ia32-msvc@1.51.0':
- resolution: {integrity: sha512-q3cEoKH6kwjz/WRyHwSf0nlD2F5Qw536kCXvmlSu+kaShzgrA0ojmh45CA81qL+7udfCaZL2SdKCZlLiGBVFlg==}
+ '@oxlint/binding-win32-ia32-msvc@1.60.0':
+ resolution: {integrity: sha512-33YxL1sqwYNZXtn3MD/4dno6s0xeedXOJlT1WohkVD565WvohClZUr7vwKdAk954n4xiEWJkewiCr+zLeq7AeA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxlint/binding-win32-x64-msvc@1.51.0':
- resolution: {integrity: sha512-Q14+fOGb9T28nWF/0EUsYqERiRA7cl1oy4TJrGmLaqhm+aO2cV+JttboHI3CbdeMCAyDI1+NoSlrM7Melhp/cw==}
+ '@oxlint/binding-win32-x64-msvc@1.60.0':
+ resolution: {integrity: sha512-JOro4ZcfBLamJCyfURQmOQByoorgOdx3ZjAkSqnb/CyG/i+lN3KoV5LAgk5ZAW6DPq7/Cx7n23f8DuTWXTWgyQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -1798,211 +2107,208 @@ packages:
'@radix-ui/rect@1.1.1':
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
- '@rolldown/binding-android-arm64@1.0.0-rc.3':
- resolution: {integrity: sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==}
+ '@rolldown/binding-android-arm64@1.0.0-rc.15':
+ resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@rolldown/binding-darwin-arm64@1.0.0-rc.3':
- resolution: {integrity: sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==}
+ '@rolldown/binding-android-arm64@1.0.0-rc.16':
+ resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
- os: [darwin]
+ os: [android]
- '@rolldown/binding-darwin-x64@1.0.0-rc.3':
- resolution: {integrity: sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==}
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.15':
+ resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
+ cpu: [arm64]
os: [darwin]
- '@rolldown/binding-freebsd-x64@1.0.0-rc.3':
- resolution: {integrity: sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3':
- resolution: {integrity: sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3':
- resolution: {integrity: sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==}
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.16':
+ resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
- os: [linux]
- libc: [glibc]
+ os: [darwin]
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3':
- resolution: {integrity: sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==}
+ '@rolldown/binding-darwin-x64@1.0.0-rc.15':
+ resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
+ cpu: [x64]
+ os: [darwin]
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3':
- resolution: {integrity: sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==}
+ '@rolldown/binding-darwin-x64@1.0.0-rc.16':
+ resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
- os: [linux]
- libc: [glibc]
+ os: [darwin]
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.3':
- resolution: {integrity: sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==}
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.15':
+ resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
- os: [linux]
- libc: [musl]
+ os: [freebsd]
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.3':
- resolution: {integrity: sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==}
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.16':
+ resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.3':
- resolution: {integrity: sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
+ cpu: [x64]
+ os: [freebsd]
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3':
- resolution: {integrity: sha512-85y5JifyMgs8m5K2XzR/VDsapKbiFiohl7s5lEj7nmNGO0pkTXE7q6TQScei96BNAsoK7JC3pA7ukA8WRHVJpg==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15':
+ resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
+ cpu: [arm]
+ os: [linux]
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3':
- resolution: {integrity: sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16':
+ resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@rolldown/pluginutils@1.0.0-rc.3':
- resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
-
- '@rollup/rollup-android-arm-eabi@4.54.0':
- resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.54.0':
- resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.54.0':
- resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.54.0':
- resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
- cpu: [x64]
- os: [darwin]
+ os: [linux]
- '@rollup/rollup-freebsd-arm64@4.54.0':
- resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.54.0':
- resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
- resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
- cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.54.0':
- resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
- cpu: [arm]
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
os: [linux]
- libc: [musl]
+ libc: [glibc]
- '@rollup/rollup-linux-arm64-gnu@4.54.0':
- resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15':
+ resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- libc: [glibc]
+ libc: [musl]
- '@rollup/rollup-linux-arm64-musl@4.54.0':
- resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16':
+ resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.54.0':
- resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
- cpu: [loong64]
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-gnu@4.54.0':
- resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-gnu@4.54.0':
- resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
- cpu: [riscv64]
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.54.0':
- resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
- cpu: [riscv64]
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
os: [linux]
- libc: [musl]
+ libc: [glibc]
- '@rollup/rollup-linux-s390x-gnu@4.54.0':
- resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
- cpu: [s390x]
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.54.0':
- resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.54.0':
- resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.15':
+ resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.16':
+ resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openharmony-arm64@4.54.0':
- resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.15':
+ resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.16':
+ resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.54.0':
- resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.15':
+ resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.16':
+ resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15':
+ resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.54.0':
- resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
- cpu: [ia32]
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16':
+ resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.54.0':
- resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15':
+ resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.54.0':
- resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16':
+ resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
+ '@rolldown/pluginutils@1.0.0-beta.40':
+ resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==}
+
+ '@rolldown/pluginutils@1.0.0-rc.15':
+ resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==}
+
+ '@rolldown/pluginutils@1.0.0-rc.16':
+ resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==}
+
+ '@rolldown/pluginutils@1.0.0-rc.7':
+ resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==}
+
'@sapphire/snowflake@3.5.5':
resolution: {integrity: sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==}
engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
@@ -2027,10 +2333,6 @@ packages:
resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==}
engines: {node: '>=20'}
- '@shikijs/rehype@4.0.2':
- resolution: {integrity: sha512-cmPlKLD8JeojasNFoY64162ScpEdEdQUMuVodPCrv1nx1z3bjmGwoKWDruQWa/ejSznImlaeB0Ty6Q3zPaVQAA==}
- engines: {node: '>=20'}
-
'@shikijs/themes@4.0.2':
resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==}
engines: {node: '>=20'}
@@ -2050,8 +2352,99 @@ packages:
resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
engines: {node: '>=18'}
- '@speed-highlight/core@1.2.12':
- resolution: {integrity: sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA==}
+ '@snazzah/davey-android-arm-eabi@0.1.11':
+ resolution: {integrity: sha512-T1RYbNYKN6tLOcGIDKJd8OI6FBSEemwL7DOYdTMmhqfhhMr3YVN8WOhfoxGg63OcnpTN2e2c5tdY2bAx25RmQQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+
+ '@snazzah/davey-android-arm64@0.1.11':
+ resolution: {integrity: sha512-ksJn/x2VU8h6w9eku1HT96ugSRZ7lKVkKNKbFleaFN+U99DJaPM+gMu2YvnFU4V54HR06ZBnRihnVG6VLXQpDw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@snazzah/davey-darwin-arm64@0.1.11':
+ resolution: {integrity: sha512-E1d7PbaaVMO3Lj9EiAPqOVbuV0xg5+PsHzHH097DDXiD1+zUDXvJaTnUWsnm5z50pJniHpi4GtaYmk+ieB/guA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@snazzah/davey-darwin-x64@0.1.11':
+ resolution: {integrity: sha512-Tl4TI/LTmgJZepgbgVMYDi8RqlAkPtPg1OEBPl7a9Tn3AwR36Vs6lyIT1cs/lGy/ds/+B+mKI4rPObN1cyILTw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@snazzah/davey-freebsd-x64@0.1.11':
+ resolution: {integrity: sha512-T8Iw9FXkuI1T+YBAFzh9v/TXf9IOTOSqnd/BFpTRTrlW72PR2lhIidzSmg027VxO7r5pX47iFwiOkb9I/NU/EA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@snazzah/davey-linux-arm-gnueabihf@0.1.11':
+ resolution: {integrity: sha512-1Txj+8pqA8uq/OGtaUaBFWAPnNMQzFgIywj0iA7EI4xZl+mab48/pv+YZ1pNb/suC6ynsW44oB9efiXSdcUAgA==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@snazzah/davey-linux-arm64-gnu@0.1.11':
+ resolution: {integrity: sha512-ERzF5nM/IYW1BcN3wLXpEwBCGLFf0kGJUVhaV6yfiInz0tkU8UmvrrgpaMaACfMjIhfWdq5CcX+aTkXo/saNcg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@snazzah/davey-linux-arm64-musl@0.1.11':
+ resolution: {integrity: sha512-e6pX6Hiabtz99q+H/YHNkm9JVlpqN8HGh0qPib8G2+UY4/SSH8WvqWipk3v581dMy2oyCHt7MOoY1aU1P1N/xA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@snazzah/davey-linux-x64-gnu@0.1.11':
+ resolution: {integrity: sha512-TW5bSoqChOJMbvsDb4wAATYrxmAXuNnse7wFNVSAJUaZKSeRfZbu3UAiPWSNn7GwLwSfU6hg322KZUn8IWCuvg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@snazzah/davey-linux-x64-musl@0.1.11':
+ resolution: {integrity: sha512-5j6Pmc+Wzv5lSxVP6quA7teYRJXibkZqQyYGfTDnTsUOO5dPpcojpqlXlkhyvsA1OAQTj4uxbOCciN3cVWwzug==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@snazzah/davey-wasm32-wasi@0.1.11':
+ resolution: {integrity: sha512-rKOwZ/0J8lp+4VEyOdMDBRP9KR+PksZpa9V1Qn0veMzy4FqTVKthkxwGqewheFe0SFg9fdvt798l/PBFrfDeZw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@snazzah/davey-win32-arm64-msvc@0.1.11':
+ resolution: {integrity: sha512-5fptJU4tX901m3mj0SHiBljMrPT4ZEsynbBhR7bK1yn9TY1jjyhN8EFi7QF5IWtUEni+0mia2BCMHZ5ZkmFZqQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@snazzah/davey-win32-ia32-msvc@0.1.11':
+ resolution: {integrity: sha512-ualexn8SeLsiMHhWfzVrzRcjHgcBapg++FPaVgJJxoh2S/jCRiklXOu3luqIZdJdNKvhe2V9SwO/cImPeIIBKw==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@snazzah/davey-win32-x64-msvc@0.1.11':
+ resolution: {integrity: sha512-muNhc8UKXtknzsH/w4AIkbPR2I8BuvApn0pDXar0IEvY8PCjqU/M8MPbOOEYwQVvQRMwVTgExtxzrkBPSXB4nA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@snazzah/davey@0.1.11':
+ resolution: {integrity: sha512-oBN+msHzPnm1M5DDx3wVD7iBwpNXFUtkh2MrAbUJu0OhKjliLChi28hq++mu1+qdMpAVQO5JKAvQQxYVbyneiw==}
+ engines: {node: '>= 10'}
+
+ '@speed-highlight/core@1.2.15':
+ resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==}
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
@@ -2059,69 +2452,69 @@ packages:
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
- '@tailwindcss/node@4.2.1':
- resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==}
+ '@tailwindcss/node@4.2.2':
+ resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==}
- '@tailwindcss/oxide-android-arm64@4.2.1':
- resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==}
+ '@tailwindcss/oxide-android-arm64@4.2.2':
+ resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.2.1':
- resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==}
+ '@tailwindcss/oxide-darwin-arm64@4.2.2':
+ resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.2.1':
- resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==}
+ '@tailwindcss/oxide-darwin-x64@4.2.2':
+ resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==}
engines: {node: '>= 20'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.2.1':
- resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==}
+ '@tailwindcss/oxide-freebsd-x64@4.2.2':
+ resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==}
engines: {node: '>= 20'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
- resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
+ resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==}
engines: {node: '>= 20'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
- resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
+ resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
- resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
+ resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
- resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
+ resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@tailwindcss/oxide-linux-x64-musl@4.2.1':
- resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==}
+ '@tailwindcss/oxide-linux-x64-musl@4.2.2':
+ resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@tailwindcss/oxide-wasm32-wasi@4.2.1':
- resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==}
+ '@tailwindcss/oxide-wasm32-wasi@4.2.2':
+ resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
@@ -2132,24 +2525,24 @@ packages:
- '@emnapi/wasi-threads'
- tslib
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
- resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
+ resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
- resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==}
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
+ resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==}
engines: {node: '>= 20'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.2.1':
- resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==}
+ '@tailwindcss/oxide@4.2.2':
+ resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==}
engines: {node: '>= 20'}
- '@tailwindcss/postcss@4.2.1':
- resolution: {integrity: sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==}
+ '@tailwindcss/postcss@4.2.2':
+ resolution: {integrity: sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==}
'@takumi-rs/core-darwin-arm64@0.71.7':
resolution: {integrity: sha512-mcW/ikpqj4QToZfvC6JY1nxnCpnvioOUm9QsXiGnjmr7z/zei1Xf4GKl67P/3dEXU6bi7gqsmEf+XOc66E6taQ==}
@@ -2216,32 +2609,182 @@ packages:
'@takumi-rs/wasm@0.71.7':
resolution: {integrity: sha512-yoau96mSOvG4kSSdypWfpvAacjK4r5tHlg90kOkAcXDp/UFe3npEwNsGe5DzHdKqTpHWsr2tzmEdhjnZW4v2VQ==}
- '@tanstack/history@1.161.4':
- resolution: {integrity: sha512-Kp/WSt411ZWYvgXy6uiv5RmhHrz9cAml05AQPrtdAp7eUqvIDbMGPnML25OKbzR3RJ1q4wgENxDTvlGPa9+Mww==}
+ '@tanstack/history@1.161.6':
+ resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==}
engines: {node: '>=20.19'}
- '@tanstack/react-router@1.166.7':
- resolution: {integrity: sha512-LLcXu2nrCn2WL+w0YAbg3CRZIIO2cYVSC3y+ZYlFBxBs4hh8eoNP1EWFvRLZGCFYpqON7x6qUf1u0W7tH0cJJw==}
+ '@tanstack/react-router-devtools@1.166.13':
+ resolution: {integrity: sha512-6yKRFFJrEEOiGp5RAAuGCYsl81M4XAhJmLcu9PKj+HZle4A3dsP60lwHoqQYWHMK9nKKFkdXR+D8qxzxqtQbEA==}
engines: {node: '>=20.19'}
+ peerDependencies:
+ '@tanstack/react-router': ^1.168.15
+ '@tanstack/router-core': ^1.168.11
+ react: '>=18.0.0 || >=19.0.0'
+ react-dom: '>=18.0.0 || >=19.0.0'
+ peerDependenciesMeta:
+ '@tanstack/router-core':
+ optional: true
+
+ '@tanstack/react-router@1.168.22':
+ resolution: {integrity: sha512-W2LyfkfJtDCf//jOjZeUBWwOVl8iDRVTECpGHa2M28MT3T5/VVnjgicYNHR/ax0Filk1iU67MRjcjHheTYvK1Q==}
+ engines: {node: '>=20.19'}
+ peerDependencies:
+ react: '>=18.0.0 || >=19.0.0'
+ react-dom: '>=18.0.0 || >=19.0.0'
+
+ '@tanstack/react-start-client@1.166.39':
+ resolution: {integrity: sha512-NDao1nwwM4hXiVwQjVO8ZPlL9gZ0yeIl7w0PV+75jz+V9bhXr2nGhBuBw4zBuG7px4fEVmO5E8b7kpjWgCDJtA==}
+ engines: {node: '>=22.12.0'}
+ peerDependencies:
+ react: '>=18.0.0 || >=19.0.0'
+ react-dom: '>=18.0.0 || >=19.0.0'
+
+ '@tanstack/react-start-rsc@0.0.20':
+ resolution: {integrity: sha512-KPsaq/asQxu/scMduMuQlwURIXwu+qZ7SO/8xbY/PQ/DJzfp9q1ZEHs9JN7dBEOHcme/YPeHta+UxBapB5Syyw==}
+ engines: {node: '>=22.12.0'}
+ peerDependencies:
+ '@vitejs/plugin-rsc': '>=0.5.20'
+ react: '>=18.0.0 || >=19.0.0'
+ react-dom: '>=18.0.0 || >=19.0.0'
+ peerDependenciesMeta:
+ '@vitejs/plugin-rsc':
+ optional: true
+
+ '@tanstack/react-start-server@1.166.40':
+ resolution: {integrity: sha512-g5OU/eHmT1MleDbebdhNybpYgDu3QeNlemMCyXxEJNewOFM4iBlfoUBdMPhONJDlHQrOBXwMk/RUEFemY94yRw==}
+ engines: {node: '>=22.12.0'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
- '@tanstack/react-store@0.9.2':
- resolution: {integrity: sha512-Vt5usJE5sHG/cMechQfmwvwne6ktGCELe89Lmvoxe3LKRoFrhPa8OCKWs0NliG8HTJElEIj7PLtaBQIcux5pAQ==}
+ '@tanstack/react-start@1.167.41':
+ resolution: {integrity: sha512-w51yu/VQHNecIgN3ku+EmCxPjVbBftbnucDZBnxns43zPAhL5T5bnaBi0Fx4yJ3sDAmiceWEJD2F6IUaXTlNFA==}
+ engines: {node: '>=22.12.0'}
+ hasBin: true
+ peerDependencies:
+ '@vitejs/plugin-rsc': '*'
+ react: '>=18.0.0 || >=19.0.0'
+ react-dom: '>=18.0.0 || >=19.0.0'
+ vite: '>=7.0.0'
+ peerDependenciesMeta:
+ '@vitejs/plugin-rsc':
+ optional: true
+
+ '@tanstack/react-store@0.9.3':
+ resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- '@tanstack/router-core@1.166.7':
- resolution: {integrity: sha512-MCc8wYIIcxmbeidM8PL2QeaAjUIHyhEDIZPW6NGfn/uwvyi+K2ucn3AGCxxcXl4JGGm0Mx9+7buYl1v3HdcFrg==}
+ '@tanstack/router-core@1.168.15':
+ resolution: {integrity: sha512-Wr0424NDtD8fT/uALobMZ9DdcfsTyXtW5IPR++7zvW8/7RaIOeaqXpVDId8ywaGtqPWLWOfaUg2zUtYtukoXYA==}
+ engines: {node: '>=20.19'}
+ hasBin: true
+
+ '@tanstack/router-devtools-core@1.167.3':
+ resolution: {integrity: sha512-fJ1VMhyQgnoashTrP763c2HRc9kofgF61L7Jb3F6eTHAmCKtGVx8BRtiFt37sr3U0P0jmaaiiSPGP6nT5JtVNg==}
+ engines: {node: '>=20.19'}
+ peerDependencies:
+ '@tanstack/router-core': ^1.168.11
+ csstype: ^3.0.10
+ peerDependenciesMeta:
+ csstype:
+ optional: true
+
+ '@tanstack/router-generator@1.166.32':
+ resolution: {integrity: sha512-VuusKwEXcgKq+myq1JQfZogY8scTXIIeFls50dJ/UXgCXWp5n14iFreYNlg41wURcak2oA3M+t2TVfD0xUUD6g==}
+ engines: {node: '>=20.19'}
+
+ '@tanstack/router-plugin@1.167.22':
+ resolution: {integrity: sha512-wYPzIvBK8bcmXVUpZfSgGBXOrfBAdF4odKevz6rejio5rEd947NtKDF5R7eYdwlAOmRqYpLJnJ1QHkc5t8bY4w==}
+ engines: {node: '>=20.19'}
+ hasBin: true
+ peerDependencies:
+ '@rsbuild/core': '>=1.0.2'
+ '@tanstack/react-router': ^1.168.21
+ vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0'
+ vite-plugin-solid: ^2.11.10 || ^3.0.0-0
+ webpack: '>=5.92.0'
+ peerDependenciesMeta:
+ '@rsbuild/core':
+ optional: true
+ '@tanstack/react-router':
+ optional: true
+ vite:
+ optional: true
+ vite-plugin-solid:
+ optional: true
+ webpack:
+ optional: true
+
+ '@tanstack/router-utils@1.161.6':
+ resolution: {integrity: sha512-nRcYw+w2OEgK6VfjirYvGyPLOK+tZQz1jkYcmH5AjMamQ9PycnlxZF2aEZtPpNoUsaceX2bHptn6Ub5hGXqNvw==}
+ engines: {node: '>=20.19'}
+
+ '@tanstack/start-client-core@1.167.17':
+ resolution: {integrity: sha512-3ZnpQ0LPnhrm/GX+HT7XfRxTcqnmBE1KJd7LtaJNuN13NH0C4ZOWchKLPEed2/gluhgsT6UgWm+Ec0kEFtxSaw==}
+ engines: {node: '>=22.12.0'}
+ hasBin: true
+
+ '@tanstack/start-fn-stubs@1.161.6':
+ resolution: {integrity: sha512-Y6QSlGiLga8cHfvxGGaonXIlt2bIUTVdH6AMjmpMp7+ANNCp+N96GQbjjhLye3JkaxDfP68x5iZA8NK4imgRig==}
+ engines: {node: '>=22.12.0'}
+
+ '@tanstack/start-plugin-core@1.167.35':
+ resolution: {integrity: sha512-Ww511KfsXd7TbPYzjiUDCMUI5VbO0chmrTgFi1oOUT0jmk5U0Xh9WVIun1cvRmaq+KBZwvWGvmeIn0UwO3mHEA==}
+ engines: {node: '>=22.12.0'}
+ peerDependencies:
+ vite: '>=7.0.0'
+
+ '@tanstack/start-server-core@1.167.19':
+ resolution: {integrity: sha512-wzOdfzLsK91CnjoywnEjXSlVlaRVK99HJhyVijNU1TECBI2JEKvW9S6d14YfS4gD4fFH4V86tFYhkcLPe6nzWg==}
+ engines: {node: '>=22.12.0'}
+ hasBin: true
+
+ '@tanstack/start-storage-context@1.166.29':
+ resolution: {integrity: sha512-KrJYudc1nbnTY43jdN+hQFMYkhz7+3T+hkgBoGnIP1OspSe6vGQaYGDB4EUXYnkLfyQp+iUuKubgS8hSKeJ0ng==}
+ engines: {node: '>=22.12.0'}
+
+ '@tanstack/store@0.9.3':
+ resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==}
+
+ '@tanstack/virtual-file-routes@1.161.7':
+ resolution: {integrity: sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==}
engines: {node: '>=20.19'}
+ hasBin: true
+
+ '@ts-morph/common@0.29.0':
+ resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==}
- '@tanstack/store@0.9.2':
- resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==}
+ '@turbo/darwin-64@2.9.6':
+ resolution: {integrity: sha512-X/56SnVXIQZBLKwniGTwEQTGmtE5brSACnKMBWpY3YafuxVYefrC2acamfjgxP7BG5w3I+6jf0UrLoSzgPcSJg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@turbo/darwin-arm64@2.9.6':
+ resolution: {integrity: sha512-aalBeSl4agT/QtYGDyf/XLajedWzUC9Vg/pm/YO6QQ93vkQ91Vz5uK1ta5RbVRDozQSz4njxUNqRNmOXDzW+qw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@turbo/linux-64@2.9.6':
+ resolution: {integrity: sha512-YKi05jnNHaD7vevgYwahpzGwbsNNTwzU2c7VZdmdFm7+cGDP4oREUWSsainiMfRqjRuolQxBwRn8wf1jmu+YZA==}
+ cpu: [x64]
+ os: [linux]
- '@ts-morph/common@0.28.1':
- resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==}
+ '@turbo/linux-arm64@2.9.6':
+ resolution: {integrity: sha512-02o/ZS69cOYEDczXvOB2xmyrtzjQ2hVFtWZK1iqxXUfzMmTjZK4UumrfNnjckSg+gqeBfnPRHa0NstA173Ik3g==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@turbo/windows-64@2.9.6':
+ resolution: {integrity: sha512-wVdQjvnBI15wB6JrA+43CtUtagjIMmX6XYO758oZHAsCNSxqRlJtdyujih0D8OCnwCRWiGWGI63zAxR0hO6s9g==}
+ cpu: [x64]
+ os: [win32]
+
+ '@turbo/windows-arm64@2.9.6':
+ resolution: {integrity: sha512-1XUUyWW0W6FTSqGEhU8RHVqb2wP1SPkr7hIvBlMEwH9jr+sJQK5kqeosLJ/QaUv4ecSAd1ZhIrLoW7qslAzT4A==}
+ cpu: [arm64]
+ os: [win32]
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
@@ -2252,14 +2795,18 @@ packages:
'@types/babel__generator@7.27.0':
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+ '@types/babel__parser@7.1.5':
+ resolution: {integrity: sha512-yyWPJg3KawM9ydArmt2q+UE6dhy0usfXNB1yxDv0gE27KbZXeFCDtqR2L4jdVxXqq7I9tvkL9zuSY/ZVgF6fXQ==}
+ deprecated: This is a stub types definition. @babel/parser provides its own type definitions, so you do not need this installed.
+
'@types/babel__template@7.4.4':
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
- '@types/bun@1.3.6':
- resolution: {integrity: sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA==}
+ '@types/bun@1.3.11':
+ resolution: {integrity: sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg==}
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
@@ -2357,8 +2904,8 @@ packages:
'@types/d3@7.4.3':
resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
- '@types/debug@4.1.12':
- resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/debug@4.1.13':
+ resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
@@ -2390,23 +2937,17 @@ packages:
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
- '@types/node@25.2.3':
- resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==}
-
- '@types/node@25.4.0':
- resolution: {integrity: sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==}
+ '@types/node@25.6.0':
+ resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
- '@types/picomatch@4.0.2':
- resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==}
+ '@types/picomatch@4.0.3':
+ resolution: {integrity: sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==}
'@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
'@types/react': ^19.2.0
- '@types/react@19.2.13':
- resolution: {integrity: sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==}
-
'@types/react@19.2.14':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
@@ -2428,43 +2969,56 @@ packages:
'@upsetjs/venn.js@2.0.0':
resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==}
- '@vitest/coverage-v8@4.0.18':
- resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==}
+ '@vitejs/plugin-react@6.0.1':
+ resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0
+ babel-plugin-react-compiler: ^1.0.0
+ vite: ^8.0.0
+ peerDependenciesMeta:
+ '@rolldown/plugin-babel':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+
+ '@vitest/coverage-v8@4.1.4':
+ resolution: {integrity: sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==}
peerDependencies:
- '@vitest/browser': 4.0.18
- vitest: 4.0.18
+ '@vitest/browser': 4.1.4
+ vitest: 4.1.4
peerDependenciesMeta:
'@vitest/browser':
optional: true
- '@vitest/expect@4.0.18':
- resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
+ '@vitest/expect@4.1.4':
+ resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==}
- '@vitest/mocker@4.0.18':
- resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
+ '@vitest/mocker@4.1.4':
+ resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==}
peerDependencies:
msw: ^2.4.9
- vite: ^6.0.0 || ^7.0.0-0
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
- '@vitest/pretty-format@4.0.18':
- resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
+ '@vitest/pretty-format@4.1.4':
+ resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==}
- '@vitest/runner@4.0.18':
- resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
+ '@vitest/runner@4.1.4':
+ resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==}
- '@vitest/snapshot@4.0.18':
- resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
+ '@vitest/snapshot@4.1.4':
+ resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==}
- '@vitest/spy@4.0.18':
- resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
+ '@vitest/spy@4.1.4':
+ resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==}
- '@vitest/utils@4.0.18':
- resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
+ '@vitest/utils@4.1.4':
+ resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -2492,6 +3046,10 @@ packages:
resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -2514,25 +3072,31 @@ packages:
resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==}
engines: {node: '>=20.19.0'}
- ast-v8-to-istanbul@0.3.10:
- resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==}
+ ast-v8-to-istanbul@1.0.0:
+ resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==}
astring@1.9.0:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
hasBin: true
+ babel-dead-code-elimination@1.0.12:
+ resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==}
+
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
- baseline-browser-mapping@2.9.11:
- resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
+ baseline-browser-mapping@2.10.13:
+ resolution: {integrity: sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ baseline-browser-mapping@2.10.19:
+ resolution: {integrity: sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==}
+ engines: {node: '>=6.0.0'}
hasBin: true
beautiful-mermaid@1.1.3:
@@ -2542,37 +3106,44 @@ packages:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
engines: {node: '>=4'}
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
birpc@4.0.0:
resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
blake3-wasm@2.1.5:
resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- brace-expansion@5.0.4:
- resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==}
+ brace-expansion@5.0.5:
+ resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
engines: {node: 18 || 20 || >=22}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.28.1:
- resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ browserslist@4.28.2:
+ resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- bun-types@1.3.6:
- resolution: {integrity: sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ==}
+ bun-types@1.3.11:
+ resolution: {integrity: sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg==}
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
- caniuse-lite@1.0.30001761:
- resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
+ caniuse-lite@1.0.30001784:
+ resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==}
+
+ caniuse-lite@1.0.30001788:
+ resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -2600,6 +3171,13 @@ packages:
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+ cheerio-select@2.1.0:
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
+
+ cheerio@1.2.0:
+ resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==}
+ engines: {node: '>=20.18.1'}
+
chevrotain-allstar@0.3.1:
resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
peerDependencies:
@@ -2608,6 +3186,10 @@ packages:
chevrotain@11.1.2:
resolution: {integrity: sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==}
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
chokidar@5.0.0:
resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
engines: {node: '>= 20.19.0'}
@@ -2659,8 +3241,8 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie-es@2.0.0:
- resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==}
+ cookie-es@3.1.1:
+ resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
cookie@1.1.1:
resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
@@ -2676,10 +3258,12 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
- cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
@@ -2840,8 +3424,8 @@ packages:
dagre-d3-es@7.0.14:
resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==}
- dayjs@1.11.19:
- resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+ dayjs@1.11.20:
+ resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
@@ -2855,11 +3439,11 @@ packages:
decode-named-character-reference@1.3.0:
resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
- 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==}
+ delaunator@5.1.0:
+ resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
@@ -2879,16 +3463,33 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ diff@8.0.4:
+ resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
+ engines: {node: '>=0.3.1'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
- discord-api-types@0.38.37:
- resolution: {integrity: sha512-Cv47jzY1jkGkh5sv0bfHYqGgKOWO1peOrGMkDFM4UmaGMOTgOW8QSexhvixa9sVOiz8MnVOBryWYyw/CEVhj7w==}
+ discord-api-types@0.38.45:
+ resolution: {integrity: sha512-DiI01i00FPv6n+hXcFkFxK8Y/rFRpKs6U6aP32N4T73nTbj37Eua3H/95TBpLktLWB6xnLXhYDGvyLq6zzYY2w==}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
dompurify@3.3.3:
resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==}
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
dts-resolver@2.1.3:
resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==}
engines: {node: '>=20.19.0'}
@@ -2898,8 +3499,8 @@ packages:
oxc-resolver:
optional: true
- electron-to-chromium@1.5.267:
- resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+ electron-to-chromium@1.5.331:
+ resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==}
elkjs@0.11.1:
resolution: {integrity: sha512-zxxR9k+rx5ktMwT/FwyLdPCrq7xN6e4VGGHH8hA01vVYKjTFik7nHOxBnAYtrgYUB1RpAiLvA1/U2YraWxyKKg==}
@@ -2908,14 +3509,21 @@ packages:
resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
engines: {node: '>=14'}
- enhanced-resolve@5.20.0:
- resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==}
+ encoding-sniffer@0.2.1:
+ resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
+
+ enhanced-resolve@5.20.1:
+ resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
engines: {node: '>=10.13.0'}
enquirer@2.4.1:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
entities@6.0.1:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
@@ -2927,8 +3535,8 @@ packages:
error-stack-parser-es@1.0.5:
resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
esast-util-from-estree@2.0.0:
resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
@@ -2936,13 +3544,18 @@ packages:
esast-util-from-js@2.0.1:
resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
- esbuild@0.27.2:
- resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
engines: {node: '>=18'}
hasBin: true
- esbuild@0.27.3:
- resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ esbuild@0.27.7:
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.28.0:
+ resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==}
engines: {node: '>=18'}
hasBin: true
@@ -2987,6 +3600,9 @@ packages:
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'}
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -3017,8 +3633,8 @@ packages:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
- framer-motion@12.35.2:
- resolution: {integrity: sha512-dhfuEMaNo0hc+AEqyHiIfiJRNb9U9UQutE9FoKm5pjf7CMitp9xPEF1iWZihR1q86LBmo6EJ7S8cN8QXEy49AA==}
+ framer-motion@12.38.0:
+ resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -3044,8 +3660,8 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- fumadocs-core@16.6.16:
- resolution: {integrity: sha512-OC5VRAgXDZWpmuaix6TiUlqEyfhLjqnqkQuSqFnbf5Ge4w43I4qlxACxPS7Eq7aE+pPhpqTecQSQIH8KNouLXA==}
+ fumadocs-core@16.7.16:
+ resolution: {integrity: sha512-OXZMJPS/HVAfCw8/VEgsOEQNWUXq7+U2v1A/DbKmI0Vbb08uPCUpbIqVSj4kmGr46L+Pa/PZgG596Z7iPhlbCg==}
peerDependencies:
'@mdx-js/mdx': '*'
'@mixedbread/sdk': ^0.46.0
@@ -3103,22 +3719,19 @@ packages:
zod:
optional: true
- fumadocs-mdx@14.2.9:
- resolution: {integrity: sha512-5QbFj3KyNgojjpUsD5Xw2W+ofN9l1WiIxzthwFzGoHOLIoJkdCN4AjHcINC+YSo89d/oZlradrrKRd3uHwVKBA==}
+ fumadocs-mdx@14.3.0:
+ resolution: {integrity: sha512-OsllpIpdk6Mu595MpX1hFFXrBq7cFpFBEkKNAFgO7aKZ/ux4e4pavTesDd5xKhuOfC0J9CZSUJ8RMlad9j5yTA==}
hasBin: true
peerDependencies:
- '@fumadocs/mdx-remote': ^1.4.0
'@types/mdast': '*'
'@types/mdx': '*'
'@types/react': '*'
fumadocs-core: ^15.0.0 || ^16.0.0
mdast-util-directive: '*'
next: ^15.3.0 || ^16.0.0
- react: '*'
- vite: 6.x.x || 7.x.x
+ react: ^19.2.0
+ vite: 6.x.x || 7.x.x || 8.x.x
peerDependenciesMeta:
- '@fumadocs/mdx-remote':
- optional: true
'@types/mdast':
optional: true
'@types/mdx':
@@ -3134,17 +3747,17 @@ packages:
vite:
optional: true
- fumadocs-typescript@5.1.5:
- resolution: {integrity: sha512-uKXfsN2uEJKNX6A0jJbjj2Hg9uUnN9REvknwXgBdBjwK5Ap8cVQnWoKLQQqsD0bp8ypPS7pqmnXXU/6dfAfy0w==}
+ fumadocs-typescript@5.2.6:
+ resolution: {integrity: sha512-kmidpjbjrzlSbppLTW1m4SF87R3CMu3WhvD1VW8/w5A71uC2nARvfMh2o7bNJRLzjJyq/RO9v8NHYHU/cw+QUQ==}
peerDependencies:
'@types/estree': '*'
'@types/hast': '*'
'@types/mdast': '*'
'@types/react': '*'
- fumadocs-core: ^16.5.0
- fumadocs-ui: ^16.5.0
- react: '*'
- typescript: '*'
+ fumadocs-core: ^16.7.0
+ fumadocs-ui: ^16.7.0
+ react: ^19.2.0
+ react-dom: ^19.2.0
peerDependenciesMeta:
'@types/estree':
optional: true
@@ -3157,13 +3770,13 @@ packages:
fumadocs-ui:
optional: true
- fumadocs-ui@16.6.16:
- resolution: {integrity: sha512-MEpggI+rKvXEPqPmPVb8sIfUuo8ev7X3I6qVwPkHte9kIkiODZH9DmKFEnyuGnTjVXct8Z1wf18kY2xcoJI6eg==}
+ fumadocs-ui@16.7.16:
+ resolution: {integrity: sha512-NFWH8GuVV0O6OQnGb0TCS6jsdgyB7/5phQm8YjtIkyjkxAkERwA76N5RYCpS27p41NdtWdQw4eFIEve1Aq9Siw==}
peerDependencies:
'@takumi-rs/image-response': '*'
'@types/mdx': '*'
'@types/react': '*'
- fumadocs-core: 16.6.16
+ fumadocs-core: 16.7.16
next: 16.x.x
react: ^19.2.0
react-dom: ^19.2.0
@@ -3188,8 +3801,8 @@ packages:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'}
- get-tsconfig@4.13.6:
- resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
+ get-tsconfig@4.14.0:
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -3206,12 +3819,24 @@ packages:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
- globrex@0.1.2:
- resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+ goober@2.1.18:
+ resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==}
+ peerDependencies:
+ csstype: ^3.0.10
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ h3@2.0.1-rc.20:
+ resolution: {integrity: sha512-28ljodXuUp0fZovdiSRq4G9OgrxCztrJe5VdYzXAB7ueRvI7pIUqLU14Xi3XqdYJ/khXjfpUOOD2EQa6CmBgsg==}
+ engines: {node: '>=20.11.1'}
+ hasBin: true
+ peerDependencies:
+ crossws: ^0.4.1
+ peerDependenciesMeta:
+ crossws:
+ optional: true
+
hachure-fill@0.5.2:
resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
@@ -3244,21 +3869,14 @@ packages:
hast-util-to-parse5@8.0.1:
resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==}
- hast-util-to-string@3.0.1:
- resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
-
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
hastscript@9.0.1:
resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
- hono@4.11.3:
- resolution: {integrity: sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==}
- engines: {node: '>=16.9.0'}
-
- hookable@6.0.1:
- resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==}
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
@@ -3266,6 +3884,9 @@ packages:
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+ htmlparser2@10.1.0:
+ resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==}
+
human-id@4.1.3:
resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
hasBin: true
@@ -3285,15 +3906,10 @@ packages:
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
-
- image-size@2.0.2:
- resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
- engines: {node: '>=16.x'}
- hasBin: true
+ engines: {node: '>= 4'}
- import-without-cache@0.2.5:
- resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==}
+ import-without-cache@0.3.3:
+ resolution: {integrity: sha512-bDxwDdF04gm550DfZHgffvlX+9kUlcz32UD0AeBTmVPFiWkrexF2XVmiuFFbDhiFuP8fQkrkvI2KdSNPYWAXkQ==}
engines: {node: '>=20.19.0'}
ini@4.1.3:
@@ -3316,6 +3932,10 @@ packages:
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
@@ -3350,16 +3970,16 @@ packages:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
- isbot@5.1.36:
- resolution: {integrity: sha512-C/ZtXyJqDPZ7G7JPr06ApWyYoHjYexQbS6hPYD4WYCzpv2Qes6Z+CCEfTX4Owzf+1EJ933PoI2p+B9v7wpGZBQ==}
+ isbot@5.1.38:
+ resolution: {integrity: sha512-Cus2702JamTNMEY4zTP+TShgq/3qzjvGcBC4XMOV45BLaxD4iUFENkqu7ZhFeSzwNsCSZLjnGlihDQznnpnEEA==}
engines: {node: '>=18'}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- isexe@3.1.1:
- resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
- engines: {node: '>=16'}
+ isexe@3.1.5:
+ resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
+ engines: {node: '>=18'}
istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
@@ -3380,12 +4000,12 @@ packages:
js-sha256@0.11.1:
resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==}
+ js-tokens@10.0.0:
+ resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- js-tokens@9.0.1:
- resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
-
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
@@ -3407,8 +4027,8 @@ packages:
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
- katex@0.16.38:
- resolution: {integrity: sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ==}
+ katex@0.16.44:
+ resolution: {integrity: sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==}
hasBin: true
khroma@2.1.0:
@@ -3432,78 +4052,78 @@ packages:
layout-base@2.0.1:
resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
- lightningcss-android-arm64@1.31.1:
- resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [android]
- lightningcss-darwin-arm64@1.31.1:
- resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
- lightningcss-darwin-x64@1.31.1:
- resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
- lightningcss-freebsd-x64@1.31.1:
- resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
- lightningcss-linux-arm-gnueabihf@1.31.1:
- resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
- lightningcss-linux-arm64-gnu@1.31.1:
- resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- lightningcss-linux-arm64-musl@1.31.1:
- resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
- lightningcss-linux-x64-gnu@1.31.1:
- resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
- lightningcss-linux-x64-musl@1.31.1:
- resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
- lightningcss-win32-arm64-msvc@1.31.1:
- resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
- lightningcss-win32-x64-msvc@1.31.1:
- resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
- lightningcss@1.31.1:
- resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
engines: {node: '>= 12.0.0'}
locate-path@5.0.0:
@@ -3513,6 +4133,9 @@ packages:
lodash-es@4.17.23:
resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
+ lodash-es@4.18.1:
+ resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
+
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
@@ -3522,16 +4145,16 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- lucide-react@0.577.0:
- resolution: {integrity: sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==}
+ lucide-react@1.8.0:
+ resolution: {integrity: sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
- magicast@0.5.1:
- resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==}
+ magicast@0.5.2:
+ resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==}
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
@@ -3601,8 +4224,8 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- mermaid@11.13.0:
- resolution: {integrity: sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==}
+ mermaid@11.14.0:
+ resolution: {integrity: sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==}
messageformat@4.0.0:
resolution: {integrity: sha512-XKmJ/ffTWToWOlHJzt85ZChQgVGC0LHzNWuNK8zuYpNySsB0nIEmytOdSAOW9ETKtkajAUJf520m5gFHHnrTYg==}
@@ -3717,36 +4340,32 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
- miniflare@4.20260210.0:
- resolution: {integrity: sha512-HXR6m53IOqEzq52DuGF1x7I1K6lSIqzhbCbQXv/cTmPnPJmNkr7EBtLDm4nfSkOvlDtnwDCLUjWII5fyGJI5Tw==}
+ miniflare@4.20260415.0:
+ resolution: {integrity: sha512-JoExRWN4YBI2luA5BoSMFEgi8rQWXUGzo3mtE+58VXCLV3jj/Xnk5Yeqs/IXWz8Es5GJIaq6BtsixDvAxXSIng==}
engines: {node: '>=18.0.0'}
hasBin: true
- minimatch@10.2.4:
- resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
-
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- mlly@1.8.1:
- resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==}
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
- moo@0.5.2:
- resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==}
+ moo@0.5.3:
+ resolution: {integrity: sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==}
- motion-dom@12.35.2:
- resolution: {integrity: sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg==}
+ motion-dom@12.38.0:
+ resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==}
- motion-utils@12.29.2:
- resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==}
+ motion-utils@12.36.0:
+ resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==}
- motion@12.35.2:
- resolution: {integrity: sha512-8zCi1DkNyU6a/tgEHn/GnnXZDcaMpDHbDOGORY1Rg/6lcNMSOuvwDB3i4hMSOvxqMWArc/vrGaw/Xek1OP69/A==}
+ motion@12.38.0:
+ resolution: {integrity: sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -3771,18 +4390,14 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- negotiator@1.0.0:
- resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
- engines: {node: '>= 0.6'}
-
next-themes@0.4.6:
resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
peerDependencies:
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
- next@16.1.6:
- resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==}
+ next@16.2.4:
+ resolution: {integrity: sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==}
engines: {node: '>=20.9.0'}
hasBin: true
peerDependencies:
@@ -3802,12 +4417,15 @@ packages:
sass:
optional: true
- node-releases@2.0.27:
- resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+ node-releases@2.0.37:
+ resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
- npm-to-yarn@3.0.1:
- resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
@@ -3815,23 +4433,23 @@ packages:
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
- oniguruma-to-es@4.3.4:
- resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+ oniguruma-to-es@4.3.5:
+ resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==}
outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
- oxfmt@0.36.0:
- resolution: {integrity: sha512-/ejJ+KoSW6J9bcNT9a9UtJSJNWhJ3yOLSBLbkoFHJs/8CZjmaZVZAJe4YgO1KMJlKpNQasrn/G9JQUEZI3p0EQ==}
+ oxfmt@0.45.0:
+ resolution: {integrity: sha512-0o/COoN9fY50bjVeM7PQsNgbhndKurBIeTIcspW033OumksjJJmIVDKjAk5HMwU/GHTxSOdGDdhJ6BRzGPmsHg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- oxlint@1.51.0:
- resolution: {integrity: sha512-g6DNPaV9/WI9MoX2XllafxQuxwY1TV++j7hP8fTJByVBuCoVtm3dy9f/2vtH/HU40JztcgWF4G7ua+gkainklQ==}
+ oxlint@1.60.0:
+ resolution: {integrity: sha512-tnRzTWiWJ9pg3ftRWnD0+Oqh78L6ZSwcEudvCZaER0PIqiAnNyXj5N1dPwjmNpDalkKS9m/WMLN1CTPUBPmsgw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
- oxlint-tsgolint: '>=0.15.0'
+ oxlint-tsgolint: '>=0.18.0'
peerDependenciesMeta:
oxlint-tsgolint:
optional: true
@@ -3865,6 +4483,12 @@ packages:
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+ parse5-htmlparser2-tree-adapter@7.1.0:
+ resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
+
+ parse5-parser-stream@7.1.2:
+ resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
+
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
@@ -3888,9 +4512,6 @@ packages:
path-to-regexp@6.3.0:
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
- path-to-regexp@8.3.0:
- resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
-
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -3901,12 +4522,12 @@ packages:
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ picomatch@2.3.2:
+ resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
engines: {node: '>=8.6'}
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
engines: {node: '>=12'}
pify@4.0.1:
@@ -3925,16 +4546,12 @@ packages:
points-on-path@0.2.1:
resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
- postcss-selector-parser@7.1.1:
- resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
- engines: {node: '>=4'}
-
postcss@8.4.31:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.5.8:
- resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
+ postcss@8.5.10:
+ resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
engines: {node: ^10 || ^12 || >=14}
prettier@2.8.8:
@@ -3942,6 +4559,11 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
+ prettier@3.8.3:
+ resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==}
+ engines: {node: '>=14'}
+ hasBin: true
+
prism-media@1.3.5:
resolution: {integrity: sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==}
peerDependencies:
@@ -3971,16 +4593,10 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- react-dom@19.2.4:
- resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
+ react-dom@19.2.5:
+ resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==}
peerDependencies:
- react: ^19.2.4
-
- react-medium-image-zoom@5.4.1:
- resolution: {integrity: sha512-DD2iZYaCfAwiQGR8AN62r/cDJYoXhezlYJc5HY4TzBUGuGge43CptG0f7m0PEIM72aN6GfpjohvY1yYdtCJB7g==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react: ^19.2.5
react-remove-scroll-bar@2.3.8:
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
@@ -4012,14 +4628,18 @@ packages:
'@types/react':
optional: true
- react@19.2.4:
- resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ react@19.2.5:
+ resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==}
engines: {node: '>=0.10.0'}
read-yaml-file@1.1.0:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
readdirp@5.0.0:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
@@ -4087,17 +4707,17 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- robust-predicates@3.0.2:
- resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+ robust-predicates@3.0.3:
+ resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
- rolldown-plugin-dts@0.22.1:
- resolution: {integrity: sha512-5E0AiM5RSQhU6cjtkDFWH6laW4IrMu0j1Mo8x04Xo1ALHmaRMs9/7zej7P3RrryVHW/DdZAp85MA7Be55p0iUw==}
+ rolldown-plugin-dts@0.23.2:
+ resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==}
engines: {node: '>=20.19.0'}
peerDependencies:
'@ts-macro/tsc': ^0.3.6
- '@typescript/native-preview': '>=7.0.0-dev.20250601.1'
- rolldown: ^1.0.0-rc.3
- typescript: ^5.0.0
+ '@typescript/native-preview': '>=7.0.0-dev.20260325.1'
+ rolldown: ^1.0.0-rc.12
+ typescript: ^5.0.0 || ^6.0.0
vue-tsc: ~3.2.0
peerDependenciesMeta:
'@ts-macro/tsc':
@@ -4109,16 +4729,19 @@ packages:
vue-tsc:
optional: true
- rolldown@1.0.0-rc.3:
- resolution: {integrity: sha512-Po/YZECDOqVXjIXrtC5h++a5NLvKAQNrd9ggrIG3sbDfGO5BqTUsrI6l8zdniKRp3r5Tp/2JTrXqx4GIguFCMw==}
+ rolldown@1.0.0-rc.15:
+ resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- rollup@4.54.0:
- resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ rolldown@1.0.0-rc.16:
+ resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==}
+ engines: {node: ^20.19.0 || >=22.12.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==}
@@ -4141,19 +4764,19 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- semver@7.7.3:
- resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
hasBin: true
- seroval-plugins@1.5.1:
- resolution: {integrity: sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==}
+ seroval-plugins@1.5.2:
+ resolution: {integrity: sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg==}
engines: {node: '>=10'}
peerDependencies:
seroval: ^1.0
- seroval@1.5.1:
- resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==}
+ seroval@1.5.2:
+ resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==}
engines: {node: '>=10'}
server-only@0.0.1:
@@ -4203,11 +4826,16 @@ packages:
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ srvx@0.11.15:
+ resolution: {integrity: sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==}
+ engines: {node: '>=20.16.0'}
+ hasBin: true
+
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
- std-env@3.10.0:
- resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ std-env@4.0.0:
+ resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
@@ -4257,40 +4885,42 @@ packages:
tailwind-merge@3.5.0:
resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
- tailwindcss@4.2.1:
- resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==}
+ tailwindcss@4.2.2:
+ resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==}
- tapable@2.3.0:
- resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ tapable@2.3.2:
+ resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==}
engines: {node: '>=6'}
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
- tiny-invariant@1.3.3:
- resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
-
- tiny-warning@1.0.3:
- resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
-
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@1.0.2:
- resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ tinyexec@1.0.4:
+ resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
+ engines: {node: '>=18'}
+
+ tinyexec@1.1.1:
+ resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
engines: {node: '>=18'}
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ engines: {node: '>=12.0.0'}
+
tinypool@2.1.0:
resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
engines: {node: ^20.0.0 || >=22.0.0}
- tinyrainbow@3.0.3:
- resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
engines: {node: '>=14.0.0'}
to-regex-range@5.0.1:
@@ -4311,45 +4941,38 @@ packages:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'}
- ts-morph@27.0.2:
- resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==}
+ ts-morph@28.0.0:
+ resolution: {integrity: sha512-Wp3tnZ2bzwxyTZMtgWVzXDfm7lB1Drz+y9DmmYH/L702PQhPyVrp3pkou3yIz4qjS14GY9kcpmLiOOMvl8oG1g==}
ts-patch@3.3.0:
resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
hasBin: true
- tsconfck@3.1.6:
- resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==}
- engines: {node: ^18 || >=20}
- hasBin: true
- peerDependencies:
- typescript: ^5.0.0
- peerDependenciesMeta:
- typescript:
- optional: true
-
- tsdown@0.20.3:
- resolution: {integrity: sha512-qWOUXSbe4jN8JZEgrkc/uhJpC8VN2QpNu3eZkBWwNuTEjc/Ik1kcc54ycfcQ5QPRHeu9OQXaLfCI3o7pEJgB2w==}
+ tsdown@0.21.9:
+ resolution: {integrity: sha512-tZPv2zMaMnjj9H9h0SDqpSXa9YWVZWHlG46DnSgNTFX6aq001MSI8kuBzJumr/u099nWj+1v5S7rhbnHk5jCHA==}
engines: {node: '>=20.19.0'}
hasBin: true
peerDependencies:
'@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.21.9
+ '@tsdown/exe': 0.21.9
'@vitejs/devtools': '*'
publint: ^0.3.0
- typescript: ^5.0.0
- unplugin-lightningcss: ^0.4.0
+ typescript: ^5.0.0 || ^6.0.0
unplugin-unused: ^0.5.0
peerDependenciesMeta:
'@arethetypeswrong/core':
optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
'@vitejs/devtools':
optional: true
publint:
optional: true
typescript:
optional: true
- unplugin-lightningcss:
- optional: true
unplugin-unused:
optional: true
@@ -4361,64 +4984,30 @@ packages:
engines: {node: '>=18.0.0'}
hasBin: true
- turbo-darwin-64@2.8.5:
- resolution: {integrity: sha512-3wngnZrjRh6nXjNFURY9yKV7ysTF2gibpzkQjo4/c4eWjGt39q5p/A/wpxpnVBzyT1/auaPuzxJA98Sv1ZCOJg==}
- cpu: [x64]
- os: [darwin]
-
- turbo-darwin-arm64@2.8.5:
- resolution: {integrity: sha512-QAFH6X9h8M4G8uTVRBQFw6EN0LmvYYyNEA2EKJOEogyeULSUA04M+FzYuSScl6uS9P78fzOCC0hhzk/Eqo4GQg==}
- cpu: [arm64]
- os: [darwin]
-
- turbo-linux-64@2.8.5:
- resolution: {integrity: sha512-o01d5g3CZWavW6vP0KD8wJwdqoHaLuOAb3PvuWY95JEcyPRAKGKNxsTW2xNifY4UYENwSVktFZXZlIO2qnrEmg==}
- cpu: [x64]
- os: [linux]
-
- turbo-linux-arm64@2.8.5:
- resolution: {integrity: sha512-YSNVEUeFVGsA2pmPOokiximJOhKQnrg/M7JlJZzefjmp+j4Raj7YqLwK8pQRbAO4XDoojkf4tvmy+mRVW9O0gQ==}
- cpu: [arm64]
- os: [linux]
-
- turbo-windows-64@2.8.5:
- resolution: {integrity: sha512-X0MMT+IwWS+veX8h9/SO3+gkorcuGi0nu8CIg0kBhaqbC6Me0tChvHYQpkXj/+5qG5oFpjgkCSCip4/KYesZtg==}
- cpu: [x64]
- os: [win32]
-
- turbo-windows-arm64@2.8.5:
- resolution: {integrity: sha512-YBHZ1a0y8J0ITKv4TgujMFk04y84KimPDg8Br2lQaywrj3i2eRXLVuxhPi0Sqw+QuoqBVNKsHigxShA/w+rLLQ==}
- cpu: [arm64]
- os: [win32]
-
- turbo@2.8.5:
- resolution: {integrity: sha512-pUhV1czFZNGOwnwCLaO727uSDH4botIrhOb/AAFqzfi3x4eeRZoOcAjoidnXD/dwCAw0HJf3+Sy4c2e8SlQKxQ==}
+ turbo@2.9.6:
+ resolution: {integrity: sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg==}
hasBin: true
- typescript-transform-paths@3.5.6:
- resolution: {integrity: sha512-3eQTG6Ogt+pgPEh45uX2s9OwcfAVjWnyNO+osjYcOqYaWDVMIFUkqW8e0O1cOaVwdMqQFQf6alDT+76xmeS2Ag==}
- peerDependencies:
- typescript: '>=3.6.5'
-
- typescript@5.9.3:
- resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
engines: {node: '>=14.17'}
hasBin: true
ufo@1.6.3:
resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
- unconfig-core@7.4.2:
- resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==}
+ unconfig-core@7.5.0:
+ resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
- undici-types@7.16.0:
- resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+ undici-types@7.19.2:
+ resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
- undici-types@7.18.2:
- resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+ undici@7.24.8:
+ resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==}
+ engines: {node: '>=20.18.1'}
- undici@7.18.2:
- resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==}
+ undici@7.25.0:
+ resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==}
engines: {node: '>=20.18.1'}
unenv@2.0.0-rc.24:
@@ -4452,12 +5041,16 @@ packages:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
+ unplugin@2.3.11:
+ 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}
- unrun@0.2.27:
- resolution: {integrity: sha512-Mmur1UJpIbfxasLOhPRvox/QS4xBiDii71hMP7smfRthGcwFL2OAmYRgduLANOAU4LUkvVamuP+02U+c90jlrw==}
+ unrun@0.2.36:
+ resolution: {integrity: sha512-ICAGv44LHSKjCdI4B4rk99lJLHXBweutO4MUwu3cavMlYtXID0Tn5e1Kwe/Uj6BSAuHHXfi1JheFVCYhcXHfAg==}
engines: {node: '>=20.19.0'}
hasBin: true
peerDependencies:
@@ -4497,9 +5090,6 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
uuid@11.1.0:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
@@ -4513,20 +5103,16 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- vite-tsconfig-paths@6.1.0:
- resolution: {integrity: sha512-kpd3sY9glHIDaq4V/Tlc1Y8WaKtutoc3B525GHxEVKWX42FKfQsXvjFOemu1I8VIN8pNbrMLWVTbW79JaRUxKg==}
- peerDependencies:
- vite: '*'
-
- vite@7.3.0:
- resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==}
+ vite@8.0.8:
+ resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.0
+ esbuild: ^0.27.0 || ^0.28.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'
@@ -4537,12 +5123,14 @@ packages:
peerDependenciesMeta:
'@types/node':
optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
jiti:
optional: true
less:
optional: true
- lightningcss:
- optional: true
sass:
optional: true
sass-embedded:
@@ -4558,60 +5146,31 @@ packages:
yaml:
optional: true
- vite@7.3.1:
- resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
+ vitefu@1.1.3:
+ resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==}
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
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
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:
+ vite:
optional: true
- vitest@4.0.18:
- resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==}
+ vitest@4.1.4:
+ resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.18
- '@vitest/browser-preview': 4.0.18
- '@vitest/browser-webdriverio': 4.0.18
- '@vitest/ui': 4.0.18
+ '@vitest/browser-playwright': 4.1.4
+ '@vitest/browser-preview': 4.1.4
+ '@vitest/browser-webdriverio': 4.1.4
+ '@vitest/coverage-istanbul': 4.1.4
+ '@vitest/coverage-v8': 4.1.4
+ '@vitest/ui': 4.1.4
happy-dom: '*'
jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
@@ -4625,6 +5184,10 @@ packages:
optional: true
'@vitest/browser-webdriverio':
optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
'@vitest/ui':
optional: true
happy-dom:
@@ -4658,6 +5221,15 @@ packages:
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ whatwg-encoding@3.1.1:
+ resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+ engines: {node: '>=18'}
+ deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
+
+ whatwg-mimetype@4.0.0:
+ resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+ engines: {node: '>=18'}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -4673,17 +5245,17 @@ packages:
engines: {node: '>=8'}
hasBin: true
- workerd@1.20260210.0:
- resolution: {integrity: sha512-Sb0WXhrvf+XHQigP2trAxQnXo7wxZFC4PWnn6I7LhFxiTvzxvOAqMEiLkIz58wggRCb54T/KAA8hdjkTniR5FA==}
+ workerd@1.20260415.1:
+ resolution: {integrity: sha512-phyPjRnx+mQDfkhN9ENPioL1L0SdhYs4S0YmJK/xF9Oga+ykNfdSy1MHnsOj8yqnOV96zcVQMx32dJ0r3pq0jQ==}
engines: {node: '>=16'}
hasBin: true
- wrangler@4.64.0:
- resolution: {integrity: sha512-0PBiVEbshQT4Av/KLHbOAks4ioIKp/eAO7Xr2BgAX5v7cFYYgeOvudBrbtZa/hDDIA6858QuJnTQ8mI+cm8Vqw==}
- engines: {node: '>=20.0.0'}
+ wrangler@4.83.0:
+ resolution: {integrity: sha512-gw5g3LCiuAqVWxaoKY6+quE0HzAUEFb/FV3oAlNkE1ttd4XP3FiV91XDkkzUCcdqxS4WjhQvPhIDBNdhEi8P0A==}
+ engines: {node: '>=20.3.0'}
hasBin: true
peerDependencies:
- '@cloudflare/workers-types': ^4.20260210.0
+ '@cloudflare/workers-types': ^4.20260415.1
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -4700,8 +5272,8 @@ packages:
utf-8-validate:
optional: true
- ws@8.19.0:
- resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ ws@8.20.0:
+ resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -4712,20 +5284,22 @@ packages:
utf-8-validate:
optional: true
+ xmlbuilder2@4.0.3:
+ resolution: {integrity: sha512-bx8Q1STctnNaaDymWnkfQLKofs0mGNN7rLLapJlGuV3VlvegD7Ls4ggMjE3aUSWItCCzU0PEv45lI87iSigiCA==}
+ engines: {node: '>=20.0'}
+
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- yaml@2.8.2:
- resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
- engines: {node: '>= 14.6'}
- hasBin: true
-
youch-core@0.3.3:
resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
youch@4.1.0-beta.10:
resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==}
+ zod@3.25.76:
+ resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+
zod@4.3.6:
resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
@@ -4739,7 +5313,13 @@ snapshots:
'@antfu/install-pkg@1.1.0':
dependencies:
package-manager-detector: 1.6.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
'@babel/code-frame@7.29.0':
dependencies:
@@ -4755,8 +5335,8 @@ snapshots:
'@babel/generator': 7.29.1
'@babel/helper-compilation-targets': 7.28.6
'@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
- '@babel/helpers': 7.28.6
- '@babel/parser': 7.29.0
+ '@babel/helpers': 7.29.2
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
@@ -4771,16 +5351,16 @@ snapshots:
'@babel/generator@7.29.1':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
- '@babel/generator@8.0.0-rc.1':
+ '@babel/generator@8.0.0-rc.3':
dependencies:
- '@babel/parser': 8.0.0-rc.1
- '@babel/types': 8.0.0-rc.1
+ '@babel/parser': 8.0.0-rc.3
+ '@babel/types': 8.0.0-rc.3
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
'@types/jsesc': 2.5.1
@@ -4790,7 +5370,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.29.0
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.1
+ browserslist: 4.28.2
lru-cache: 5.1.1
semver: 6.3.1
@@ -4812,35 +5392,47 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-plugin-utils@7.28.6': {}
+
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-string-parser@8.0.0-rc.1': {}
+ '@babel/helper-string-parser@8.0.0-rc.3': {}
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/helper-validator-identifier@8.0.0-rc.1': {}
+ '@babel/helper-validator-identifier@8.0.0-rc.3': {}
'@babel/helper-validator-option@7.27.1': {}
- '@babel/helpers@7.28.6':
+ '@babel/helpers@7.29.2':
dependencies:
'@babel/template': 7.28.6
'@babel/types': 7.29.0
- '@babel/parser@7.29.0':
+ '@babel/parser@7.29.2':
dependencies:
'@babel/types': 7.29.0
- '@babel/parser@8.0.0-rc.1':
+ '@babel/parser@8.0.0-rc.3':
+ dependencies:
+ '@babel/types': 8.0.0-rc.3
+
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
dependencies:
- '@babel/types': 8.0.0-rc.1
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/runtime@7.28.6': {}
+ '@babel/runtime@7.29.2': {}
'@babel/template@7.28.6':
dependencies:
'@babel/code-frame': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@babel/traverse@7.29.0':
@@ -4848,7 +5440,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/generator': 7.29.1
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/types': 7.29.0
debug: 4.4.3
@@ -4860,31 +5452,31 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@babel/types@8.0.0-rc.1':
+ '@babel/types@8.0.0-rc.3':
dependencies:
- '@babel/helper-string-parser': 8.0.0-rc.1
- '@babel/helper-validator-identifier': 8.0.0-rc.1
+ '@babel/helper-string-parser': 8.0.0-rc.3
+ '@babel/helper-validator-identifier': 8.0.0-rc.3
'@bcoe/v8-coverage@1.0.2': {}
'@braintree/sanitize-url@7.1.2': {}
- '@buape/carbon@0.14.0(hono@4.11.3)':
+ '@buape/carbon@0.16.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
dependencies:
- '@types/node': 25.2.3
- discord-api-types: 0.38.37
+ '@types/node': 25.6.0
+ discord-api-types: 0.38.45
optionalDependencies:
- '@cloudflare/workers-types': 4.20260120.0
- '@discordjs/voice': 0.19.0
- '@hono/node-server': 1.19.9(hono@4.11.3)
- '@types/bun': 1.3.6
+ '@cloudflare/workers-types': 4.20260405.1
+ '@discordjs/voice': 0.19.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ '@types/bun': 1.3.11
'@types/ws': 8.18.1
- ws: 8.19.0
+ ws: 8.20.0
transitivePeerDependencies:
- '@discordjs/opus'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
- bufferutil
- ffmpeg-static
- - hono
- node-opus
- opusscript
- utf-8-validate
@@ -4903,7 +5495,7 @@ snapshots:
outdent: 0.5.0
prettier: 2.8.8
resolve-from: 5.0.0
- semver: 7.7.3
+ semver: 7.7.4
'@changesets/assemble-release-plan@6.0.9':
dependencies:
@@ -4912,13 +5504,13 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
- semver: 7.7.3
+ semver: 7.7.4
'@changesets/changelog-git@0.2.1':
dependencies:
'@changesets/types': 6.1.0
- '@changesets/cli@2.30.0(@types/node@25.2.3)':
+ '@changesets/cli@2.30.0(@types/node@25.6.0)':
dependencies:
'@changesets/apply-release-plan': 7.1.0
'@changesets/assemble-release-plan': 6.0.9
@@ -4934,7 +5526,7 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@changesets/write': 0.4.0
- '@inquirer/external-editor': 1.0.3(@types/node@25.2.3)
+ '@inquirer/external-editor': 1.0.3(@types/node@25.6.0)
'@manypkg/get-packages': 1.1.3
ansi-colors: 4.1.3
enquirer: 2.4.1
@@ -4943,7 +5535,7 @@ snapshots:
package-manager-detector: 0.2.11
picocolors: 1.1.1
resolve-from: 5.0.0
- semver: 7.7.3
+ semver: 7.7.4
spawndamnit: 3.0.1
term-size: 2.2.1
transitivePeerDependencies:
@@ -4969,7 +5561,7 @@ snapshots:
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
picocolors: 1.1.1
- semver: 7.7.3
+ semver: 7.7.4
'@changesets/get-release-plan@4.0.15':
dependencies:
@@ -5051,31 +5643,31 @@ snapshots:
'@cloudflare/kv-asset-handler@0.4.2': {}
- '@cloudflare/unenv-preset@2.12.1(unenv@2.0.0-rc.24)(workerd@1.20260210.0)':
+ '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260415.1)':
dependencies:
unenv: 2.0.0-rc.24
optionalDependencies:
- workerd: 1.20260210.0
+ workerd: 1.20260415.1
- '@cloudflare/workerd-darwin-64@1.20260210.0':
+ '@cloudflare/workerd-darwin-64@1.20260415.1':
optional: true
- '@cloudflare/workerd-darwin-arm64@1.20260210.0':
+ '@cloudflare/workerd-darwin-arm64@1.20260415.1':
optional: true
- '@cloudflare/workerd-linux-64@1.20260210.0':
+ '@cloudflare/workerd-linux-64@1.20260415.1':
optional: true
- '@cloudflare/workerd-linux-arm64@1.20260210.0':
+ '@cloudflare/workerd-linux-arm64@1.20260415.1':
optional: true
- '@cloudflare/workerd-windows-64@1.20260210.0':
+ '@cloudflare/workerd-windows-64@1.20260415.1':
optional: true
- '@cloudflare/workers-types@4.20260120.0':
+ '@cloudflare/workers-types@4.20260405.1':
optional: true
- '@cloudflare/workers-types@4.20260210.0': {}
+ '@cloudflare/workers-types@4.20260417.1': {}
'@commander-js/extra-typings@14.0.0(commander@14.0.3)':
dependencies:
@@ -5085,15 +5677,18 @@ snapshots:
dependencies:
'@jridgewell/trace-mapping': 0.3.9
- '@discordjs/voice@0.19.0':
+ '@discordjs/voice@0.19.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
dependencies:
+ '@snazzah/davey': 0.1.11(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
'@types/ws': 8.18.1
- discord-api-types: 0.38.37
+ discord-api-types: 0.38.45
prism-media: 1.3.5
tslib: 2.8.1
- ws: 8.19.0
+ ws: 8.20.0
transitivePeerDependencies:
- '@discordjs/opus'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
- bufferutil
- ffmpeg-static
- node-opus
@@ -5101,178 +5696,256 @@ snapshots:
- utf-8-validate
optional: true
- '@emnapi/core@1.7.1':
+ '@emnapi/core@1.9.2':
dependencies:
- '@emnapi/wasi-threads': 1.1.0
+ '@emnapi/wasi-threads': 1.2.1
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.7.1':
+ '@emnapi/runtime@1.9.2':
dependencies:
tslib: 2.8.1
optional: true
- '@emnapi/wasi-threads@1.1.0':
+ '@emnapi/wasi-threads@1.2.1':
dependencies:
tslib: 2.8.1
optional: true
- '@esbuild/aix-ppc64@0.27.2':
+ '@esbuild/aix-ppc64@0.27.3':
optional: true
- '@esbuild/aix-ppc64@0.27.3':
+ '@esbuild/aix-ppc64@0.27.7':
optional: true
- '@esbuild/android-arm64@0.27.2':
+ '@esbuild/aix-ppc64@0.28.0':
optional: true
'@esbuild/android-arm64@0.27.3':
optional: true
- '@esbuild/android-arm@0.27.2':
+ '@esbuild/android-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/android-arm64@0.28.0':
optional: true
'@esbuild/android-arm@0.27.3':
optional: true
- '@esbuild/android-x64@0.27.2':
+ '@esbuild/android-arm@0.27.7':
+ optional: true
+
+ '@esbuild/android-arm@0.28.0':
optional: true
'@esbuild/android-x64@0.27.3':
optional: true
- '@esbuild/darwin-arm64@0.27.2':
+ '@esbuild/android-x64@0.27.7':
+ optional: true
+
+ '@esbuild/android-x64@0.28.0':
optional: true
'@esbuild/darwin-arm64@0.27.3':
optional: true
- '@esbuild/darwin-x64@0.27.2':
+ '@esbuild/darwin-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.28.0':
optional: true
'@esbuild/darwin-x64@0.27.3':
optional: true
- '@esbuild/freebsd-arm64@0.27.2':
+ '@esbuild/darwin-x64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-x64@0.28.0':
optional: true
'@esbuild/freebsd-arm64@0.27.3':
optional: true
- '@esbuild/freebsd-x64@0.27.2':
+ '@esbuild/freebsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.28.0':
optional: true
'@esbuild/freebsd-x64@0.27.3':
optional: true
- '@esbuild/linux-arm64@0.27.2':
+ '@esbuild/freebsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.28.0':
optional: true
'@esbuild/linux-arm64@0.27.3':
optional: true
- '@esbuild/linux-arm@0.27.2':
+ '@esbuild/linux-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-arm64@0.28.0':
optional: true
'@esbuild/linux-arm@0.27.3':
optional: true
- '@esbuild/linux-ia32@0.27.2':
+ '@esbuild/linux-arm@0.27.7':
+ optional: true
+
+ '@esbuild/linux-arm@0.28.0':
optional: true
'@esbuild/linux-ia32@0.27.3':
optional: true
- '@esbuild/linux-loong64@0.27.2':
+ '@esbuild/linux-ia32@0.27.7':
+ optional: true
+
+ '@esbuild/linux-ia32@0.28.0':
optional: true
'@esbuild/linux-loong64@0.27.3':
optional: true
- '@esbuild/linux-mips64el@0.27.2':
+ '@esbuild/linux-loong64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-loong64@0.28.0':
optional: true
'@esbuild/linux-mips64el@0.27.3':
optional: true
- '@esbuild/linux-ppc64@0.27.2':
+ '@esbuild/linux-mips64el@0.27.7':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.28.0':
optional: true
'@esbuild/linux-ppc64@0.27.3':
optional: true
- '@esbuild/linux-riscv64@0.27.2':
+ '@esbuild/linux-ppc64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.28.0':
optional: true
'@esbuild/linux-riscv64@0.27.3':
optional: true
- '@esbuild/linux-s390x@0.27.2':
+ '@esbuild/linux-riscv64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.28.0':
optional: true
'@esbuild/linux-s390x@0.27.3':
optional: true
- '@esbuild/linux-x64@0.27.2':
+ '@esbuild/linux-s390x@0.27.7':
+ optional: true
+
+ '@esbuild/linux-s390x@0.28.0':
optional: true
'@esbuild/linux-x64@0.27.3':
optional: true
- '@esbuild/netbsd-arm64@0.27.2':
+ '@esbuild/linux-x64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-x64@0.28.0':
optional: true
'@esbuild/netbsd-arm64@0.27.3':
optional: true
- '@esbuild/netbsd-x64@0.27.2':
+ '@esbuild/netbsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.28.0':
optional: true
'@esbuild/netbsd-x64@0.27.3':
optional: true
- '@esbuild/openbsd-arm64@0.27.2':
+ '@esbuild/netbsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.28.0':
optional: true
'@esbuild/openbsd-arm64@0.27.3':
optional: true
- '@esbuild/openbsd-x64@0.27.2':
+ '@esbuild/openbsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.28.0':
optional: true
'@esbuild/openbsd-x64@0.27.3':
optional: true
- '@esbuild/openharmony-arm64@0.27.2':
+ '@esbuild/openbsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.28.0':
optional: true
'@esbuild/openharmony-arm64@0.27.3':
optional: true
- '@esbuild/sunos-x64@0.27.2':
+ '@esbuild/openharmony-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.28.0':
optional: true
'@esbuild/sunos-x64@0.27.3':
optional: true
- '@esbuild/win32-arm64@0.27.2':
+ '@esbuild/sunos-x64@0.27.7':
+ optional: true
+
+ '@esbuild/sunos-x64@0.28.0':
optional: true
'@esbuild/win32-arm64@0.27.3':
optional: true
- '@esbuild/win32-ia32@0.27.2':
+ '@esbuild/win32-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/win32-arm64@0.28.0':
optional: true
'@esbuild/win32-ia32@0.27.3':
optional: true
- '@esbuild/win32-x64@0.27.2':
+ '@esbuild/win32-ia32@0.27.7':
+ optional: true
+
+ '@esbuild/win32-ia32@0.28.0':
optional: true
'@esbuild/win32-x64@0.27.3':
optional: true
+ '@esbuild/win32-x64@0.27.7':
+ optional: true
+
+ '@esbuild/win32-x64@0.28.0':
+ optional: true
+
'@floating-ui/core@1.7.5':
dependencies:
'@floating-ui/utils': 0.2.11
@@ -5282,33 +5955,18 @@ snapshots:
'@floating-ui/core': 1.7.5
'@floating-ui/utils': 0.2.11
- '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@floating-ui/dom': 1.7.6
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
'@floating-ui/utils@0.2.11': {}
- '@formatjs/fast-memoize@3.1.0':
- dependencies:
- tslib: 2.8.1
-
- '@formatjs/intl-localematcher@0.8.1':
- dependencies:
- '@formatjs/fast-memoize': 3.1.0
- tslib: 2.8.1
-
- '@fumadocs/tailwind@0.0.3(tailwindcss@4.2.1)':
- dependencies:
- postcss-selector-parser: 7.1.1
+ '@fumadocs/tailwind@0.0.5(@tailwindcss/oxide@4.2.2)(tailwindcss@4.2.2)':
optionalDependencies:
- tailwindcss: 4.2.1
-
- '@hono/node-server@1.19.9(hono@4.11.3)':
- dependencies:
- hono: 4.11.3
- optional: true
+ '@tailwindcss/oxide': 4.2.2
+ tailwindcss: 4.2.2
'@iconify/types@2.0.0': {}
@@ -5316,9 +5974,9 @@ snapshots:
dependencies:
'@antfu/install-pkg': 1.1.0
'@iconify/types': 2.0.0
- mlly: 1.8.1
+ mlly: 1.8.2
- '@img/colour@1.0.0': {}
+ '@img/colour@1.1.0': {}
'@img/sharp-darwin-arm64@0.34.5':
optionalDependencies:
@@ -5402,7 +6060,7 @@ snapshots:
'@img/sharp-wasm32@0.34.5':
dependencies:
- '@emnapi/runtime': 1.7.1
+ '@emnapi/runtime': 1.9.2
optional: true
'@img/sharp-win32-arm64@0.34.5':
@@ -5414,12 +6072,12 @@ snapshots:
'@img/sharp-win32-x64@0.34.5':
optional: true
- '@inquirer/external-editor@1.0.3(@types/node@25.2.3)':
+ '@inquirer/external-editor@1.0.3(@types/node@25.6.0)':
dependencies:
chardet: 2.1.1
iconv-lite: 0.7.2
optionalDependencies:
- '@types/node': 25.2.3
+ '@types/node': 25.6.0
'@jridgewell/gen-mapping@0.3.13':
dependencies:
@@ -5447,14 +6105,14 @@ snapshots:
'@manypkg/find-root@1.1.0':
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
'@types/node': 12.20.55
find-up: 4.1.0
fs-extra: 8.1.0
'@manypkg/get-packages@1.1.3':
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
'@changesets/types': 4.1.0
'@manypkg/find-root': 1.1.0
fs-extra: 8.1.0
@@ -5491,7 +6149,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@mermaid-js/parser@1.0.1':
+ '@mermaid-js/parser@1.1.0':
dependencies:
langium: 4.2.1
@@ -5508,39 +6166,39 @@ snapshots:
'@messageformat/parser@5.1.1':
dependencies:
- moo: 0.5.2
+ moo: 0.5.3
- '@napi-rs/wasm-runtime@1.1.1':
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
dependencies:
- '@emnapi/core': 1.7.1
- '@emnapi/runtime': 1.7.1
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
'@tybys/wasm-util': 0.10.1
optional: true
- '@next/env@16.1.6': {}
+ '@next/env@16.2.4': {}
- '@next/swc-darwin-arm64@16.1.6':
+ '@next/swc-darwin-arm64@16.2.4':
optional: true
- '@next/swc-darwin-x64@16.1.6':
+ '@next/swc-darwin-x64@16.2.4':
optional: true
- '@next/swc-linux-arm64-gnu@16.1.6':
+ '@next/swc-linux-arm64-gnu@16.2.4':
optional: true
- '@next/swc-linux-arm64-musl@16.1.6':
+ '@next/swc-linux-arm64-musl@16.2.4':
optional: true
- '@next/swc-linux-x64-gnu@16.1.6':
+ '@next/swc-linux-x64-gnu@16.2.4':
optional: true
- '@next/swc-linux-x64-musl@16.1.6':
+ '@next/swc-linux-x64-musl@16.2.4':
optional: true
- '@next/swc-win32-arm64-msvc@16.1.6':
+ '@next/swc-win32-arm64-msvc@16.2.4':
optional: true
- '@next/swc-win32-x64-msvc@16.1.6':
+ '@next/swc-win32-x64-msvc@16.2.4':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -5555,122 +6213,141 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
+ '@oozcitak/dom@2.0.2':
+ dependencies:
+ '@oozcitak/infra': 2.0.2
+ '@oozcitak/url': 3.0.0
+ '@oozcitak/util': 10.0.0
+
+ '@oozcitak/infra@2.0.2':
+ dependencies:
+ '@oozcitak/util': 10.0.0
+
+ '@oozcitak/url@3.0.0':
+ dependencies:
+ '@oozcitak/infra': 2.0.2
+ '@oozcitak/util': 10.0.0
+
+ '@oozcitak/util@10.0.0': {}
+
'@orama/orama@3.1.18': {}
- '@oxc-project/types@0.112.0': {}
+ '@oxc-project/types@0.124.0': {}
- '@oxfmt/binding-android-arm-eabi@0.36.0':
+ '@oxc-project/types@0.126.0': {}
+
+ '@oxfmt/binding-android-arm-eabi@0.45.0':
optional: true
- '@oxfmt/binding-android-arm64@0.36.0':
+ '@oxfmt/binding-android-arm64@0.45.0':
optional: true
- '@oxfmt/binding-darwin-arm64@0.36.0':
+ '@oxfmt/binding-darwin-arm64@0.45.0':
optional: true
- '@oxfmt/binding-darwin-x64@0.36.0':
+ '@oxfmt/binding-darwin-x64@0.45.0':
optional: true
- '@oxfmt/binding-freebsd-x64@0.36.0':
+ '@oxfmt/binding-freebsd-x64@0.45.0':
optional: true
- '@oxfmt/binding-linux-arm-gnueabihf@0.36.0':
+ '@oxfmt/binding-linux-arm-gnueabihf@0.45.0':
optional: true
- '@oxfmt/binding-linux-arm-musleabihf@0.36.0':
+ '@oxfmt/binding-linux-arm-musleabihf@0.45.0':
optional: true
- '@oxfmt/binding-linux-arm64-gnu@0.36.0':
+ '@oxfmt/binding-linux-arm64-gnu@0.45.0':
optional: true
- '@oxfmt/binding-linux-arm64-musl@0.36.0':
+ '@oxfmt/binding-linux-arm64-musl@0.45.0':
optional: true
- '@oxfmt/binding-linux-ppc64-gnu@0.36.0':
+ '@oxfmt/binding-linux-ppc64-gnu@0.45.0':
optional: true
- '@oxfmt/binding-linux-riscv64-gnu@0.36.0':
+ '@oxfmt/binding-linux-riscv64-gnu@0.45.0':
optional: true
- '@oxfmt/binding-linux-riscv64-musl@0.36.0':
+ '@oxfmt/binding-linux-riscv64-musl@0.45.0':
optional: true
- '@oxfmt/binding-linux-s390x-gnu@0.36.0':
+ '@oxfmt/binding-linux-s390x-gnu@0.45.0':
optional: true
- '@oxfmt/binding-linux-x64-gnu@0.36.0':
+ '@oxfmt/binding-linux-x64-gnu@0.45.0':
optional: true
- '@oxfmt/binding-linux-x64-musl@0.36.0':
+ '@oxfmt/binding-linux-x64-musl@0.45.0':
optional: true
- '@oxfmt/binding-openharmony-arm64@0.36.0':
+ '@oxfmt/binding-openharmony-arm64@0.45.0':
optional: true
- '@oxfmt/binding-win32-arm64-msvc@0.36.0':
+ '@oxfmt/binding-win32-arm64-msvc@0.45.0':
optional: true
- '@oxfmt/binding-win32-ia32-msvc@0.36.0':
+ '@oxfmt/binding-win32-ia32-msvc@0.45.0':
optional: true
- '@oxfmt/binding-win32-x64-msvc@0.36.0':
+ '@oxfmt/binding-win32-x64-msvc@0.45.0':
optional: true
- '@oxlint/binding-android-arm-eabi@1.51.0':
+ '@oxlint/binding-android-arm-eabi@1.60.0':
optional: true
- '@oxlint/binding-android-arm64@1.51.0':
+ '@oxlint/binding-android-arm64@1.60.0':
optional: true
- '@oxlint/binding-darwin-arm64@1.51.0':
+ '@oxlint/binding-darwin-arm64@1.60.0':
optional: true
- '@oxlint/binding-darwin-x64@1.51.0':
+ '@oxlint/binding-darwin-x64@1.60.0':
optional: true
- '@oxlint/binding-freebsd-x64@1.51.0':
+ '@oxlint/binding-freebsd-x64@1.60.0':
optional: true
- '@oxlint/binding-linux-arm-gnueabihf@1.51.0':
+ '@oxlint/binding-linux-arm-gnueabihf@1.60.0':
optional: true
- '@oxlint/binding-linux-arm-musleabihf@1.51.0':
+ '@oxlint/binding-linux-arm-musleabihf@1.60.0':
optional: true
- '@oxlint/binding-linux-arm64-gnu@1.51.0':
+ '@oxlint/binding-linux-arm64-gnu@1.60.0':
optional: true
- '@oxlint/binding-linux-arm64-musl@1.51.0':
+ '@oxlint/binding-linux-arm64-musl@1.60.0':
optional: true
- '@oxlint/binding-linux-ppc64-gnu@1.51.0':
+ '@oxlint/binding-linux-ppc64-gnu@1.60.0':
optional: true
- '@oxlint/binding-linux-riscv64-gnu@1.51.0':
+ '@oxlint/binding-linux-riscv64-gnu@1.60.0':
optional: true
- '@oxlint/binding-linux-riscv64-musl@1.51.0':
+ '@oxlint/binding-linux-riscv64-musl@1.60.0':
optional: true
- '@oxlint/binding-linux-s390x-gnu@1.51.0':
+ '@oxlint/binding-linux-s390x-gnu@1.60.0':
optional: true
- '@oxlint/binding-linux-x64-gnu@1.51.0':
+ '@oxlint/binding-linux-x64-gnu@1.60.0':
optional: true
- '@oxlint/binding-linux-x64-musl@1.51.0':
+ '@oxlint/binding-linux-x64-musl@1.60.0':
optional: true
- '@oxlint/binding-openharmony-arm64@1.51.0':
+ '@oxlint/binding-openharmony-arm64@1.60.0':
optional: true
- '@oxlint/binding-win32-arm64-msvc@1.51.0':
+ '@oxlint/binding-win32-arm64-msvc@1.60.0':
optional: true
- '@oxlint/binding-win32-ia32-msvc@1.51.0':
+ '@oxlint/binding-win32-ia32-msvc@1.60.0':
optional: true
- '@oxlint/binding-win32-x64-msvc@1.51.0':
+ '@oxlint/binding-win32-x64-msvc@1.60.0':
optional: true
'@poppinss/colors@4.1.6':
@@ -5693,466 +6370,463 @@ snapshots:
'@radix-ui/primitive@1.1.3': {}
- '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
aria-hidden: 1.2.6
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
aria-hidden: 1.2.6
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
- dependencies:
- '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4)
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/rect': 1.1.1
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
- '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/rect': 1.1.1
- react: 19.2.4
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)':
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- react: 19.2.4
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
- '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/rect@1.1.1': {}
- '@rolldown/binding-android-arm64@1.0.0-rc.3':
- optional: true
-
- '@rolldown/binding-darwin-arm64@1.0.0-rc.3':
+ '@rolldown/binding-android-arm64@1.0.0-rc.15':
optional: true
- '@rolldown/binding-darwin-x64@1.0.0-rc.3':
+ '@rolldown/binding-android-arm64@1.0.0-rc.16':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.0-rc.3':
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.15':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3':
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.16':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3':
+ '@rolldown/binding-darwin-x64@1.0.0-rc.15':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3':
+ '@rolldown/binding-darwin-x64@1.0.0-rc.16':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3':
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.15':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.3':
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.16':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.3':
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15':
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.3':
- dependencies:
- '@napi-rs/wasm-runtime': 1.1.1
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16':
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3':
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3':
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16':
optional: true
- '@rolldown/pluginutils@1.0.0-rc.3': {}
-
- '@rollup/rollup-android-arm-eabi@4.54.0':
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15':
optional: true
- '@rollup/rollup-android-arm64@4.54.0':
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16':
optional: true
- '@rollup/rollup-darwin-arm64@4.54.0':
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15':
optional: true
- '@rollup/rollup-darwin-x64@4.54.0':
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16':
optional: true
- '@rollup/rollup-freebsd-arm64@4.54.0':
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15':
optional: true
- '@rollup/rollup-freebsd-x64@4.54.0':
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.54.0':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.54.0':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.54.0':
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.15':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.54.0':
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.16':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.54.0':
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.15':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.54.0':
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.16':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.54.0':
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.15':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.54.0':
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.16':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.54.0':
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.54.0':
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16':
optional: true
- '@rollup/rollup-linux-x64-musl@4.54.0':
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15':
optional: true
- '@rollup/rollup-openharmony-arm64@4.54.0':
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.54.0':
- optional: true
+ '@rolldown/pluginutils@1.0.0-beta.40': {}
- '@rollup/rollup-win32-ia32-msvc@4.54.0':
- optional: true
+ '@rolldown/pluginutils@1.0.0-rc.15': {}
- '@rollup/rollup-win32-x64-gnu@4.54.0':
- optional: true
+ '@rolldown/pluginutils@1.0.0-rc.16': {}
- '@rollup/rollup-win32-x64-msvc@4.54.0':
- optional: true
+ '@rolldown/pluginutils@1.0.0-rc.7': {}
'@sapphire/snowflake@3.5.5': {}
@@ -6168,7 +6842,7 @@ snapshots:
dependencies:
'@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 4.3.4
+ oniguruma-to-es: 4.3.5
'@shikijs/engine-oniguruma@4.0.2':
dependencies:
@@ -6185,15 +6859,6 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- '@shikijs/rehype@4.0.2':
- dependencies:
- '@shikijs/types': 4.0.2
- '@types/hast': 3.0.4
- hast-util-to-string: 3.0.1
- shiki: 4.0.2
- unified: 11.0.5
- unist-util-visit: 5.1.0
-
'@shikijs/themes@4.0.2':
dependencies:
'@shikijs/types': 4.0.2
@@ -6210,9 +6875,77 @@ snapshots:
'@shikijs/vscode-textmate@10.0.2': {}
- '@sindresorhus/is@7.2.0': {}
+ '@sindresorhus/is@7.2.0': {}
+
+ '@snazzah/davey-android-arm-eabi@0.1.11':
+ optional: true
+
+ '@snazzah/davey-android-arm64@0.1.11':
+ optional: true
+
+ '@snazzah/davey-darwin-arm64@0.1.11':
+ optional: true
+
+ '@snazzah/davey-darwin-x64@0.1.11':
+ optional: true
+
+ '@snazzah/davey-freebsd-x64@0.1.11':
+ optional: true
+
+ '@snazzah/davey-linux-arm-gnueabihf@0.1.11':
+ optional: true
+
+ '@snazzah/davey-linux-arm64-gnu@0.1.11':
+ optional: true
+
+ '@snazzah/davey-linux-arm64-musl@0.1.11':
+ optional: true
+
+ '@snazzah/davey-linux-x64-gnu@0.1.11':
+ optional: true
+
+ '@snazzah/davey-linux-x64-musl@0.1.11':
+ optional: true
+
+ '@snazzah/davey-wasm32-wasi@0.1.11(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
+
+ '@snazzah/davey-win32-arm64-msvc@0.1.11':
+ optional: true
+
+ '@snazzah/davey-win32-ia32-msvc@0.1.11':
+ optional: true
+
+ '@snazzah/davey-win32-x64-msvc@0.1.11':
+ optional: true
+
+ '@snazzah/davey@0.1.11(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
+ optionalDependencies:
+ '@snazzah/davey-android-arm-eabi': 0.1.11
+ '@snazzah/davey-android-arm64': 0.1.11
+ '@snazzah/davey-darwin-arm64': 0.1.11
+ '@snazzah/davey-darwin-x64': 0.1.11
+ '@snazzah/davey-freebsd-x64': 0.1.11
+ '@snazzah/davey-linux-arm-gnueabihf': 0.1.11
+ '@snazzah/davey-linux-arm64-gnu': 0.1.11
+ '@snazzah/davey-linux-arm64-musl': 0.1.11
+ '@snazzah/davey-linux-x64-gnu': 0.1.11
+ '@snazzah/davey-linux-x64-musl': 0.1.11
+ '@snazzah/davey-wasm32-wasi': 0.1.11(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ '@snazzah/davey-win32-arm64-msvc': 0.1.11
+ '@snazzah/davey-win32-ia32-msvc': 0.1.11
+ '@snazzah/davey-win32-x64-msvc': 0.1.11
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
- '@speed-highlight/core@1.2.12': {}
+ '@speed-highlight/core@1.2.15': {}
'@standard-schema/spec@1.1.0': {}
@@ -6220,74 +6953,74 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@tailwindcss/node@4.2.1':
+ '@tailwindcss/node@4.2.2':
dependencies:
'@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.20.0
+ enhanced-resolve: 5.20.1
jiti: 2.6.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
magic-string: 0.30.21
source-map-js: 1.2.1
- tailwindcss: 4.2.1
+ tailwindcss: 4.2.2
- '@tailwindcss/oxide-android-arm64@4.2.1':
+ '@tailwindcss/oxide-android-arm64@4.2.2':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.2.1':
+ '@tailwindcss/oxide-darwin-arm64@4.2.2':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.2.1':
+ '@tailwindcss/oxide-darwin-x64@4.2.2':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.2.1':
+ '@tailwindcss/oxide-freebsd-x64@4.2.2':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.2.1':
+ '@tailwindcss/oxide-linux-x64-musl@4.2.2':
optional: true
- '@tailwindcss/oxide-wasm32-wasi@4.2.1':
+ '@tailwindcss/oxide-wasm32-wasi@4.2.2':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
optional: true
- '@tailwindcss/oxide@4.2.1':
+ '@tailwindcss/oxide@4.2.2':
optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.2.1
- '@tailwindcss/oxide-darwin-arm64': 4.2.1
- '@tailwindcss/oxide-darwin-x64': 4.2.1
- '@tailwindcss/oxide-freebsd-x64': 4.2.1
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1
- '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1
- '@tailwindcss/oxide-linux-arm64-musl': 4.2.1
- '@tailwindcss/oxide-linux-x64-gnu': 4.2.1
- '@tailwindcss/oxide-linux-x64-musl': 4.2.1
- '@tailwindcss/oxide-wasm32-wasi': 4.2.1
- '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1
- '@tailwindcss/oxide-win32-x64-msvc': 4.2.1
-
- '@tailwindcss/postcss@4.2.1':
+ '@tailwindcss/oxide-android-arm64': 4.2.2
+ '@tailwindcss/oxide-darwin-arm64': 4.2.2
+ '@tailwindcss/oxide-darwin-x64': 4.2.2
+ '@tailwindcss/oxide-freebsd-x64': 4.2.2
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.2
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.2
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.2
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.2
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.2
+
+ '@tailwindcss/postcss@4.2.2':
dependencies:
'@alloc/quick-lru': 5.2.0
- '@tailwindcss/node': 4.2.1
- '@tailwindcss/oxide': 4.2.1
- postcss: 8.5.8
- tailwindcss: 4.2.1
+ '@tailwindcss/node': 4.2.2
+ '@tailwindcss/oxide': 4.2.2
+ postcss: 8.5.10
+ tailwindcss: 4.2.2
'@takumi-rs/core-darwin-arm64@0.71.7':
optional: true
@@ -6334,48 +7067,245 @@ snapshots:
'@takumi-rs/wasm@0.71.7': {}
- '@tanstack/history@1.161.4':
- optional: true
+ '@tanstack/history@1.161.6': {}
- '@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@tanstack/react-router-devtools@1.166.13(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@tanstack/router-core@1.168.15)(csstype@3.2.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@tanstack/history': 1.161.4
- '@tanstack/react-store': 0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-core': 1.166.7
- isbot: 5.1.36
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
- optional: true
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/router-devtools-core': 1.167.3(@tanstack/router-core@1.168.15)(csstype@3.2.3)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ optionalDependencies:
+ '@tanstack/router-core': 1.168.15
+ transitivePeerDependencies:
+ - csstype
+
+ '@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@tanstack/history': 1.161.6
+ '@tanstack/react-store': 0.9.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/router-core': 1.168.15
+ isbot: 5.1.38
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@tanstack/react-start-client@1.166.39(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/start-client-core': 1.167.17
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+
+ '@tanstack/react-start-rsc@0.0.20(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))':
+ dependencies:
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/react-start-server': 1.166.40(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/start-client-core': 1.167.17
+ '@tanstack/start-fn-stubs': 1.161.6
+ '@tanstack/start-plugin-core': 1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ '@tanstack/start-server-core': 1.167.19
+ '@tanstack/start-storage-context': 1.166.29
+ pathe: 2.0.3
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ transitivePeerDependencies:
+ - '@rsbuild/core'
+ - crossws
+ - supports-color
+ - vite
+ - vite-plugin-solid
+ - webpack
+
+ '@tanstack/react-start-server@1.166.40(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
+ dependencies:
+ '@tanstack/history': 1.161.6
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/start-client-core': 1.167.17
+ '@tanstack/start-server-core': 1.167.19
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ transitivePeerDependencies:
+ - crossws
+
+ '@tanstack/react-start@1.167.41(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))':
+ dependencies:
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/react-start-client': 1.166.39(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/react-start-rsc': 0.0.20(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ '@tanstack/react-start-server': 1.166.40(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/start-client-core': 1.167.17
+ '@tanstack/start-plugin-core': 1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ '@tanstack/start-server-core': 1.167.19
+ pathe: 2.0.3
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
+ transitivePeerDependencies:
+ - '@rsbuild/core'
+ - crossws
+ - supports-color
+ - vite-plugin-solid
+ - webpack
- '@tanstack/react-store@0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@tanstack/react-store@0.9.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
- '@tanstack/store': 0.9.2
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- use-sync-external-store: 1.6.0(react@19.2.4)
- optional: true
+ '@tanstack/store': 0.9.3
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ use-sync-external-store: 1.6.0(react@19.2.5)
- '@tanstack/router-core@1.166.7':
+ '@tanstack/router-core@1.168.15':
dependencies:
- '@tanstack/history': 1.161.4
- '@tanstack/store': 0.9.2
- cookie-es: 2.0.0
- seroval: 1.5.1
- seroval-plugins: 1.5.1(seroval@1.5.1)
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
- optional: true
+ '@tanstack/history': 1.161.6
+ cookie-es: 3.1.1
+ seroval: 1.5.2
+ seroval-plugins: 1.5.2(seroval@1.5.2)
- '@tanstack/store@0.9.2':
- optional: true
+ '@tanstack/router-devtools-core@1.167.3(@tanstack/router-core@1.168.15)(csstype@3.2.3)':
+ dependencies:
+ '@tanstack/router-core': 1.168.15
+ clsx: 2.1.1
+ goober: 2.1.18(csstype@3.2.3)
+ optionalDependencies:
+ csstype: 3.2.3
+
+ '@tanstack/router-generator@1.166.32':
+ dependencies:
+ '@babel/types': 7.29.0
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/virtual-file-routes': 1.161.7
+ magic-string: 0.30.21
+ prettier: 3.8.3
+ tsx: 4.21.0
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tanstack/router-plugin@1.167.22(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/router-generator': 1.166.32
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/virtual-file-routes': 1.161.7
+ chokidar: 3.6.0
+ unplugin: 2.3.11
+ zod: 3.25.76
+ optionalDependencies:
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tanstack/router-utils@1.161.6':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ ansis: 4.2.0
+ babel-dead-code-elimination: 1.0.12
+ diff: 8.0.4
+ pathe: 2.0.3
+ tinyglobby: 0.2.16
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tanstack/start-client-core@1.167.17':
+ dependencies:
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/start-fn-stubs': 1.161.6
+ '@tanstack/start-storage-context': 1.166.29
+ seroval: 1.5.2
+
+ '@tanstack/start-fn-stubs@1.161.6': {}
+
+ '@tanstack/start-plugin-core@1.167.35(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/core': 7.29.0
+ '@babel/types': 7.29.0
+ '@rolldown/pluginutils': 1.0.0-beta.40
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/router-generator': 1.166.32
+ '@tanstack/router-plugin': 1.167.22(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ '@tanstack/router-utils': 1.161.6
+ '@tanstack/start-client-core': 1.167.17
+ '@tanstack/start-server-core': 1.167.19
+ cheerio: 1.2.0
+ exsolve: 1.0.8
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ seroval: 1.5.2
+ source-map: 0.7.6
+ srvx: 0.11.15
+ tinyglobby: 0.2.16
+ ufo: 1.6.3
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
+ vitefu: 1.1.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ xmlbuilder2: 4.0.3
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@rsbuild/core'
+ - '@tanstack/react-router'
+ - crossws
+ - supports-color
+ - vite-plugin-solid
+ - webpack
+
+ '@tanstack/start-server-core@1.167.19':
+ dependencies:
+ '@tanstack/history': 1.161.6
+ '@tanstack/router-core': 1.168.15
+ '@tanstack/start-client-core': 1.167.17
+ '@tanstack/start-storage-context': 1.166.29
+ h3-v2: h3@2.0.1-rc.20
+ seroval: 1.5.2
+ transitivePeerDependencies:
+ - crossws
- '@ts-morph/common@0.28.1':
+ '@tanstack/start-storage-context@1.166.29':
dependencies:
- minimatch: 10.2.4
+ '@tanstack/router-core': 1.168.15
+
+ '@tanstack/store@0.9.3': {}
+
+ '@tanstack/virtual-file-routes@1.161.7': {}
+
+ '@ts-morph/common@0.29.0':
+ dependencies:
+ minimatch: 10.2.5
path-browserify: 1.0.1
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
+
+ '@turbo/darwin-64@2.9.6':
+ optional: true
+
+ '@turbo/darwin-arm64@2.9.6':
+ optional: true
+
+ '@turbo/linux-64@2.9.6':
+ optional: true
+
+ '@turbo/linux-arm64@2.9.6':
+ optional: true
+
+ '@turbo/windows-64@2.9.6':
+ optional: true
+
+ '@turbo/windows-arm64@2.9.6':
+ optional: true
'@tybys/wasm-util@0.10.1':
dependencies:
@@ -6384,7 +7314,7 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
@@ -6394,18 +7324,22 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
+ '@types/babel__parser@7.1.5':
+ dependencies:
+ '@babel/parser': 7.29.2
+
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@types/babel__traverse@7.28.0':
dependencies:
'@babel/types': 7.29.0
- '@types/bun@1.3.6':
+ '@types/bun@1.3.11':
dependencies:
- bun-types: 1.3.6
+ bun-types: 1.3.11
optional: true
'@types/chai@5.2.3':
@@ -6530,7 +7464,7 @@ snapshots:
'@types/d3-transition': 3.0.9
'@types/d3-zoom': 3.0.8
- '@types/debug@4.1.12':
+ '@types/debug@4.1.13':
dependencies:
'@types/ms': 2.1.0
@@ -6560,24 +7494,16 @@ snapshots:
'@types/node@12.20.55': {}
- '@types/node@25.2.3':
- dependencies:
- undici-types: 7.16.0
-
- '@types/node@25.4.0':
+ '@types/node@25.6.0':
dependencies:
- undici-types: 7.18.2
+ undici-types: 7.19.2
- '@types/picomatch@4.0.2': {}
+ '@types/picomatch@4.0.3': {}
'@types/react-dom@19.2.3(@types/react@19.2.14)':
dependencies:
'@types/react': 19.2.14
- '@types/react@19.2.13':
- dependencies:
- csstype: 3.2.3
-
'@types/react@19.2.14':
dependencies:
csstype: 3.2.3
@@ -6591,7 +7517,7 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 25.4.0
+ '@types/node': 25.6.0
optional: true
'@ungap/structured-clone@1.3.0': {}
@@ -6601,58 +7527,65 @@ snapshots:
d3-selection: 3.0.0
d3-transition: 3.0.1(d3-selection@3.0.0)
- '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitejs/plugin-react@6.0.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.0-rc.7
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
+
+ '@vitest/coverage-v8@4.1.4(vitest@4.1.4)':
dependencies:
'@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.18
- ast-v8-to-istanbul: 0.3.10
+ '@vitest/utils': 4.1.4
+ ast-v8-to-istanbul: 1.0.0
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-reports: 3.2.0
- magicast: 0.5.1
+ magicast: 0.5.2
obug: 2.1.1
- std-env: 3.10.0
- tinyrainbow: 3.0.3
- vitest: 4.0.18(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)
+ std-env: 4.0.0
+ tinyrainbow: 3.1.0
+ vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
- '@vitest/expect@4.0.18':
+ '@vitest/expect@4.1.4':
dependencies:
'@standard-schema/spec': 1.1.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.0.18
- '@vitest/utils': 4.0.18
+ '@vitest/spy': 4.1.4
+ '@vitest/utils': 4.1.4
chai: 6.2.2
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
- '@vitest/mocker@4.0.18(vite@7.3.0(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))':
dependencies:
- '@vitest/spy': 4.0.18
+ '@vitest/spy': 4.1.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.3.0(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
- '@vitest/pretty-format@4.0.18':
+ '@vitest/pretty-format@4.1.4':
dependencies:
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
- '@vitest/runner@4.0.18':
+ '@vitest/runner@4.1.4':
dependencies:
- '@vitest/utils': 4.0.18
+ '@vitest/utils': 4.1.4
pathe: 2.0.3
- '@vitest/snapshot@4.0.18':
+ '@vitest/snapshot@4.1.4':
dependencies:
- '@vitest/pretty-format': 4.0.18
+ '@vitest/pretty-format': 4.1.4
+ '@vitest/utils': 4.1.4
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.18': {}
+ '@vitest/spy@4.1.4': {}
- '@vitest/utils@4.0.18':
+ '@vitest/utils@4.1.4':
dependencies:
- '@vitest/pretty-format': 4.0.18
- tinyrainbow: 3.0.3
+ '@vitest/pretty-format': 4.1.4
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
acorn-jsx@5.3.2(acorn@8.16.0):
dependencies:
@@ -6670,6 +7603,11 @@ snapshots:
ansis@4.2.0: {}
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.2
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -6686,25 +7624,34 @@ snapshots:
ast-kit@3.0.0-beta.1:
dependencies:
- '@babel/parser': 8.0.0-rc.1
+ '@babel/parser': 8.0.0-rc.3
estree-walker: 3.0.3
pathe: 2.0.3
- ast-v8-to-istanbul@0.3.10:
+ ast-v8-to-istanbul@1.0.0:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
- js-tokens: 9.0.1
+ js-tokens: 10.0.0
astring@1.9.0: {}
- bail@2.0.2: {}
+ babel-dead-code-elimination@1.0.12:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.2
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
- balanced-match@1.0.2: {}
+ bail@2.0.2: {}
balanced-match@4.0.4: {}
- baseline-browser-mapping@2.9.11: {}
+ baseline-browser-mapping@2.10.13: {}
+
+ baseline-browser-mapping@2.10.19: {}
beautiful-mermaid@1.1.3:
dependencies:
@@ -6715,15 +7662,15 @@ snapshots:
dependencies:
is-windows: 1.0.2
+ binary-extensions@2.3.0: {}
+
birpc@4.0.0: {}
blake3-wasm@2.1.5: {}
- brace-expansion@2.0.2:
- dependencies:
- balanced-match: 1.0.2
+ boolbase@1.0.0: {}
- brace-expansion@5.0.4:
+ brace-expansion@5.0.5:
dependencies:
balanced-match: 4.0.4
@@ -6731,22 +7678,24 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.28.1:
+ browserslist@4.28.2:
dependencies:
- baseline-browser-mapping: 2.9.11
- caniuse-lite: 1.0.30001761
- electron-to-chromium: 1.5.267
- node-releases: 2.0.27
- update-browserslist-db: 1.2.3(browserslist@4.28.1)
+ baseline-browser-mapping: 2.10.13
+ caniuse-lite: 1.0.30001784
+ electron-to-chromium: 1.5.331
+ node-releases: 2.0.37
+ update-browserslist-db: 1.2.3(browserslist@4.28.2)
- bun-types@1.3.6:
+ bun-types@1.3.11:
dependencies:
- '@types/node': 25.4.0
+ '@types/node': 25.6.0
optional: true
- cac@6.7.14: {}
+ cac@7.0.0: {}
- caniuse-lite@1.0.30001761: {}
+ caniuse-lite@1.0.30001784: {}
+
+ caniuse-lite@1.0.30001788: {}
ccount@2.0.1: {}
@@ -6767,10 +7716,33 @@ snapshots:
chardet@2.1.1: {}
+ cheerio-select@2.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-select: 5.2.2
+ css-what: 6.2.2
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+
+ cheerio@1.2.0:
+ dependencies:
+ cheerio-select: 2.1.0
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ encoding-sniffer: 0.2.1
+ htmlparser2: 10.1.0
+ parse5: 7.3.0
+ parse5-htmlparser2-tree-adapter: 7.1.0
+ parse5-parser-stream: 7.1.2
+ undici: 7.25.0
+ whatwg-mimetype: 4.0.0
+
chevrotain-allstar@0.3.1(chevrotain@11.1.2):
dependencies:
chevrotain: 11.1.2
- lodash-es: 4.17.23
+ lodash-es: 4.18.1
chevrotain@11.1.2:
dependencies:
@@ -6781,6 +7753,18 @@ snapshots:
'@chevrotain/utils': 11.1.2
lodash-es: 4.17.23
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
chokidar@5.0.0:
dependencies:
readdirp: 5.0.0
@@ -6817,8 +7801,7 @@ snapshots:
convert-source-map@2.0.0: {}
- cookie-es@2.0.0:
- optional: true
+ cookie-es@3.1.1: {}
cookie@1.1.1: {}
@@ -6836,7 +7819,15 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- cssesc@3.0.0: {}
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-what@6.2.2: {}
csstype@3.2.3: {}
@@ -6882,7 +7873,7 @@ snapshots:
d3-delaunay@6.0.4:
dependencies:
- delaunator: 5.0.1
+ delaunator: 5.1.0
d3-dispatch@3.0.1: {}
@@ -7022,9 +8013,9 @@ snapshots:
dagre-d3-es@7.0.14:
dependencies:
d3: 7.9.0
- lodash-es: 4.17.23
+ lodash-es: 4.18.1
- dayjs@1.11.19: {}
+ dayjs@1.11.20: {}
debug@4.4.3:
dependencies:
@@ -7034,11 +8025,11 @@ snapshots:
dependencies:
character-entities: 2.0.2
- defu@6.1.4: {}
+ defu@6.1.7: {}
- delaunator@5.0.1:
+ delaunator@5.1.0:
dependencies:
- robust-predicates: 3.0.2
+ robust-predicates: 3.0.3
dequal@2.0.3: {}
@@ -7052,41 +8043,68 @@ snapshots:
dependencies:
dequal: 2.0.3
+ diff@8.0.4: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
- discord-api-types@0.38.37: {}
+ discord-api-types@0.38.45: {}
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
dompurify@3.3.3:
optionalDependencies:
'@types/trusted-types': 2.0.7
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
dts-resolver@2.1.3: {}
- electron-to-chromium@1.5.267: {}
+ electron-to-chromium@1.5.331: {}
elkjs@0.11.1: {}
empathic@2.0.0: {}
- enhanced-resolve@5.20.0:
+ encoding-sniffer@0.2.1:
+ dependencies:
+ iconv-lite: 0.6.3
+ whatwg-encoding: 3.1.1
+
+ enhanced-resolve@5.20.1:
dependencies:
graceful-fs: 4.2.11
- tapable: 2.3.0
+ tapable: 2.3.2
enquirer@2.4.1:
dependencies:
ansi-colors: 4.1.3
strip-ansi: 6.0.1
+ entities@4.5.0: {}
+
entities@6.0.1: {}
entities@7.0.1: {}
error-stack-parser-es@1.0.5: {}
- es-module-lexer@1.7.0: {}
+ es-module-lexer@2.0.0: {}
esast-util-from-estree@2.0.0:
dependencies:
@@ -7102,35 +8120,6 @@ snapshots:
esast-util-from-estree: 2.0.0
vfile-message: 4.0.3
- esbuild@0.27.2:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.2
- '@esbuild/android-arm': 0.27.2
- '@esbuild/android-arm64': 0.27.2
- '@esbuild/android-x64': 0.27.2
- '@esbuild/darwin-arm64': 0.27.2
- '@esbuild/darwin-x64': 0.27.2
- '@esbuild/freebsd-arm64': 0.27.2
- '@esbuild/freebsd-x64': 0.27.2
- '@esbuild/linux-arm': 0.27.2
- '@esbuild/linux-arm64': 0.27.2
- '@esbuild/linux-ia32': 0.27.2
- '@esbuild/linux-loong64': 0.27.2
- '@esbuild/linux-mips64el': 0.27.2
- '@esbuild/linux-ppc64': 0.27.2
- '@esbuild/linux-riscv64': 0.27.2
- '@esbuild/linux-s390x': 0.27.2
- '@esbuild/linux-x64': 0.27.2
- '@esbuild/netbsd-arm64': 0.27.2
- '@esbuild/netbsd-x64': 0.27.2
- '@esbuild/openbsd-arm64': 0.27.2
- '@esbuild/openbsd-x64': 0.27.2
- '@esbuild/openharmony-arm64': 0.27.2
- '@esbuild/sunos-x64': 0.27.2
- '@esbuild/win32-arm64': 0.27.2
- '@esbuild/win32-ia32': 0.27.2
- '@esbuild/win32-x64': 0.27.2
-
esbuild@0.27.3:
optionalDependencies:
'@esbuild/aix-ppc64': 0.27.3
@@ -7160,6 +8149,64 @@ snapshots:
'@esbuild/win32-ia32': 0.27.3
'@esbuild/win32-x64': 0.27.3
+ esbuild@0.27.7:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.7
+ '@esbuild/android-arm': 0.27.7
+ '@esbuild/android-arm64': 0.27.7
+ '@esbuild/android-x64': 0.27.7
+ '@esbuild/darwin-arm64': 0.27.7
+ '@esbuild/darwin-x64': 0.27.7
+ '@esbuild/freebsd-arm64': 0.27.7
+ '@esbuild/freebsd-x64': 0.27.7
+ '@esbuild/linux-arm': 0.27.7
+ '@esbuild/linux-arm64': 0.27.7
+ '@esbuild/linux-ia32': 0.27.7
+ '@esbuild/linux-loong64': 0.27.7
+ '@esbuild/linux-mips64el': 0.27.7
+ '@esbuild/linux-ppc64': 0.27.7
+ '@esbuild/linux-riscv64': 0.27.7
+ '@esbuild/linux-s390x': 0.27.7
+ '@esbuild/linux-x64': 0.27.7
+ '@esbuild/netbsd-arm64': 0.27.7
+ '@esbuild/netbsd-x64': 0.27.7
+ '@esbuild/openbsd-arm64': 0.27.7
+ '@esbuild/openbsd-x64': 0.27.7
+ '@esbuild/openharmony-arm64': 0.27.7
+ '@esbuild/sunos-x64': 0.27.7
+ '@esbuild/win32-arm64': 0.27.7
+ '@esbuild/win32-ia32': 0.27.7
+ '@esbuild/win32-x64': 0.27.7
+
+ esbuild@0.28.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.28.0
+ '@esbuild/android-arm': 0.28.0
+ '@esbuild/android-arm64': 0.28.0
+ '@esbuild/android-x64': 0.28.0
+ '@esbuild/darwin-arm64': 0.28.0
+ '@esbuild/darwin-x64': 0.28.0
+ '@esbuild/freebsd-arm64': 0.28.0
+ '@esbuild/freebsd-x64': 0.28.0
+ '@esbuild/linux-arm': 0.28.0
+ '@esbuild/linux-arm64': 0.28.0
+ '@esbuild/linux-ia32': 0.28.0
+ '@esbuild/linux-loong64': 0.28.0
+ '@esbuild/linux-mips64el': 0.28.0
+ '@esbuild/linux-ppc64': 0.28.0
+ '@esbuild/linux-riscv64': 0.28.0
+ '@esbuild/linux-s390x': 0.28.0
+ '@esbuild/linux-x64': 0.28.0
+ '@esbuild/netbsd-arm64': 0.28.0
+ '@esbuild/netbsd-x64': 0.28.0
+ '@esbuild/openbsd-arm64': 0.28.0
+ '@esbuild/openbsd-x64': 0.28.0
+ '@esbuild/openharmony-arm64': 0.28.0
+ '@esbuild/sunos-x64': 0.28.0
+ '@esbuild/win32-arm64': 0.28.0
+ '@esbuild/win32-ia32': 0.28.0
+ '@esbuild/win32-x64': 0.28.0
+
escalade@3.2.0: {}
escape-string-regexp@5.0.0: {}
@@ -7205,6 +8252,8 @@ snapshots:
expect-type@1.3.0: {}
+ exsolve@1.0.8: {}
+
extend@3.0.2: {}
extendable-error@0.1.7: {}
@@ -7221,9 +8270,9 @@ snapshots:
dependencies:
reusify: 1.1.0
- fdir@6.5.0(picomatch@4.0.3):
+ fdir@6.5.0(picomatch@4.0.4):
optionalDependencies:
- picomatch: 4.0.3
+ picomatch: 4.0.4
fill-range@7.1.1:
dependencies:
@@ -7234,14 +8283,14 @@ snapshots:
locate-path: 5.0.0
path-exists: 4.0.0
- framer-motion@12.35.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ framer-motion@12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
- motion-dom: 12.35.2
- motion-utils: 12.29.2
+ motion-dom: 12.38.0
+ motion-utils: 12.36.0
tslib: 2.8.1
optionalDependencies:
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
fs-extra@7.0.1:
dependencies:
@@ -7258,61 +8307,55 @@ snapshots:
fsevents@2.3.3:
optional: true
- fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
+ fumadocs-core@16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6):
dependencies:
- '@formatjs/intl-localematcher': 0.8.1
'@orama/orama': 3.1.18
- '@shikijs/rehype': 4.0.2
'@shikijs/transformers': 4.0.2
estree-util-value-to-estree: 3.5.0
github-slugger: 2.0.0
hast-util-to-estree: 3.1.3
hast-util-to-jsx-runtime: 2.3.6
- image-size: 2.0.2
mdast-util-mdx: 3.0.0
mdast-util-to-markdown: 2.1.2
- negotiator: 1.0.0
- npm-to-yarn: 3.0.1
- path-to-regexp: 8.3.0
remark: 15.0.1
remark-gfm: 4.0.1
remark-rehype: 11.1.2
scroll-into-view-if-needed: 3.1.0
shiki: 4.0.2
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
unified: 11.0.5
unist-util-visit: 5.1.0
vfile: 6.0.3
optionalDependencies:
'@mdx-js/mdx': 3.1.1
- '@tanstack/react-router': 1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@tanstack/react-router': 1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/react': 19.2.14
- lucide-react: 0.577.0(react@19.2.4)
- next: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ lucide-react: 1.8.0(react@19.2.5)
+ next: 16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
zod: 4.3.6
transitivePeerDependencies:
- supports-color
- fumadocs-mdx@14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)):
+ fumadocs-mdx@14.3.0(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)):
dependencies:
'@mdx-js/mdx': 3.1.1
'@standard-schema/spec': 1.1.0
chokidar: 5.0.0
- esbuild: 0.27.3
+ esbuild: 0.28.0
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6)
js-yaml: 4.1.1
mdast-util-mdx: 3.0.0
mdast-util-to-markdown: 2.1.2
picocolors: 1.1.1
- picomatch: 4.0.3
- tinyexec: 1.0.2
- tinyglobby: 0.2.15
+ picomatch: 4.0.4
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
unified: 11.0.5
unist-util-remove-position: 5.0.0
unist-util-visit: 5.1.0
@@ -7322,23 +8365,24 @@ snapshots:
'@types/mdast': 4.0.4
'@types/mdx': 2.0.13
'@types/react': 19.2.14
- next: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react: 19.2.4
- vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)
+ next: 16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
- fumadocs-typescript@5.1.5(625b2c47a136537d69828bedd5efad50):
+ fumadocs-typescript@5.2.6(578e46be5ed1f2691a7b7125b236657d):
dependencies:
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6)
hast-util-to-estree: 3.1.3
hast-util-to-jsx-runtime: 2.3.6
- react: 19.2.4
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
remark: 15.0.1
remark-rehype: 11.1.2
- ts-morph: 27.0.2
- typescript: 5.9.3
+ shiki: 4.0.2
+ ts-morph: 28.0.0
unified: 11.0.5
unist-util-visit: 5.1.0
optionalDependencies:
@@ -7346,43 +8390,44 @@ snapshots:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/react': 19.2.14
- fumadocs-ui: 16.6.16(@takumi-rs/image-response@0.71.7)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ fumadocs-ui: 16.7.16(@tailwindcss/oxide@4.2.2)(@takumi-rs/image-response@0.71.7)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2)
transitivePeerDependencies:
- supports-color
- fumadocs-ui@16.6.16(@takumi-rs/image-response@0.71.7)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1):
- dependencies:
- '@fumadocs/tailwind': 0.0.3(tailwindcss@4.2.1)
- '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4)
- '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ fumadocs-ui@16.7.16(@tailwindcss/oxide@4.2.2)(@takumi-rs/image-response@0.71.7)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.2):
+ dependencies:
+ '@fumadocs/tailwind': 0.0.5(@tailwindcss/oxide@4.2.2)(tailwindcss@4.2.2)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.5)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
class-variance-authority: 0.7.1
- fumadocs-core: 16.6.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.166.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.577.0(react@19.2.4))(next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
- lucide-react: 0.577.0(react@19.2.4)
- motion: 12.35.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- react-medium-image-zoom: 5.4.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4)
+ fumadocs-core: 16.7.16(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.168.22(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@1.8.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6)
+ lucide-react: 1.8.0(react@19.2.5)
+ motion: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ next-themes: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5)
rehype-raw: 7.0.0
scroll-into-view-if-needed: 3.1.0
+ shiki: 4.0.2
tailwind-merge: 3.5.0
unist-util-visit: 5.1.0
optionalDependencies:
'@takumi-rs/image-response': 0.71.7
'@types/mdx': 2.0.13
'@types/react': 19.2.14
- next: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ next: 16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
transitivePeerDependencies:
- '@emotion/is-prop-valid'
+ - '@tailwindcss/oxide'
- '@types/react-dom'
- tailwindcss
@@ -7392,7 +8437,7 @@ snapshots:
get-nonce@1.0.1: {}
- get-tsconfig@4.13.6:
+ get-tsconfig@4.14.0:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -7417,10 +8462,17 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
- globrex@0.1.2: {}
+ goober@2.1.18(csstype@3.2.3):
+ dependencies:
+ csstype: 3.2.3
graceful-fs@4.2.11: {}
+ h3@2.0.1-rc.20:
+ dependencies:
+ rou3: 0.8.1
+ srvx: 0.11.15
+
hachure-fill@0.5.2: {}
has-flag@4.0.0: {}
@@ -7525,10 +8577,6 @@ snapshots:
web-namespaces: 2.0.1
zwitch: 2.0.4
- hast-util-to-string@3.0.1:
- dependencies:
- '@types/hast': 3.0.4
-
hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
@@ -7541,15 +8589,19 @@ snapshots:
property-information: 7.1.0
space-separated-tokens: 2.0.2
- hono@4.11.3:
- optional: true
-
- hookable@6.0.1: {}
+ hookable@6.1.1: {}
html-escaper@2.0.2: {}
html-void-elements@3.0.0: {}
+ htmlparser2@10.1.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 7.0.1
+
human-id@4.1.3: {}
husky@9.1.7: {}
@@ -7564,9 +8616,7 @@ snapshots:
ignore@5.3.2: {}
- image-size@2.0.2: {}
-
- import-without-cache@0.2.5: {}
+ import-without-cache@0.3.3: {}
ini@4.1.3: {}
@@ -7583,6 +8633,10 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
is-core-module@2.16.1:
dependencies:
hasown: 2.0.2
@@ -7607,12 +8661,11 @@ snapshots:
is-windows@1.0.2: {}
- isbot@5.1.36:
- optional: true
+ isbot@5.1.38: {}
isexe@2.0.0: {}
- isexe@3.1.1: {}
+ isexe@3.1.5: {}
istanbul-lib-coverage@3.2.2: {}
@@ -7631,9 +8684,9 @@ snapshots:
js-sha256@0.11.1: {}
- js-tokens@4.0.0: {}
+ js-tokens@10.0.0: {}
- js-tokens@9.0.1: {}
+ js-tokens@4.0.0: {}
js-yaml@3.14.2:
dependencies:
@@ -7652,7 +8705,7 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- katex@0.16.38:
+ katex@0.16.44:
dependencies:
commander: 8.3.0
@@ -7674,54 +8727,54 @@ snapshots:
layout-base@2.0.1: {}
- lightningcss-android-arm64@1.31.1:
+ lightningcss-android-arm64@1.32.0:
optional: true
- lightningcss-darwin-arm64@1.31.1:
+ lightningcss-darwin-arm64@1.32.0:
optional: true
- lightningcss-darwin-x64@1.31.1:
+ lightningcss-darwin-x64@1.32.0:
optional: true
- lightningcss-freebsd-x64@1.31.1:
+ lightningcss-freebsd-x64@1.32.0:
optional: true
- lightningcss-linux-arm-gnueabihf@1.31.1:
+ lightningcss-linux-arm-gnueabihf@1.32.0:
optional: true
- lightningcss-linux-arm64-gnu@1.31.1:
+ lightningcss-linux-arm64-gnu@1.32.0:
optional: true
- lightningcss-linux-arm64-musl@1.31.1:
+ lightningcss-linux-arm64-musl@1.32.0:
optional: true
- lightningcss-linux-x64-gnu@1.31.1:
+ lightningcss-linux-x64-gnu@1.32.0:
optional: true
- lightningcss-linux-x64-musl@1.31.1:
+ lightningcss-linux-x64-musl@1.32.0:
optional: true
- lightningcss-win32-arm64-msvc@1.31.1:
+ lightningcss-win32-arm64-msvc@1.32.0:
optional: true
- lightningcss-win32-x64-msvc@1.31.1:
+ lightningcss-win32-x64-msvc@1.32.0:
optional: true
- lightningcss@1.31.1:
+ lightningcss@1.32.0:
dependencies:
detect-libc: 2.1.2
optionalDependencies:
- lightningcss-android-arm64: 1.31.1
- lightningcss-darwin-arm64: 1.31.1
- lightningcss-darwin-x64: 1.31.1
- lightningcss-freebsd-x64: 1.31.1
- lightningcss-linux-arm-gnueabihf: 1.31.1
- lightningcss-linux-arm64-gnu: 1.31.1
- lightningcss-linux-arm64-musl: 1.31.1
- lightningcss-linux-x64-gnu: 1.31.1
- lightningcss-linux-x64-musl: 1.31.1
- lightningcss-win32-arm64-msvc: 1.31.1
- lightningcss-win32-x64-msvc: 1.31.1
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
locate-path@5.0.0:
dependencies:
@@ -7729,6 +8782,8 @@ snapshots:
lodash-es@4.17.23: {}
+ lodash-es@4.18.1: {}
+
lodash.startcase@4.4.0: {}
longest-streak@3.1.0: {}
@@ -7737,23 +8792,23 @@ snapshots:
dependencies:
yallist: 3.1.1
- lucide-react@0.577.0(react@19.2.4):
+ lucide-react@1.8.0(react@19.2.5):
dependencies:
- react: 19.2.4
+ react: 19.2.5
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- magicast@0.5.1:
+ magicast@0.5.2:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
source-map-js: 1.2.1
make-dir@4.0.0:
dependencies:
- semver: 7.7.3
+ semver: 7.7.4
markdown-extensions@2.0.0: {}
@@ -7926,11 +8981,11 @@ snapshots:
merge2@1.4.1: {}
- mermaid@11.13.0:
+ mermaid@11.14.0:
dependencies:
'@braintree/sanitize-url': 7.1.2
'@iconify/utils': 3.1.0
- '@mermaid-js/parser': 1.0.1
+ '@mermaid-js/parser': 1.1.0
'@types/d3': 7.4.3
'@upsetjs/venn.js': 2.0.0
cytoscape: 3.33.1
@@ -7939,11 +8994,11 @@ snapshots:
d3: 7.9.0
d3-sankey: 0.12.3
dagre-d3-es: 7.0.14
- dayjs: 1.11.19
+ dayjs: 1.11.20
dompurify: 3.3.3
- katex: 0.16.38
+ katex: 0.16.44
khroma: 2.1.0
- lodash-es: 4.17.23
+ lodash-es: 4.18.1
marked: 16.4.2
roughjs: 4.6.6
stylis: 4.3.6
@@ -8196,7 +9251,7 @@ snapshots:
micromark@4.0.2:
dependencies:
- '@types/debug': 4.1.12
+ '@types/debug': 4.1.13
debug: 4.4.3
decode-named-character-reference: 1.3.0
devlop: 1.1.0
@@ -8219,52 +9274,48 @@ snapshots:
micromatch@4.0.8:
dependencies:
braces: 3.0.3
- picomatch: 2.3.1
+ picomatch: 2.3.2
- miniflare@4.20260210.0:
+ miniflare@4.20260415.0:
dependencies:
'@cspotcode/source-map-support': 0.8.1
sharp: 0.34.5
- undici: 7.18.2
- workerd: 1.20260210.0
+ undici: 7.24.8
+ workerd: 1.20260415.1
ws: 8.18.0
youch: 4.1.0-beta.10
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- minimatch@10.2.4:
- dependencies:
- brace-expansion: 5.0.4
-
- minimatch@9.0.5:
+ minimatch@10.2.5:
dependencies:
- brace-expansion: 2.0.2
+ brace-expansion: 5.0.5
minimist@1.2.8: {}
- mlly@1.8.1:
+ mlly@1.8.2:
dependencies:
acorn: 8.16.0
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.6.3
- moo@0.5.2: {}
+ moo@0.5.3: {}
- motion-dom@12.35.2:
+ motion-dom@12.38.0:
dependencies:
- motion-utils: 12.29.2
+ motion-utils: 12.36.0
- motion-utils@12.29.2: {}
+ motion-utils@12.36.0: {}
- motion@12.35.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ motion@12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
- framer-motion: 12.35.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ framer-motion: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
tslib: 2.8.1
optionalDependencies:
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
mri@1.2.0: {}
@@ -8272,46 +9323,48 @@ snapshots:
nanoid@3.3.11: {}
- negotiator@1.0.0: {}
-
- next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ next-themes@0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
- next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
- '@next/env': 16.1.6
+ '@next/env': 16.2.4
'@swc/helpers': 0.5.15
- baseline-browser-mapping: 2.9.11
- caniuse-lite: 1.0.30001761
+ baseline-browser-mapping: 2.10.19
+ caniuse-lite: 1.0.30001788
postcss: 8.4.31
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- styled-jsx: 5.1.6(react@19.2.4)
+ react: 19.2.5
+ react-dom: 19.2.5(react@19.2.5)
+ styled-jsx: 5.1.6(react@19.2.5)
optionalDependencies:
- '@next/swc-darwin-arm64': 16.1.6
- '@next/swc-darwin-x64': 16.1.6
- '@next/swc-linux-arm64-gnu': 16.1.6
- '@next/swc-linux-arm64-musl': 16.1.6
- '@next/swc-linux-x64-gnu': 16.1.6
- '@next/swc-linux-x64-musl': 16.1.6
- '@next/swc-win32-arm64-msvc': 16.1.6
- '@next/swc-win32-x64-msvc': 16.1.6
+ '@next/swc-darwin-arm64': 16.2.4
+ '@next/swc-darwin-x64': 16.2.4
+ '@next/swc-linux-arm64-gnu': 16.2.4
+ '@next/swc-linux-arm64-musl': 16.2.4
+ '@next/swc-linux-x64-gnu': 16.2.4
+ '@next/swc-linux-x64-musl': 16.2.4
+ '@next/swc-win32-arm64-msvc': 16.2.4
+ '@next/swc-win32-x64-msvc': 16.2.4
sharp: 0.34.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- node-releases@2.0.27: {}
+ node-releases@2.0.37: {}
- npm-to-yarn@3.0.1: {}
+ normalize-path@3.0.0: {}
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
obug@2.1.1: {}
oniguruma-parser@0.12.1: {}
- oniguruma-to-es@4.3.4:
+ oniguruma-to-es@4.3.5:
dependencies:
oniguruma-parser: 0.12.1
regex: 6.1.0
@@ -8319,51 +9372,51 @@ snapshots:
outdent@0.5.0: {}
- oxfmt@0.36.0:
+ oxfmt@0.45.0:
dependencies:
tinypool: 2.1.0
optionalDependencies:
- '@oxfmt/binding-android-arm-eabi': 0.36.0
- '@oxfmt/binding-android-arm64': 0.36.0
- '@oxfmt/binding-darwin-arm64': 0.36.0
- '@oxfmt/binding-darwin-x64': 0.36.0
- '@oxfmt/binding-freebsd-x64': 0.36.0
- '@oxfmt/binding-linux-arm-gnueabihf': 0.36.0
- '@oxfmt/binding-linux-arm-musleabihf': 0.36.0
- '@oxfmt/binding-linux-arm64-gnu': 0.36.0
- '@oxfmt/binding-linux-arm64-musl': 0.36.0
- '@oxfmt/binding-linux-ppc64-gnu': 0.36.0
- '@oxfmt/binding-linux-riscv64-gnu': 0.36.0
- '@oxfmt/binding-linux-riscv64-musl': 0.36.0
- '@oxfmt/binding-linux-s390x-gnu': 0.36.0
- '@oxfmt/binding-linux-x64-gnu': 0.36.0
- '@oxfmt/binding-linux-x64-musl': 0.36.0
- '@oxfmt/binding-openharmony-arm64': 0.36.0
- '@oxfmt/binding-win32-arm64-msvc': 0.36.0
- '@oxfmt/binding-win32-ia32-msvc': 0.36.0
- '@oxfmt/binding-win32-x64-msvc': 0.36.0
-
- oxlint@1.51.0:
+ '@oxfmt/binding-android-arm-eabi': 0.45.0
+ '@oxfmt/binding-android-arm64': 0.45.0
+ '@oxfmt/binding-darwin-arm64': 0.45.0
+ '@oxfmt/binding-darwin-x64': 0.45.0
+ '@oxfmt/binding-freebsd-x64': 0.45.0
+ '@oxfmt/binding-linux-arm-gnueabihf': 0.45.0
+ '@oxfmt/binding-linux-arm-musleabihf': 0.45.0
+ '@oxfmt/binding-linux-arm64-gnu': 0.45.0
+ '@oxfmt/binding-linux-arm64-musl': 0.45.0
+ '@oxfmt/binding-linux-ppc64-gnu': 0.45.0
+ '@oxfmt/binding-linux-riscv64-gnu': 0.45.0
+ '@oxfmt/binding-linux-riscv64-musl': 0.45.0
+ '@oxfmt/binding-linux-s390x-gnu': 0.45.0
+ '@oxfmt/binding-linux-x64-gnu': 0.45.0
+ '@oxfmt/binding-linux-x64-musl': 0.45.0
+ '@oxfmt/binding-openharmony-arm64': 0.45.0
+ '@oxfmt/binding-win32-arm64-msvc': 0.45.0
+ '@oxfmt/binding-win32-ia32-msvc': 0.45.0
+ '@oxfmt/binding-win32-x64-msvc': 0.45.0
+
+ oxlint@1.60.0:
optionalDependencies:
- '@oxlint/binding-android-arm-eabi': 1.51.0
- '@oxlint/binding-android-arm64': 1.51.0
- '@oxlint/binding-darwin-arm64': 1.51.0
- '@oxlint/binding-darwin-x64': 1.51.0
- '@oxlint/binding-freebsd-x64': 1.51.0
- '@oxlint/binding-linux-arm-gnueabihf': 1.51.0
- '@oxlint/binding-linux-arm-musleabihf': 1.51.0
- '@oxlint/binding-linux-arm64-gnu': 1.51.0
- '@oxlint/binding-linux-arm64-musl': 1.51.0
- '@oxlint/binding-linux-ppc64-gnu': 1.51.0
- '@oxlint/binding-linux-riscv64-gnu': 1.51.0
- '@oxlint/binding-linux-riscv64-musl': 1.51.0
- '@oxlint/binding-linux-s390x-gnu': 1.51.0
- '@oxlint/binding-linux-x64-gnu': 1.51.0
- '@oxlint/binding-linux-x64-musl': 1.51.0
- '@oxlint/binding-openharmony-arm64': 1.51.0
- '@oxlint/binding-win32-arm64-msvc': 1.51.0
- '@oxlint/binding-win32-ia32-msvc': 1.51.0
- '@oxlint/binding-win32-x64-msvc': 1.51.0
+ '@oxlint/binding-android-arm-eabi': 1.60.0
+ '@oxlint/binding-android-arm64': 1.60.0
+ '@oxlint/binding-darwin-arm64': 1.60.0
+ '@oxlint/binding-darwin-x64': 1.60.0
+ '@oxlint/binding-freebsd-x64': 1.60.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.60.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.60.0
+ '@oxlint/binding-linux-arm64-gnu': 1.60.0
+ '@oxlint/binding-linux-arm64-musl': 1.60.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.60.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.60.0
+ '@oxlint/binding-linux-riscv64-musl': 1.60.0
+ '@oxlint/binding-linux-s390x-gnu': 1.60.0
+ '@oxlint/binding-linux-x64-gnu': 1.60.0
+ '@oxlint/binding-linux-x64-musl': 1.60.0
+ '@oxlint/binding-openharmony-arm64': 1.60.0
+ '@oxlint/binding-win32-arm64-msvc': 1.60.0
+ '@oxlint/binding-win32-ia32-msvc': 1.60.0
+ '@oxlint/binding-win32-x64-msvc': 1.60.0
p-filter@2.1.0:
dependencies:
@@ -8397,6 +9450,15 @@ snapshots:
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
+ parse5-htmlparser2-tree-adapter@7.1.0:
+ dependencies:
+ domhandler: 5.0.3
+ parse5: 7.3.0
+
+ parse5-parser-stream@7.1.2:
+ dependencies:
+ parse5: 7.3.0
+
parse5@7.3.0:
dependencies:
entities: 6.0.1
@@ -8413,24 +9475,22 @@ snapshots:
path-to-regexp@6.3.0: {}
- path-to-regexp@8.3.0: {}
-
path-type@4.0.0: {}
pathe@2.0.3: {}
picocolors@1.1.1: {}
- picomatch@2.3.1: {}
+ picomatch@2.3.2: {}
- picomatch@4.0.3: {}
+ picomatch@4.0.4: {}
pify@4.0.1: {}
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
- mlly: 1.8.1
+ mlly: 1.8.2
pathe: 2.0.3
pofile@1.1.4: {}
@@ -8442,18 +9502,13 @@ snapshots:
path-data-parser: 0.1.0
points-on-curve: 0.2.0
- postcss-selector-parser@7.1.1:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
postcss@8.4.31:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- postcss@8.5.8:
+ postcss@8.5.10:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@@ -8461,6 +9516,8 @@ snapshots:
prettier@2.8.8: {}
+ prettier@3.8.3: {}
+
prism-media@1.3.5:
optional: true
@@ -8472,44 +9529,39 @@ snapshots:
queue-microtask@1.2.3: {}
- react-dom@19.2.4(react@19.2.4):
+ react-dom@19.2.5(react@19.2.5):
dependencies:
- react: 19.2.4
+ react: 19.2.5
scheduler: 0.27.0
- react-medium-image-zoom@5.4.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5):
dependencies:
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
-
- react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4):
- dependencies:
- react: 19.2.4
- react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.5
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5)
tslib: 2.8.1
optionalDependencies:
'@types/react': 19.2.14
- react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4):
+ react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.5):
dependencies:
- react: 19.2.4
- react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4)
- react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4)
+ react: 19.2.5
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5)
+ react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5)
tslib: 2.8.1
- use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4)
- use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4)
+ use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5)
+ use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
- react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4):
+ react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5):
dependencies:
get-nonce: 1.0.1
- react: 19.2.4
+ react: 19.2.5
tslib: 2.8.1
optionalDependencies:
'@types/react': 19.2.14
- react@19.2.4: {}
+ react@19.2.5: {}
read-yaml-file@1.1.0:
dependencies:
@@ -8518,6 +9570,10 @@ snapshots:
pify: 4.0.1
strip-bom: 3.0.0
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.2
+
readdirp@5.0.0: {}
recma-build-jsx@1.0.0:
@@ -8635,71 +9691,69 @@ snapshots:
reusify@1.1.0: {}
- robust-predicates@3.0.2: {}
+ robust-predicates@3.0.3: {}
- rolldown-plugin-dts@0.22.1(rolldown@1.0.0-rc.3)(typescript@5.9.3):
+ rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3):
dependencies:
- '@babel/generator': 8.0.0-rc.1
- '@babel/helper-validator-identifier': 8.0.0-rc.1
- '@babel/parser': 8.0.0-rc.1
- '@babel/types': 8.0.0-rc.1
+ '@babel/generator': 8.0.0-rc.3
+ '@babel/helper-validator-identifier': 8.0.0-rc.3
+ '@babel/parser': 8.0.0-rc.3
+ '@babel/types': 8.0.0-rc.3
ast-kit: 3.0.0-beta.1
birpc: 4.0.0
dts-resolver: 2.1.3
- get-tsconfig: 4.13.6
+ get-tsconfig: 4.14.0
obug: 2.1.1
- rolldown: 1.0.0-rc.3
+ picomatch: 4.0.4
+ rolldown: 1.0.0-rc.16
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.3
transitivePeerDependencies:
- oxc-resolver
- rolldown@1.0.0-rc.3:
+ rolldown@1.0.0-rc.15:
dependencies:
- '@oxc-project/types': 0.112.0
- '@rolldown/pluginutils': 1.0.0-rc.3
+ '@oxc-project/types': 0.124.0
+ '@rolldown/pluginutils': 1.0.0-rc.15
optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-rc.3
- '@rolldown/binding-darwin-arm64': 1.0.0-rc.3
- '@rolldown/binding-darwin-x64': 1.0.0-rc.3
- '@rolldown/binding-freebsd-x64': 1.0.0-rc.3
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.3
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.3
- '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.3
- '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.3
- '@rolldown/binding-linux-x64-musl': 1.0.0-rc.3
- '@rolldown/binding-openharmony-arm64': 1.0.0-rc.3
- '@rolldown/binding-wasm32-wasi': 1.0.0-rc.3
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3
- '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3
-
- rollup@4.54.0:
- dependencies:
- '@types/estree': 1.0.8
+ '@rolldown/binding-android-arm64': 1.0.0-rc.15
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.15
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.15
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.15
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15
+
+ rolldown@1.0.0-rc.16:
+ dependencies:
+ '@oxc-project/types': 0.126.0
+ '@rolldown/pluginutils': 1.0.0-rc.16
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.54.0
- '@rollup/rollup-android-arm64': 4.54.0
- '@rollup/rollup-darwin-arm64': 4.54.0
- '@rollup/rollup-darwin-x64': 4.54.0
- '@rollup/rollup-freebsd-arm64': 4.54.0
- '@rollup/rollup-freebsd-x64': 4.54.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.54.0
- '@rollup/rollup-linux-arm-musleabihf': 4.54.0
- '@rollup/rollup-linux-arm64-gnu': 4.54.0
- '@rollup/rollup-linux-arm64-musl': 4.54.0
- '@rollup/rollup-linux-loong64-gnu': 4.54.0
- '@rollup/rollup-linux-ppc64-gnu': 4.54.0
- '@rollup/rollup-linux-riscv64-gnu': 4.54.0
- '@rollup/rollup-linux-riscv64-musl': 4.54.0
- '@rollup/rollup-linux-s390x-gnu': 4.54.0
- '@rollup/rollup-linux-x64-gnu': 4.54.0
- '@rollup/rollup-linux-x64-musl': 4.54.0
- '@rollup/rollup-openharmony-arm64': 4.54.0
- '@rollup/rollup-win32-arm64-msvc': 4.54.0
- '@rollup/rollup-win32-ia32-msvc': 4.54.0
- '@rollup/rollup-win32-x64-gnu': 4.54.0
- '@rollup/rollup-win32-x64-msvc': 4.54.0
- fsevents: 2.3.3
+ '@rolldown/binding-android-arm64': 1.0.0-rc.16
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.16
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.16
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.16
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16
+
+ rou3@0.8.1: {}
roughjs@4.6.6:
dependencies:
@@ -8724,23 +9778,21 @@ snapshots:
semver@6.3.1: {}
- semver@7.7.3: {}
+ semver@7.7.4: {}
- seroval-plugins@1.5.1(seroval@1.5.1):
+ seroval-plugins@1.5.2(seroval@1.5.2):
dependencies:
- seroval: 1.5.1
- optional: true
+ seroval: 1.5.2
- seroval@1.5.1:
- optional: true
+ seroval@1.5.2: {}
server-only@0.0.1: {}
sharp@0.34.5:
dependencies:
- '@img/colour': 1.0.0
+ '@img/colour': 1.1.0
detect-libc: 2.1.2
- semver: 7.7.3
+ semver: 7.7.4
optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.5
@@ -8803,9 +9855,11 @@ snapshots:
sprintf-js@1.0.3: {}
+ srvx@0.11.15: {}
+
stackback@0.0.2: {}
- std-env@3.10.0: {}
+ std-env@4.0.0: {}
stringify-entities@4.0.4:
dependencies:
@@ -8826,10 +9880,10 @@ snapshots:
dependencies:
inline-style-parser: 0.2.7
- styled-jsx@5.1.6(react@19.2.4):
+ styled-jsx@5.1.6(react@19.2.5):
dependencies:
client-only: 0.0.1
- react: 19.2.4
+ react: 19.2.5
stylis@4.3.6: {}
@@ -8843,30 +9897,31 @@ snapshots:
tailwind-merge@3.5.0: {}
- tailwindcss@4.2.1: {}
+ tailwindcss@4.2.2: {}
- tapable@2.3.0: {}
+ tapable@2.3.2: {}
term-size@2.2.1: {}
- tiny-invariant@1.3.3:
- optional: true
-
- tiny-warning@1.0.3:
- optional: true
-
tinybench@2.9.0: {}
- tinyexec@1.0.2: {}
+ tinyexec@1.0.4: {}
+
+ tinyexec@1.1.1: {}
tinyglobby@0.2.15:
dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinyglobby@0.2.16:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
tinypool@2.1.0: {}
- tinyrainbow@3.0.3: {}
+ tinyrainbow@3.1.0: {}
to-regex-range@5.0.1:
dependencies:
@@ -8880,9 +9935,9 @@ snapshots:
ts-dedent@2.2.0: {}
- ts-morph@27.0.2:
+ ts-morph@28.0.0:
dependencies:
- '@ts-morph/common': 0.28.1
+ '@ts-morph/common': 0.29.0
code-block-writer: 13.0.3
ts-patch@3.3.0:
@@ -8891,33 +9946,29 @@ snapshots:
global-prefix: 4.0.0
minimist: 1.2.8
resolve: 1.22.11
- semver: 7.7.3
+ semver: 7.7.4
strip-ansi: 6.0.1
- tsconfck@3.1.6(typescript@5.9.3):
- optionalDependencies:
- typescript: 5.9.3
-
- tsdown@0.20.3(typescript@5.9.3):
+ tsdown@0.21.9(typescript@6.0.3):
dependencies:
ansis: 4.2.0
- cac: 6.7.14
- defu: 6.1.4
+ cac: 7.0.0
+ defu: 6.1.7
empathic: 2.0.0
- hookable: 6.0.1
- import-without-cache: 0.2.5
+ hookable: 6.1.1
+ import-without-cache: 0.3.3
obug: 2.1.1
- picomatch: 4.0.3
- rolldown: 1.0.0-rc.3
- rolldown-plugin-dts: 0.22.1(rolldown@1.0.0-rc.3)(typescript@5.9.3)
- semver: 7.7.3
- tinyexec: 1.0.2
- tinyglobby: 0.2.15
+ picomatch: 4.0.4
+ rolldown: 1.0.0-rc.16
+ rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3)
+ semver: 7.7.4
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
tree-kill: 1.2.2
- unconfig-core: 7.4.2
- unrun: 0.2.27
+ unconfig-core: 7.5.0
+ unrun: 0.2.36
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.3
transitivePeerDependencies:
- '@ts-macro/tsc'
- '@typescript/native-preview'
@@ -8929,58 +9980,34 @@ snapshots:
tsx@4.21.0:
dependencies:
- esbuild: 0.27.3
- get-tsconfig: 4.13.6
+ esbuild: 0.27.7
+ get-tsconfig: 4.14.0
optionalDependencies:
fsevents: 2.3.3
- optional: true
-
- turbo-darwin-64@2.8.5:
- optional: true
-
- turbo-darwin-arm64@2.8.5:
- optional: true
-
- turbo-linux-64@2.8.5:
- optional: true
- turbo-linux-arm64@2.8.5:
- optional: true
-
- turbo-windows-64@2.8.5:
- optional: true
-
- turbo-windows-arm64@2.8.5:
- optional: true
-
- turbo@2.8.5:
+ turbo@2.9.6:
optionalDependencies:
- turbo-darwin-64: 2.8.5
- turbo-darwin-arm64: 2.8.5
- turbo-linux-64: 2.8.5
- turbo-linux-arm64: 2.8.5
- turbo-windows-64: 2.8.5
- turbo-windows-arm64: 2.8.5
-
- typescript-transform-paths@3.5.6(typescript@5.9.3):
- dependencies:
- minimatch: 9.0.5
- typescript: 5.9.3
+ '@turbo/darwin-64': 2.9.6
+ '@turbo/darwin-arm64': 2.9.6
+ '@turbo/linux-64': 2.9.6
+ '@turbo/linux-arm64': 2.9.6
+ '@turbo/windows-64': 2.9.6
+ '@turbo/windows-arm64': 2.9.6
- typescript@5.9.3: {}
+ typescript@6.0.3: {}
ufo@1.6.3: {}
- unconfig-core@7.4.2:
+ unconfig-core@7.5.0:
dependencies:
'@quansync/fs': 1.0.0
quansync: 1.0.0
- undici-types@7.16.0: {}
+ undici-types@7.19.2: {}
- undici-types@7.18.2: {}
+ undici@7.24.8: {}
- undici@7.18.2: {}
+ undici@7.25.0: {}
unenv@2.0.0-rc.24:
dependencies:
@@ -9030,43 +10057,47 @@ snapshots:
universalify@0.1.2: {}
+ unplugin@2.3.11:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ 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.3
+ picomatch: 4.0.4
webpack-virtual-modules: 0.6.2
- unrun@0.2.27:
+ unrun@0.2.36:
dependencies:
- rolldown: 1.0.0-rc.3
+ rolldown: 1.0.0-rc.16
- update-browserslist-db@1.2.3(browserslist@4.28.1):
+ update-browserslist-db@1.2.3(browserslist@4.28.2):
dependencies:
- browserslist: 4.28.1
+ browserslist: 4.28.2
escalade: 3.2.0
picocolors: 1.1.1
- use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4):
+ use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5):
dependencies:
- react: 19.2.4
+ react: 19.2.5
tslib: 2.8.1
optionalDependencies:
'@types/react': 19.2.14
- use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4):
+ use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5):
dependencies:
detect-node-es: 1.1.0
- react: 19.2.4
+ react: 19.2.5
tslib: 2.8.1
optionalDependencies:
'@types/react': 19.2.14
- use-sync-external-store@1.6.0(react@19.2.4):
+ use-sync-external-store@1.6.0(react@19.2.5):
dependencies:
- react: 19.2.4
- optional: true
-
- util-deprecate@1.0.2: {}
+ react: 19.2.5
uuid@11.1.0: {}
@@ -9085,101 +10116,51 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-tsconfig-paths@6.1.0(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)):
- dependencies:
- debug: 4.4.3
- globrex: 0.1.2
- tsconfck: 3.1.6(typescript@5.9.3)
- vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- vite@7.3.0(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2):
- dependencies:
- esbuild: 0.27.2
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.8
- rollup: 4.54.0
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 25.2.3
- fsevents: 2.3.3
- jiti: 2.6.1
- lightningcss: 1.31.1
- tsx: 4.21.0
- yaml: 2.8.2
-
- vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2):
+ vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0):
dependencies:
- esbuild: 0.27.3
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.8
- rollup: 4.54.0
- tinyglobby: 0.2.15
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.10
+ rolldown: 1.0.0-rc.15
+ tinyglobby: 0.2.16
optionalDependencies:
- '@types/node': 25.2.3
+ '@types/node': 25.6.0
+ esbuild: 0.28.0
fsevents: 2.3.3
jiti: 2.6.1
- lightningcss: 1.31.1
tsx: 4.21.0
- yaml: 2.8.2
- vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2):
- dependencies:
- esbuild: 0.27.3
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.8
- rollup: 4.54.0
- tinyglobby: 0.2.15
+ vitefu@1.1.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)):
optionalDependencies:
- '@types/node': 25.4.0
- fsevents: 2.3.3
- jiti: 2.6.1
- lightningcss: 1.31.1
- tsx: 4.21.0
- yaml: 2.8.2
- optional: true
-
- vitest@4.0.18(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2):
- dependencies:
- '@vitest/expect': 4.0.18
- '@vitest/mocker': 4.0.18(vite@7.3.0(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))
- '@vitest/pretty-format': 4.0.18
- '@vitest/runner': 4.0.18
- '@vitest/snapshot': 4.0.18
- '@vitest/spy': 4.0.18
- '@vitest/utils': 4.0.18
- es-module-lexer: 1.7.0
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
+
+ vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)):
+ dependencies:
+ '@vitest/expect': 4.1.4
+ '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0))
+ '@vitest/pretty-format': 4.1.4
+ '@vitest/runner': 4.1.4
+ '@vitest/snapshot': 4.1.4
+ '@vitest/spy': 4.1.4
+ '@vitest/utils': 4.1.4
+ es-module-lexer: 2.0.0
expect-type: 1.3.0
magic-string: 0.30.21
obug: 2.1.1
pathe: 2.0.3
- picomatch: 4.0.3
- std-env: 3.10.0
+ picomatch: 4.0.4
+ std-env: 4.0.0
tinybench: 2.9.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
tinyglobby: 0.2.15
- tinyrainbow: 3.0.3
- vite: 7.3.0(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)
+ tinyrainbow: 3.1.0
+ vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 25.2.3
+ '@types/node': 25.6.0
+ '@vitest/coverage-v8': 4.1.4(vitest@4.1.4)
transitivePeerDependencies:
- - jiti
- - less
- - lightningcss
- msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - terser
- - tsx
- - yaml
vscode-jsonrpc@8.2.0: {}
@@ -9202,39 +10183,45 @@ snapshots:
webpack-virtual-modules@0.6.2: {}
+ whatwg-encoding@3.1.1:
+ dependencies:
+ iconv-lite: 0.6.3
+
+ whatwg-mimetype@4.0.0: {}
+
which@2.0.2:
dependencies:
isexe: 2.0.0
which@4.0.0:
dependencies:
- isexe: 3.1.1
+ isexe: 3.1.5
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
- workerd@1.20260210.0:
+ workerd@1.20260415.1:
optionalDependencies:
- '@cloudflare/workerd-darwin-64': 1.20260210.0
- '@cloudflare/workerd-darwin-arm64': 1.20260210.0
- '@cloudflare/workerd-linux-64': 1.20260210.0
- '@cloudflare/workerd-linux-arm64': 1.20260210.0
- '@cloudflare/workerd-windows-64': 1.20260210.0
+ '@cloudflare/workerd-darwin-64': 1.20260415.1
+ '@cloudflare/workerd-darwin-arm64': 1.20260415.1
+ '@cloudflare/workerd-linux-64': 1.20260415.1
+ '@cloudflare/workerd-linux-arm64': 1.20260415.1
+ '@cloudflare/workerd-windows-64': 1.20260415.1
- wrangler@4.64.0(@cloudflare/workers-types@4.20260210.0):
+ wrangler@4.83.0(@cloudflare/workers-types@4.20260417.1):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
- '@cloudflare/unenv-preset': 2.12.1(unenv@2.0.0-rc.24)(workerd@1.20260210.0)
+ '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260415.1)
blake3-wasm: 2.1.5
esbuild: 0.27.3
- miniflare: 4.20260210.0
+ miniflare: 4.20260415.0
path-to-regexp: 6.3.0
unenv: 2.0.0-rc.24
- workerd: 1.20260210.0
+ workerd: 1.20260415.1
optionalDependencies:
- '@cloudflare/workers-types': 4.20260210.0
+ '@cloudflare/workers-types': 4.20260417.1
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil
@@ -9242,13 +10229,17 @@ snapshots:
ws@8.18.0: {}
- ws@8.19.0:
+ ws@8.20.0:
optional: true
- yallist@3.1.1: {}
+ xmlbuilder2@4.0.3:
+ dependencies:
+ '@oozcitak/dom': 2.0.2
+ '@oozcitak/infra': 2.0.2
+ '@oozcitak/util': 10.0.0
+ js-yaml: 4.1.1
- yaml@2.8.2:
- optional: true
+ yallist@3.1.1: {}
youch-core@0.3.3:
dependencies:
@@ -9259,10 +10250,12 @@ snapshots:
dependencies:
'@poppinss/colors': 4.1.6
'@poppinss/dumper': 0.6.5
- '@speed-highlight/core': 1.2.12
+ '@speed-highlight/core': 1.2.15
cookie: 1.1.1
youch-core: 0.3.3
+ zod@3.25.76: {}
+
zod@4.3.6: {}
zwitch@2.0.4: {}
diff --git a/tsconfig.base.json b/tsconfig.base.json
index c7a634a..b5ceb2c 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -1,57 +1,31 @@
{
- "$schema": "https://json.schemastore.org/tsconfig.json",
+ "include": ["${configDir}"],
+ "exclude": ["node_modules", "dist"],
- "include": ["${configDir}/src"],
- "exclude": [".ignore", "node_modules", "dist"],
-
- "compileOnSave": true,
"compilerOptions": {
+ // Environment setup & latest features
+ "lib": ["DOM", "ESNext"],
+ "target": "ESNext",
+ "module": "Preserve",
+ "moduleDetection": "force",
+ "allowJs": true,
+ "jsx": "react-jsx",
+ "types": ["node"],
+ // Bundler mode
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "noEmit": true,
+ // Best practices
"strict": true,
-
- "allowUnreachableCode": false,
- "allowUnusedLabels": false,
- "exactOptionalPropertyTypes": false,
+ "skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
+ "noUncheckedIndexedAccess": true,
"noImplicitOverride": true,
- "noImplicitReturns": true,
+ // Some stricter flags (disabled by default)
+ "noUnusedLocals": false,
+ "noUnusedParameters": false,
"noPropertyAccessFromIndexSignature": false,
- "noUncheckedIndexedAccess": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
-
- "allowArbitraryExtensions": false,
- "allowImportingTsExtensions": false,
- "module": "ESNext",
- "moduleResolution": "Bundler",
- "resolveJsonModule": true,
-
- "declaration": true,
- "declarationMap": true,
- "importHelpers": false,
- "newLine": "lf",
- "removeComments": false,
- "sourceMap": true,
- "inlineSourceMap": false,
-
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "isolatedModules": true,
-
- "experimentalDecorators": true,
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
- "target": "ES2022",
- "useDefineForClassFields": true,
- "skipLibCheck": true,
-
- "baseUrl": "${configDir}",
- "outDir": "${configDir}/dist",
- "tsBuildInfoFile": "${configDir}/dist/.tsbuildinfo",
- "paths": { "~/*": ["src/*"] },
-
- "plugins": [
- { "transform": "typescript-transform-paths" },
- { "transform": "typescript-transform-paths", "afterDeclarations": true }
- ]
+ "tsBuildInfoFile": "node_modules/.cache/.tsbuildinfo"
}
}
diff --git a/website/content/core-concepts/configuration.mdx b/website/content/core-concepts/configuration.mdx
index 56040d1..5c6afaf 100644
--- a/website/content/core-concepts/configuration.mdx
+++ b/website/content/core-concepts/configuration.mdx
@@ -11,7 +11,8 @@ Create a `saykit.config.ts` in your project root:
```ts title='saykit.config.ts'
import { defineConfig } from '@saykit/config';
-import createFormatter from '@saykit/format-po';
+import createPoFormatter from '@saykit/format-po';
+import createJsTransformer from '@saykit/transform-js';
export default defineConfig({
sourceLocale: 'en',
@@ -20,7 +21,8 @@ export default defineConfig({
{
include: ['src/**/*.{ts,tsx}'],
output: 'src/locales/{locale}.{extension}',
- formatter: createFormatter(),
+ transformer: createJsTransformer(),
+ formatter: createPoFormatter(),
},
],
});
@@ -94,6 +96,18 @@ Buckets group related messages and control extraction and output:
type: '`${string}{locale}${string}{extension}`',
required: true,
},
+ transformer: {
+ description: 'Transformer or array of Transformers for message extraction and transformation.',
+ type: (
+ <>
+
+ Transformer
+ {' '}
+ | Transformer[]
+ >
+ ),
+ required: true,
+ },
formatter: {
description: 'Formatter for message serialisation.',
type: (
@@ -108,6 +122,34 @@ Buckets group related messages and control extraction and output:
}}
/>
+#### Transformer
+
+Transformers control how messages are extracted and transformed:
+
+ boolean',
+ required: true,
+ },
+ extract: {
+ description: 'Function to extract messages from file content. Must be synchronous - cannot return Promise.',
+ type: (
+ <>
+ (code: string, id: string) {'=>'} Message[]
+ >
+ ),
+ required: true,
+ },
+ transform: {
+ description: 'Function to transform source code. Must be synchronous - cannot return Promise.',
+ type: '(code: string, id: string) => string',
+ required: true,
+ },
+ }}
+/>
+
#### Formatter
Formatters control how messages are serialized to disk:
@@ -120,27 +162,19 @@ Formatters control how messages are serialized to disk:
required: true,
},
parse: {
- description: 'Function to parse file content into messages.',
+ description: 'Function to parse file content into messages. Must be synchronous - cannot return Promise.',
type: (
<>
- (content: string, context: {'{ locale: string }'}) {'=>'} Promise{'<'}
-
- Message
-
- []{'>'}
+ (content: string, context: {'{ locale: string }'}) {'=>'} Message[]
>
),
required: true,
},
stringify: {
- description: 'Function to serialize messages to file content.',
+ description: 'Function to serialize messages to file content. Must be synchronous - cannot return Promise.',
type: (
<>
- (messages:{' '}
-
- Message
-
- [], context: {'{ locale: string }'}) {'=>'} Promise{''}
+ (messages: Message[], context: {'{ locale: string }'}) {'=>'} string
>
),
required: true,
diff --git a/website/content/core-concepts/runtime.mdx b/website/content/core-concepts/runtime.mdx
index 41ad4ee..13b0e66 100644
--- a/website/content/core-concepts/runtime.mdx
+++ b/website/content/core-concepts/runtime.mdx
@@ -50,7 +50,7 @@ A `Say` instance exposes three key pieces of state:
## Load Messages
-Use `load()` to fetch message catalogs through the configured loader.
+Use `load()` to fetch message catalogues through the configured loader.
```ts
await say.load('fr');
diff --git a/website/content/getting-started/installation.mdx b/website/content/getting-started/installation.mdx
index 3cc6124..eb411b4 100644
--- a/website/content/getting-started/installation.mdx
+++ b/website/content/getting-started/installation.mdx
@@ -12,13 +12,18 @@ description: Install SayKit and set up internationalisation in your project
### Framework Integrations
-- `@saykit/react` - React integration with `` component and hooks for client and server components
- `@saykit/carbon` - Carbon integration for Discord bots with command localisation support
+- `@saykit/react` - React integration for SayKit, i18n hooks and components
### Build Tools
-- `@saykit/babel-plugin` - Babel plugin to transform `say` template literals into message calls
- `unplugin-saykit` - Universal plugin for Vite, Webpack, Rollup, esbuild, and more
+- `babel-plugin-saykit` - Babel plugin for SayKit
+
+### Transformers
+
+- `@saykit/transform-js` - JavaScript and TypeScript transformer for SayKit
+- `@saykit/transform-jsx` - JSX and TSX source transformer for SayKit
### Translation Formats
diff --git a/website/content/getting-started/introduction.mdx b/website/content/getting-started/introduction.mdx
index ead462a..f42f852 100644
--- a/website/content/getting-started/introduction.mdx
+++ b/website/content/getting-started/introduction.mdx
@@ -26,11 +26,11 @@ import { Braces, WandSparkles, Puzzle, Languages } from 'lucide-react';
title="Compile-Time Extraction"
description="Automatically extract translatable messages from your source code during build"
/>
- }
title="Framework Agnostic"
description="Works with React, Next.js, and any framework that supports plugins"
- />
+ /> */}
}
title="ICU MessageFormat"
diff --git a/website/package.json b/website/package.json
index b47d707..4ec0bbb 100644
--- a/website/package.json
+++ b/website/package.json
@@ -12,26 +12,26 @@
"dependencies": {
"@takumi-rs/image-response": "^0.71.7",
"beautiful-mermaid": "^1.1.3",
- "fumadocs-core": "16.6.16",
- "fumadocs-mdx": "14.2.9",
- "fumadocs-typescript": "^5.1.5",
- "fumadocs-ui": "16.6.16",
- "lucide-react": "^0.577.0",
+ "fumadocs-core": "16.7.16",
+ "fumadocs-mdx": "14.3.0",
+ "fumadocs-typescript": "^5.2.6",
+ "fumadocs-ui": "16.7.16",
+ "lucide-react": "^1.8.0",
"mermaid": "^11.13.0",
- "next": "16.1.6",
+ "next": "16.2.4",
"next-themes": "^0.4.6",
- "react": "^19.2.4",
- "react-dom": "^19.2.4",
+ "react": "^19.2.5",
+ "react-dom": "^19.2.5",
"tailwind-merge": "^3.5.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.2.1",
"@types/mdx": "^2.0.13",
- "@types/node": "^25.4.0",
+ "@types/node": "^25.6.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
- "postcss": "^8.5.8",
+ "postcss": "^8.5.10",
"tailwindcss": "^4.2.1",
- "typescript": "^5.9.3"
+ "typescript": "^6.0.3"
}
}