From 3ce71447b39e5af6bef8dbd00e132879bc6da718 Mon Sep 17 00:00:00 2001 From: danijel-lf Date: Tue, 26 May 2026 14:11:27 +0200 Subject: [PATCH] feat(core-trpc): scaffold tRPC client with React Query providers - createTRPCContext + useTRPC hook for typed client access - NextTrpcProvider with SSR-safe absolute URL resolution - TanstackTrpcProvider for TanStack Start apps - /api/trpc catch-all route handler in web-next - Wire NextTrpcProvider into app providers - Add @repo/core-trpc to transpilePackages --- apps/web-next/next.config.mjs | 1 + apps/web-next/package.json | 9 +- .../web-next/src/app/api/trpc/[trpc]/route.ts | 15 + apps/web-next/src/app/providers.tsx | 4 +- .../2026-05-14-@trpc/react-query.md | 69 +++ .../2026-05-14-@trpc/tanstack-react-query.md | 69 +++ packages/core-trpc/eslint.config.js | 3 + packages/core-trpc/package.json | 37 ++ packages/core-trpc/src/client.test.ts | 12 + packages/core-trpc/src/client.ts | 6 + packages/core-trpc/src/index.ts | 3 + .../core-trpc/src/providers/next-provider.tsx | 40 ++ .../src/providers/tanstack-provider.tsx | 30 ++ packages/core-trpc/src/query-client.ts | 22 + packages/core-trpc/tsconfig.json | 17 + packages/core-trpc/turbo.json | 4 + packages/core-trpc/vitest.config.ts | 7 + pnpm-lock.yaml | 489 +++++++++++++++++- 18 files changed, 824 insertions(+), 13 deletions(-) create mode 100644 apps/web-next/src/app/api/trpc/[trpc]/route.ts create mode 100644 docs/library-decisions/2026-05-14-@trpc/react-query.md create mode 100644 docs/library-decisions/2026-05-14-@trpc/tanstack-react-query.md create mode 100644 packages/core-trpc/eslint.config.js create mode 100644 packages/core-trpc/package.json create mode 100644 packages/core-trpc/src/client.test.ts create mode 100644 packages/core-trpc/src/client.ts create mode 100644 packages/core-trpc/src/index.ts create mode 100644 packages/core-trpc/src/providers/next-provider.tsx create mode 100644 packages/core-trpc/src/providers/tanstack-provider.tsx create mode 100644 packages/core-trpc/src/query-client.ts create mode 100644 packages/core-trpc/tsconfig.json create mode 100644 packages/core-trpc/turbo.json create mode 100644 packages/core-trpc/vitest.config.ts diff --git a/apps/web-next/next.config.mjs b/apps/web-next/next.config.mjs index 9deda63..124d2d1 100644 --- a/apps/web-next/next.config.mjs +++ b/apps/web-next/next.config.mjs @@ -16,6 +16,7 @@ const nextConfig = { "@repo/marketing-pages", "@repo/media", "@repo/navigation", + "@repo/core-trpc", ], }; diff --git a/apps/web-next/package.json b/apps/web-next/package.json index 5fb6511..78534be 100644 --- a/apps/web-next/package.json +++ b/apps/web-next/package.json @@ -19,19 +19,22 @@ "@repo/core-api": "workspace:*", "@repo/core-cms": "workspace:*", "@repo/core-shared": "workspace:*", + "@repo/core-trpc": "workspace:^", "@repo/marketing-pages": "workspace:*", "@repo/media": "workspace:*", "@repo/navigation": "workspace:*", "@sentry/nextjs": "^10.51.0", - "@tanstack/react-query": "^5.66.0", - "@trpc/server": "^11.0.0", + "@tailwindcss/postcss": "^4.3.0", + "@tanstack/react-query": "^5.96.2", + "@trpc/server": "^11.17.0", "inversify": "^6.2.0", "next": "^15.3.0", "payload": "^3.14.0", "react": "^19.0.0", "react-dom": "^19.0.0", "reflect-metadata": "^0.2.2", - "superjson": "^2.2.1" + "superjson": "^2.2.1", + "tailwindcss": "^4.1.0" }, "devDependencies": { "@playwright/test": "^1.50.0", diff --git a/apps/web-next/src/app/api/trpc/[trpc]/route.ts b/apps/web-next/src/app/api/trpc/[trpc]/route.ts new file mode 100644 index 0000000..f1fddf3 --- /dev/null +++ b/apps/web-next/src/app/api/trpc/[trpc]/route.ts @@ -0,0 +1,15 @@ +import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; +import { appRouter } from "@repo/core-api"; +import { bindAll } from "../../../../server/bind-production"; + +const handler = async (req: Request) => { + await bindAll(); + return fetchRequestHandler({ + endpoint: "/api/trpc", + req, + router: appRouter, + createContext: () => ({}), + }); +}; + +export { handler as GET, handler as POST }; diff --git a/apps/web-next/src/app/providers.tsx b/apps/web-next/src/app/providers.tsx index ea9aa55..3f7c3e4 100644 --- a/apps/web-next/src/app/providers.tsx +++ b/apps/web-next/src/app/providers.tsx @@ -1,5 +1,7 @@ "use client"; +import { NextTrpcProvider } from "@repo/core-trpc/next"; + export function Providers({ children }: { children: React.ReactNode }) { - return <>{children}; + return {children}; } diff --git a/docs/library-decisions/2026-05-14-@trpc/react-query.md b/docs/library-decisions/2026-05-14-@trpc/react-query.md new file mode 100644 index 0000000..bd05098 --- /dev/null +++ b/docs/library-decisions/2026-05-14-@trpc/react-query.md @@ -0,0 +1,69 @@ +--- +package: "@trpc/react-query" +version: "^11.0.0" +tier: core +decision: approved +date: 2026-05-14 +deciders: [scaffolded] +adr: null +is-sub-processor: false +processes-pii: false +filter-results: + license: MIT + types: native + maintenance: active + boundary-fit: pass + shadow-check: pass + eu-residency: n/a + cve-scan: clean + named-consumer: pass + socketRisk: skip +verification-commands: + - pnpm audit --audit-level=moderate + - npm view @trpc/react-query license +accepted-cves: [] +--- + +## Filter: license + +MIT — on the workspace allowlist. + +## Filter: types + +Ships first-party TypeScript types; deeply integrated with tRPC's type inference. + +## Filter: maintenance + +Active. Maintained by the tRPC team alongside `@trpc/server` and `@trpc/client`. + +## Filter: boundary-fit + +Core package. The React Query integration bridge belongs in `core-trpc` alongside its sibling tRPC packages. No boundary rule violation. + +## Filter: shadow-check + +No other tRPC–React Query bridge in the workspace. No shadow. + +## Filter: eu-residency + +Client-side integration adapter; no vendor data transmission. n/a. + +## Filter: cve-scan + +No advisories at adoption time. + +## Filter: named-consumer + +`core-trpc` re-exports `@trpc/react-query` hooks for use in Next.js feature pages. + +## Prompt: replaces + +Nothing — this is the initial tRPC scaffold. + +## Prompt: migration-cost-out + +Hard: hooks are tRPC-procedure-typed; migrating away requires replacing all call sites. + +## Prompt: alternatives-considered + +This package is the canonical integration point between `@trpc/client` and `@tanstack/react-query`. No viable alternative exists. diff --git a/docs/library-decisions/2026-05-14-@trpc/tanstack-react-query.md b/docs/library-decisions/2026-05-14-@trpc/tanstack-react-query.md new file mode 100644 index 0000000..6ad57ee --- /dev/null +++ b/docs/library-decisions/2026-05-14-@trpc/tanstack-react-query.md @@ -0,0 +1,69 @@ +--- +package: "@trpc/tanstack-react-query" +version: "^11.1.0" +tier: core +decision: approved +date: 2026-05-14 +deciders: [scaffolded] +adr: null +is-sub-processor: false +processes-pii: false +filter-results: + license: MIT + types: native + maintenance: active + boundary-fit: pass + shadow-check: pass + eu-residency: n/a + cve-scan: clean + named-consumer: pass + socketRisk: skip +verification-commands: + - pnpm audit --audit-level=moderate + - npm view @trpc/tanstack-react-query license +accepted-cves: [] +--- + +## Filter: license + +MIT — on the workspace allowlist. + +## Filter: types + +Ships first-party TypeScript types; part of the tRPC v11 adapter suite. + +## Filter: maintenance + +Active. Maintained by the tRPC team as part of the v11 TanStack Start integration. + +## Filter: boundary-fit + +Core package. Required for the TanStack Start provider (`core-trpc/tanstack`). No boundary rule violation. + +## Filter: shadow-check + +No duplicate TanStack adapter in the workspace. No shadow. + +## Filter: eu-residency + +Client-side integration adapter; no vendor data transmission. n/a. + +## Filter: cve-scan + +No advisories at adoption time. + +## Filter: named-consumer + +`core-trpc` exposes a TanStack Start provider via `@trpc/tanstack-react-query` for `apps/web-tanstack`. + +## Prompt: replaces + +Nothing — this is the initial tRPC scaffold. + +## Prompt: migration-cost-out + +Hard: the TanStack provider is shaped around this adapter's API; replacing requires re-implementing the provider. + +## Prompt: alternatives-considered + +This is the official tRPC adapter for TanStack Start. No viable alternative exists. diff --git a/packages/core-trpc/eslint.config.js b/packages/core-trpc/eslint.config.js new file mode 100644 index 0000000..7440d8f --- /dev/null +++ b/packages/core-trpc/eslint.config.js @@ -0,0 +1,3 @@ +import baseConfig from "@repo/core-eslint/base"; + +export default baseConfig; diff --git a/packages/core-trpc/package.json b/packages/core-trpc/package.json new file mode 100644 index 0000000..da39811 --- /dev/null +++ b/packages/core-trpc/package.json @@ -0,0 +1,37 @@ +{ + "name": "@repo/core-trpc", + "private": true, + "version": "0.0.0", + "type": "module", + "exports": { + ".": "./src/index.ts", + "./next": "./src/providers/next-provider.tsx", + "./tanstack": "./src/providers/tanstack-provider.tsx" + }, + "scripts": { + "build": "tsc --noEmit", + "lint": "eslint .", + "typecheck": "tsc --noEmit", + "test": "vitest run --passWithNoTests" + }, + "dependencies": { + "@repo/core-api": "workspace:*", + "@tanstack/react-query": "^5.66.0", + "@trpc/client": "^11.17.0", + "@trpc/react-query": "^11.17.0", + "@trpc/server": "^11.17.0", + "@trpc/tanstack-react-query": "^11.17.0", + "react": "^19.0.0", + "superjson": "^2.2.1" + }, + "devDependencies": { + "@repo/core-eslint": "workspace:*", + "@repo/core-testing": "workspace:*", + "@repo/core-typescript": "workspace:*", + "@testing-library/jest-dom": "^6.5.0", + "@testing-library/react": "^16.0.0", + "@types/react": "^19.0.0", + "jsdom": "^25.0.0", + "vitest": "^3.0.0" + } +} diff --git a/packages/core-trpc/src/client.test.ts b/packages/core-trpc/src/client.test.ts new file mode 100644 index 0000000..e998a06 --- /dev/null +++ b/packages/core-trpc/src/client.test.ts @@ -0,0 +1,12 @@ +import { describe, it, expect } from "vitest"; +import { useTRPC, TRPCProvider } from "./client"; + +describe("core-trpc client exports", () => { + it("exports useTRPC hook", () => { + expect(useTRPC).toBeTypeOf("function"); + }); + + it("exports TRPCProvider component", () => { + expect(TRPCProvider).toBeTypeOf("function"); + }); +}); diff --git a/packages/core-trpc/src/client.ts b/packages/core-trpc/src/client.ts new file mode 100644 index 0000000..722b8c1 --- /dev/null +++ b/packages/core-trpc/src/client.ts @@ -0,0 +1,6 @@ +"use client"; + +import { createTRPCContext } from "@trpc/tanstack-react-query"; +import type { AppRouter } from "@repo/core-api"; + +export const { TRPCProvider, useTRPC } = createTRPCContext(); diff --git a/packages/core-trpc/src/index.ts b/packages/core-trpc/src/index.ts new file mode 100644 index 0000000..7b27b5d --- /dev/null +++ b/packages/core-trpc/src/index.ts @@ -0,0 +1,3 @@ +export { useTRPC, TRPCProvider } from "./client"; +export { getQueryClient } from "./query-client"; +export type { AppRouter } from "@repo/core-api"; diff --git a/packages/core-trpc/src/providers/next-provider.tsx b/packages/core-trpc/src/providers/next-provider.tsx new file mode 100644 index 0000000..dc4b9d8 --- /dev/null +++ b/packages/core-trpc/src/providers/next-provider.tsx @@ -0,0 +1,40 @@ +"use client"; + +import { useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import superjson from "superjson"; +import type { AppRouter } from "@repo/core-api"; +import { TRPCProvider } from "../client"; +import { getQueryClient } from "../query-client"; + +function getBaseUrl() { + if (typeof window !== "undefined") return ""; + return `http://localhost:${process.env.PORT ?? 3000}`; +} + +export function NextTrpcProvider({ + children, + trpcUrl = "/api/trpc", +}: { + children: React.ReactNode; + trpcUrl?: string; +}) { + const [queryClient] = useState(() => getQueryClient()); + const [trpcClient] = useState(() => + createTRPCClient({ + links: [ + httpBatchLink({ + url: `${getBaseUrl()}${trpcUrl}`, + transformer: superjson, + }), + ], + }), + ); + + return ( + + {children} + + ); +} diff --git a/packages/core-trpc/src/providers/tanstack-provider.tsx b/packages/core-trpc/src/providers/tanstack-provider.tsx new file mode 100644 index 0000000..0f48647 --- /dev/null +++ b/packages/core-trpc/src/providers/tanstack-provider.tsx @@ -0,0 +1,30 @@ +"use client"; + +import { useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createTRPCClient, httpBatchLink } from "@trpc/client"; +import superjson from "superjson"; +import type { AppRouter } from "@repo/core-api"; +import { TRPCProvider } from "../client"; +import { getQueryClient } from "../query-client"; + +export function TanstackTrpcProvider({ + children, + trpcUrl, +}: { + children: React.ReactNode; + trpcUrl: string; +}) { + const [queryClient] = useState(() => getQueryClient()); + const [trpcClient] = useState(() => + createTRPCClient({ + links: [httpBatchLink({ url: trpcUrl, transformer: superjson })], + }), + ); + + return ( + + {children} + + ); +} diff --git a/packages/core-trpc/src/query-client.ts b/packages/core-trpc/src/query-client.ts new file mode 100644 index 0000000..fd496f0 --- /dev/null +++ b/packages/core-trpc/src/query-client.ts @@ -0,0 +1,22 @@ +import { QueryClient } from "@tanstack/react-query"; + +let clientQueryClient: QueryClient | undefined; + +const defaultOptions = { + queries: { + staleTime: 30 * 1000, + refetchOnWindowFocus: false, + }, +}; + +export function getQueryClient(): QueryClient { + if (typeof window === "undefined") { + // Server: always create a new instance per request + return new QueryClient({ defaultOptions }); + } + // Browser: singleton + if (!clientQueryClient) { + clientQueryClient = new QueryClient({ defaultOptions }); + } + return clientQueryClient; +} diff --git a/packages/core-trpc/tsconfig.json b/packages/core-trpc/tsconfig.json new file mode 100644 index 0000000..cd8d483 --- /dev/null +++ b/packages/core-trpc/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "@repo/core-typescript/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "lib": ["ES2022", "DOM"], + "jsx": "preserve", + "declaration": false, + "declarationMap": false, + "types": ["vitest/globals", "@testing-library/jest-dom"], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core-trpc/turbo.json b/packages/core-trpc/turbo.json new file mode 100644 index 0000000..abaadc9 --- /dev/null +++ b/packages/core-trpc/turbo.json @@ -0,0 +1,4 @@ +{ + "extends": ["//"], + "tags": ["core-composition"] +} diff --git a/packages/core-trpc/vitest.config.ts b/packages/core-trpc/vitest.config.ts new file mode 100644 index 0000000..ccf910f --- /dev/null +++ b/packages/core-trpc/vitest.config.ts @@ -0,0 +1,7 @@ +import path from "node:path"; +import { mergeConfig } from "vitest/config"; +import { jsdomVitestConfig } from "@repo/core-typescript/vitest.base.jsdom"; + +export default mergeConfig(jsdomVitestConfig, { + resolve: { alias: { "@": path.resolve(__dirname, "./src") } }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fce7bbd..6e62c51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,7 @@ importers: .: devDependencies: "@ai-hero/sandcastle": - specifier: "^0.5.10" + specifier: ^0.5.10 version: 0.5.10(@effect/cluster@0.57.0(@effect/platform@0.95.0(effect@3.21.2))(@effect/rpc@0.74.0(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2))(@effect/sql@0.50.0(@effect/experimental@0.59.0(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2)(ioredis@5.10.1))(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2))(@effect/workflow@0.17.0(@effect/experimental@0.59.0(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2)(ioredis@5.10.1))(@effect/platform@0.95.0(effect@3.21.2))(@effect/rpc@0.74.0(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2))(effect@3.21.2))(effect@3.21.2))(@effect/rpc@0.74.0(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2))(@effect/sql@0.50.0(@effect/experimental@0.59.0(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2)(ioredis@5.10.1))(@effect/platform@0.95.0(effect@3.21.2))(effect@3.21.2))(@effect/typeclass@0.39.0(effect@3.21.2)) "@playwright/test": specifier: ^1.49.0 @@ -28,6 +28,9 @@ importers: "@typescript-eslint/parser": specifier: ^8.25.0 version: 8.58.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + dotenv-cli: + specifier: ^11.0.0 + version: 11.0.0 fallow: specifier: ^2.73.0 version: 2.73.0 @@ -182,6 +185,9 @@ importers: "@repo/core-shared": specifier: workspace:* version: link:../../packages/core-shared + "@repo/core-trpc": + specifier: workspace:^ + version: link:../../packages/core-trpc "@repo/marketing-pages": specifier: workspace:* version: link:../../packages/marketing-pages @@ -194,12 +200,15 @@ importers: "@sentry/nextjs": specifier: ^10.51.0 version: 10.51.0(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(next@15.5.14(@babel/core@7.25.9)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.99.0))(react@19.2.4)(webpack@5.106.2) + "@tailwindcss/postcss": + specifier: ^4.3.0 + version: 4.3.0 "@tanstack/react-query": - specifier: ^5.66.0 + specifier: ^5.96.2 version: 5.96.2(react@19.2.4) "@trpc/server": - specifier: ^11.0.0 - version: 11.16.0(typescript@5.9.3) + specifier: ^11.17.0 + version: 11.17.0(typescript@5.9.3) inversify: specifier: ^6.2.0 version: 6.2.2(reflect-metadata@0.2.2) @@ -221,6 +230,9 @@ importers: superjson: specifier: ^2.2.1 version: 2.2.6 + tailwindcss: + specifier: ^4.1.0 + version: 4.2.2 devDependencies: "@playwright/test": specifier: ^1.50.0 @@ -389,6 +401,15 @@ importers: "@repo/core-shared": specifier: workspace:* version: link:../core-shared + "@repo/core-trpc": + specifier: workspace:^ + version: link:../core-trpc + "@tanstack/react-query": + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) + "@trpc/client": + specifier: ^11.17.0 + version: 11.17.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) "@trpc/server": specifier: ^11.0.0 version: 11.16.0(typescript@5.9.3) @@ -398,6 +419,9 @@ importers: payload: specifier: ^3.14.0 version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + react: + specifier: ^19.0.0 + version: 19.2.4 reflect-metadata: specifier: ^0.2.2 version: 0.2.2 @@ -417,6 +441,9 @@ importers: "@types/node": specifier: ^22.0.0 version: 22.19.17 + "@types/react": + specifier: ^19.0.0 + version: 19.2.14 "@vitest/coverage-v8": specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) @@ -871,6 +898,58 @@ importers: specifier: ^5.8.0 version: 5.9.3 + packages/core-trpc: + dependencies: + "@repo/core-api": + specifier: workspace:* + version: link:../core-api + "@tanstack/react-query": + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) + "@trpc/client": + specifier: ^11.17.0 + version: 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3) + "@trpc/react-query": + specifier: ^11.17.0 + version: 11.17.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + "@trpc/server": + specifier: ^11.17.0 + version: 11.17.0(typescript@5.9.3) + "@trpc/tanstack-react-query": + specifier: ^11.17.0 + version: 11.17.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + react: + specifier: ^19.0.0 + version: 19.2.4 + superjson: + specifier: ^2.2.1 + version: 2.2.6 + devDependencies: + "@repo/core-eslint": + specifier: workspace:* + version: link:../core-eslint + "@repo/core-testing": + specifier: workspace:* + version: link:../core-testing + "@repo/core-typescript": + specifier: workspace:* + version: link:../core-typescript + "@testing-library/jest-dom": + specifier: ^6.5.0 + version: 6.9.1 + "@testing-library/react": + specifier: ^16.0.0 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + "@types/react": + specifier: ^19.0.0 + version: 19.2.14 + jsdom: + specifier: ^25.0.0 + version: 25.0.1 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + packages/core-typescript: devDependencies: "@vitest/coverage-v8": @@ -943,6 +1022,15 @@ importers: "@repo/core-shared": specifier: workspace:* version: link:../core-shared + "@repo/core-trpc": + specifier: workspace:^ + version: link:../core-trpc + "@tanstack/react-query": + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) + "@trpc/client": + specifier: ^11.17.0 + version: 11.17.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) "@trpc/server": specifier: ^11.0.0 version: 11.16.0(typescript@5.9.3) @@ -952,6 +1040,9 @@ importers: payload: specifier: ^3.14.0 version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + react: + specifier: ^19.0.0 + version: 19.2.4 reflect-metadata: specifier: ^0.2.2 version: 0.2.2 @@ -971,6 +1062,9 @@ importers: "@types/node": specifier: ^22.0.0 version: 22.19.17 + "@types/react": + specifier: ^19.0.0 + version: 19.2.14 "@vitest/coverage-v8": specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) @@ -1023,6 +1117,15 @@ importers: "@repo/core-shared": specifier: workspace:* version: link:../core-shared + "@repo/core-trpc": + specifier: workspace:^ + version: link:../core-trpc + "@tanstack/react-query": + specifier: ^5.66.0 + version: 5.96.2(react@19.2.4) + "@trpc/client": + specifier: ^11.17.0 + version: 11.17.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) "@trpc/server": specifier: ^11.0.0 version: 11.16.0(typescript@5.9.3) @@ -1032,6 +1135,9 @@ importers: payload: specifier: ^3.14.0 version: 3.81.0(graphql@16.13.2)(typescript@5.9.3) + react: + specifier: ^19.0.0 + version: 19.2.4 reflect-metadata: specifier: ^0.2.2 version: 0.2.2 @@ -1051,6 +1157,9 @@ importers: "@types/node": specifier: ^22.0.0 version: 22.19.17 + "@types/react": + specifier: ^19.0.0 + version: 19.2.14 "@vitest/coverage-v8": specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.7.0)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) @@ -1099,6 +1208,13 @@ packages: "@vercel/sandbox": optional: true + "@alloc/quick-lru@5.2.0": + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: ">=10" } + "@ampproject/remapping@2.3.0": resolution: { @@ -6994,6 +7110,12 @@ packages: integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==, } + "@tailwindcss/node@4.3.0": + resolution: + { + integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==, + } + "@tailwindcss/oxide-android-arm64@4.2.2": resolution: { @@ -7003,6 +7125,15 @@ packages: cpu: [arm64] os: [android] + "@tailwindcss/oxide-android-arm64@4.3.0": + resolution: + { + integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [android] + "@tailwindcss/oxide-darwin-arm64@4.2.2": resolution: { @@ -7012,6 +7143,15 @@ packages: cpu: [arm64] os: [darwin] + "@tailwindcss/oxide-darwin-arm64@4.3.0": + resolution: + { + integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [darwin] + "@tailwindcss/oxide-darwin-x64@4.2.2": resolution: { @@ -7021,6 +7161,15 @@ packages: cpu: [x64] os: [darwin] + "@tailwindcss/oxide-darwin-x64@4.3.0": + resolution: + { + integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [darwin] + "@tailwindcss/oxide-freebsd-x64@4.2.2": resolution: { @@ -7030,6 +7179,15 @@ packages: cpu: [x64] os: [freebsd] + "@tailwindcss/oxide-freebsd-x64@4.3.0": + resolution: + { + integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [freebsd] + "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": resolution: { @@ -7039,6 +7197,15 @@ packages: cpu: [arm] os: [linux] + "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0": + resolution: + { + integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==, + } + engines: { node: ">= 20" } + cpu: [arm] + os: [linux] + "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": resolution: { @@ -7048,6 +7215,15 @@ packages: cpu: [arm64] os: [linux] + "@tailwindcss/oxide-linux-arm64-gnu@4.3.0": + resolution: + { + integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [linux] + "@tailwindcss/oxide-linux-arm64-musl@4.2.2": resolution: { @@ -7057,6 +7233,15 @@ packages: cpu: [arm64] os: [linux] + "@tailwindcss/oxide-linux-arm64-musl@4.3.0": + resolution: + { + integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [linux] + "@tailwindcss/oxide-linux-x64-gnu@4.2.2": resolution: { @@ -7066,6 +7251,15 @@ packages: cpu: [x64] os: [linux] + "@tailwindcss/oxide-linux-x64-gnu@4.3.0": + resolution: + { + integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [linux] + "@tailwindcss/oxide-linux-x64-musl@4.2.2": resolution: { @@ -7075,6 +7269,15 @@ packages: cpu: [x64] os: [linux] + "@tailwindcss/oxide-linux-x64-musl@4.3.0": + resolution: + { + integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [linux] + "@tailwindcss/oxide-wasm32-wasi@4.2.2": resolution: { @@ -7090,6 +7293,21 @@ packages: - "@emnapi/wasi-threads" - tslib + "@tailwindcss/oxide-wasm32-wasi@4.3.0": + resolution: + { + integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + bundledDependencies: + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" + - tslib + "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": resolution: { @@ -7099,6 +7317,15 @@ packages: cpu: [arm64] os: [win32] + "@tailwindcss/oxide-win32-arm64-msvc@4.3.0": + resolution: + { + integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==, + } + engines: { node: ">= 20" } + cpu: [arm64] + os: [win32] + "@tailwindcss/oxide-win32-x64-msvc@4.2.2": resolution: { @@ -7108,6 +7335,15 @@ packages: cpu: [x64] os: [win32] + "@tailwindcss/oxide-win32-x64-msvc@4.3.0": + resolution: + { + integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==, + } + engines: { node: ">= 20" } + cpu: [x64] + os: [win32] + "@tailwindcss/oxide@4.2.2": resolution: { @@ -7115,6 +7351,19 @@ packages: } engines: { node: ">= 20" } + "@tailwindcss/oxide@4.3.0": + resolution: + { + integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==, + } + engines: { node: ">= 20" } + + "@tailwindcss/postcss@4.3.0": + resolution: + { + integrity: sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==, + } + "@tailwindcss/vite@4.2.2": resolution: { @@ -7569,6 +7818,28 @@ packages: "@trpc/server": 11.16.0 typescript: ">=5.7.2" + "@trpc/client@11.17.0": + resolution: + { + integrity: sha512-KpJBFrbKTDeVCFv/3ckL1XBBH5Yssn8hethI/rUy7GIpTj+VzjtPjykDqJpzobuVOz+d26cXCSu1t4I6MYI5Zg==, + } + hasBin: true + peerDependencies: + "@trpc/server": 11.17.0 + typescript: ">=5.7.2" + + "@trpc/react-query@11.17.0": + resolution: + { + integrity: sha512-AGcl5YAF8NnhBmyJ6PqJqKb1M5VTGSoNRNqJ3orct4o4epdcg0GWhW+qT9q6gPzs/2ImIwYCdfFpgNGdZ9yLHA==, + } + peerDependencies: + "@tanstack/react-query": ^5.80.3 + "@trpc/client": 11.17.0 + "@trpc/server": 11.17.0 + react: ">=18.2.0" + typescript: ">=5.7.2" + "@trpc/server@11.16.0": resolution: { @@ -7578,6 +7849,28 @@ packages: peerDependencies: typescript: ">=5.7.2" + "@trpc/server@11.17.0": + resolution: + { + integrity: sha512-jbAOUe0PpUTCYqziyu+8vYXZdDXPudZgnEhWCQ2NjKnVEjfE93RqHTt1oycZJv/HNf51YlRXfEEwSIAbb161rw==, + } + hasBin: true + peerDependencies: + typescript: ">=5.7.2" + + "@trpc/tanstack-react-query@11.17.0": + resolution: + { + integrity: sha512-OFxjvCgisP0yaCj7lgP6qPaFwJvJDgnrAUxH3cNIPPR89TpYbndn5vsdKNkc7EnvER9b6wq9Yz8aCcPcOBpDXg==, + } + hasBin: true + peerDependencies: + "@tanstack/react-query": ^5.80.3 + "@trpc/client": 11.17.0 + "@trpc/server": 11.17.0 + react: ">=18.2.0" + typescript: ">=5.7.2" + "@turbo/darwin-64@2.9.4": resolution: { @@ -9914,6 +10207,20 @@ packages: } engines: { node: ">=20" } + dotenv-cli@11.0.0: + resolution: + { + integrity: sha512-r5pA8idbk7GFWuHEU7trSTflWcdBpQEK+Aw17UrSHjS6CReuhrrPcyC3zcQBPQvhArRHnBo/h6eLH1fkCvNlww==, + } + hasBin: true + + dotenv-expand@12.0.3: + resolution: + { + integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==, + } + engines: { node: ">=12" } + dotenv@16.0.3: resolution: { @@ -10131,6 +10438,13 @@ packages: } engines: { node: ">=10.13.0" } + enhanced-resolve@5.22.0: + resolution: + { + integrity: sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==, + } + engines: { node: ">=10.13.0" } + entities@1.1.2: resolution: { @@ -13301,6 +13615,14 @@ packages: engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true + nanoid@3.3.12: + resolution: + { + integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + natural-compare@1.4.0: resolution: { @@ -14032,6 +14354,13 @@ packages: } engines: { node: ^10 || ^12 || >=14 } + postcss@8.5.15: + resolution: + { + integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==, + } + engines: { node: ^10 || ^12 || >=14 } + postcss@8.5.8: resolution: { @@ -15472,6 +15801,12 @@ packages: integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==, } + tailwindcss@4.3.0: + resolution: + { + integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==, + } + tapable@2.3.2: resolution: { @@ -15479,6 +15814,13 @@ packages: } engines: { node: ">=6" } + tapable@2.3.3: + resolution: + { + integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==, + } + engines: { node: ">=6" } + tar-stream@3.2.0: resolution: { @@ -16822,6 +17164,8 @@ snapshots: - bufferutil - utf-8-validate + "@alloc/quick-lru@5.2.0": {} + "@ampproject/remapping@2.3.0": dependencies: "@jridgewell/gen-mapping": 0.3.13 @@ -21111,42 +21455,88 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.2.2 + "@tailwindcss/node@4.3.0": + dependencies: + "@jridgewell/remapping": 2.3.5 + enhanced-resolve: 5.22.0 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.0 + "@tailwindcss/oxide-android-arm64@4.2.2": optional: true + "@tailwindcss/oxide-android-arm64@4.3.0": + optional: true + "@tailwindcss/oxide-darwin-arm64@4.2.2": optional: true + "@tailwindcss/oxide-darwin-arm64@4.3.0": + optional: true + "@tailwindcss/oxide-darwin-x64@4.2.2": optional: true + "@tailwindcss/oxide-darwin-x64@4.3.0": + optional: true + "@tailwindcss/oxide-freebsd-x64@4.2.2": optional: true + "@tailwindcss/oxide-freebsd-x64@4.3.0": + optional: true + "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": optional: true + "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0": + optional: true + "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": optional: true + "@tailwindcss/oxide-linux-arm64-gnu@4.3.0": + optional: true + "@tailwindcss/oxide-linux-arm64-musl@4.2.2": optional: true + "@tailwindcss/oxide-linux-arm64-musl@4.3.0": + optional: true + "@tailwindcss/oxide-linux-x64-gnu@4.2.2": optional: true + "@tailwindcss/oxide-linux-x64-gnu@4.3.0": + optional: true + "@tailwindcss/oxide-linux-x64-musl@4.2.2": optional: true + "@tailwindcss/oxide-linux-x64-musl@4.3.0": + optional: true + "@tailwindcss/oxide-wasm32-wasi@4.2.2": optional: true + "@tailwindcss/oxide-wasm32-wasi@4.3.0": + optional: true + "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": optional: true + "@tailwindcss/oxide-win32-arm64-msvc@4.3.0": + optional: true + "@tailwindcss/oxide-win32-x64-msvc@4.2.2": optional: true + "@tailwindcss/oxide-win32-x64-msvc@4.3.0": + optional: true + "@tailwindcss/oxide@4.2.2": optionalDependencies: "@tailwindcss/oxide-android-arm64": 4.2.2 @@ -21162,6 +21552,29 @@ snapshots: "@tailwindcss/oxide-win32-arm64-msvc": 4.2.2 "@tailwindcss/oxide-win32-x64-msvc": 4.2.2 + "@tailwindcss/oxide@4.3.0": + optionalDependencies: + "@tailwindcss/oxide-android-arm64": 4.3.0 + "@tailwindcss/oxide-darwin-arm64": 4.3.0 + "@tailwindcss/oxide-darwin-x64": 4.3.0 + "@tailwindcss/oxide-freebsd-x64": 4.3.0 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.3.0 + "@tailwindcss/oxide-linux-arm64-gnu": 4.3.0 + "@tailwindcss/oxide-linux-arm64-musl": 4.3.0 + "@tailwindcss/oxide-linux-x64-gnu": 4.3.0 + "@tailwindcss/oxide-linux-x64-musl": 4.3.0 + "@tailwindcss/oxide-wasm32-wasi": 4.3.0 + "@tailwindcss/oxide-win32-arm64-msvc": 4.3.0 + "@tailwindcss/oxide-win32-x64-msvc": 4.3.0 + + "@tailwindcss/postcss@4.3.0": + dependencies: + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.3.0 + "@tailwindcss/oxide": 4.3.0 + postcss: 8.5.15 + tailwindcss: 4.3.0 + "@tailwindcss/vite@4.2.2(vite@6.4.2(@types/node@22.19.17)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))": dependencies: "@tailwindcss/node": 4.2.2 @@ -21908,10 +22321,40 @@ snapshots: "@trpc/server": 11.16.0(typescript@5.9.3) typescript: 5.9.3 + "@trpc/client@11.17.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3)": + dependencies: + "@trpc/server": 11.16.0(typescript@5.9.3) + typescript: 5.9.3 + + "@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)": + dependencies: + "@trpc/server": 11.17.0(typescript@5.9.3) + typescript: 5.9.3 + + "@trpc/react-query@11.17.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3)": + dependencies: + "@tanstack/react-query": 5.96.2(react@19.2.4) + "@trpc/client": 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3) + "@trpc/server": 11.17.0(typescript@5.9.3) + react: 19.2.4 + typescript: 5.9.3 + "@trpc/server@11.16.0(typescript@5.9.3)": dependencies: typescript: 5.9.3 + "@trpc/server@11.17.0(typescript@5.9.3)": + dependencies: + typescript: 5.9.3 + + "@trpc/tanstack-react-query@11.17.0(@tanstack/react-query@5.96.2(react@19.2.4))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3)": + dependencies: + "@tanstack/react-query": 5.96.2(react@19.2.4) + "@trpc/client": 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3) + "@trpc/server": 11.17.0(typescript@5.9.3) + react: 19.2.4 + typescript: 5.9.3 + "@turbo/darwin-64@2.9.4": optional: true @@ -22845,7 +23288,7 @@ snapshots: dotenv: 17.4.2 exsolve: 1.0.8 giget: 3.2.0 - jiti: 2.6.1 + jiti: 2.7.0 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 @@ -23371,6 +23814,17 @@ snapshots: dependencies: type-fest: 5.6.0 + dotenv-cli@11.0.0: + dependencies: + cross-spawn: 7.0.6 + dotenv: 17.4.2 + dotenv-expand: 12.0.3 + minimist: 1.2.8 + + dotenv-expand@12.0.3: + dependencies: + dotenv: 16.6.1 + dotenv@16.0.3: {} dotenv@16.6.1: {} @@ -23444,6 +23898,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.2 + enhanced-resolve@5.22.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + entities@1.1.2: {} entities@2.2.0: {} @@ -25287,7 +25746,7 @@ snapshots: get-port-please: 3.2.0 h3: 1.15.11 http-shutdown: 1.2.2 - jiti: 2.6.1 + jiti: 2.7.0 mlly: 1.8.2 node-forge: 1.4.0 pathe: 2.0.3 @@ -25758,6 +26217,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.12: {} + natural-compare@1.4.0: {} neo-async@2.6.2: {} @@ -26352,6 +26813,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.8: dependencies: nanoid: 3.3.11 @@ -27262,8 +27729,12 @@ snapshots: tailwindcss@4.2.2: {} + tailwindcss@4.3.0: {} + tapable@2.3.2: {} + tapable@2.3.3: {} + tar-stream@3.2.0: dependencies: b4a: 1.8.1 @@ -27623,7 +28094,7 @@ snapshots: dependencies: citty: 0.1.6 defu: 6.1.7 - jiti: 2.6.1 + jiti: 2.7.0 knitwork: 1.3.0 scule: 1.3.0 @@ -28012,7 +28483,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 + enhanced-resolve: 5.22.0 es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -28022,7 +28493,7 @@ snapshots: mime-db: 1.54.0 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.2 + tapable: 2.3.3 terser-webpack-plugin: 5.5.0(webpack@5.106.2) watchpack: 2.5.1 webpack-sources: 3.4.1