Almost completed development env
This commit is contained in:
@@ -21,7 +21,9 @@
|
|||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@trpc/server": "^11.1.2",
|
||||||
"dotenv": "^16.5.0",
|
"dotenv": "^16.5.0",
|
||||||
"fastify": "^5.3.3"
|
"fastify": "^5.3.3",
|
||||||
|
"zod": "^3.25.23"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
8
apps/backend/src/context.ts
Normal file
8
apps/backend/src/context.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import type { CreateFastifyContextOptions } from '@trpc/server/adapters/fastify';
|
||||||
|
|
||||||
|
export function createContext({ req, res }: CreateFastifyContextOptions) {
|
||||||
|
const user = { name: req.headers.username ?? 'anonymous' };
|
||||||
|
return { req, res, user };
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Context = Awaited<ReturnType<typeof createContext>>;
|
||||||
@@ -1,42 +1,29 @@
|
|||||||
import Fastify from 'fastify';
|
import { fastifyTRPCPlugin, type FastifyTRPCPluginOptions } from '@trpc/server/adapters/fastify';
|
||||||
const fastify = Fastify({
|
import fastify from 'fastify';
|
||||||
logger: true,
|
import { createContext } from './context.ts';
|
||||||
|
import { appRouter, type AppRouter } from './router.ts';
|
||||||
|
|
||||||
|
const server = fastify({
|
||||||
|
maxParamLength: 5000,
|
||||||
});
|
});
|
||||||
|
|
||||||
fastify.route({
|
server.register(fastifyTRPCPlugin, {
|
||||||
method: 'GET',
|
prefix: '/api/trpc',
|
||||||
url: '/',
|
trpcOptions: {
|
||||||
schema: {
|
router: appRouter,
|
||||||
// request needs to have a querystring with a `name` parameter
|
createContext,
|
||||||
querystring: {
|
onError({ path, error }) {
|
||||||
type: 'object',
|
// report to error monitoring
|
||||||
properties: {
|
console.error(`Error in tRPC handler on path '${path}':`, error);
|
||||||
name: { type: 'string' },
|
|
||||||
},
|
|
||||||
required: ['name'],
|
|
||||||
},
|
|
||||||
// the response needs to be an object with an `hello` property of type 'string'
|
|
||||||
response: {
|
|
||||||
200: {
|
|
||||||
type: 'object',
|
|
||||||
properties: {
|
|
||||||
hello: { type: 'string' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
// this function is executed for every request before the handler is executed
|
|
||||||
preHandler: async (request, reply) => {
|
|
||||||
// E.g. check authentication
|
|
||||||
},
|
|
||||||
handler: async (request, reply) => {
|
|
||||||
return { hello: 'world' };
|
|
||||||
},
|
},
|
||||||
|
} satisfies FastifyTRPCPluginOptions<AppRouter>['trpcOptions'],
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
(async () => {
|
||||||
await fastify.listen({ port: 3000 });
|
try {
|
||||||
} catch (err) {
|
await server.listen({ port: 3000 });
|
||||||
fastify.log.error(err);
|
} catch (err) {
|
||||||
|
server.log.error(err);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
})();
|
||||||
|
|||||||
33
apps/backend/src/router.ts
Normal file
33
apps/backend/src/router.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { initTRPC } from '@trpc/server';
|
||||||
|
import { z } from 'zod';
|
||||||
|
type User = {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
bio?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const users: Record<string, User> = {};
|
||||||
|
export const t = initTRPC.create();
|
||||||
|
|
||||||
|
export const appRouter = t.router({
|
||||||
|
demo: t.procedure.query(() => 'test'),
|
||||||
|
getUserById: t.procedure.input(z.string()).query((opts) => {
|
||||||
|
return users[opts.input]; // input type is string
|
||||||
|
}),
|
||||||
|
createUser: t.procedure
|
||||||
|
.input(
|
||||||
|
z.object({
|
||||||
|
name: z.string().min(3),
|
||||||
|
bio: z.string().max(142).optional(),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.mutation((opts) => {
|
||||||
|
const id = Date.now().toString();
|
||||||
|
const user: User = { id, ...opts.input };
|
||||||
|
users[user.id] = user;
|
||||||
|
return user;
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
// export type definition of API
|
||||||
|
export type AppRouter = typeof appRouter;
|
||||||
@@ -14,11 +14,14 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/vite": "^4.0.6",
|
"@tailwindcss/vite": "^4.0.6",
|
||||||
"@tanstack/react-query": "^5.66.5",
|
"@tanstack/react-query": "^5.76.1",
|
||||||
"@tanstack/react-query-devtools": "^5.66.5",
|
"@tanstack/react-query-devtools": "^5.66.5",
|
||||||
"@tanstack/react-router": "^1.114.3",
|
"@tanstack/react-router": "^1.114.3",
|
||||||
"@tanstack/react-router-devtools": "^1.114.3",
|
"@tanstack/react-router-devtools": "^1.114.3",
|
||||||
"@tanstack/router-plugin": "^1.114.3",
|
"@tanstack/router-plugin": "^1.114.3",
|
||||||
|
"@trpc/client": "^11.1.2",
|
||||||
|
"@trpc/server": "^11.1.2",
|
||||||
|
"@trpc/tanstack-react-query": "^11.1.2",
|
||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.0.0",
|
||||||
"tailwindcss": "^4.0.6"
|
"tailwindcss": "^4.0.6"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||||
|
|
||||||
const queryClient = new QueryClient()
|
export const queryClient = new QueryClient()
|
||||||
|
|
||||||
export function getContext() {
|
export function getContext() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import { Route as rootRoute } from './routes/__root'
|
import { Route as rootRoute } from './routes/__root'
|
||||||
import { Route as IndexImport } from './routes/index'
|
import { Route as IndexImport } from './routes/index'
|
||||||
|
import { Route as DemoTrpcImport } from './routes/demo.trpc'
|
||||||
import { Route as DemoTanstackQueryImport } from './routes/demo.tanstack-query'
|
import { Route as DemoTanstackQueryImport } from './routes/demo.tanstack-query'
|
||||||
|
|
||||||
// Create/Update Routes
|
// Create/Update Routes
|
||||||
@@ -22,6 +23,12 @@ const IndexRoute = IndexImport.update({
|
|||||||
getParentRoute: () => rootRoute,
|
getParentRoute: () => rootRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
|
const DemoTrpcRoute = DemoTrpcImport.update({
|
||||||
|
id: '/demo/trpc',
|
||||||
|
path: '/demo/trpc',
|
||||||
|
getParentRoute: () => rootRoute,
|
||||||
|
} as any)
|
||||||
|
|
||||||
const DemoTanstackQueryRoute = DemoTanstackQueryImport.update({
|
const DemoTanstackQueryRoute = DemoTanstackQueryImport.update({
|
||||||
id: '/demo/tanstack-query',
|
id: '/demo/tanstack-query',
|
||||||
path: '/demo/tanstack-query',
|
path: '/demo/tanstack-query',
|
||||||
@@ -46,6 +53,13 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof DemoTanstackQueryImport
|
preLoaderRoute: typeof DemoTanstackQueryImport
|
||||||
parentRoute: typeof rootRoute
|
parentRoute: typeof rootRoute
|
||||||
}
|
}
|
||||||
|
'/demo/trpc': {
|
||||||
|
id: '/demo/trpc'
|
||||||
|
path: '/demo/trpc'
|
||||||
|
fullPath: '/demo/trpc'
|
||||||
|
preLoaderRoute: typeof DemoTrpcImport
|
||||||
|
parentRoute: typeof rootRoute
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,36 +68,41 @@ declare module '@tanstack/react-router' {
|
|||||||
export interface FileRoutesByFullPath {
|
export interface FileRoutesByFullPath {
|
||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
|
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
|
||||||
|
'/demo/trpc': typeof DemoTrpcRoute
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FileRoutesByTo {
|
export interface FileRoutesByTo {
|
||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
|
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
|
||||||
|
'/demo/trpc': typeof DemoTrpcRoute
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FileRoutesById {
|
export interface FileRoutesById {
|
||||||
__root__: typeof rootRoute
|
__root__: typeof rootRoute
|
||||||
'/': typeof IndexRoute
|
'/': typeof IndexRoute
|
||||||
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
|
'/demo/tanstack-query': typeof DemoTanstackQueryRoute
|
||||||
|
'/demo/trpc': typeof DemoTrpcRoute
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FileRouteTypes {
|
export interface FileRouteTypes {
|
||||||
fileRoutesByFullPath: FileRoutesByFullPath
|
fileRoutesByFullPath: FileRoutesByFullPath
|
||||||
fullPaths: '/' | '/demo/tanstack-query'
|
fullPaths: '/' | '/demo/tanstack-query' | '/demo/trpc'
|
||||||
fileRoutesByTo: FileRoutesByTo
|
fileRoutesByTo: FileRoutesByTo
|
||||||
to: '/' | '/demo/tanstack-query'
|
to: '/' | '/demo/tanstack-query' | '/demo/trpc'
|
||||||
id: '__root__' | '/' | '/demo/tanstack-query'
|
id: '__root__' | '/' | '/demo/tanstack-query' | '/demo/trpc'
|
||||||
fileRoutesById: FileRoutesById
|
fileRoutesById: FileRoutesById
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RootRouteChildren {
|
export interface RootRouteChildren {
|
||||||
IndexRoute: typeof IndexRoute
|
IndexRoute: typeof IndexRoute
|
||||||
DemoTanstackQueryRoute: typeof DemoTanstackQueryRoute
|
DemoTanstackQueryRoute: typeof DemoTanstackQueryRoute
|
||||||
|
DemoTrpcRoute: typeof DemoTrpcRoute
|
||||||
}
|
}
|
||||||
|
|
||||||
const rootRouteChildren: RootRouteChildren = {
|
const rootRouteChildren: RootRouteChildren = {
|
||||||
IndexRoute: IndexRoute,
|
IndexRoute: IndexRoute,
|
||||||
DemoTanstackQueryRoute: DemoTanstackQueryRoute,
|
DemoTanstackQueryRoute: DemoTanstackQueryRoute,
|
||||||
|
DemoTrpcRoute: DemoTrpcRoute,
|
||||||
}
|
}
|
||||||
|
|
||||||
export const routeTree = rootRoute
|
export const routeTree = rootRoute
|
||||||
@@ -97,7 +116,8 @@ export const routeTree = rootRoute
|
|||||||
"filePath": "__root.tsx",
|
"filePath": "__root.tsx",
|
||||||
"children": [
|
"children": [
|
||||||
"/",
|
"/",
|
||||||
"/demo/tanstack-query"
|
"/demo/tanstack-query",
|
||||||
|
"/demo/trpc"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/": {
|
"/": {
|
||||||
@@ -105,6 +125,9 @@ export const routeTree = rootRoute
|
|||||||
},
|
},
|
||||||
"/demo/tanstack-query": {
|
"/demo/tanstack-query": {
|
||||||
"filePath": "demo.tanstack-query.tsx"
|
"filePath": "demo.tanstack-query.tsx"
|
||||||
|
},
|
||||||
|
"/demo/trpc": {
|
||||||
|
"filePath": "demo.trpc.tsx"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
apps/frontend/src/routes/demo.trpc.tsx
Normal file
18
apps/frontend/src/routes/demo.trpc.tsx
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
import { useQuery } from '@tanstack/react-query'
|
||||||
|
import { trpc } from '@/utils/trpc.ts'
|
||||||
|
|
||||||
|
export const Route = createFileRoute('/demo/trpc')({
|
||||||
|
component: TRPCDemo,
|
||||||
|
})
|
||||||
|
|
||||||
|
function TRPCDemo() {
|
||||||
|
const { data } = useQuery(trpc.demo.queryOptions())
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="p-4">
|
||||||
|
<h1 className="text-2xl mb-4">People list</h1>
|
||||||
|
<ul>Demo Output: {data}</ul>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
18
apps/frontend/src/utils/trpc.ts
Normal file
18
apps/frontend/src/utils/trpc.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { createTRPCClient, httpBatchLink } from '@trpc/client'
|
||||||
|
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query'
|
||||||
|
import type { AppRouter } from '../../../backend/src/router.ts'
|
||||||
|
import { queryClient } from '@/integrations/tanstack-query/root-provider.tsx'
|
||||||
|
|
||||||
|
const trpcClient = createTRPCClient<AppRouter>({
|
||||||
|
links: [httpBatchLink({ url: '/api/trpc' })],
|
||||||
|
})
|
||||||
|
|
||||||
|
export const trpc = createTRPCOptionsProxy<AppRouter>({
|
||||||
|
client: trpcClient,
|
||||||
|
queryClient,
|
||||||
|
})
|
||||||
|
|
||||||
|
// We are using the singleton pattern because we don't have SSR,
|
||||||
|
// so to use trpc instead of `useTRPC()` (context-based api) we just
|
||||||
|
// do `import { trpc } from './utils/trpc'` and directly use the object.
|
||||||
|
// This is safe BECAUSE THERE IS NO SSR AND THIS IS A FULL CSR WEBAPP
|
||||||
@@ -1,20 +1,36 @@
|
|||||||
import { defineConfig } from "vite";
|
import { resolve } from 'node:path'
|
||||||
import viteReact from "@vitejs/plugin-react";
|
import { defineConfig } from 'vite'
|
||||||
import tailwindcss from "@tailwindcss/vite";
|
import viteReact from '@vitejs/plugin-react'
|
||||||
|
import tailwindcss from '@tailwindcss/vite'
|
||||||
|
|
||||||
import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
|
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
|
||||||
import { resolve } from "node:path";
|
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [TanStackRouterVite({ autoCodeSplitting: true }), viteReact(), tailwindcss()],
|
plugins: [
|
||||||
|
TanStackRouterVite({ autoCodeSplitting: true }),
|
||||||
|
viteReact(),
|
||||||
|
tailwindcss(),
|
||||||
|
],
|
||||||
test: {
|
test: {
|
||||||
globals: true,
|
globals: true,
|
||||||
environment: "jsdom",
|
environment: 'jsdom',
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@': resolve(__dirname, './src'),
|
'@': resolve(__dirname, './src'),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
});
|
server: {
|
||||||
|
// On Prod the frontend are just static file served directly by the backend node.js.
|
||||||
|
// On Dev we connect instead to the Vite server.
|
||||||
|
proxy: {
|
||||||
|
'/api': {
|
||||||
|
target: 'http://localhost:3000',
|
||||||
|
changeOrigin: true,
|
||||||
|
cookieDomainRewrite: '',
|
||||||
|
cookiePathRewrite: '/',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|||||||
129
pnpm-lock.yaml
generated
129
pnpm-lock.yaml
generated
@@ -32,12 +32,18 @@ importers:
|
|||||||
|
|
||||||
apps/backend:
|
apps/backend:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@trpc/server':
|
||||||
|
specifier: ^11.1.2
|
||||||
|
version: 11.1.2(typescript@5.8.3)
|
||||||
dotenv:
|
dotenv:
|
||||||
specifier: ^16.5.0
|
specifier: ^16.5.0
|
||||||
version: 16.5.0
|
version: 16.5.0
|
||||||
fastify:
|
fastify:
|
||||||
specifier: ^5.3.3
|
specifier: ^5.3.3
|
||||||
version: 5.3.3
|
version: 5.3.3
|
||||||
|
zod:
|
||||||
|
specifier: ^3.25.23
|
||||||
|
version: 3.25.23
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@tsconfig/node-ts':
|
'@tsconfig/node-ts':
|
||||||
specifier: ^23.6.1
|
specifier: ^23.6.1
|
||||||
@@ -61,7 +67,7 @@ importers:
|
|||||||
specifier: ^4.0.6
|
specifier: ^4.0.6
|
||||||
version: 4.1.7(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4))
|
version: 4.1.7(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4))
|
||||||
'@tanstack/react-query':
|
'@tanstack/react-query':
|
||||||
specifier: ^5.66.5
|
specifier: ^5.76.1
|
||||||
version: 5.76.1(react@19.1.0)
|
version: 5.76.1(react@19.1.0)
|
||||||
'@tanstack/react-query-devtools':
|
'@tanstack/react-query-devtools':
|
||||||
specifier: ^5.66.5
|
specifier: ^5.66.5
|
||||||
@@ -75,6 +81,15 @@ importers:
|
|||||||
'@tanstack/router-plugin':
|
'@tanstack/router-plugin':
|
||||||
specifier: ^1.114.3
|
specifier: ^1.114.3
|
||||||
version: 1.120.3(@tanstack/react-router@1.120.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4))
|
version: 1.120.3(@tanstack/react-router@1.120.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4))
|
||||||
|
'@trpc/client':
|
||||||
|
specifier: ^11.1.2
|
||||||
|
version: 11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3)
|
||||||
|
'@trpc/server':
|
||||||
|
specifier: ^11.1.2
|
||||||
|
version: 11.1.2(typescript@5.8.3)
|
||||||
|
'@trpc/tanstack-react-query':
|
||||||
|
specifier: ^11.1.2
|
||||||
|
version: 11.1.2(@tanstack/react-query@5.76.1(react@19.1.0))(@trpc/client@11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
|
||||||
react:
|
react:
|
||||||
specifier: ^19.0.0
|
specifier: ^19.0.0
|
||||||
version: 19.1.0
|
version: 19.1.0
|
||||||
@@ -848,6 +863,27 @@ packages:
|
|||||||
'@types/react-dom':
|
'@types/react-dom':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@trpc/client@11.1.2':
|
||||||
|
resolution: {integrity: sha512-RpifJOAv+ql9gF3oafa3dLCF01AzWu2DzejvehAPG2IlwHxopKoYXaImJ8zPwRkZokuWiKz5v65HjElmi8TlrQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@trpc/server': 11.1.2
|
||||||
|
typescript: '>=5.7.2'
|
||||||
|
|
||||||
|
'@trpc/server@11.1.2':
|
||||||
|
resolution: {integrity: sha512-Oi9zWHG0ZDkbDo4sYkduoV7q4sIe6UwjrRLC91vNMYQK+PVgpbTCmK1laRwewAGu0zaayqcGDosANjceOIC3GA==}
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '>=5.7.2'
|
||||||
|
|
||||||
|
'@trpc/tanstack-react-query@11.1.2':
|
||||||
|
resolution: {integrity: sha512-c+NupnmIQmwgwYVTaHgDg59BZBtJ6KxqB0cxF9FBhKHPY6PlwGLdU8+mo25C5VIpofZYEII4H7NKE4yKGFSe3w==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tanstack/react-query': ^5.67.1
|
||||||
|
'@trpc/client': 11.1.2
|
||||||
|
'@trpc/server': 11.1.2
|
||||||
|
react: '>=18.2.0'
|
||||||
|
react-dom: '>=18.2.0'
|
||||||
|
typescript: '>=5.7.2'
|
||||||
|
|
||||||
'@tsconfig/node-ts@23.6.1':
|
'@tsconfig/node-ts@23.6.1':
|
||||||
resolution: {integrity: sha512-1E5cUp+S65pLKKI9VrGMQPWDHxOEq3dAGM2onG3fLeSRwWbylYFwhIjnzJikjSN7w2nCgwxmv8ifvUKDFkK38Q==}
|
resolution: {integrity: sha512-1E5cUp+S65pLKKI9VrGMQPWDHxOEq3dAGM2onG3fLeSRwWbylYFwhIjnzJikjSN7w2nCgwxmv8ifvUKDFkK38Q==}
|
||||||
|
|
||||||
@@ -1625,10 +1661,6 @@ packages:
|
|||||||
graphemer@1.4.0:
|
graphemer@1.4.0:
|
||||||
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
||||||
|
|
||||||
has-flag@3.0.0:
|
|
||||||
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
|
|
||||||
has-flag@4.0.0:
|
has-flag@4.0.0:
|
||||||
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -2281,10 +2313,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
supports-color@5.5.0:
|
|
||||||
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
|
|
||||||
engines: {node: '>=4'}
|
|
||||||
|
|
||||||
supports-color@7.2.0:
|
supports-color@7.2.0:
|
||||||
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -2615,6 +2643,9 @@ packages:
|
|||||||
zod@3.24.4:
|
zod@3.24.4:
|
||||||
resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
|
resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
|
||||||
|
|
||||||
|
zod@3.25.23:
|
||||||
|
resolution: {integrity: sha512-Od2bdMosahjSrSgJtakrwjMDb1zM1A3VIHCPGveZt/3/wlrTWBya2lmEh2OYe4OIu8mPTmmr0gnLHIWQXdtWBg==}
|
||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
'@ampproject/remapping@2.3.0':
|
'@ampproject/remapping@2.3.0':
|
||||||
@@ -2651,7 +2682,7 @@ snapshots:
|
|||||||
'@babel/traverse': 7.27.1
|
'@babel/traverse': 7.27.1
|
||||||
'@babel/types': 7.27.1
|
'@babel/types': 7.27.1
|
||||||
convert-source-map: 2.0.0
|
convert-source-map: 2.0.0
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
gensync: 1.0.0-beta.2
|
gensync: 1.0.0-beta.2
|
||||||
json5: 2.2.3
|
json5: 2.2.3
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@@ -2742,7 +2773,7 @@ snapshots:
|
|||||||
'@babel/parser': 7.27.2
|
'@babel/parser': 7.27.2
|
||||||
'@babel/template': 7.27.2
|
'@babel/template': 7.27.2
|
||||||
'@babel/types': 7.27.1
|
'@babel/types': 7.27.1
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
globals: 11.12.0
|
globals: 11.12.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -2873,7 +2904,7 @@ snapshots:
|
|||||||
'@eslint/config-array@0.20.0':
|
'@eslint/config-array@0.20.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/object-schema': 2.1.6
|
'@eslint/object-schema': 2.1.6
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -2887,7 +2918,7 @@ snapshots:
|
|||||||
'@eslint/eslintrc@3.3.1':
|
'@eslint/eslintrc@3.3.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv: 6.12.6
|
ajv: 6.12.6
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
espree: 10.3.0
|
espree: 10.3.0
|
||||||
globals: 14.0.0
|
globals: 14.0.0
|
||||||
ignore: 5.3.2
|
ignore: 5.3.2
|
||||||
@@ -2974,8 +3005,8 @@ snapshots:
|
|||||||
express-rate-limit: 7.5.0(express@5.1.0)
|
express-rate-limit: 7.5.0(express@5.1.0)
|
||||||
pkce-challenge: 5.0.0
|
pkce-challenge: 5.0.0
|
||||||
raw-body: 3.0.0
|
raw-body: 3.0.0
|
||||||
zod: 3.24.4
|
zod: 3.25.23
|
||||||
zod-to-json-schema: 3.24.5(zod@3.24.4)
|
zod-to-json-schema: 3.24.5(zod@3.25.23)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -3278,6 +3309,24 @@ snapshots:
|
|||||||
'@types/react': 19.1.4
|
'@types/react': 19.1.4
|
||||||
'@types/react-dom': 19.1.5(@types/react@19.1.4)
|
'@types/react-dom': 19.1.5(@types/react@19.1.4)
|
||||||
|
|
||||||
|
'@trpc/client@11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
'@trpc/server': 11.1.2(typescript@5.8.3)
|
||||||
|
typescript: 5.8.3
|
||||||
|
|
||||||
|
'@trpc/server@11.1.2(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
typescript: 5.8.3
|
||||||
|
|
||||||
|
'@trpc/tanstack-react-query@11.1.2(@tanstack/react-query@5.76.1(react@19.1.0))(@trpc/client@11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
'@tanstack/react-query': 5.76.1(react@19.1.0)
|
||||||
|
'@trpc/client': 11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3)
|
||||||
|
'@trpc/server': 11.1.2(typescript@5.8.3)
|
||||||
|
react: 19.1.0
|
||||||
|
react-dom: 19.1.0(react@19.1.0)
|
||||||
|
typescript: 5.8.3
|
||||||
|
|
||||||
'@tsconfig/node-ts@23.6.1': {}
|
'@tsconfig/node-ts@23.6.1': {}
|
||||||
|
|
||||||
'@tsconfig/node23@23.0.1': {}
|
'@tsconfig/node23@23.0.1': {}
|
||||||
@@ -3349,7 +3398,7 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.32.1
|
'@typescript-eslint/types': 8.32.1
|
||||||
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.32.1
|
'@typescript-eslint/visitor-keys': 8.32.1
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
eslint: 9.26.0(jiti@2.4.2)
|
eslint: 9.26.0(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -3364,7 +3413,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
eslint: 9.26.0(jiti@2.4.2)
|
eslint: 9.26.0(jiti@2.4.2)
|
||||||
ts-api-utils: 2.1.0(typescript@5.8.3)
|
ts-api-utils: 2.1.0(typescript@5.8.3)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
@@ -3377,7 +3426,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.32.1
|
'@typescript-eslint/types': 8.32.1
|
||||||
'@typescript-eslint/visitor-keys': 8.32.1
|
'@typescript-eslint/visitor-keys': 8.32.1
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
fast-glob: 3.3.3
|
fast-glob: 3.3.3
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
minimatch: 9.0.5
|
minimatch: 9.0.5
|
||||||
@@ -3587,7 +3636,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
bytes: 3.1.2
|
bytes: 3.1.2
|
||||||
content-type: 1.0.5
|
content-type: 1.0.5
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
http-errors: 2.0.0
|
http-errors: 2.0.0
|
||||||
iconv-lite: 0.6.3
|
iconv-lite: 0.6.3
|
||||||
on-finished: 2.4.1
|
on-finished: 2.4.1
|
||||||
@@ -3733,11 +3782,9 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
|
|
||||||
debug@4.4.1(supports-color@5.5.0):
|
debug@4.4.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
optionalDependencies:
|
|
||||||
supports-color: 5.5.0
|
|
||||||
|
|
||||||
decimal.js@10.5.0: {}
|
decimal.js@10.5.0: {}
|
||||||
|
|
||||||
@@ -3846,7 +3893,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
comment-parser: 1.4.1
|
comment-parser: 1.4.1
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
eslint: 9.26.0(jiti@2.4.2)
|
eslint: 9.26.0(jiti@2.4.2)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
get-tsconfig: 4.10.0
|
get-tsconfig: 4.10.0
|
||||||
@@ -3905,7 +3952,7 @@ snapshots:
|
|||||||
ajv: 6.12.6
|
ajv: 6.12.6
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
cross-spawn: 7.0.6
|
cross-spawn: 7.0.6
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
eslint-scope: 8.3.0
|
eslint-scope: 8.3.0
|
||||||
eslint-visitor-keys: 4.2.0
|
eslint-visitor-keys: 4.2.0
|
||||||
@@ -3924,7 +3971,7 @@ snapshots:
|
|||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
optionator: 0.9.4
|
optionator: 0.9.4
|
||||||
zod: 3.24.4
|
zod: 3.25.23
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
jiti: 2.4.2
|
jiti: 2.4.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -3980,7 +4027,7 @@ snapshots:
|
|||||||
content-type: 1.0.5
|
content-type: 1.0.5
|
||||||
cookie: 0.7.2
|
cookie: 0.7.2
|
||||||
cookie-signature: 1.2.2
|
cookie-signature: 1.2.2
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
etag: 1.8.1
|
etag: 1.8.1
|
||||||
@@ -4073,7 +4120,7 @@ snapshots:
|
|||||||
|
|
||||||
finalhandler@2.1.0:
|
finalhandler@2.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
on-finished: 2.4.1
|
on-finished: 2.4.1
|
||||||
@@ -4161,9 +4208,6 @@ snapshots:
|
|||||||
|
|
||||||
graphemer@1.4.0: {}
|
graphemer@1.4.0: {}
|
||||||
|
|
||||||
has-flag@3.0.0:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
has-flag@4.0.0: {}
|
has-flag@4.0.0: {}
|
||||||
|
|
||||||
has-symbols@1.1.0: {}
|
has-symbols@1.1.0: {}
|
||||||
@@ -4187,14 +4231,14 @@ snapshots:
|
|||||||
http-proxy-agent@7.0.2:
|
http-proxy-agent@7.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.3
|
agent-base: 7.1.3
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
https-proxy-agent@7.0.6:
|
https-proxy-agent@7.0.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.3
|
agent-base: 7.1.3
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -4617,7 +4661,7 @@ snapshots:
|
|||||||
|
|
||||||
router@2.2.0:
|
router@2.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
depd: 2.0.0
|
depd: 2.0.0
|
||||||
is-promise: 4.0.0
|
is-promise: 4.0.0
|
||||||
parseurl: 1.3.3
|
parseurl: 1.3.3
|
||||||
@@ -4659,7 +4703,7 @@ snapshots:
|
|||||||
|
|
||||||
send@1.2.0:
|
send@1.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
etag: 1.8.1
|
etag: 1.8.1
|
||||||
@@ -4764,11 +4808,6 @@ snapshots:
|
|||||||
|
|
||||||
strip-json-comments@3.1.1: {}
|
strip-json-comments@3.1.1: {}
|
||||||
|
|
||||||
supports-color@5.5.0:
|
|
||||||
dependencies:
|
|
||||||
has-flag: 3.0.0
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
supports-color@7.2.0:
|
supports-color@7.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
has-flag: 4.0.0
|
has-flag: 4.0.0
|
||||||
@@ -4927,7 +4966,7 @@ snapshots:
|
|||||||
vite-node@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4):
|
vite-node@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4):
|
||||||
dependencies:
|
dependencies:
|
||||||
cac: 6.7.14
|
cac: 6.7.14
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
es-module-lexer: 1.7.0
|
es-module-lexer: 1.7.0
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)
|
vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)
|
||||||
@@ -4970,7 +5009,7 @@ snapshots:
|
|||||||
'@vitest/spy': 3.1.3
|
'@vitest/spy': 3.1.3
|
||||||
'@vitest/utils': 3.1.3
|
'@vitest/utils': 3.1.3
|
||||||
chai: 5.2.0
|
chai: 5.2.0
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
expect-type: 1.2.1
|
expect-type: 1.2.1
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
@@ -5002,7 +5041,7 @@ snapshots:
|
|||||||
|
|
||||||
vue-eslint-parser@9.4.3(eslint@9.26.0(jiti@2.4.2)):
|
vue-eslint-parser@9.4.3(eslint@9.26.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.1(supports-color@5.5.0)
|
debug: 4.4.1
|
||||||
eslint: 9.26.0(jiti@2.4.2)
|
eslint: 9.26.0(jiti@2.4.2)
|
||||||
eslint-scope: 7.2.2
|
eslint-scope: 7.2.2
|
||||||
eslint-visitor-keys: 3.4.3
|
eslint-visitor-keys: 3.4.3
|
||||||
@@ -5079,8 +5118,10 @@ snapshots:
|
|||||||
|
|
||||||
yocto-queue@0.1.0: {}
|
yocto-queue@0.1.0: {}
|
||||||
|
|
||||||
zod-to-json-schema@3.24.5(zod@3.24.4):
|
zod-to-json-schema@3.24.5(zod@3.25.23):
|
||||||
dependencies:
|
dependencies:
|
||||||
zod: 3.24.4
|
zod: 3.25.23
|
||||||
|
|
||||||
zod@3.24.4: {}
|
zod@3.24.4: {}
|
||||||
|
|
||||||
|
zod@3.25.23: {}
|
||||||
|
|||||||
Reference in New Issue
Block a user