// Generated by scripts/generate-manifest.mjs. Do not edit by hand. import type { AddOnCompiled } from '../../../../../types.js' type TemplateRecord = Record type TemplateAddOn = TemplateRecord & { integrations?: Array routes?: Array } type TemplateRenderContext = { [key: string]: any packageManager: any projectName: any typescript: any tailwind: any blank: any js: any jsx: any fileRouter: any codeRouter: any routerOnly: any includeExamples: any addOnEnabled: Record addOnOption: Record addOns: Array integrations: Array routes: Array getPackageManagerAddScript: (...args: Array) => string getPackageManagerRunScript: (...args: Array) => string getPackageManagerExecuteScript: (...args: Array) => string relativePath: (...args: Array) => string integrationImportContent: (...args: Array) => string integrationImportCode: (...args: Array) => string | undefined renderTemplate: (content: string) => string ignoreFile: () => never } type TemplateRenderer = (context: TemplateRenderContext) => string | undefined function __escapeXML(value: unknown) { if (value === undefined || value === null) { return '' } return String(value).replace(/[&<>'"]/g, (character) => { switch (character) { case '&': return '&' case '<': return '<' case '>': return '>' case '"': return '"' case "'": return ''' default: return character } }) } export function getManifestTemplateKey(template: string) { let hash = 0x811c9dc5 for (let i = 0; i < template.length; i++) { hash ^= template.charCodeAt(i) hash = Math.imul(hash, 0x01000193) >>> 0 } return `${hash.toString(16).padStart(8, '0')}:${template.length}` } const templateRenderers: Record = { } export function hasManifestTemplate(template: string) { return getManifestTemplateKey(template) in templateRenderers } export function renderManifestTemplate( template: string, context: TemplateRenderContext, ) { const key = getManifestTemplateKey(template) const renderer = templateRenderers[key] if (!renderer) { throw new Error(`Template ${key} was not precompiled into the manifest`) } return renderer(context) ?? '' } export const addOn = { "name": "tRPC", "description": "Integrate tRPC into your application.", "phase": "add-on", "modes": [ "file-router" ], "link": "https://trpc.io/", "dependsOn": [ "tanstack-query" ], "type": "add-on", "category": "api", "color": "#2596BE", "priority": 27, "routes": [ { "icon": "Network", "url": "/demo/trpc-todo", "name": "tRPC Todo", "path": "src/routes/demo.trpc-todo.tsx", "jsName": "TRPCTodos" } ], "id": "tRPC", "version": "0.0.0", "packageAdditions": { "dependencies": { "@trpc/client": "^11.11.0", "@trpc/server": "^11.11.0", "@trpc/tanstack-react-query": "^11.11.0", "superjson": "^2.2.2", "zod": "^4.3.6" } }, "readmeIsEjs": false, "files": { "src/integrations/trpc/init.ts": "import { initTRPC } from \"@trpc/server\";\nimport superjson from \"superjson\";\n\nconst t = initTRPC.create({\n transformer: superjson,\n});\n\nexport const createTRPCRouter = t.router;\nexport const publicProcedure = t.procedure;\n", "src/integrations/trpc/react.ts": "import { createTRPCContext } from \"@trpc/tanstack-react-query\";\nimport type { TRPCRouter } from \"#/integrations/trpc/router\";\n\nexport const { TRPCProvider, useTRPC } = createTRPCContext();\n", "src/integrations/trpc/router.ts": "import { z } from 'zod'\n\nimport { createTRPCRouter, publicProcedure } from './init'\n\nimport type { TRPCRouterRecord } from '@trpc/server'\n\nconst todos = [\n { id: 1, name: 'Get groceries' },\n { id: 2, name: 'Buy a new phone' },\n { id: 3, name: 'Finish the project' },\n]\n\nconst todosRouter = {\n list: publicProcedure.query(() => todos),\n add: publicProcedure\n .input(z.object({ name: z.string() }))\n .mutation(({ input }) => {\n const newTodo = { id: todos.length + 1, name: input.name }\n todos.push(newTodo)\n return newTodo\n }),\n} satisfies TRPCRouterRecord\n\nexport const trpcRouter = createTRPCRouter({\n todos: todosRouter,\n})\nexport type TRPCRouter = typeof trpcRouter\n", "src/routes/api.trpc.$.tsx": "import { fetchRequestHandler } from '@trpc/server/adapters/fetch'\nimport { trpcRouter } from '#/integrations/trpc/router'\nimport { createFileRoute } from '@tanstack/react-router'\n\nfunction handler({ request }: { request: Request }) {\n return fetchRequestHandler({\n req: request,\n router: trpcRouter,\n endpoint: '/api/trpc',\n })\n}\n\nexport const Route = createFileRoute('/api/trpc/$')({\n server: {\n handlers: {\n GET: handler,\n POST: handler,\n },\n },\n})\n", "src/routes/demo/trpc-todo.tsx": "import { useCallback, useState } from 'react'\nimport { createFileRoute } from '@tanstack/react-router'\nimport { useMutation, useQuery } from '@tanstack/react-query'\nimport { useTRPC } from '#/integrations/trpc/react'\n\nexport const Route = createFileRoute('/demo/trpc-todo')({\n component: TRPCTodos,\n loader: async ({ context }) => {\n await context.queryClient.prefetchQuery(\n context.trpc.todos.list.queryOptions(),\n )\n },\n})\n\nfunction TRPCTodos() {\n const trpc = useTRPC()\n const { data, refetch } = useQuery(trpc.todos.list.queryOptions())\n\n const [todo, setTodo] = useState('')\n const { mutate: addTodo } = useMutation({\n ...trpc.todos.add.mutationOptions(),\n onSuccess: () => {\n refetch()\n setTodo('')\n },\n })\n\n const submitTodo = useCallback(() => {\n addTodo({ name: todo })\n }, [addTodo, todo])\n\n return (\n
\n
\n

tRPC

\n

Todos

\n
    \n {data?.map((t) => (\n
  • \n {t.name}\n
  • \n ))}\n
\n
\n setTodo(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n submitTodo()\n }\n }}\n placeholder=\"Enter a new todo...\"\n className=\"demo-input\"\n />\n \n Add todo\n \n
\n
\n
\n )\n}\n" }, "deletedFiles": [], "smallLogo": "" } satisfies AddOnCompiled