UNPKG

@reliverse/rse

Version:

@reliverse/rse is your all-in-one companion for bootstrapping and improving any kind of projects (especially web apps built with frameworks like Next.js) — whether you're kicking off something new or upgrading an existing app. It is also a little AI-power

679 lines (678 loc) 18.2 kB
export const DLER_TPL_API = { name: "api", description: "Template generated from 13 files", updatedAt: "2025-06-17T20:33:59.544Z", config: { files: { "api/orpc/native/utils/orpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "911ac0411a" }, content: `import { createORPCClient } from "@orpc/client"; import { RPCLink } from "@orpc/client/fetch"; import { createTanstackQueryUtils } from "@orpc/tanstack-query"; import type { RouterClient } from "@orpc/server"; import { QueryCache, QueryClient } from "@tanstack/react-query"; import type { appRouter } from "../../server/src/routers"; {{#if auth}} import { authClient } from "@/lib/auth-client"; {{/if}} export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { console.log(error) }, }), }); export const link = new RPCLink({ url: \`\${process.env.EXPO_PUBLIC_SERVER_URL}/rpc\`, {{#if auth}} headers() { const headers = new Map<string, string>(); const cookies = authClient.getCookie(); if (cookies) { headers.set("Cookie", cookies); } return Object.fromEntries(headers); }, {{/if}} }); export const client: RouterClient<typeof appRouter> = createORPCClient(link); export const orpc = createTanstackQueryUtils(client); `, type: "text" }, "api/orpc/server/base/src/lib/context.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "83bd3d8a84" }, content: `{{#if (eq backend 'next')}} import type { NextRequest } from "next/server"; {{#if auth}} import { auth } from "./auth.js"; {{/if}} export async function createContext(req: NextRequest) { {{#if auth}} const session = await auth.api.getSession({ headers: req.headers, }); return { session, }; {{else}} return {} {{/if}} } {{else if (eq backend 'hono')}} import type { Context as HonoContext } from "hono"; {{#if auth}} import { auth } from "./auth.js"; {{/if}} export type CreateContextOptions = { context: HonoContext; }; export async function createContext({ context }: CreateContextOptions) { {{#if auth}} const session = await auth.api.getSession({ headers: context.req.raw.headers, }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'elysia')}} import type { Context as ElysiaContext } from "elysia"; {{#if auth}} import { auth } from "./auth.js"; {{/if}} export type CreateContextOptions = { context: ElysiaContext; }; export async function createContext({ context }: CreateContextOptions) { {{#if auth}} const session = await auth.api.getSession({ headers: context.request.headers, }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'express')}} {{#if auth}} import { fromNodeHeaders } from "better-auth/node"; import { auth } from "./auth.js"; {{/if}} export async function createContext(opts: any) { {{#if auth}} const session = await auth.api.getSession({ headers: fromNodeHeaders(opts.req.headers), }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'fastify')}} import type { IncomingHttpHeaders } from "node:http"; {{#if auth}} import { fromNodeHeaders } from "better-auth/node"; import { auth } from "./auth.js"; {{/if}} export async function createContext(req: IncomingHttpHeaders) { {{#if auth}} const session = await auth.api.getSession({ headers: fromNodeHeaders(req), }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else}} export async function createContext() { return { session: null, }; } {{/if}} export type Context = Awaited<ReturnType<typeof createContext>>; `, type: "text" }, "api/orpc/server/base/src/lib/orpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "3749886982" }, content: `import { ORPCError, os } from "@orpc/server"; import type { Context } from "./context"; export const o = os.$context<Context>(); export const publicProcedure = o; {{#if auth}} const requireAuth = o.middleware(async ({ context, next }) => { if (!context.session?.user) { throw new ORPCError("UNAUTHORIZED"); } return next({ context: { session: context.session, }, }); }); export const protectedProcedure = publicProcedure.use(requireAuth); {{/if}} `, type: "text" }, "api/orpc/server/next/src/app/rpc/[...all]/route.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "cdf4279672" }, content: `{{#if auth}} import { createContext } from '@/lib/context' {{/if}} import { appRouter } from '@/routers' import { RPCHandler } from '@orpc/server/fetch' import { NextRequest } from 'next/server' const handler = new RPCHandler(appRouter) async function handleRequest(req: NextRequest) { const { response } = await handler.handle(req, { prefix: '/rpc', context: {{#if auth}}await createContext(req){{else}}{}{{/if}}, }) return response ?? new Response('Not found', { status: 404 }) } export const GET = handleRequest export const POST = handleRequest export const PUT = handleRequest export const PATCH = handleRequest export const DELETE = handleRequest `, type: "text" }, "api/orpc/web/nuxt/app/plugins/orpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "77efd9809c" }, content: `import { defineNuxtPlugin, useRuntimeConfig } from '#app' import type { RouterClient } from '@orpc/server' import type { appRouter } from "../../../server/src/routers/index"; import { createORPCClient } from '@orpc/client' import { RPCLink } from '@orpc/client/fetch' import { createTanstackQueryUtils } from "@orpc/tanstack-query"; export default defineNuxtPlugin(() => { const config = useRuntimeConfig() const serverUrl = config.public.serverURL const rpcUrl = \`\${serverUrl}/rpc\`; const rpcLink = new RPCLink({ url: rpcUrl, {{#if auth}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }) const client: RouterClient<typeof appRouter> = createORPCClient(rpcLink) const orpcUtils = createTanstackQueryUtils(client) return { provide: { orpc: orpcUtils } } }) `, type: "text" }, "api/orpc/web/react/base/src/utils/orpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "9ab6c8a4c0" }, content: `import { createORPCClient } from "@orpc/client"; import { RPCLink } from "@orpc/client/fetch"; import { createTanstackQueryUtils } from "@orpc/tanstack-query"; import { QueryCache, QueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import type { appRouter } from "../../../server/src/routers/index"; import type { RouterClient } from "@orpc/server"; export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { toast.error(\`Error: \${error.message}\`, { action: { label: "retry", onClick: () => { queryClient.invalidateQueries(); }, }, }); }, }), }); export const link = new RPCLink({ {{#if (includes frontend "next")}} url: \`\${process.env.NEXT_PUBLIC_SERVER_URL}/rpc\`, {{else}} url: \`\${import.meta.env.VITE_SERVER_URL}/rpc\`, {{/if}} {{#if auth}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }); export const client: RouterClient<typeof appRouter> = createORPCClient(link) export const orpc = createTanstackQueryUtils(client) `, type: "text" }, "api/orpc/web/solid/src/utils/orpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "6d53d8cc60" }, content: `import { createORPCClient } from "@orpc/client"; import { RPCLink } from "@orpc/client/fetch"; import { createTanstackQueryUtils } from "@orpc/tanstack-query"; import { QueryCache, QueryClient } from "@tanstack/solid-query"; import type { appRouter } from "../../../server/src/routers/index"; import type { RouterClient } from "@orpc/server"; export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { console.error(\`Error: \${error.message}\`); }, }), }); export const link = new RPCLink({ url: \`\${import.meta.env.VITE_SERVER_URL}/rpc\`, {{#if auth}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }); export const client: RouterClient<typeof appRouter> = createORPCClient(link); export const orpc = createTanstackQueryUtils(client); `, type: "text" }, "api/orpc/web/svelte/src/lib/orpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "b8abb27944" }, content: `import { PUBLIC_SERVER_URL } from "$env/static/public"; import { createORPCClient } from "@orpc/client"; import { RPCLink } from "@orpc/client/fetch"; import type { RouterClient } from "@orpc/server"; import { createTanstackQueryUtils } from "@orpc/tanstack-query"; import { QueryCache, QueryClient } from "@tanstack/svelte-query"; import type { appRouter } from "../../../server/src/routers/index"; export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { console.error(\`Error: \${error.message}\`); }, }), }); export const link = new RPCLink({ url: \`\${PUBLIC_SERVER_URL}/rpc\`, {{#if auth}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }); export const client: RouterClient<typeof appRouter> = createORPCClient(link); export const orpc = createTanstackQueryUtils(client); `, type: "text" }, "api/trpc/native/utils/trpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "ef6c8402a6" }, content: `{{#if auth}} import { authClient } from "@/lib/auth-client"; {{/if}} import { QueryClient } from "@tanstack/react-query"; import { createTRPCClient, httpBatchLink } from "@trpc/client"; import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query"; import type { AppRouter } from "../../server/src/routers"; export const queryClient = new QueryClient(); const trpcClient = createTRPCClient<AppRouter>({ links: [ httpBatchLink({ url: \`\${process.env.EXPO_PUBLIC_SERVER_URL}/trpc\`, {{#if auth}} headers() { const headers = new Map<string, string>(); const cookies = authClient.getCookie(); if (cookies) { headers.set("Cookie", cookies); } return Object.fromEntries(headers); }, {{/if}} }), ], }); export const trpc = createTRPCOptionsProxy<AppRouter>({ client: trpcClient, queryClient, }); `, type: "text" }, "api/trpc/server/base/src/lib/context.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "5c7ccd24ba" }, content: `{{#if (eq backend 'next')}} import type { NextRequest } from "next/server"; {{#if auth}} import { auth } from "./auth.js"; {{/if}} export async function createContext(req: NextRequest) { {{#if auth}} const session = await auth.api.getSession({ headers: req.headers, }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'hono')}} import type { Context as HonoContext } from "hono"; {{#if auth}} import { auth } from "./auth.js"; {{/if}} export type CreateContextOptions = { context: HonoContext; }; export async function createContext({ context }: CreateContextOptions) { {{#if auth}} const session = await auth.api.getSession({ headers: context.req.raw.headers, }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'elysia')}} import type { Context as ElysiaContext } from "elysia"; {{#if auth}} import { auth } from "./auth.js"; {{/if}} export type CreateContextOptions = { context: ElysiaContext; }; export async function createContext({ context }: CreateContextOptions) { {{#if auth}} const session = await auth.api.getSession({ headers: context.request.headers, }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'express')}} import type { CreateExpressContextOptions } from "@trpc/server/adapters/express"; {{#if auth}} import { fromNodeHeaders } from "better-auth/node"; import { auth } from "./auth.js"; {{/if}} export async function createContext(opts: CreateExpressContextOptions) { {{#if auth}} const session = await auth.api.getSession({ headers: fromNodeHeaders(opts.req.headers), }); return { session, }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else if (eq backend 'fastify')}} import type { CreateFastifyContextOptions } from "@trpc/server/adapters/fastify"; {{#if auth}} import { fromNodeHeaders } from "better-auth/node"; import { auth } from "./auth.js"; {{/if}} export async function createContext({ req, res }: CreateFastifyContextOptions) { {{#if auth}} const session = await auth.api.getSession({ headers: fromNodeHeaders(req.headers), }); return { session }; {{else}} // No auth configured return { session: null, }; {{/if}} } {{else}} export async function createContext() { return { session: null, }; } {{/if}} export type Context = Awaited<ReturnType<typeof createContext>>; `, type: "text" }, "api/trpc/server/base/src/lib/trpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "f112e6ba22" }, content: `import { initTRPC, TRPCError } from "@trpc/server"; import type { Context } from "./context"; export const t = initTRPC.context<Context>().create(); export const router = t.router; export const publicProcedure = t.procedure; {{#if auth}} export const protectedProcedure = t.procedure.use(({ ctx, next }) => { if (!ctx.session) { throw new TRPCError({ code: "UNAUTHORIZED", message: "Authentication required", cause: "No session", }); } return next({ ctx: { ...ctx, session: ctx.session, }, }); }); {{/if}} `, type: "text" }, "api/trpc/server/next/src/app/trpc/[trpc]/route.ts": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "1316017eae" }, content: `import { fetchRequestHandler } from '@trpc/server/adapters/fetch'; import { appRouter } from '@/routers'; import { createContext } from '@/lib/context'; import { NextRequest } from 'next/server'; function handler(req: NextRequest) { return fetchRequestHandler({ endpoint: '/trpc', req, router: appRouter, createContext: () => createContext(req) }); } export { handler as GET, handler as POST }; `, type: "text" }, "api/trpc/web/react/base/src/utils/trpc.ts.hbs": { metadata: { updatedAt: "2025-06-17T06:06:35.000Z", updatedHash: "724dc936a4" }, content: `{{#if (includes frontend 'next')}} import { QueryCache, QueryClient } from '@tanstack/react-query'; import { createTRPCClient, httpBatchLink } from '@trpc/client'; import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query'; import type { AppRouter } from '../../../server/src/routers'; import { toast } from 'sonner'; export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { toast.error(error.message, { action: { label: "retry", onClick: () => { queryClient.invalidateQueries(); }, }, }); }, }), }); const trpcClient = createTRPCClient<AppRouter>({ links: [ httpBatchLink({ {{#if (includes frontend 'next')}} url: \`\${process.env.NEXT_PUBLIC_SERVER_URL}/trpc\`, {{else}} url: \`\${import.meta.env.VITE_SERVER_URL}/trpc\`, {{/if}} {{#if auth}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }), ], }) export const trpc = createTRPCOptionsProxy<AppRouter>({ client: trpcClient, queryClient, }); {{else if (includes frontend 'tanstack-start')}} import { createTRPCContext } from "@trpc/tanstack-react-query"; import type { AppRouter } from "../../../server/src/routers"; export const { TRPCProvider, useTRPC, useTRPCClient } = createTRPCContext<AppRouter>(); {{else}} import type { AppRouter } from "../../../server/src/routers"; import { QueryCache, QueryClient } from "@tanstack/react-query"; import { createTRPCClient, httpBatchLink } from "@trpc/client"; import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query"; import { toast } from "sonner"; export const queryClient = new QueryClient({ queryCache: new QueryCache({ onError: (error) => { toast.error(error.message, { action: { label: "retry", onClick: () => { queryClient.invalidateQueries(); }, }, }); }, }), }); export const trpcClient = createTRPCClient<AppRouter>({ links: [ httpBatchLink({ url: \`\${import.meta.env.VITE_SERVER_URL}/trpc\`, {{#if auth}} fetch(url, options) { return fetch(url, { ...options, credentials: "include", }); }, {{/if}} }), ], }); export const trpc = createTRPCOptionsProxy<AppRouter>({ client: trpcClient, queryClient, }); {{/if}} `, type: "text" } } } };