diff --git a/examples/react/start-basic-netlify/.gitignore b/examples/react/start-basic-netlify/.gitignore
new file mode 100644
index 00000000000..576535e6017
--- /dev/null
+++ b/examples/react/start-basic-netlify/.gitignore
@@ -0,0 +1,24 @@
+node_modules
+package-lock.json
+yarn.lock
+
+.DS_Store
+.cache
+.env
+.vercel
+.output
+.nitro
+/build/
+/api/
+/server/build
+/public/build
+dist
+# Sentry Config File
+.env.sentry-build-plugin
+/test-results/
+/playwright-report/
+/blob-report/
+/playwright/.cache/
+.tanstack
+# Local Netlify folder
+.netlify
diff --git a/examples/react/start-basic-netlify/.prettierignore b/examples/react/start-basic-netlify/.prettierignore
new file mode 100644
index 00000000000..2be5eaa6ece
--- /dev/null
+++ b/examples/react/start-basic-netlify/.prettierignore
@@ -0,0 +1,4 @@
+**/build
+**/public
+pnpm-lock.yaml
+routeTree.gen.ts
\ No newline at end of file
diff --git a/examples/react/start-basic-netlify/.vscode/settings.json b/examples/react/start-basic-netlify/.vscode/settings.json
new file mode 100644
index 00000000000..00b5278e580
--- /dev/null
+++ b/examples/react/start-basic-netlify/.vscode/settings.json
@@ -0,0 +1,11 @@
+{
+ "files.watcherExclude": {
+ "**/routeTree.gen.ts": true
+ },
+ "search.exclude": {
+ "**/routeTree.gen.ts": true
+ },
+ "files.readonlyInclude": {
+ "**/routeTree.gen.ts": true
+ }
+}
diff --git a/examples/react/start-basic-netlify/README.md b/examples/react/start-basic-netlify/README.md
new file mode 100644
index 00000000000..e4175f3aa77
--- /dev/null
+++ b/examples/react/start-basic-netlify/README.md
@@ -0,0 +1,37 @@
+# TanStack Start - Netlify Example
+
+This is the basic TanStack Start Netlify example, demonstrating the fundamentals of building applications with TanStack Router and TanStack Start and deployment with Netlify.
+
+- [TanStack Router Docs](https://tanstack.com/router)
+
+It's deployed automagically with Netlify!
+
+- [Netlify](https://netlify.com/)
+- [Deploy to Netlify Docs](https://docs.netlify.com/build/frameworks/framework-setup-guides/tanstack-start/)
+
+## Start a new project based on this example
+
+To start a new project based on this example, run:
+
+```sh
+npx gitpick TanStack/router/tree/main/examples/react/start-basic-netlify start-basic-netlify
+```
+
+## Getting Started
+
+From your terminal:
+
+```sh
+pnpm install
+pnpm dev
+```
+
+This starts your app in development mode, rebuilding assets on file changes.
+
+## Build
+
+To build the app for production:
+
+```sh
+pnpm build
+```
\ No newline at end of file
diff --git a/examples/react/start-basic-netlify/netlify.toml b/examples/react/start-basic-netlify/netlify.toml
new file mode 100644
index 00000000000..09cdcd2300a
--- /dev/null
+++ b/examples/react/start-basic-netlify/netlify.toml
@@ -0,0 +1,3 @@
+[build]
+ command = "vite build"
+ publish = "dist/client"
\ No newline at end of file
diff --git a/examples/react/start-basic-netlify/package.json b/examples/react/start-basic-netlify/package.json
new file mode 100644
index 00000000000..75f672de893
--- /dev/null
+++ b/examples/react/start-basic-netlify/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "tanstack-start-example-basic-netlify",
+ "private": true,
+ "sideEffects": false,
+ "type": "module",
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build && tsc --noEmit",
+ "preview": "vite preview",
+ "start": "node .output/server/index.mjs"
+ },
+ "dependencies": {
+ "@tanstack/react-router": "^1.141.0",
+ "@tanstack/react-router-devtools": "^1.141.0",
+ "@tanstack/react-start": "^1.141.0",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+ "tailwind-merge": "^2.6.0",
+ "zod": "^3.24.2"
+ },
+ "devDependencies": {
+ "@netlify/vite-plugin-tanstack-start": "^1.2.3",
+ "@tailwindcss/postcss": "^4.1.15",
+ "@types/node": "^22.5.4",
+ "@types/react": "^19.0.8",
+ "@types/react-dom": "^19.0.3",
+ "@vitejs/plugin-react": "^4.6.0",
+ "postcss": "^8.5.1",
+ "tailwindcss": "^4.1.17",
+ "typescript": "^5.7.2",
+ "vite": "^7.1.7",
+ "vite-tsconfig-paths": "^5.1.4"
+ }
+}
diff --git a/examples/react/start-basic-netlify/postcss.config.mjs b/examples/react/start-basic-netlify/postcss.config.mjs
new file mode 100644
index 00000000000..a7f73a2d1d7
--- /dev/null
+++ b/examples/react/start-basic-netlify/postcss.config.mjs
@@ -0,0 +1,5 @@
+export default {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
+}
diff --git a/examples/react/start-basic-netlify/public/android-chrome-192x192.png b/examples/react/start-basic-netlify/public/android-chrome-192x192.png
new file mode 100644
index 00000000000..09c8324f8c6
Binary files /dev/null and b/examples/react/start-basic-netlify/public/android-chrome-192x192.png differ
diff --git a/examples/react/start-basic-netlify/public/android-chrome-512x512.png b/examples/react/start-basic-netlify/public/android-chrome-512x512.png
new file mode 100644
index 00000000000..11d626ea3d0
Binary files /dev/null and b/examples/react/start-basic-netlify/public/android-chrome-512x512.png differ
diff --git a/examples/react/start-basic-netlify/public/apple-touch-icon.png b/examples/react/start-basic-netlify/public/apple-touch-icon.png
new file mode 100644
index 00000000000..5a9423cc02c
Binary files /dev/null and b/examples/react/start-basic-netlify/public/apple-touch-icon.png differ
diff --git a/examples/react/start-basic-netlify/public/favicon-16x16.png b/examples/react/start-basic-netlify/public/favicon-16x16.png
new file mode 100644
index 00000000000..e3389b00443
Binary files /dev/null and b/examples/react/start-basic-netlify/public/favicon-16x16.png differ
diff --git a/examples/react/start-basic-netlify/public/favicon-32x32.png b/examples/react/start-basic-netlify/public/favicon-32x32.png
new file mode 100644
index 00000000000..900c77d444c
Binary files /dev/null and b/examples/react/start-basic-netlify/public/favicon-32x32.png differ
diff --git a/examples/react/start-basic-netlify/public/favicon.ico b/examples/react/start-basic-netlify/public/favicon.ico
new file mode 100644
index 00000000000..1a1751676f7
Binary files /dev/null and b/examples/react/start-basic-netlify/public/favicon.ico differ
diff --git a/examples/react/start-basic-netlify/public/favicon.png b/examples/react/start-basic-netlify/public/favicon.png
new file mode 100644
index 00000000000..1e77bc06091
Binary files /dev/null and b/examples/react/start-basic-netlify/public/favicon.png differ
diff --git a/examples/react/start-basic-netlify/public/site.webmanifest b/examples/react/start-basic-netlify/public/site.webmanifest
new file mode 100644
index 00000000000..fa99de77db6
--- /dev/null
+++ b/examples/react/start-basic-netlify/public/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/examples/react/start-basic-netlify/src/components/DefaultCatchBoundary.tsx b/examples/react/start-basic-netlify/src/components/DefaultCatchBoundary.tsx
new file mode 100644
index 00000000000..260c2ea41f7
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/components/DefaultCatchBoundary.tsx
@@ -0,0 +1,53 @@
+import {
+ ErrorComponent,
+ Link,
+ rootRouteId,
+ useMatch,
+ useRouter,
+} from '@tanstack/react-router'
+import type { ErrorComponentProps } from '@tanstack/react-router'
+
+export function DefaultCatchBoundary({ error }: ErrorComponentProps) {
+ const router = useRouter()
+ const isRoot = useMatch({
+ strict: false,
+ select: (state) => state.id === rootRouteId,
+ })
+
+ console.error('DefaultCatchBoundary Error:', error)
+
+ return (
+
+
+
+
+ {isRoot ? (
+
+ Home
+
+ ) : (
+ {
+ e.preventDefault()
+ window.history.back()
+ }}
+ >
+ Go Back
+
+ )}
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/components/NotFound.tsx b/examples/react/start-basic-netlify/src/components/NotFound.tsx
new file mode 100644
index 00000000000..22348fa94fa
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/components/NotFound.tsx
@@ -0,0 +1,25 @@
+import { Link } from '@tanstack/react-router'
+
+export function NotFound({ children }: { children?: React.ReactNode }) {
+ return (
+
+
+ {children ||
The page you are looking for does not exist.
}
+
+
+
+
+ Start Over
+
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/components/PostError.tsx b/examples/react/start-basic-netlify/src/components/PostError.tsx
new file mode 100644
index 00000000000..271f2d1de1f
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/components/PostError.tsx
@@ -0,0 +1,6 @@
+import { ErrorComponent } from '@tanstack/react-router'
+import type { ErrorComponentProps } from '@tanstack/react-router'
+
+export function PostErrorComponent({ error }: ErrorComponentProps) {
+ return
+}
diff --git a/examples/react/start-basic-netlify/src/components/UserError.tsx b/examples/react/start-basic-netlify/src/components/UserError.tsx
new file mode 100644
index 00000000000..af5d0c6f160
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/components/UserError.tsx
@@ -0,0 +1,6 @@
+import { ErrorComponent } from '@tanstack/react-router'
+import type { ErrorComponentProps } from '@tanstack/react-router'
+
+export function UserErrorComponent({ error }: ErrorComponentProps) {
+ return
+}
diff --git a/examples/react/start-basic-netlify/src/routeTree.gen.ts b/examples/react/start-basic-netlify/src/routeTree.gen.ts
new file mode 100644
index 00000000000..06a64190d7f
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routeTree.gen.ts
@@ -0,0 +1,447 @@
+/* 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 UsersRouteImport } from './routes/users'
+import { Route as RedirectRouteImport } from './routes/redirect'
+import { Route as PostsRouteImport } from './routes/posts'
+import { Route as DeferredRouteImport } from './routes/deferred'
+import { Route as CustomScriptDotjsRouteImport } from './routes/customScript[.]js'
+import { Route as PathlessLayoutRouteImport } from './routes/_pathlessLayout'
+import { Route as IndexRouteImport } from './routes/index'
+import { Route as UsersIndexRouteImport } from './routes/users.index'
+import { Route as PostsIndexRouteImport } from './routes/posts.index'
+import { Route as UsersUserIdRouteImport } from './routes/users.$userId'
+import { Route as PostsPostIdRouteImport } from './routes/posts.$postId'
+import { Route as ApiUsersRouteImport } from './routes/api/users'
+import { Route as PathlessLayoutNestedLayoutRouteImport } from './routes/_pathlessLayout/_nested-layout'
+import { Route as PostsPostIdDeepRouteImport } from './routes/posts_.$postId.deep'
+import { Route as ApiUsersUserIdRouteImport } from './routes/api/users.$userId'
+import { Route as PathlessLayoutNestedLayoutRouteBRouteImport } from './routes/_pathlessLayout/_nested-layout/route-b'
+import { Route as PathlessLayoutNestedLayoutRouteARouteImport } from './routes/_pathlessLayout/_nested-layout/route-a'
+
+const UsersRoute = UsersRouteImport.update({
+ id: '/users',
+ path: '/users',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const RedirectRoute = RedirectRouteImport.update({
+ id: '/redirect',
+ path: '/redirect',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const PostsRoute = PostsRouteImport.update({
+ id: '/posts',
+ path: '/posts',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const DeferredRoute = DeferredRouteImport.update({
+ id: '/deferred',
+ path: '/deferred',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const CustomScriptDotjsRoute = CustomScriptDotjsRouteImport.update({
+ id: '/customScript.js',
+ path: '/customScript.js',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const PathlessLayoutRoute = PathlessLayoutRouteImport.update({
+ id: '/_pathlessLayout',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const IndexRoute = IndexRouteImport.update({
+ id: '/',
+ path: '/',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const UsersIndexRoute = UsersIndexRouteImport.update({
+ id: '/',
+ path: '/',
+ getParentRoute: () => UsersRoute,
+} as any)
+const PostsIndexRoute = PostsIndexRouteImport.update({
+ id: '/',
+ path: '/',
+ getParentRoute: () => PostsRoute,
+} as any)
+const UsersUserIdRoute = UsersUserIdRouteImport.update({
+ id: '/$userId',
+ path: '/$userId',
+ getParentRoute: () => UsersRoute,
+} as any)
+const PostsPostIdRoute = PostsPostIdRouteImport.update({
+ id: '/$postId',
+ path: '/$postId',
+ getParentRoute: () => PostsRoute,
+} as any)
+const ApiUsersRoute = ApiUsersRouteImport.update({
+ id: '/api/users',
+ path: '/api/users',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const PathlessLayoutNestedLayoutRoute =
+ PathlessLayoutNestedLayoutRouteImport.update({
+ id: '/_nested-layout',
+ getParentRoute: () => PathlessLayoutRoute,
+ } as any)
+const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({
+ id: '/posts_/$postId/deep',
+ path: '/posts/$postId/deep',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const ApiUsersUserIdRoute = ApiUsersUserIdRouteImport.update({
+ id: '/$userId',
+ path: '/$userId',
+ getParentRoute: () => ApiUsersRoute,
+} as any)
+const PathlessLayoutNestedLayoutRouteBRoute =
+ PathlessLayoutNestedLayoutRouteBRouteImport.update({
+ id: '/route-b',
+ path: '/route-b',
+ getParentRoute: () => PathlessLayoutNestedLayoutRoute,
+ } as any)
+const PathlessLayoutNestedLayoutRouteARoute =
+ PathlessLayoutNestedLayoutRouteARouteImport.update({
+ id: '/route-a',
+ path: '/route-a',
+ getParentRoute: () => PathlessLayoutNestedLayoutRoute,
+ } as any)
+
+export interface FileRoutesByFullPath {
+ '/': typeof IndexRoute
+ '/customScript.js': typeof CustomScriptDotjsRoute
+ '/deferred': typeof DeferredRoute
+ '/posts': typeof PostsRouteWithChildren
+ '/redirect': typeof RedirectRoute
+ '/users': typeof UsersRouteWithChildren
+ '/api/users': typeof ApiUsersRouteWithChildren
+ '/posts/$postId': typeof PostsPostIdRoute
+ '/users/$userId': typeof UsersUserIdRoute
+ '/posts/': typeof PostsIndexRoute
+ '/users/': typeof UsersIndexRoute
+ '/route-a': typeof PathlessLayoutNestedLayoutRouteARoute
+ '/route-b': typeof PathlessLayoutNestedLayoutRouteBRoute
+ '/api/users/$userId': typeof ApiUsersUserIdRoute
+ '/posts/$postId/deep': typeof PostsPostIdDeepRoute
+}
+export interface FileRoutesByTo {
+ '/': typeof IndexRoute
+ '/customScript.js': typeof CustomScriptDotjsRoute
+ '/deferred': typeof DeferredRoute
+ '/redirect': typeof RedirectRoute
+ '/api/users': typeof ApiUsersRouteWithChildren
+ '/posts/$postId': typeof PostsPostIdRoute
+ '/users/$userId': typeof UsersUserIdRoute
+ '/posts': typeof PostsIndexRoute
+ '/users': typeof UsersIndexRoute
+ '/route-a': typeof PathlessLayoutNestedLayoutRouteARoute
+ '/route-b': typeof PathlessLayoutNestedLayoutRouteBRoute
+ '/api/users/$userId': typeof ApiUsersUserIdRoute
+ '/posts/$postId/deep': typeof PostsPostIdDeepRoute
+}
+export interface FileRoutesById {
+ __root__: typeof rootRouteImport
+ '/': typeof IndexRoute
+ '/_pathlessLayout': typeof PathlessLayoutRouteWithChildren
+ '/customScript.js': typeof CustomScriptDotjsRoute
+ '/deferred': typeof DeferredRoute
+ '/posts': typeof PostsRouteWithChildren
+ '/redirect': typeof RedirectRoute
+ '/users': typeof UsersRouteWithChildren
+ '/_pathlessLayout/_nested-layout': typeof PathlessLayoutNestedLayoutRouteWithChildren
+ '/api/users': typeof ApiUsersRouteWithChildren
+ '/posts/$postId': typeof PostsPostIdRoute
+ '/users/$userId': typeof UsersUserIdRoute
+ '/posts/': typeof PostsIndexRoute
+ '/users/': typeof UsersIndexRoute
+ '/_pathlessLayout/_nested-layout/route-a': typeof PathlessLayoutNestedLayoutRouteARoute
+ '/_pathlessLayout/_nested-layout/route-b': typeof PathlessLayoutNestedLayoutRouteBRoute
+ '/api/users/$userId': typeof ApiUsersUserIdRoute
+ '/posts_/$postId/deep': typeof PostsPostIdDeepRoute
+}
+export interface FileRouteTypes {
+ fileRoutesByFullPath: FileRoutesByFullPath
+ fullPaths:
+ | '/'
+ | '/customScript.js'
+ | '/deferred'
+ | '/posts'
+ | '/redirect'
+ | '/users'
+ | '/api/users'
+ | '/posts/$postId'
+ | '/users/$userId'
+ | '/posts/'
+ | '/users/'
+ | '/route-a'
+ | '/route-b'
+ | '/api/users/$userId'
+ | '/posts/$postId/deep'
+ fileRoutesByTo: FileRoutesByTo
+ to:
+ | '/'
+ | '/customScript.js'
+ | '/deferred'
+ | '/redirect'
+ | '/api/users'
+ | '/posts/$postId'
+ | '/users/$userId'
+ | '/posts'
+ | '/users'
+ | '/route-a'
+ | '/route-b'
+ | '/api/users/$userId'
+ | '/posts/$postId/deep'
+ id:
+ | '__root__'
+ | '/'
+ | '/_pathlessLayout'
+ | '/customScript.js'
+ | '/deferred'
+ | '/posts'
+ | '/redirect'
+ | '/users'
+ | '/_pathlessLayout/_nested-layout'
+ | '/api/users'
+ | '/posts/$postId'
+ | '/users/$userId'
+ | '/posts/'
+ | '/users/'
+ | '/_pathlessLayout/_nested-layout/route-a'
+ | '/_pathlessLayout/_nested-layout/route-b'
+ | '/api/users/$userId'
+ | '/posts_/$postId/deep'
+ fileRoutesById: FileRoutesById
+}
+export interface RootRouteChildren {
+ IndexRoute: typeof IndexRoute
+ PathlessLayoutRoute: typeof PathlessLayoutRouteWithChildren
+ CustomScriptDotjsRoute: typeof CustomScriptDotjsRoute
+ DeferredRoute: typeof DeferredRoute
+ PostsRoute: typeof PostsRouteWithChildren
+ RedirectRoute: typeof RedirectRoute
+ UsersRoute: typeof UsersRouteWithChildren
+ ApiUsersRoute: typeof ApiUsersRouteWithChildren
+ PostsPostIdDeepRoute: typeof PostsPostIdDeepRoute
+}
+
+declare module '@tanstack/react-router' {
+ interface FileRoutesByPath {
+ '/users': {
+ id: '/users'
+ path: '/users'
+ fullPath: '/users'
+ preLoaderRoute: typeof UsersRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/redirect': {
+ id: '/redirect'
+ path: '/redirect'
+ fullPath: '/redirect'
+ preLoaderRoute: typeof RedirectRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/posts': {
+ id: '/posts'
+ path: '/posts'
+ fullPath: '/posts'
+ preLoaderRoute: typeof PostsRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/deferred': {
+ id: '/deferred'
+ path: '/deferred'
+ fullPath: '/deferred'
+ preLoaderRoute: typeof DeferredRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/customScript.js': {
+ id: '/customScript.js'
+ path: '/customScript.js'
+ fullPath: '/customScript.js'
+ preLoaderRoute: typeof CustomScriptDotjsRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/_pathlessLayout': {
+ id: '/_pathlessLayout'
+ path: ''
+ fullPath: ''
+ preLoaderRoute: typeof PathlessLayoutRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/': {
+ id: '/'
+ path: '/'
+ fullPath: '/'
+ preLoaderRoute: typeof IndexRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/users/': {
+ id: '/users/'
+ path: '/'
+ fullPath: '/users/'
+ preLoaderRoute: typeof UsersIndexRouteImport
+ parentRoute: typeof UsersRoute
+ }
+ '/posts/': {
+ id: '/posts/'
+ path: '/'
+ fullPath: '/posts/'
+ preLoaderRoute: typeof PostsIndexRouteImport
+ parentRoute: typeof PostsRoute
+ }
+ '/users/$userId': {
+ id: '/users/$userId'
+ path: '/$userId'
+ fullPath: '/users/$userId'
+ preLoaderRoute: typeof UsersUserIdRouteImport
+ parentRoute: typeof UsersRoute
+ }
+ '/posts/$postId': {
+ id: '/posts/$postId'
+ path: '/$postId'
+ fullPath: '/posts/$postId'
+ preLoaderRoute: typeof PostsPostIdRouteImport
+ parentRoute: typeof PostsRoute
+ }
+ '/api/users': {
+ id: '/api/users'
+ path: '/api/users'
+ fullPath: '/api/users'
+ preLoaderRoute: typeof ApiUsersRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/_pathlessLayout/_nested-layout': {
+ id: '/_pathlessLayout/_nested-layout'
+ path: ''
+ fullPath: ''
+ preLoaderRoute: typeof PathlessLayoutNestedLayoutRouteImport
+ parentRoute: typeof PathlessLayoutRoute
+ }
+ '/posts_/$postId/deep': {
+ id: '/posts_/$postId/deep'
+ path: '/posts/$postId/deep'
+ fullPath: '/posts/$postId/deep'
+ preLoaderRoute: typeof PostsPostIdDeepRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/api/users/$userId': {
+ id: '/api/users/$userId'
+ path: '/$userId'
+ fullPath: '/api/users/$userId'
+ preLoaderRoute: typeof ApiUsersUserIdRouteImport
+ parentRoute: typeof ApiUsersRoute
+ }
+ '/_pathlessLayout/_nested-layout/route-b': {
+ id: '/_pathlessLayout/_nested-layout/route-b'
+ path: '/route-b'
+ fullPath: '/route-b'
+ preLoaderRoute: typeof PathlessLayoutNestedLayoutRouteBRouteImport
+ parentRoute: typeof PathlessLayoutNestedLayoutRoute
+ }
+ '/_pathlessLayout/_nested-layout/route-a': {
+ id: '/_pathlessLayout/_nested-layout/route-a'
+ path: '/route-a'
+ fullPath: '/route-a'
+ preLoaderRoute: typeof PathlessLayoutNestedLayoutRouteARouteImport
+ parentRoute: typeof PathlessLayoutNestedLayoutRoute
+ }
+ }
+}
+
+interface PathlessLayoutNestedLayoutRouteChildren {
+ PathlessLayoutNestedLayoutRouteARoute: typeof PathlessLayoutNestedLayoutRouteARoute
+ PathlessLayoutNestedLayoutRouteBRoute: typeof PathlessLayoutNestedLayoutRouteBRoute
+}
+
+const PathlessLayoutNestedLayoutRouteChildren: PathlessLayoutNestedLayoutRouteChildren =
+ {
+ PathlessLayoutNestedLayoutRouteARoute:
+ PathlessLayoutNestedLayoutRouteARoute,
+ PathlessLayoutNestedLayoutRouteBRoute:
+ PathlessLayoutNestedLayoutRouteBRoute,
+ }
+
+const PathlessLayoutNestedLayoutRouteWithChildren =
+ PathlessLayoutNestedLayoutRoute._addFileChildren(
+ PathlessLayoutNestedLayoutRouteChildren,
+ )
+
+interface PathlessLayoutRouteChildren {
+ PathlessLayoutNestedLayoutRoute: typeof PathlessLayoutNestedLayoutRouteWithChildren
+}
+
+const PathlessLayoutRouteChildren: PathlessLayoutRouteChildren = {
+ PathlessLayoutNestedLayoutRoute: PathlessLayoutNestedLayoutRouteWithChildren,
+}
+
+const PathlessLayoutRouteWithChildren = PathlessLayoutRoute._addFileChildren(
+ PathlessLayoutRouteChildren,
+)
+
+interface PostsRouteChildren {
+ PostsPostIdRoute: typeof PostsPostIdRoute
+ PostsIndexRoute: typeof PostsIndexRoute
+}
+
+const PostsRouteChildren: PostsRouteChildren = {
+ PostsPostIdRoute: PostsPostIdRoute,
+ PostsIndexRoute: PostsIndexRoute,
+}
+
+const PostsRouteWithChildren = PostsRoute._addFileChildren(PostsRouteChildren)
+
+interface UsersRouteChildren {
+ UsersUserIdRoute: typeof UsersUserIdRoute
+ UsersIndexRoute: typeof UsersIndexRoute
+}
+
+const UsersRouteChildren: UsersRouteChildren = {
+ UsersUserIdRoute: UsersUserIdRoute,
+ UsersIndexRoute: UsersIndexRoute,
+}
+
+const UsersRouteWithChildren = UsersRoute._addFileChildren(UsersRouteChildren)
+
+interface ApiUsersRouteChildren {
+ ApiUsersUserIdRoute: typeof ApiUsersUserIdRoute
+}
+
+const ApiUsersRouteChildren: ApiUsersRouteChildren = {
+ ApiUsersUserIdRoute: ApiUsersUserIdRoute,
+}
+
+const ApiUsersRouteWithChildren = ApiUsersRoute._addFileChildren(
+ ApiUsersRouteChildren,
+)
+
+const rootRouteChildren: RootRouteChildren = {
+ IndexRoute: IndexRoute,
+ PathlessLayoutRoute: PathlessLayoutRouteWithChildren,
+ CustomScriptDotjsRoute: CustomScriptDotjsRoute,
+ DeferredRoute: DeferredRoute,
+ PostsRoute: PostsRouteWithChildren,
+ RedirectRoute: RedirectRoute,
+ UsersRoute: UsersRouteWithChildren,
+ ApiUsersRoute: ApiUsersRouteWithChildren,
+ PostsPostIdDeepRoute: PostsPostIdDeepRoute,
+}
+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/react/start-basic-netlify/src/router.tsx b/examples/react/start-basic-netlify/src/router.tsx
new file mode 100644
index 00000000000..f380f73be74
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/router.tsx
@@ -0,0 +1,15 @@
+import { createRouter } from '@tanstack/react-router'
+import { routeTree } from './routeTree.gen'
+import { DefaultCatchBoundary } from './components/DefaultCatchBoundary'
+import { NotFound } from './components/NotFound'
+
+export function getRouter() {
+ const router = createRouter({
+ routeTree,
+ defaultPreload: 'intent',
+ defaultErrorComponent: DefaultCatchBoundary,
+ defaultNotFoundComponent: () => ,
+ scrollRestoration: true,
+ })
+ return router
+}
diff --git a/examples/react/start-basic-netlify/src/routes/__root.tsx b/examples/react/start-basic-netlify/src/routes/__root.tsx
new file mode 100644
index 00000000000..6a68cd38d99
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/__root.tsx
@@ -0,0 +1,131 @@
+///
+import {
+ HeadContent,
+ Link,
+ Scripts,
+ createRootRoute,
+} from '@tanstack/react-router'
+import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'
+import * as React from 'react'
+import { DefaultCatchBoundary } from '~/components/DefaultCatchBoundary'
+import { NotFound } from '~/components/NotFound'
+import appCss from '~/styles/app.css?url'
+import { seo } from '~/utils/seo'
+
+export const Route = createRootRoute({
+ head: () => ({
+ meta: [
+ {
+ charSet: 'utf-8',
+ },
+ {
+ name: 'viewport',
+ content: 'width=device-width, initial-scale=1',
+ },
+ ...seo({
+ title:
+ 'TanStack Start | Type-Safe, Client-First, Full-Stack React Framework',
+ description: `TanStack Start is a type-safe, client-first, full-stack React framework. `,
+ }),
+ ],
+ links: [
+ { rel: 'stylesheet', href: appCss },
+ {
+ rel: 'apple-touch-icon',
+ sizes: '180x180',
+ href: '/apple-touch-icon.png',
+ },
+ {
+ rel: 'icon',
+ type: 'image/png',
+ sizes: '32x32',
+ href: '/favicon-32x32.png',
+ },
+ {
+ rel: 'icon',
+ type: 'image/png',
+ sizes: '16x16',
+ href: '/favicon-16x16.png',
+ },
+ { rel: 'manifest', href: '/site.webmanifest', color: '#ffffff' },
+ { rel: 'icon', href: '/favicon.ico' },
+ ],
+ scripts: [
+ {
+ src: '/customScript.js',
+ type: 'text/javascript',
+ },
+ ],
+ }),
+ errorComponent: DefaultCatchBoundary,
+ notFoundComponent: () => ,
+ shellComponent: RootDocument,
+})
+
+function RootDocument({ children }: { children: React.ReactNode }) {
+ return (
+
+
+
+
+
+
+
+ Home
+ {' '}
+
+ Posts
+ {' '}
+
+ Users
+ {' '}
+
+ Pathless Layout
+ {' '}
+
+ Deferred
+ {' '}
+
+ This Route Does Not Exist
+
+
+
+ {children}
+
+
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/_pathlessLayout.tsx b/examples/react/start-basic-netlify/src/routes/_pathlessLayout.tsx
new file mode 100644
index 00000000000..c3b12442b82
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/_pathlessLayout.tsx
@@ -0,0 +1,16 @@
+import { Outlet, createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/_pathlessLayout')({
+ component: LayoutComponent,
+})
+
+function LayoutComponent() {
+ return (
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout.tsx b/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout.tsx
new file mode 100644
index 00000000000..9a48b73a468
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout.tsx
@@ -0,0 +1,34 @@
+import { Link, Outlet, createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/_pathlessLayout/_nested-layout')({
+ component: LayoutComponent,
+})
+
+function LayoutComponent() {
+ return (
+
+
I'm a nested layout
+
+
+ Go to route A
+
+
+ Go to route B
+
+
+
+
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout/route-a.tsx b/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout/route-a.tsx
new file mode 100644
index 00000000000..426a8fe486d
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout/route-a.tsx
@@ -0,0 +1,11 @@
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/_pathlessLayout/_nested-layout/route-a')(
+ {
+ component: LayoutAComponent,
+ },
+)
+
+function LayoutAComponent() {
+ return I'm A!
+}
diff --git a/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout/route-b.tsx b/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout/route-b.tsx
new file mode 100644
index 00000000000..20facf2daf6
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/_pathlessLayout/_nested-layout/route-b.tsx
@@ -0,0 +1,11 @@
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/_pathlessLayout/_nested-layout/route-b')(
+ {
+ component: LayoutBComponent,
+ },
+)
+
+function LayoutBComponent() {
+ return I'm B!
+}
diff --git a/examples/react/start-basic-netlify/src/routes/api/users.$userId.ts b/examples/react/start-basic-netlify/src/routes/api/users.$userId.ts
new file mode 100644
index 00000000000..2ae7eb9c044
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/api/users.$userId.ts
@@ -0,0 +1,32 @@
+import { createFileRoute } from '@tanstack/react-router'
+import { json } from '@tanstack/react-start'
+import type { User } from '~/utils/users'
+
+export const Route = createFileRoute('/api/users/$userId')({
+ server: {
+ handlers: {
+ GET: async ({ params, request }) => {
+ console.info(`Fetching users by id=${params.userId}... @`, request.url)
+ try {
+ const res = await fetch(
+ 'https://jsonplaceholder.typicode.com/users/' + params.userId,
+ )
+ if (!res.ok) {
+ throw new Error('Failed to fetch user')
+ }
+
+ const user = (await res.json()) as User
+
+ return json({
+ id: user.id,
+ name: user.name,
+ email: user.email,
+ })
+ } catch (e) {
+ console.error(e)
+ return json({ error: 'User not found' }, { status: 404 })
+ }
+ },
+ },
+ },
+})
diff --git a/examples/react/start-basic-netlify/src/routes/api/users.ts b/examples/react/start-basic-netlify/src/routes/api/users.ts
new file mode 100644
index 00000000000..c1e7473b0ce
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/api/users.ts
@@ -0,0 +1,63 @@
+import { createFileRoute } from '@tanstack/react-router'
+import { getRequestHeaders } from '@tanstack/react-start/server'
+import { createMiddleware, json } from '@tanstack/react-start'
+import type { User } from '~/utils/users'
+
+const userLoggerMiddleware = createMiddleware().server(async ({ next }) => {
+ console.info('In: /users')
+ console.info('Request Headers:', getRequestHeaders())
+ const result = await next()
+ result.response.headers.set('x-users', 'true')
+ console.info('Out: /users')
+ return result
+})
+
+const testParentMiddleware = createMiddleware().server(async ({ next }) => {
+ console.info('In: testParentMiddleware')
+ const result = await next()
+ result.response.headers.set('x-test-parent', 'true')
+ console.info('Out: testParentMiddleware')
+ return result
+})
+
+const testMiddleware = createMiddleware()
+ .middleware([testParentMiddleware])
+ .server(async ({ next }) => {
+ console.info('In: testMiddleware')
+ const result = await next()
+ result.response.headers.set('x-test', 'true')
+
+ // if (Math.random() > 0.5) {
+ // throw new Response(null, {
+ // status: 302,
+ // headers: { Location: 'https://www.google.com' },
+ // })
+ // }
+
+ console.info('Out: testMiddleware')
+ return result
+ })
+
+export const Route = createFileRoute('/api/users')({
+ server: {
+ middleware: [testMiddleware, userLoggerMiddleware],
+ handlers: {
+ GET: async ({ request }) => {
+ console.info('GET /api/users @', request.url)
+ console.info('Fetching users... @', request.url)
+ const res = await fetch('https://jsonplaceholder.typicode.com/users')
+ if (!res.ok) {
+ throw new Error('Failed to fetch users')
+ }
+
+ const data = (await res.json()) as Array
+
+ const list = data.slice(0, 10)
+
+ return json(
+ list.map((u) => ({ id: u.id, name: u.name, email: u.email })),
+ )
+ },
+ },
+ },
+})
diff --git a/examples/react/start-basic-netlify/src/routes/customScript[.]js.ts b/examples/react/start-basic-netlify/src/routes/customScript[.]js.ts
new file mode 100644
index 00000000000..811471ac153
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/customScript[.]js.ts
@@ -0,0 +1,15 @@
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/customScript.js')({
+ server: {
+ handlers: {
+ GET: () => {
+ return new Response('console.log("Hello from customScript.js!")', {
+ headers: {
+ 'Content-Type': 'application/javascript',
+ },
+ })
+ },
+ },
+ },
+})
diff --git a/examples/react/start-basic-netlify/src/routes/deferred.tsx b/examples/react/start-basic-netlify/src/routes/deferred.tsx
new file mode 100644
index 00000000000..c38808243e1
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/deferred.tsx
@@ -0,0 +1,62 @@
+import { Await, createFileRoute } from '@tanstack/react-router'
+import { createServerFn } from '@tanstack/react-start'
+import { Suspense, useState } from 'react'
+
+const personServerFn = createServerFn({ method: 'GET' })
+ .inputValidator((d: string) => d)
+ .handler(({ data: name }) => {
+ return { name, randomNumber: Math.floor(Math.random() * 100) }
+ })
+
+const slowServerFn = createServerFn({ method: 'GET' })
+ .inputValidator((d: string) => d)
+ .handler(async ({ data: name }) => {
+ await new Promise((r) => setTimeout(r, 1000))
+ return { name, randomNumber: Math.floor(Math.random() * 100) }
+ })
+
+export const Route = createFileRoute('/deferred')({
+ loader: async () => {
+ return {
+ deferredStuff: new Promise((r) =>
+ setTimeout(() => r('Hello deferred!'), 2000),
+ ),
+ deferredPerson: slowServerFn({ data: 'Tanner Linsley' }),
+ person: await personServerFn({ data: 'John Doe' }),
+ }
+ },
+ component: Deferred,
+})
+
+function Deferred() {
+ const [count, setCount] = useState(0)
+ const { deferredStuff, deferredPerson, person } = Route.useLoaderData()
+
+ return (
+
+
+ {person.name} - {person.randomNumber}
+
+
Loading person... }>
+ (
+
+ {data.name} - {data.randomNumber}
+
+ )}
+ />
+
+ Loading stuff...}>
+ {data}
}
+ />
+
+ Count: {count}
+
+
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/index.tsx b/examples/react/start-basic-netlify/src/routes/index.tsx
new file mode 100644
index 00000000000..09a907cb18e
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/index.tsx
@@ -0,0 +1,13 @@
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/')({
+ component: Home,
+})
+
+function Home() {
+ return (
+
+
Welcome Home!!!
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/posts.$postId.tsx b/examples/react/start-basic-netlify/src/routes/posts.$postId.tsx
new file mode 100644
index 00000000000..65905bf8c47
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/posts.$postId.tsx
@@ -0,0 +1,34 @@
+import { Link, createFileRoute } from '@tanstack/react-router'
+import { fetchPost } from '../utils/posts'
+import { NotFound } from '~/components/NotFound'
+import { PostErrorComponent } from '~/components/PostError'
+
+export const Route = createFileRoute('/posts/$postId')({
+ loader: ({ params: { postId } }) => fetchPost({ data: postId }),
+ errorComponent: PostErrorComponent,
+ component: PostComponent,
+ notFoundComponent: () => {
+ return Post not found
+ },
+})
+
+function PostComponent() {
+ const post = Route.useLoaderData()
+
+ return (
+
+
{post.title}
+
{post.body}
+
+ Deep View
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/posts.index.tsx b/examples/react/start-basic-netlify/src/routes/posts.index.tsx
new file mode 100644
index 00000000000..5b5f08f95bf
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/posts.index.tsx
@@ -0,0 +1,9 @@
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/posts/')({
+ component: PostsIndexComponent,
+})
+
+function PostsIndexComponent() {
+ return Select a post.
+}
diff --git a/examples/react/start-basic-netlify/src/routes/posts.tsx b/examples/react/start-basic-netlify/src/routes/posts.tsx
new file mode 100644
index 00000000000..9b9162be7c3
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/posts.tsx
@@ -0,0 +1,38 @@
+import { Link, Outlet, createFileRoute } from '@tanstack/react-router'
+import { fetchPosts } from '../utils/posts'
+
+export const Route = createFileRoute('/posts')({
+ loader: async () => fetchPosts(),
+ component: PostsComponent,
+})
+
+function PostsComponent() {
+ const posts = Route.useLoaderData()
+
+ return (
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/posts_.$postId.deep.tsx b/examples/react/start-basic-netlify/src/routes/posts_.$postId.deep.tsx
new file mode 100644
index 00000000000..29e6c39b5a0
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/posts_.$postId.deep.tsx
@@ -0,0 +1,29 @@
+import { Link, createFileRoute } from '@tanstack/react-router'
+import { fetchPost } from '../utils/posts'
+import { PostErrorComponent } from '~/components/PostError'
+
+export const Route = createFileRoute('/posts_/$postId/deep')({
+ loader: async ({ params: { postId } }) =>
+ fetchPost({
+ data: postId,
+ }),
+ errorComponent: PostErrorComponent,
+ component: PostDeepComponent,
+})
+
+function PostDeepComponent() {
+ const post = Route.useLoaderData()
+
+ return (
+
+
+ ← All Posts
+
+
{post.title}
+
{post.body}
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/redirect.tsx b/examples/react/start-basic-netlify/src/routes/redirect.tsx
new file mode 100644
index 00000000000..ea34b6e4205
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/redirect.tsx
@@ -0,0 +1,9 @@
+import { createFileRoute, redirect } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/redirect')({
+ beforeLoad: () => {
+ throw redirect({
+ to: '/posts',
+ })
+ },
+})
diff --git a/examples/react/start-basic-netlify/src/routes/users.$userId.tsx b/examples/react/start-basic-netlify/src/routes/users.$userId.tsx
new file mode 100644
index 00000000000..88c4e21f4b4
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/users.$userId.tsx
@@ -0,0 +1,32 @@
+import { createFileRoute } from '@tanstack/react-router'
+import { NotFound } from 'src/components/NotFound'
+import { UserErrorComponent } from 'src/components/UserError'
+import { fetchUser } from '../utils/users'
+
+export const Route = createFileRoute('/users/$userId')({
+ loader: ({ params: { userId } }) => fetchUser({ data: userId }),
+ errorComponent: UserErrorComponent,
+ component: UserComponent,
+ notFoundComponent: () => {
+ return User not found
+ },
+})
+
+function UserComponent() {
+ const user = Route.useLoaderData()
+
+ return (
+
+
{user.name}
+
{user.email}
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/users.index.tsx b/examples/react/start-basic-netlify/src/routes/users.index.tsx
new file mode 100644
index 00000000000..27d136987ee
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/users.index.tsx
@@ -0,0 +1,19 @@
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/users/')({
+ component: UsersIndexComponent,
+})
+
+function UsersIndexComponent() {
+ return (
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/routes/users.tsx b/examples/react/start-basic-netlify/src/routes/users.tsx
new file mode 100644
index 00000000000..2c80adcacfa
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/routes/users.tsx
@@ -0,0 +1,39 @@
+import { Link, Outlet, createFileRoute } from '@tanstack/react-router'
+import { fetchUsers } from '../utils/users'
+
+export const Route = createFileRoute('/users')({
+ loader: () => fetchUsers(),
+ component: UsersComponent,
+})
+
+function UsersComponent() {
+ const users = Route.useLoaderData()
+
+ return (
+
+
+ {[
+ ...users,
+ { id: 'i-do-not-exist', name: 'Non-existent User', email: '' },
+ ].map((user) => {
+ return (
+ -
+
+
{user.name}
+
+
+ )
+ })}
+
+
+
+
+ )
+}
diff --git a/examples/react/start-basic-netlify/src/styles/app.css b/examples/react/start-basic-netlify/src/styles/app.css
new file mode 100644
index 00000000000..c36c737cd46
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/styles/app.css
@@ -0,0 +1,30 @@
+@import 'tailwindcss';
+
+@layer base {
+ *,
+ ::after,
+ ::before,
+ ::backdrop,
+ ::file-selector-button {
+ border-color: var(--color-gray-200, currentcolor);
+ }
+}
+
+@layer base {
+ html {
+ color-scheme: light dark;
+ }
+
+ * {
+ @apply border-gray-200 dark:border-gray-800;
+ }
+
+ html,
+ body {
+ @apply text-gray-900 bg-gray-50 dark:bg-gray-950 dark:text-gray-200;
+ }
+
+ .using-mouse * {
+ outline: none !important;
+ }
+}
diff --git a/examples/react/start-basic-netlify/src/utils/loggingMiddleware.tsx b/examples/react/start-basic-netlify/src/utils/loggingMiddleware.tsx
new file mode 100644
index 00000000000..3ea9a06439f
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/utils/loggingMiddleware.tsx
@@ -0,0 +1,41 @@
+import { createMiddleware } from '@tanstack/react-start'
+
+const preLogMiddleware = createMiddleware({ type: 'function' })
+ .client(async (ctx) => {
+ const clientTime = new Date()
+
+ return ctx.next({
+ context: {
+ clientTime,
+ },
+ sendContext: {
+ clientTime,
+ },
+ })
+ })
+ .server(async (ctx) => {
+ const serverTime = new Date()
+
+ return ctx.next({
+ sendContext: {
+ serverTime,
+ durationToServer:
+ serverTime.getTime() - ctx.context.clientTime.getTime(),
+ },
+ })
+ })
+
+export const logMiddleware = createMiddleware({ type: 'function' })
+ .middleware([preLogMiddleware])
+ .client(async (ctx) => {
+ const res = await ctx.next()
+
+ const now = new Date()
+ console.log('Client Req/Res:', {
+ duration: now.getTime() - res.context.clientTime.getTime(),
+ durationToServer: res.context.durationToServer,
+ durationFromServer: now.getTime() - res.context.serverTime.getTime(),
+ })
+
+ return res
+ })
diff --git a/examples/react/start-basic-netlify/src/utils/posts.tsx b/examples/react/start-basic-netlify/src/utils/posts.tsx
new file mode 100644
index 00000000000..d913ffe3d92
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/utils/posts.tsx
@@ -0,0 +1,41 @@
+import { notFound } from '@tanstack/react-router'
+import { createServerFn } from '@tanstack/react-start'
+
+export type PostType = {
+ id: number
+ title: string
+ body: string
+}
+
+export const fetchPost = createServerFn({ method: 'POST' })
+ .inputValidator((d: string) => d)
+ .handler(async ({ data, context }) => {
+ console.log('Request context:', context)
+ console.info(`Fetching post with id ${data}...`)
+ const res = await fetch(
+ `https://jsonplaceholder.typicode.com/posts/${data}`,
+ )
+ if (!res.ok) {
+ if (res.status === 404) {
+ throw notFound()
+ }
+
+ throw new Error('Failed to fetch post')
+ }
+
+ const post = await res.json()
+
+ return post as PostType
+ })
+
+export const fetchPosts = createServerFn().handler(async () => {
+ console.info('Fetching posts...')
+ const res = await fetch('https://jsonplaceholder.typicode.com/posts')
+ if (!res.ok) {
+ throw new Error('Failed to fetch posts')
+ }
+
+ const posts = await res.json()
+
+ return (posts as Array).slice(0, 10)
+})
diff --git a/examples/react/start-basic-netlify/src/utils/seo.ts b/examples/react/start-basic-netlify/src/utils/seo.ts
new file mode 100644
index 00000000000..745e512ef10
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/utils/seo.ts
@@ -0,0 +1,37 @@
+export const seo = ({
+ title,
+ description,
+ keywords,
+ image,
+}: {
+ title: string
+ description?: string
+ image?: string
+ keywords?: string
+}) => {
+ const tags = [
+ { title },
+ ...(description ? [{ name: 'description', content: description }] : []),
+ ...(keywords ? [{ name: 'keywords', content: keywords }] : []),
+ { name: 'twitter:title', content: title },
+ ...(description
+ ? [{ name: 'twitter:description', content: description }]
+ : []),
+ { name: 'twitter:creator', content: '@tannerlinsley' },
+ { name: 'twitter:site', content: '@tannerlinsley' },
+ { property: 'og:type', content: 'website' },
+ { property: 'og:title', content: title },
+ ...(description
+ ? [{ property: 'og:description', content: description }]
+ : []),
+ ...(image
+ ? [
+ { name: 'twitter:image', content: image },
+ { name: 'twitter:card', content: 'summary_large_image' },
+ { property: 'og:image', content: image },
+ ]
+ : []),
+ ]
+
+ return tags
+}
diff --git a/examples/react/start-basic-netlify/src/utils/users.tsx b/examples/react/start-basic-netlify/src/utils/users.tsx
new file mode 100644
index 00000000000..2cb83b414b6
--- /dev/null
+++ b/examples/react/start-basic-netlify/src/utils/users.tsx
@@ -0,0 +1,37 @@
+import { createServerFn } from '@tanstack/react-start'
+
+export type User = {
+ id: number
+ name: string
+ email: string
+}
+
+export const fetchUsers = createServerFn().handler(async () => {
+ console.info('Fetching users...')
+ const res = await fetch('https://jsonplaceholder.typicode.com/users')
+ if (!res.ok) {
+ throw new Error('Failed to fetch users')
+ }
+
+ const users = await res.json()
+
+ return (users as Array).slice(0, 10)
+})
+
+export const fetchUser = createServerFn({ method: 'POST' })
+ .inputValidator((d: string) => d)
+ .handler(async ({ data }) => {
+ console.info(`Fetching user with id ${data}...`)
+ const res = await fetch(
+ `https://jsonplaceholder.typicode.com/users/${data}`,
+ )
+ if (!res.ok) {
+ if (res.status === 404) {
+ throw new Error('User not found')
+ }
+ throw new Error('Failed to fetch user')
+ }
+
+ const user = await res.json()
+ return user as User
+ })
diff --git a/examples/react/start-basic-netlify/tsconfig.json b/examples/react/start-basic-netlify/tsconfig.json
new file mode 100644
index 00000000000..3a9fb7cd716
--- /dev/null
+++ b/examples/react/start-basic-netlify/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "include": ["**/*.ts", "**/*.tsx"],
+ "compilerOptions": {
+ "strict": true,
+ "esModuleInterop": true,
+ "jsx": "react-jsx",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "lib": ["DOM", "DOM.Iterable", "ES2022"],
+ "isolatedModules": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "target": "ES2022",
+ "allowJs": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./src/*"]
+ },
+ "noEmit": true
+ }
+}
diff --git a/examples/react/start-basic-netlify/vite.config.ts b/examples/react/start-basic-netlify/vite.config.ts
new file mode 100644
index 00000000000..41824c32293
--- /dev/null
+++ b/examples/react/start-basic-netlify/vite.config.ts
@@ -0,0 +1,22 @@
+import { tanstackStart } from '@tanstack/react-start/plugin/vite'
+import { defineConfig } from 'vite'
+import tsConfigPaths from 'vite-tsconfig-paths'
+import viteReact from '@vitejs/plugin-react'
+import netlifyPlugin from '@netlify/vite-plugin-tanstack-start'
+
+export default defineConfig({
+ server: {
+ port: Number(process.env.PORT) || 3000,
+ strictPort: true,
+ },
+ plugins: [
+ tsConfigPaths({
+ projects: ['./tsconfig.json'],
+ }),
+ tanstackStart({
+ srcDirectory: 'src',
+ }),
+ viteReact(),
+ netlifyPlugin(),
+ ],
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9b9fb495946..c67ebb1e9c2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6444,6 +6444,64 @@ importers:
specifier: ^4.49.1
version: 4.49.1
+ examples/react/start-basic-netlify:
+ dependencies:
+ '@tanstack/react-router':
+ specifier: workspace:*
+ version: link:../../../packages/react-router
+ '@tanstack/react-router-devtools':
+ specifier: workspace:^
+ version: link:../../../packages/react-router-devtools
+ '@tanstack/react-start':
+ specifier: workspace:*
+ version: link:../../../packages/react-start
+ react:
+ specifier: ^19.2.0
+ version: 19.2.0
+ react-dom:
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
+ tailwind-merge:
+ specifier: ^2.6.0
+ version: 2.6.0
+ zod:
+ specifier: ^3.24.2
+ version: 3.25.57
+ devDependencies:
+ '@netlify/vite-plugin-tanstack-start':
+ specifier: ^1.2.3
+ version: 1.2.3(@netlify/api@14.0.12)(@tanstack/react-start@packages+react-start)(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
+ '@tailwindcss/postcss':
+ specifier: ^4.1.15
+ version: 4.1.15
+ '@types/node':
+ specifier: 22.10.2
+ version: 22.10.2
+ '@types/react':
+ specifier: ^19.2.2
+ version: 19.2.2
+ '@types/react-dom':
+ specifier: ^19.2.2
+ version: 19.2.2(@types/react@19.2.2)
+ '@vitejs/plugin-react':
+ specifier: ^4.6.0
+ version: 4.7.0(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
+ postcss:
+ specifier: ^8.5.1
+ version: 8.5.6
+ tailwindcss:
+ specifier: ^4.1.17
+ version: 4.1.17
+ typescript:
+ specifier: ^5.7.2
+ version: 5.9.2
+ vite:
+ specifier: ^7.1.7
+ version: 7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1)
+ vite-tsconfig-paths:
+ specifier: ^5.1.4
+ version: 5.1.4(typescript@5.9.2)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
+
examples/react/start-basic-react-query:
dependencies:
'@tanstack/react-query':
@@ -9151,7 +9209,7 @@ importers:
version: 22.10.2
nitro:
specifier: ^3.0.1-alpha.0
- version: 3.0.1-alpha.0(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.1.0)(chokidar@4.0.3)(ioredis@5.8.0)(lru-cache@11.2.2)(mysql2@3.15.3)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
+ version: 3.0.1-alpha.0(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.4.3)(chokidar@4.0.3)(ioredis@5.8.0)(lru-cache@11.2.2)(mysql2@3.15.3)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
postcss:
specifier: ^8.5.1
version: 8.5.6
@@ -10044,7 +10102,7 @@ importers:
dependencies:
nitropack:
specifier: ^2.12.6
- version: 2.12.6(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.1.0)(encoding@0.1.13)(mysql2@3.15.3)
+ version: 2.12.6(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.4.3)(encoding@0.1.13)(mysql2@3.15.3)
pathe:
specifier: ^2.0.3
version: 2.0.3
@@ -11847,6 +11905,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.27.1':
+ resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.23.0':
resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==}
engines: {node: '>=18'}
@@ -11871,6 +11935,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.27.1':
+ resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.23.0':
resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==}
engines: {node: '>=18'}
@@ -11895,6 +11965,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.27.1':
+ resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.23.0':
resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==}
engines: {node: '>=18'}
@@ -11919,6 +11995,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.27.1':
+ resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.23.0':
resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==}
engines: {node: '>=18'}
@@ -11943,6 +12025,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.27.1':
+ resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.23.0':
resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==}
engines: {node: '>=18'}
@@ -11967,6 +12055,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.27.1':
+ resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.23.0':
resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==}
engines: {node: '>=18'}
@@ -11991,6 +12085,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.27.1':
+ resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.23.0':
resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==}
engines: {node: '>=18'}
@@ -12015,6 +12115,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.27.1':
+ resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.23.0':
resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==}
engines: {node: '>=18'}
@@ -12039,6 +12145,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.27.1':
+ resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.23.0':
resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==}
engines: {node: '>=18'}
@@ -12063,6 +12175,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.27.1':
+ resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.23.0':
resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==}
engines: {node: '>=18'}
@@ -12087,6 +12205,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.27.1':
+ resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.23.0':
resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==}
engines: {node: '>=18'}
@@ -12111,6 +12235,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.27.1':
+ resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.23.0':
resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==}
engines: {node: '>=18'}
@@ -12135,6 +12265,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.27.1':
+ resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.23.0':
resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==}
engines: {node: '>=18'}
@@ -12159,6 +12295,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.27.1':
+ resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.23.0':
resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==}
engines: {node: '>=18'}
@@ -12183,6 +12325,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.27.1':
+ resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.23.0':
resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==}
engines: {node: '>=18'}
@@ -12207,6 +12355,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.27.1':
+ resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.23.0':
resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==}
engines: {node: '>=18'}
@@ -12231,6 +12385,12 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.27.1':
+ resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-arm64@0.25.10':
resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
engines: {node: '>=18'}
@@ -12243,6 +12403,12 @@ packages:
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-arm64@0.27.1':
+ resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.23.0':
resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==}
engines: {node: '>=18'}
@@ -12267,6 +12433,12 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.27.1':
+ resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.23.0':
resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==}
engines: {node: '>=18'}
@@ -12291,6 +12463,12 @@ packages:
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-arm64@0.27.1':
+ resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.23.0':
resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==}
engines: {node: '>=18'}
@@ -12315,12 +12493,24 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.27.1':
+ resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openharmony-arm64@0.25.10':
resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
+ '@esbuild/openharmony-arm64@0.27.1':
+ resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/sunos-x64@0.23.0':
resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==}
engines: {node: '>=18'}
@@ -12345,6 +12535,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.27.1':
+ resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.23.0':
resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==}
engines: {node: '>=18'}
@@ -12369,6 +12565,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.27.1':
+ resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.23.0':
resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==}
engines: {node: '>=18'}
@@ -12393,6 +12595,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.27.1':
+ resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.23.0':
resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==}
engines: {node: '>=18'}
@@ -12417,6 +12625,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.27.1':
+ resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -13402,6 +13616,16 @@ packages:
'@neon-rs/load@0.0.4':
resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==}
+ '@netlify/ai@0.3.5':
+ resolution: {integrity: sha512-7suwHOBy9s14yeWRxt+w3Zh6Rrx8gX7zP/xmsxqxLyJlcBykWm6siBJs2mMtJgbWvcrgI5BEgNLh5qfXlTCsRQ==}
+ engines: {node: '>=20.6.1'}
+ peerDependencies:
+ '@netlify/api': '>=14.0.12'
+
+ '@netlify/api@14.0.12':
+ resolution: {integrity: sha512-4xSfHAj9PIZZ78YOPby6TBHxYnf6sOE1/jpkHSDyt2oRxF94qJ0fhp96Fo2kq/rIhvgTlU5Ce3HARi8BDY4mLw==}
+ engines: {node: '>=18.14.0'}
+
'@netlify/api@14.0.7':
resolution: {integrity: sha512-smSD3MnyUwi+rdcvRlD2EAGEpzK9RRMiGxaXzKW7FGqIlZSEe08aPySuC0d5BXwl/7EmT43hOkBHH4KtP8DxcQ==}
engines: {node: '>=18.14.0'}
@@ -13413,27 +13637,52 @@ packages:
resolution: {integrity: sha512-dFpqDc6/x5LEu9L7kblCQu00CFEchH8J42jmQoXPuhKoE7avajzeLTbVKA8Olk3S/c2m9ejegrgbhL8NRA2Jyw==}
engines: {node: ^14.16.0 || >=16.0.0}
+ '@netlify/blobs@10.4.3':
+ resolution: {integrity: sha512-a5Wh4Mc6OwR4vUPnp4DAySDugvrrUmA16NEW0atUnP9R2kOr7vAmV986MXzQGpb57w3B8aq3XXuG/jquTvciiQ==}
+ engines: {node: ^14.16.0 || >=16.0.0}
+
'@netlify/cache@3.3.0':
resolution: {integrity: sha512-rKHmfPreOJhOz0FEKzqFdykIAdO2fC98hNXab6JuIKycySWZtLq+YtythuR/qL6AWBtdn1DQTAsOh8zBz7va7w==}
engines: {node: '>=20.6.1'}
+ '@netlify/cache@3.3.4':
+ resolution: {integrity: sha512-Fl4/KxP8NS7+skjfRixgekuqBNvLPay/J6qC2mxvHjkkZNu1oUs8QOc+T3Nvt4n+UMrltnt9ggg0q/q4hmBIVw==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/config@23.2.0':
resolution: {integrity: sha512-zlI792/efPUY1XKtBML2OJBgKMyfNQIeGEYibH8SqeDxPjNuCy0qELE0U9Sc6+Ss34XryPBUPdV60tYhSoe6lw==}
engines: {node: '>=18.14.0'}
hasBin: true
+ '@netlify/config@24.2.0':
+ resolution: {integrity: sha512-idc1D6kdQOFjG70aZC06crqElTyaSulVlnOEDZX2+5/vcmfFCBu8CJSEd5YzC6VCCXBgOW3Hw0cVxDTl5X6+CQ==}
+ engines: {node: '>=18.14.0'}
+ hasBin: true
+
'@netlify/dev-utils@4.3.0':
resolution: {integrity: sha512-vZAL8pMuj3yPQlmHSgyaA/UQFxc6pZgU0LucFJ1+IPWGJtIzBXHRvuR4acpoP72HtyQPUHJ42s7U9GaaSGVNHg==}
engines: {node: ^18.14.0 || >=20}
+ '@netlify/dev-utils@4.3.3':
+ resolution: {integrity: sha512-qziF8R9kf7mRNgSpmUH96O0aV1ZiwK4c9ZecFQbDSQuYhgy9GY1WTjiQF0oQnohjTjWNtXhrU39LAeXWNLaBJg==}
+ engines: {node: ^18.14.0 || >=20}
+
'@netlify/dev@4.6.3':
resolution: {integrity: sha512-PT23zofsvrH/y28HwdLpa3VDsXaJPG+aauJ9MTWC2xQBUlMvlhuLBB+WtjxbnEuQUTzxQ7sgVXnt2o5WyqWb7A==}
engines: {node: '>=20.6.1'}
+ '@netlify/dev@4.8.4':
+ resolution: {integrity: sha512-YGmsIvv0JeL8ojbyr9XWXWj3FNAIImxhppFN9WhRZyK0w5fDC6bVlNRQsqApPxd1QVDMfTQFY4aYQ0ratE0nUA==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/edge-bundler@14.7.0':
resolution: {integrity: sha512-EvjYzhY0qrDhapJQ8n/fXvEsjImai36VKs6kuVey20Qos5jC0oljdUBOeQ35nXTxiWi2Vo91IhjIWEQCLcUNdQ==}
engines: {node: '>=18.14.0'}
+ '@netlify/edge-bundler@14.9.1':
+ resolution: {integrity: sha512-EFkoPlCqBnoFKo8XyTw9nI91DBQAhms398tXKThecAXI/smrHiv4/sGYXj2ISHR022Aoioll8K9U6aLvmQgDAg==}
+ engines: {node: '>=18.14.0'}
+
'@netlify/edge-functions-bootstrap@2.16.0':
resolution: {integrity: sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==}
@@ -13441,18 +13690,34 @@ packages:
resolution: {integrity: sha512-bAUOuyxkqjEnX64Xel2QKqa7RNA13axrHYI089Vh9w5/+MCtf+CEuwexQ0Y3RoCyefjg8arHShL7lBccWFh4cg==}
engines: {node: '>=20.6.1'}
+ '@netlify/edge-functions-dev@1.0.7':
+ resolution: {integrity: sha512-PlkG3PxULQ7z/CSzx5LthGsVtJPOo8E+sA67cOwNq/eHxtwpCUfCPOmxq3AGKqMR1pzUGC6k5yewhgXoG8Zm7w==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/edge-functions@3.0.0':
resolution: {integrity: sha512-qvwxrrOFeB9phD4zok/8FDWCXtipYpmLav/B2M6mUyjwB+XTZA769WfNWRElTG4cSUgrNM+GkyLuFHU2D0aY4Q==}
engines: {node: '>=18.0.0'}
+ '@netlify/edge-functions@3.0.3':
+ resolution: {integrity: sha512-grElRK+rTBdYrPsULPKrhcHhrW+fwpDRLPbGByqa6Xrz0fhzcFJ2D9ijxEQ/onFcSVPYHT1u1mI48GhS5bZ/Ag==}
+ engines: {node: '>=18.0.0'}
+
'@netlify/functions-dev@1.0.0':
resolution: {integrity: sha512-Ws/NZiSjz2X2KW4fpZIPkfKGwoFcTFItm6iAgpY06TOol+n+sy2+qgvvjvF6Plm1l7mT2kttxXdsk6kVnR31Qg==}
engines: {node: '>=20.6.1'}
+ '@netlify/functions-dev@1.1.4':
+ resolution: {integrity: sha512-L7+yFgDrG+pTAsLo4wZZAEV+2m3BiEocjdINEMdXvjVikW9PH3anDXtDJqtDd6kXl9G/o4fd9crBaeN97V+k2w==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/functions@5.0.0':
resolution: {integrity: sha512-gyKzl+P5SPp6P4iqykwPagSy7ODgRoQqi9TkjFJjM74FVJgxdiBQoLAmz+Pjl7kE5avJWtIvlQ+akAFaChekQQ==}
engines: {node: '>=18.0.0'}
+ '@netlify/functions@5.1.1':
+ resolution: {integrity: sha512-64TvwQkAFpYb3QqYemPYDqWi1xMbYOBfg70bhy23iahWf+F9TJgOOnAVUOk5fMWGN/fk9bZG5ROc+cm32whh+g==}
+ engines: {node: '>=18.0.0'}
+
'@netlify/headers-parser@9.0.2':
resolution: {integrity: sha512-86YEGPxVemhksY1LeSr8NSOyH11RHvYHq+FuBJnTlPZoRDX+TD+0TAxF6lwzAgVTd1VPkyFEHlNgUGqw7aNzRQ==}
engines: {node: '>=18.14.0'}
@@ -13461,14 +13726,30 @@ packages:
resolution: {integrity: sha512-+7MgRPBYhRjizrd6JHxlD9KCjUyYk5yMqa16Ib3VNOSWYzaYiQi8Muyb1pn1pQVfBN2oPeK/q7J3pEdc/PWznQ==}
engines: {node: '>=20.6.1'}
+ '@netlify/headers@2.1.3':
+ resolution: {integrity: sha512-jVjhHokAQLGI5SJA2nj8OWeNQ7ASV4m0n4aiR4PHrhM8ot385V2BbUGkSpC28M92uqP0l1cbAQaSoSOU4re8iQ==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/images@1.3.0':
resolution: {integrity: sha512-edQefgR4aeL04oSgkGyjza3CObdU2C24EmRuF/FPXIR1GHa/TkEKMamppxFjZ6qj1i5tX0RGTLKvnREmtW34NA==}
engines: {node: '>=20.6.1'}
+ '@netlify/images@1.3.3':
+ resolution: {integrity: sha512-1X3fUmacCLMlPIqyeV5tdo6Wbf9aBSWobgr4DyRvg9zDV9jbKqgdN3BNbcUXmVaqfN+0iiv0k9p02mcRV3OyOw==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/open-api@2.40.0':
resolution: {integrity: sha512-Dp4lilDnkRKGWnljGkFVxfoh1wsWqxheE5/ZOf/sMZPsh3jGu5QZ4hVLEidzXYB/zIKFFqLaUbP2XYVxTqWqyQ==}
engines: {node: '>=14.8.0'}
+ '@netlify/open-api@2.45.0':
+ resolution: {integrity: sha512-kLysr2N8HQi0qoEq04vpRvrE/fSnZaXJYf1bVxKre2lLaM1RSm05hqDswKTgxM601pZf9h1i1Ea3L4DZNgHb5w==}
+ engines: {node: '>=14.8.0'}
+
+ '@netlify/otel@5.1.0':
+ resolution: {integrity: sha512-bXZuWXXq3IZQ8i3/b5YD7ud5fQq/fiiCR51ClUx3WPcDbH/Rck0F6gc08yyrB5+8Dn8IYmvj+xlWL23B39YDHA==}
+ engines: {node: ^18.14.0 || >=20.6.1}
+
'@netlify/redirect-parser@15.0.3':
resolution: {integrity: sha512-/HB3fcRRNgf6O/pbLn4EYNDHrU2kiadMMnazg8/OjvQK2S9i4y61vQcrICvDxYKUKQdgeEaABUuaCNAJFnfD9w==}
engines: {node: '>=18.14.0'}
@@ -13477,26 +13758,50 @@ packages:
resolution: {integrity: sha512-Eo50oNaTybEfB/4W6JFWdzQ1EbpObbaf83sIpT6H0DzfBgQIzPc3azdb7eD9eEFi3IAQjR5kZ6bOb2i4wbFDHQ==}
engines: {node: '>=20.6.1'}
+ '@netlify/redirects@3.1.4':
+ resolution: {integrity: sha512-2FcF/0Q24JA+VmpWlVRp835UvhBHQe3XGVaxAQfHiDd5aXztaz2U5Y4VEZyrZJOubY5xnxr2yqumDfClAiCKxw==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/runtime-utils@2.2.0':
resolution: {integrity: sha512-K3kWIxIMucibzQsATU2xw2JI+OpS9PZfPW/a+81gmeLC8tLv5YAxTVT0NFY/3imk1kcOJb9g7658jPLqDJaiAw==}
engines: {node: ^18.14.0 || >=20}
+ '@netlify/runtime-utils@2.2.1':
+ resolution: {integrity: sha512-dyJeuggzQM8+Dsi0T8Z9UjfLJ6vCmNC36W6WE2aqzfTdTw4wPkh2xlEu4LoD75+TGuYK7jIhEoU2QcCXOzfyAQ==}
+ engines: {node: ^18.14.0 || >=20}
+
'@netlify/runtime@4.1.1':
resolution: {integrity: sha512-5qnHsri4X5r2spdD2tvdbU78grFV4fq7uVh/rMXF19qlgcHiuo0yr1JBEim1oINs/w+pyjusXMfnFEZjvV2qlQ==}
engines: {node: '>=20.6.1'}
+ '@netlify/runtime@4.1.11':
+ resolution: {integrity: sha512-tfqZmNH3pm4E9KoWKP/H5d4+Acl/25m/PXTh5EDIR1iRQ8ZyJkAJlnjtjCaSg2u6leAFkbOrdeTMLnvFenF75g==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/serverless-functions-api@2.7.1':
resolution: {integrity: sha512-NQcLB8BHbIsgSBPk9A/OBR5mGpc6dOAg1iRsYHWK0IoKsvwQ9a7bZc2+E40nE41Mnk24UjfK09vDLxP85O/zwA==}
engines: {node: '>=18.0.0'}
+ '@netlify/serverless-functions-api@2.8.1':
+ resolution: {integrity: sha512-UZVlpSCgBS/6gdamRlAlOkRV3Atd6BUgpU6n59JdKsfAj67z2XbiGn7dWZuOaCrdv3h4FX3Z5zHZsSDRDi5V6g==}
+ engines: {node: '>=18.0.0'}
+
'@netlify/static@3.1.0':
resolution: {integrity: sha512-XbxiXpHaAakBASBFL5qc0SJhLlJdzYD0MYdM9sfCnRI38YJdvr0F2eHQlQDF016gn/iXhG6fJDxcWHEt2hEFDA==}
engines: {node: '>=20.6.1'}
+ '@netlify/static@3.1.3':
+ resolution: {integrity: sha512-88VG2jwWY1eOT/IiMbkrak7qyo+t7om0v731i63JiCDfXjCEp+yFPNr9L4v8S6wcCmgnkGQ6Sr5roF1sEtp6+Q==}
+ engines: {node: '>=20.6.1'}
+
'@netlify/types@2.1.0':
resolution: {integrity: sha512-ktUb5d58pt1lQGXO5E9S0F1ljM0g+CoQuGTVII0IxBc0apmPq5RI0o3OWLY7U3ZERRiYTg5UfjiMihBEzuZsuw==}
engines: {node: ^18.14.0 || >=20}
+ '@netlify/types@2.3.0':
+ resolution: {integrity: sha512-5gxMWh/S7wr0uHKSTbMv4bjWmWSpwpeLYvErWeVNAPll5/QNFo9aWimMAUuh8ReLY3/fg92XAroVVu7+z27Snw==}
+ engines: {node: ^18.14.0 || >=20}
+
'@netlify/vite-plugin-tanstack-start@1.1.4':
resolution: {integrity: sha512-GahhrKT7B1LRi4Bnj+O+Yhs2Bu4N6AfILzz/b06YxXEO7rRfX2yUDRBtv7/AFVLkyVOtkypkFZhZBbK9craVEA==}
engines: {node: ^22.12.0}
@@ -13510,6 +13815,25 @@ packages:
'@tanstack/solid-start':
optional: true
+ '@netlify/vite-plugin-tanstack-start@1.2.3':
+ resolution: {integrity: sha512-/qoM23z56OCM5jjopPvioBg6n3EoVZKxsTs9lxdLmhpEmZWRpf7XyKM0FacSsZz/qp4MlyDFWFfeSIzgyFtXwA==}
+ engines: {node: ^22.12.0 || >=24.0.0}
+ peerDependencies:
+ '@tanstack/react-start': workspace:*
+ '@tanstack/solid-start': workspace:*
+ vite: ^7.1.7
+ peerDependenciesMeta:
+ '@tanstack/react-start':
+ optional: true
+ '@tanstack/solid-start':
+ optional: true
+
+ '@netlify/vite-plugin@2.7.16':
+ resolution: {integrity: sha512-PdpKYobM0oH7Qh87Aao4z5drNcBwq9ahkom5ep6vEdh5koPDKCBY+334gB9nIihy3pmruc3ur6+3jRyKjAkm1w==}
+ engines: {node: ^20.6.1 || >=22}
+ peerDependencies:
+ vite: ^7.1.7
+
'@netlify/vite-plugin@2.7.4':
resolution: {integrity: sha512-Eid41kWWruhONKA7eS+bGMs+JjEXaBhQEkH82+SyjeSVj+FhHQGSHdrejMI0nj1jSgVUa3JMh+l57OgRB6Lvkg==}
engines: {node: ^20.6.1 || >=22}
@@ -13521,6 +13845,11 @@ packages:
engines: {node: '>=18.14.0'}
hasBin: true
+ '@netlify/zip-it-and-ship-it@14.1.16':
+ resolution: {integrity: sha512-oUliNza9Tab3hHpIaHDAuT6ApN/c3SPJDUUenFGujpJm6IKZPdmnAGuKM2N2zb+XxHzApLdOogqv0kr7nY0avQ==}
+ engines: {node: '>=18.14.0'}
+ hasBin: true
+
'@noble/ciphers@2.0.1':
resolution: {integrity: sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g==}
engines: {node: '>= 20.19.0'}
@@ -13622,6 +13951,66 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ '@opentelemetry/api-logs@0.203.0':
+ resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==}
+ engines: {node: '>=8.0.0'}
+
+ '@opentelemetry/api@1.9.0':
+ resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
+ engines: {node: '>=8.0.0'}
+
+ '@opentelemetry/context-async-hooks@1.30.1':
+ resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/core@1.30.1':
+ resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/instrumentation@0.203.0':
+ resolution: {integrity: sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': ^1.3.0
+
+ '@opentelemetry/propagator-b3@1.30.1':
+ resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/propagator-jaeger@1.30.1':
+ resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/resources@1.30.1':
+ resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/sdk-trace-base@1.30.1':
+ resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/sdk-trace-node@1.30.1':
+ resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/semantic-conventions@1.28.0':
+ resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==}
+ engines: {node: '>=14'}
+
'@panva/hkdf@1.2.1':
resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==}
@@ -18017,6 +18406,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.27.1:
+ resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -18896,6 +19290,9 @@ packages:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
+ import-in-the-middle@1.15.0:
+ resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==}
+
import-lazy@4.0.0:
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
engines: {node: '>=8'}
@@ -19878,6 +20275,9 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ module-details-from-path@1.0.4:
+ resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
+
motion-dom@11.18.1:
resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==}
@@ -20878,7 +21278,11 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- require-package-name@2.0.1:
+ require-in-the-middle@7.5.2:
+ resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==}
+ engines: {node: '>=8.6.0'}
+
+ require-package-name@2.0.1:
resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==}
requires-port@1.0.0:
@@ -22107,6 +22511,10 @@ packages:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
+ uuid@13.0.0:
+ resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==}
+ hasBin: true
+
uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
@@ -23609,6 +24017,9 @@ snapshots:
'@esbuild/aix-ppc64@0.25.4':
optional: true
+ '@esbuild/aix-ppc64@0.27.1':
+ optional: true
+
'@esbuild/android-arm64@0.23.0':
optional: true
@@ -23621,6 +24032,9 @@ snapshots:
'@esbuild/android-arm64@0.25.4':
optional: true
+ '@esbuild/android-arm64@0.27.1':
+ optional: true
+
'@esbuild/android-arm@0.23.0':
optional: true
@@ -23633,6 +24047,9 @@ snapshots:
'@esbuild/android-arm@0.25.4':
optional: true
+ '@esbuild/android-arm@0.27.1':
+ optional: true
+
'@esbuild/android-x64@0.23.0':
optional: true
@@ -23645,6 +24062,9 @@ snapshots:
'@esbuild/android-x64@0.25.4':
optional: true
+ '@esbuild/android-x64@0.27.1':
+ optional: true
+
'@esbuild/darwin-arm64@0.23.0':
optional: true
@@ -23657,6 +24077,9 @@ snapshots:
'@esbuild/darwin-arm64@0.25.4':
optional: true
+ '@esbuild/darwin-arm64@0.27.1':
+ optional: true
+
'@esbuild/darwin-x64@0.23.0':
optional: true
@@ -23669,6 +24092,9 @@ snapshots:
'@esbuild/darwin-x64@0.25.4':
optional: true
+ '@esbuild/darwin-x64@0.27.1':
+ optional: true
+
'@esbuild/freebsd-arm64@0.23.0':
optional: true
@@ -23681,6 +24107,9 @@ snapshots:
'@esbuild/freebsd-arm64@0.25.4':
optional: true
+ '@esbuild/freebsd-arm64@0.27.1':
+ optional: true
+
'@esbuild/freebsd-x64@0.23.0':
optional: true
@@ -23693,6 +24122,9 @@ snapshots:
'@esbuild/freebsd-x64@0.25.4':
optional: true
+ '@esbuild/freebsd-x64@0.27.1':
+ optional: true
+
'@esbuild/linux-arm64@0.23.0':
optional: true
@@ -23705,6 +24137,9 @@ snapshots:
'@esbuild/linux-arm64@0.25.4':
optional: true
+ '@esbuild/linux-arm64@0.27.1':
+ optional: true
+
'@esbuild/linux-arm@0.23.0':
optional: true
@@ -23717,6 +24152,9 @@ snapshots:
'@esbuild/linux-arm@0.25.4':
optional: true
+ '@esbuild/linux-arm@0.27.1':
+ optional: true
+
'@esbuild/linux-ia32@0.23.0':
optional: true
@@ -23729,6 +24167,9 @@ snapshots:
'@esbuild/linux-ia32@0.25.4':
optional: true
+ '@esbuild/linux-ia32@0.27.1':
+ optional: true
+
'@esbuild/linux-loong64@0.23.0':
optional: true
@@ -23741,6 +24182,9 @@ snapshots:
'@esbuild/linux-loong64@0.25.4':
optional: true
+ '@esbuild/linux-loong64@0.27.1':
+ optional: true
+
'@esbuild/linux-mips64el@0.23.0':
optional: true
@@ -23753,6 +24197,9 @@ snapshots:
'@esbuild/linux-mips64el@0.25.4':
optional: true
+ '@esbuild/linux-mips64el@0.27.1':
+ optional: true
+
'@esbuild/linux-ppc64@0.23.0':
optional: true
@@ -23765,6 +24212,9 @@ snapshots:
'@esbuild/linux-ppc64@0.25.4':
optional: true
+ '@esbuild/linux-ppc64@0.27.1':
+ optional: true
+
'@esbuild/linux-riscv64@0.23.0':
optional: true
@@ -23777,6 +24227,9 @@ snapshots:
'@esbuild/linux-riscv64@0.25.4':
optional: true
+ '@esbuild/linux-riscv64@0.27.1':
+ optional: true
+
'@esbuild/linux-s390x@0.23.0':
optional: true
@@ -23789,6 +24242,9 @@ snapshots:
'@esbuild/linux-s390x@0.25.4':
optional: true
+ '@esbuild/linux-s390x@0.27.1':
+ optional: true
+
'@esbuild/linux-x64@0.23.0':
optional: true
@@ -23801,12 +24257,18 @@ snapshots:
'@esbuild/linux-x64@0.25.4':
optional: true
+ '@esbuild/linux-x64@0.27.1':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.10':
optional: true
'@esbuild/netbsd-arm64@0.25.4':
optional: true
+ '@esbuild/netbsd-arm64@0.27.1':
+ optional: true
+
'@esbuild/netbsd-x64@0.23.0':
optional: true
@@ -23819,6 +24281,9 @@ snapshots:
'@esbuild/netbsd-x64@0.25.4':
optional: true
+ '@esbuild/netbsd-x64@0.27.1':
+ optional: true
+
'@esbuild/openbsd-arm64@0.23.0':
optional: true
@@ -23831,6 +24296,9 @@ snapshots:
'@esbuild/openbsd-arm64@0.25.4':
optional: true
+ '@esbuild/openbsd-arm64@0.27.1':
+ optional: true
+
'@esbuild/openbsd-x64@0.23.0':
optional: true
@@ -23843,9 +24311,15 @@ snapshots:
'@esbuild/openbsd-x64@0.25.4':
optional: true
+ '@esbuild/openbsd-x64@0.27.1':
+ optional: true
+
'@esbuild/openharmony-arm64@0.25.10':
optional: true
+ '@esbuild/openharmony-arm64@0.27.1':
+ optional: true
+
'@esbuild/sunos-x64@0.23.0':
optional: true
@@ -23858,6 +24332,9 @@ snapshots:
'@esbuild/sunos-x64@0.25.4':
optional: true
+ '@esbuild/sunos-x64@0.27.1':
+ optional: true
+
'@esbuild/win32-arm64@0.23.0':
optional: true
@@ -23870,6 +24347,9 @@ snapshots:
'@esbuild/win32-arm64@0.25.4':
optional: true
+ '@esbuild/win32-arm64@0.27.1':
+ optional: true
+
'@esbuild/win32-ia32@0.23.0':
optional: true
@@ -23882,6 +24362,9 @@ snapshots:
'@esbuild/win32-ia32@0.25.4':
optional: true
+ '@esbuild/win32-ia32@0.27.1':
+ optional: true
+
'@esbuild/win32-x64@0.23.0':
optional: true
@@ -23894,6 +24377,9 @@ snapshots:
'@esbuild/win32-x64@0.25.4':
optional: true
+ '@esbuild/win32-x64@0.27.1':
+ optional: true
+
'@eslint-community/eslint-utils@4.4.1(eslint@9.22.0(jiti@2.6.1))':
dependencies:
eslint: 9.22.0(jiti@2.6.1)
@@ -25069,6 +25555,17 @@ snapshots:
'@neon-rs/load@0.0.4': {}
+ '@netlify/ai@0.3.5(@netlify/api@14.0.12)':
+ dependencies:
+ '@netlify/api': 14.0.12
+
+ '@netlify/api@14.0.12':
+ dependencies:
+ '@netlify/open-api': 2.45.0
+ node-fetch: 3.3.2
+ p-wait-for: 5.0.2
+ picoquery: 2.5.0
+
'@netlify/api@14.0.7':
dependencies:
'@netlify/open-api': 2.40.0
@@ -25083,10 +25580,22 @@ snapshots:
'@netlify/dev-utils': 4.3.0
'@netlify/runtime-utils': 2.2.0
+ '@netlify/blobs@10.4.3':
+ dependencies:
+ '@netlify/dev-utils': 4.3.3
+ '@netlify/otel': 5.1.0
+ '@netlify/runtime-utils': 2.2.1
+ transitivePeerDependencies:
+ - supports-color
+
'@netlify/cache@3.3.0':
dependencies:
'@netlify/runtime-utils': 2.2.0
+ '@netlify/cache@3.3.4':
+ dependencies:
+ '@netlify/runtime-utils': 2.2.1
+
'@netlify/config@23.2.0':
dependencies:
'@iarna/toml': 2.2.5
@@ -25114,6 +25623,34 @@ snapshots:
yaml: 2.8.1
yargs: 17.7.2
+ '@netlify/config@24.2.0':
+ dependencies:
+ '@iarna/toml': 2.2.5
+ '@netlify/api': 14.0.12
+ '@netlify/headers-parser': 9.0.2
+ '@netlify/redirect-parser': 15.0.3
+ chalk: 5.4.1
+ cron-parser: 4.9.0
+ deepmerge: 4.3.1
+ dot-prop: 9.0.0
+ execa: 8.0.1
+ fast-safe-stringify: 2.1.1
+ figures: 6.1.0
+ filter-obj: 6.1.0
+ find-up: 7.0.0
+ indent-string: 5.0.0
+ is-plain-obj: 4.1.0
+ map-obj: 5.0.2
+ omit.js: 2.0.2
+ p-locate: 6.0.0
+ path-type: 6.0.0
+ read-package-up: 11.0.0
+ tomlify-j0.4: 3.0.0
+ validate-npm-package-name: 5.0.1
+ yaml: 2.8.1
+ yargs: 17.7.2
+ zod: 4.1.12
+
'@netlify/dev-utils@4.3.0':
dependencies:
'@whatwg-node/server': 0.10.13
@@ -25132,6 +25669,24 @@ snapshots:
uuid: 11.1.0
write-file-atomic: 5.0.1
+ '@netlify/dev-utils@4.3.3':
+ dependencies:
+ '@whatwg-node/server': 0.10.13
+ ansis: 4.1.0
+ chokidar: 4.0.3
+ decache: 4.6.2
+ dettle: 1.0.5
+ dot-prop: 9.0.0
+ empathic: 2.0.0
+ env-paths: 3.0.0
+ image-size: 2.0.2
+ js-image-generator: 1.0.4
+ parse-gitignore: 2.0.0
+ semver: 7.7.3
+ tmp-promise: 3.0.3
+ uuid: 13.0.0
+ write-file-atomic: 5.0.1
+
'@netlify/dev@4.6.3(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)':
dependencies:
'@netlify/blobs': 10.1.0
@@ -25168,6 +25723,44 @@ snapshots:
- supports-color
- uploadthing
+ '@netlify/dev@4.8.4(@netlify/api@14.0.12)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)':
+ dependencies:
+ '@netlify/ai': 0.3.5(@netlify/api@14.0.12)
+ '@netlify/blobs': 10.4.3
+ '@netlify/config': 24.2.0
+ '@netlify/dev-utils': 4.3.3
+ '@netlify/edge-functions-dev': 1.0.7
+ '@netlify/functions-dev': 1.1.4(rollup@4.52.5)
+ '@netlify/headers': 2.1.3
+ '@netlify/images': 1.3.3(@netlify/blobs@10.4.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)
+ '@netlify/redirects': 3.1.4
+ '@netlify/runtime': 4.1.11
+ '@netlify/static': 3.1.3
+ ulid: 3.0.1
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/api'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - encoding
+ - idb-keyval
+ - ioredis
+ - rollup
+ - supports-color
+ - uploadthing
+
'@netlify/edge-bundler@14.7.0':
dependencies:
'@import-maps/resolve': 2.0.0
@@ -25191,6 +25784,29 @@ snapshots:
urlpattern-polyfill: 8.0.2
uuid: 11.1.0
+ '@netlify/edge-bundler@14.9.1':
+ dependencies:
+ '@import-maps/resolve': 2.0.0
+ ajv: 8.17.1
+ ajv-errors: 3.0.0(ajv@8.17.1)
+ better-ajv-errors: 1.2.0(ajv@8.17.1)
+ common-path-prefix: 3.0.0
+ env-paths: 3.0.0
+ esbuild: 0.27.1
+ execa: 8.0.1
+ find-up: 7.0.0
+ get-port: 7.1.0
+ node-stream-zip: 1.15.0
+ p-retry: 6.2.1
+ p-wait-for: 5.0.2
+ parse-imports: 2.2.1
+ path-key: 4.0.0
+ semver: 7.7.3
+ tar: 7.4.3
+ tmp-promise: 3.0.3
+ urlpattern-polyfill: 8.0.2
+ uuid: 11.1.0
+
'@netlify/edge-functions-bootstrap@2.16.0': {}
'@netlify/edge-functions-dev@1.0.0':
@@ -25202,10 +25818,23 @@ snapshots:
'@netlify/runtime-utils': 2.2.0
get-port: 7.1.0
+ '@netlify/edge-functions-dev@1.0.7':
+ dependencies:
+ '@netlify/dev-utils': 4.3.3
+ '@netlify/edge-bundler': 14.9.1
+ '@netlify/edge-functions': 3.0.3
+ '@netlify/edge-functions-bootstrap': 2.16.0
+ '@netlify/runtime-utils': 2.2.1
+ get-port: 7.1.0
+
'@netlify/edge-functions@3.0.0':
dependencies:
'@netlify/types': 2.1.0
+ '@netlify/edge-functions@3.0.3':
+ dependencies:
+ '@netlify/types': 2.3.0
+
'@netlify/functions-dev@1.0.0(rollup@4.52.5)':
dependencies:
'@netlify/blobs': 10.1.0
@@ -25226,10 +25855,34 @@ snapshots:
- rollup
- supports-color
+ '@netlify/functions-dev@1.1.4(rollup@4.52.5)':
+ dependencies:
+ '@netlify/blobs': 10.4.3
+ '@netlify/dev-utils': 4.3.3
+ '@netlify/functions': 5.1.1
+ '@netlify/zip-it-and-ship-it': 14.1.16(rollup@4.52.5)
+ cron-parser: 4.9.0
+ decache: 4.6.2
+ extract-zip: 2.0.1
+ is-stream: 4.0.1
+ jwt-decode: 4.0.0
+ lambda-local: 2.2.0
+ read-package-up: 11.0.0
+ semver: 7.7.3
+ source-map-support: 0.5.21
+ transitivePeerDependencies:
+ - encoding
+ - rollup
+ - supports-color
+
'@netlify/functions@5.0.0':
dependencies:
'@netlify/types': 2.1.0
+ '@netlify/functions@5.1.1':
+ dependencies:
+ '@netlify/types': 2.3.0
+
'@netlify/headers-parser@9.0.2':
dependencies:
'@iarna/toml': 2.2.5
@@ -25243,6 +25896,10 @@ snapshots:
dependencies:
'@netlify/headers-parser': 9.0.2
+ '@netlify/headers@2.1.3':
+ dependencies:
+ '@netlify/headers-parser': 9.0.2
+
'@netlify/images@1.3.0(@netlify/blobs@10.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)':
dependencies:
ipx: 3.1.1(@netlify/blobs@10.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)
@@ -25267,8 +25924,44 @@ snapshots:
- ioredis
- uploadthing
+ '@netlify/images@1.3.3(@netlify/blobs@10.4.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)':
+ dependencies:
+ ipx: 3.1.1(@netlify/blobs@10.4.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - uploadthing
+
'@netlify/open-api@2.40.0': {}
+ '@netlify/open-api@2.45.0': {}
+
+ '@netlify/otel@5.1.0':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-node': 1.30.1(@opentelemetry/api@1.9.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@netlify/redirect-parser@15.0.3':
dependencies:
'@iarna/toml': 2.2.5
@@ -25284,8 +25977,18 @@ snapshots:
jsonwebtoken: 9.0.2
netlify-redirector: 0.5.0
+ '@netlify/redirects@3.1.4':
+ dependencies:
+ '@netlify/dev-utils': 4.3.3
+ '@netlify/redirect-parser': 15.0.3
+ cookie: 1.0.2
+ jsonwebtoken: 9.0.2
+ netlify-redirector: 0.5.0
+
'@netlify/runtime-utils@2.2.0': {}
+ '@netlify/runtime-utils@2.2.1': {}
+
'@netlify/runtime@4.1.1':
dependencies:
'@netlify/blobs': 10.1.0
@@ -25293,14 +25996,31 @@ snapshots:
'@netlify/runtime-utils': 2.2.0
'@netlify/types': 2.1.0
+ '@netlify/runtime@4.1.11':
+ dependencies:
+ '@netlify/blobs': 10.4.3
+ '@netlify/cache': 3.3.4
+ '@netlify/runtime-utils': 2.2.1
+ '@netlify/types': 2.3.0
+ transitivePeerDependencies:
+ - supports-color
+
'@netlify/serverless-functions-api@2.7.1': {}
+ '@netlify/serverless-functions-api@2.8.1': {}
+
'@netlify/static@3.1.0':
dependencies:
mime-types: 3.0.1
+ '@netlify/static@3.1.3':
+ dependencies:
+ mime-types: 3.0.1
+
'@netlify/types@2.1.0': {}
+ '@netlify/types@2.3.0': {}
+
'@netlify/vite-plugin-tanstack-start@1.1.4(@tanstack/solid-start@packages+solid-start)(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))':
dependencies:
'@netlify/vite-plugin': 2.7.4(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
@@ -25331,6 +26051,68 @@ snapshots:
- supports-color
- uploadthing
+ '@netlify/vite-plugin-tanstack-start@1.2.3(@netlify/api@14.0.12)(@tanstack/react-start@packages+react-start)(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))':
+ dependencies:
+ '@netlify/vite-plugin': 2.7.16(@netlify/api@14.0.12)(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))
+ vite: 7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1)
+ optionalDependencies:
+ '@tanstack/react-start': link:packages/react-start
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/api'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - babel-plugin-macros
+ - db0
+ - encoding
+ - idb-keyval
+ - ioredis
+ - rollup
+ - supports-color
+ - uploadthing
+
+ '@netlify/vite-plugin@2.7.16(@netlify/api@14.0.12)(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))':
+ dependencies:
+ '@netlify/dev': 4.8.4(@netlify/api@14.0.12)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)
+ '@netlify/dev-utils': 4.3.3
+ dedent: 1.7.0(babel-plugin-macros@3.1.0)
+ vite: 7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/api'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - babel-plugin-macros
+ - db0
+ - encoding
+ - idb-keyval
+ - ioredis
+ - rollup
+ - supports-color
+ - uploadthing
+
'@netlify/vite-plugin@2.7.4(babel-plugin-macros@3.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1))':
dependencies:
'@netlify/dev': 4.6.3(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(rollup@4.52.5)
@@ -25400,6 +26182,45 @@ snapshots:
- rollup
- supports-color
+ '@netlify/zip-it-and-ship-it@14.1.16(rollup@4.52.5)':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@netlify/binary-info': 1.0.0
+ '@netlify/serverless-functions-api': 2.8.1
+ '@vercel/nft': 0.29.4(rollup@4.52.5)
+ archiver: 7.0.1
+ common-path-prefix: 3.0.0
+ copy-file: 11.1.0
+ es-module-lexer: 1.7.0
+ esbuild: 0.27.1
+ execa: 8.0.1
+ fast-glob: 3.3.3
+ filter-obj: 6.1.0
+ find-up: 7.0.0
+ is-path-inside: 4.0.0
+ junk: 4.0.1
+ locate-path: 7.2.0
+ merge-options: 3.0.4
+ minimatch: 9.0.5
+ normalize-path: 3.0.0
+ p-map: 7.0.3
+ path-exists: 5.0.0
+ precinct: 12.2.0
+ require-package-name: 2.0.1
+ resolve: 2.0.0-next.5
+ semver: 7.7.3
+ tmp-promise: 3.0.3
+ toml: 3.0.0
+ unixify: 1.0.0
+ urlpattern-polyfill: 8.0.2
+ yargs: 17.7.2
+ zod: 3.25.57
+ transitivePeerDependencies:
+ - encoding
+ - rollup
+ - supports-color
+
'@noble/ciphers@2.0.1': {}
'@noble/hashes@2.0.1': {}
@@ -25476,6 +26297,65 @@ snapshots:
'@open-draft/until@2.1.0': {}
+ '@opentelemetry/api-logs@0.203.0':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+
+ '@opentelemetry/api@1.9.0': {}
+
+ '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+
+ '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.28.0
+
+ '@opentelemetry/instrumentation@0.203.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.203.0
+ import-in-the-middle: 1.15.0
+ require-in-the-middle: 7.5.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.28.0
+
+ '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.28.0
+
+ '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0)
+ semver: 7.7.3
+
+ '@opentelemetry/semantic-conventions@1.28.0': {}
+
'@panva/hkdf@1.2.1': {}
'@parcel/watcher-android-arm64@2.5.1':
@@ -30487,6 +31367,35 @@ snapshots:
'@esbuild/win32-ia32': 0.25.4
'@esbuild/win32-x64': 0.25.4
+ esbuild@0.27.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.1
+ '@esbuild/android-arm': 0.27.1
+ '@esbuild/android-arm64': 0.27.1
+ '@esbuild/android-x64': 0.27.1
+ '@esbuild/darwin-arm64': 0.27.1
+ '@esbuild/darwin-x64': 0.27.1
+ '@esbuild/freebsd-arm64': 0.27.1
+ '@esbuild/freebsd-x64': 0.27.1
+ '@esbuild/linux-arm': 0.27.1
+ '@esbuild/linux-arm64': 0.27.1
+ '@esbuild/linux-ia32': 0.27.1
+ '@esbuild/linux-loong64': 0.27.1
+ '@esbuild/linux-mips64el': 0.27.1
+ '@esbuild/linux-ppc64': 0.27.1
+ '@esbuild/linux-riscv64': 0.27.1
+ '@esbuild/linux-s390x': 0.27.1
+ '@esbuild/linux-x64': 0.27.1
+ '@esbuild/netbsd-arm64': 0.27.1
+ '@esbuild/netbsd-x64': 0.27.1
+ '@esbuild/openbsd-arm64': 0.27.1
+ '@esbuild/openbsd-x64': 0.27.1
+ '@esbuild/openharmony-arm64': 0.27.1
+ '@esbuild/sunos-x64': 0.27.1
+ '@esbuild/win32-arm64': 0.27.1
+ '@esbuild/win32-ia32': 0.27.1
+ '@esbuild/win32-x64': 0.27.1
+
escalade@3.2.0: {}
escape-html@1.0.3: {}
@@ -31578,6 +32487,13 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
+ import-in-the-middle@1.15.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-import-attributes: 1.9.5(acorn@8.15.0)
+ cjs-module-lexer: 1.4.3
+ module-details-from-path: 1.0.4
+
import-lazy@4.0.0: {}
import-local@3.2.0:
@@ -31668,6 +32584,45 @@ snapshots:
- ioredis
- uploadthing
+ ipx@3.1.1(@netlify/blobs@10.4.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0):
+ dependencies:
+ '@fastify/accept-negotiator': 2.0.1
+ citty: 0.1.6
+ consola: 3.4.2
+ defu: 6.1.4
+ destr: 2.0.5
+ etag: 1.8.1
+ h3: 1.15.4
+ image-meta: 0.2.2
+ listhen: 1.9.0
+ ofetch: 1.4.1
+ pathe: 2.0.3
+ sharp: 0.34.4
+ svgo: 4.0.0
+ ufo: 1.6.1
+ unstorage: 1.17.1(@netlify/blobs@10.4.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)
+ xss: 1.0.15
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - uploadthing
+
iron-session@6.3.1(express@5.1.0):
dependencies:
'@peculiar/webcrypto': 1.5.0
@@ -32551,6 +33506,8 @@ snapshots:
ast-module-types: 6.0.1
node-source-walk: 7.0.1
+ module-details-from-path@1.0.4: {}
+
motion-dom@11.18.1:
dependencies:
motion-utils: 11.18.1
@@ -32666,7 +33623,7 @@ snapshots:
nf3@0.1.1: {}
- nitro@3.0.1-alpha.0(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.1.0)(chokidar@4.0.3)(ioredis@5.8.0)(lru-cache@11.2.2)(mysql2@3.15.3)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1)):
+ nitro@3.0.1-alpha.0(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.4.3)(chokidar@4.0.3)(ioredis@5.8.0)(lru-cache@11.2.2)(mysql2@3.15.3)(vite@7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1)):
dependencies:
consola: 3.4.2
cookie-es: 2.0.0
@@ -32684,7 +33641,7 @@ snapshots:
srvx: 0.8.15
undici: 7.16.0
unenv: 2.0.0-rc.21
- unstorage: 2.0.0-alpha.3(@netlify/blobs@10.1.0)(chokidar@4.0.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(lru-cache@11.2.2)(ofetch@1.4.1)
+ unstorage: 2.0.0-alpha.3(@netlify/blobs@10.4.3)(chokidar@4.0.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(lru-cache@11.2.2)(ofetch@1.4.1)
optionalDependencies:
vite: 7.1.7(@types/node@22.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.8.1)
transitivePeerDependencies:
@@ -32716,7 +33673,7 @@ snapshots:
- sqlite3
- uploadthing
- nitropack@2.12.6(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.1.0)(encoding@0.1.13)(mysql2@3.15.3):
+ nitropack@2.12.6(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(@netlify/blobs@10.4.3)(encoding@0.1.13)(mysql2@3.15.3):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
'@rollup/plugin-alias': 5.1.1(rollup@4.52.2)
@@ -32783,7 +33740,7 @@ snapshots:
unenv: 2.0.0-rc.21
unimport: 5.3.0
unplugin-utils: 0.3.0
- unstorage: 1.17.1(@netlify/blobs@10.1.0)(db0@0.3.2(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)
+ unstorage: 1.17.1(@netlify/blobs@10.4.3)(db0@0.3.2(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)
untyped: 2.0.0
unwasm: 0.3.11
youch: 4.1.0-beta.11
@@ -33787,6 +34744,14 @@ snapshots:
require-from-string@2.0.2: {}
+ require-in-the-middle@7.5.2:
+ dependencies:
+ debug: 4.4.3
+ module-details-from-path: 1.0.4
+ resolve: 1.22.11
+ transitivePeerDependencies:
+ - supports-color
+
require-package-name@2.0.1: {}
requires-port@1.0.0: {}
@@ -33814,7 +34779,6 @@ snapshots:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- optional: true
resolve@2.0.0-next.5:
dependencies:
@@ -34940,7 +35904,7 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
- unstorage@1.17.1(@netlify/blobs@10.1.0)(db0@0.3.2(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0):
+ unstorage@1.17.1(@netlify/blobs@10.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0):
dependencies:
anymatch: 3.1.3
chokidar: 4.0.3
@@ -34952,10 +35916,25 @@ snapshots:
ufo: 1.6.1
optionalDependencies:
'@netlify/blobs': 10.1.0
+ db0: 0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3)
+ ioredis: 5.8.0
+
+ unstorage@1.17.1(@netlify/blobs@10.4.3)(db0@0.3.2(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0):
+ dependencies:
+ anymatch: 3.1.3
+ chokidar: 4.0.3
+ destr: 2.0.5
+ h3: 1.15.4
+ lru-cache: 10.4.3
+ node-fetch-native: 1.6.7
+ ofetch: 1.4.1
+ ufo: 1.6.1
+ optionalDependencies:
+ '@netlify/blobs': 10.4.3
db0: 0.3.2(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3)
ioredis: 5.8.0
- unstorage@1.17.1(@netlify/blobs@10.1.0)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0):
+ unstorage@1.17.1(@netlify/blobs@10.4.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0):
dependencies:
anymatch: 3.1.3
chokidar: 4.0.3
@@ -34966,13 +35945,13 @@ snapshots:
ofetch: 1.4.1
ufo: 1.6.1
optionalDependencies:
- '@netlify/blobs': 10.1.0
+ '@netlify/blobs': 10.4.3
db0: 0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3)
ioredis: 5.8.0
- unstorage@2.0.0-alpha.3(@netlify/blobs@10.1.0)(chokidar@4.0.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(lru-cache@11.2.2)(ofetch@1.4.1):
+ unstorage@2.0.0-alpha.3(@netlify/blobs@10.4.3)(chokidar@4.0.3)(db0@0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3))(ioredis@5.8.0)(lru-cache@11.2.2)(ofetch@1.4.1):
optionalDependencies:
- '@netlify/blobs': 10.1.0
+ '@netlify/blobs': 10.4.3
chokidar: 4.0.3
db0: 0.3.4(@electric-sql/pglite@0.3.2)(@libsql/client@0.15.15)(mysql2@3.15.3)
ioredis: 5.8.0
@@ -35058,6 +36037,8 @@ snapshots:
uuid@11.1.0: {}
+ uuid@13.0.0: {}
+
uuid@8.3.2: {}
valibot@1.0.0-beta.15(typescript@5.8.2):