@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
997 lines (996 loc) • 26.3 kB
JavaScript
export const DLER_TPL_BACKEND = {
name: "backend",
description: "Template generated from 21 files",
updatedAt: "2025-06-17T20:33:59.618Z",
config: {
files: {
"backend/convex/packages/backend/convex/healthCheck.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "4e85265190"
},
content: `import { query } from "./_generated/server";
export const get = query({
handler: async () => {
return "OK";
}
})
`,
type: "text"
},
"backend/convex/packages/backend/convex/README.md": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "d261559702"
},
content: `# Welcome to your Convex functions directory!
Write your Convex functions here.
See https://docs.convex.dev/functions for more.
A query function that takes two arguments looks like:
\`\`\`ts
// functions.js
import { query } from "./_generated/server";
import { v } from "convex/values";
export const myQueryFunction = query({
// Validators for arguments.
args: {
first: v.number(),
second: v.string(),
},
// Function implementation.
handler: async (ctx, args) => {
// Read the database as many times as you need here.
// See https://docs.convex.dev/database/reading-data.
const documents = await ctx.db.query("tablename").collect();
// Arguments passed from the client are properties of the args object.
console.log(args.first, args.second);
// Write arbitrary JavaScript here: filter, aggregate, build derived data,
// remove non-public properties, or create new objects.
return documents;
},
});
\`\`\`
Using this query function in a React component looks like:
\`\`\`ts
const data = useQuery(api.functions.myQueryFunction, {
first: 10,
second: "hello",
});
\`\`\`
A mutation function looks like:
\`\`\`ts
// functions.js
import { mutation } from "./_generated/server";
import { v } from "convex/values";
export const myMutationFunction = mutation({
// Validators for arguments.
args: {
first: v.string(),
second: v.string(),
},
// Function implementation.
handler: async (ctx, args) => {
// Insert or modify documents in the database here.
// Mutations can also read from the database like queries.
// See https://docs.convex.dev/database/writing-data.
const message = { body: args.first, author: args.second };
const id = await ctx.db.insert("messages", message);
// Optionally, return a value from your mutation.
return await ctx.db.get(id);
},
});
\`\`\`
Using this mutation function in a React component looks like:
\`\`\`ts
const mutation = useMutation(api.functions.myMutationFunction);
function handleButtonPress() {
// fire and forget, the most common way to use mutations
mutation({ first: "Hello!", second: "me" });
// OR
// use the result once the mutation has completed
mutation({ first: "Hello!", second: "me" }).then((result) =>
console.log(result),
);
}
\`\`\`
Use the Convex CLI to push your functions to a deployment. See everything
the Convex CLI can do by running \`npx convex -h\` in your project root
directory. To learn more, launch the docs with \`npx convex docs\`.
`,
type: "text"
},
"backend/convex/packages/backend/convex/schema.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "8415cc5ad3"
},
content: `import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
todos: defineTable({
text: v.string(),
completed: v.boolean(),
}),
});
`,
type: "text"
},
"backend/convex/packages/backend/convex/todos.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "0e64275cf0"
},
content: `import { query, mutation } from "./_generated/server";
import { v } from "convex/values";
export const getAll = query({
handler: async (ctx) => {
return await ctx.db.query("todos").collect();
},
});
export const create = mutation({
args: {
text: v.string(),
},
handler: async (ctx, args) => {
const newTodoId = await ctx.db.insert("todos", {
text: args.text,
completed: false,
});
return await ctx.db.get(newTodoId);
},
});
export const toggle = mutation({
args: {
id: v.id("todos"),
completed: v.boolean(),
},
handler: async (ctx, args) => {
await ctx.db.patch(args.id, { completed: args.completed });
return { success: true };
},
});
export const deleteTodo = mutation({
args: {
id: v.id("todos"),
},
handler: async (ctx, args) => {
await ctx.db.delete(args.id);
return { success: true };
},
});
`,
type: "text"
},
"backend/convex/packages/backend/convex/tsconfig.json": {
jsonComments: {
"2": " /* This TypeScript project config describes the environment that",
"7": " /* These settings are not required by Convex and can be modified. */",
"15": " /* These compiler options are required by Convex */"
},
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "3f3d4096f8"
},
content: {
compilerOptions: {
allowJs: true,
strict: true,
moduleResolution: "Bundler",
jsx: "react-jsx",
skipLibCheck: true,
allowSyntheticDefaultImports: true,
target: "ESNext",
lib: ["ES2021", "dom"],
forceConsistentCasingInFileNames: true,
module: "ESNext",
isolatedModules: true,
noEmit: true
},
include: ["./**/*"],
exclude: ["./_generated"]
},
type: "json"
},
"backend/convex/packages/backend/package.json.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "a31c4f0f85"
},
content: `{
"name": "@{{projectName}}/backend",
"version": "1.0.0",
"scripts": {
"dev": "convex dev",
"setup": "convex dev --configure --until-success"
},
"author": "",
"license": "ISC",
"description": "",
"devDependencies": {
"typescript": "^5.8.3"
},
"dependencies": {
"convex": "^1.23.0"
}
}
`,
type: "text"
},
"backend/convex/packages/backend/_gitignore": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "5e859410e4"
},
content: `
.env.local
`,
type: "text"
},
"backend/server/elysia/src/index.ts.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "7b173395c4"
},
content: `import "dotenv/config";
{{#if (eq runtime "node")}}
import { node } from "@elysiajs/node";
{{/if}}
import { Elysia } from "elysia";
import { cors } from "@elysiajs/cors";
{{#if (eq api "trpc")}}
import { createContext } from "./lib/context";
import { appRouter } from "./routers/index";
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
{{/if}}
{{#if (eq api "orpc")}}
import { RPCHandler } from "@orpc/server/fetch";
import { appRouter } from "./routers";
import { createContext } from "./lib/context";
{{/if}}
{{#if auth}}
import { auth } from "./lib/auth";
{{/if}}
{{#if (eq api "orpc")}}
const handler = new RPCHandler(appRouter);
{{/if}}
{{#if (eq runtime "node")}}
const app = new Elysia({ adapter: node() })
{{else}}
const app = new Elysia()
{{/if}}
.use(
cors({
origin: process.env.CORS_ORIGIN || "",
methods: ["GET", "POST", "OPTIONS"],
{{#if auth}}
allowedHeaders: ["Content-Type", "Authorization"],
credentials: true,
{{/if}}
}),
)
{{#if auth}}
.all("/api/auth/*", async (context) => {
const { request } = context;
if (["POST", "GET"].includes(request.method)) {
return auth.handler(request);
}
context.error(405);
})
{{/if}}
{{#if (eq api "orpc")}}
.all('/rpc*', async (context) => {
const { response } = await handler.handle(context.request, {
prefix: '/rpc',
context: await createContext({ context })
})
return response ?? new Response('Not Found', { status: 404 })
})
{{/if}}
{{#if (eq api "trpc")}}
.all("/trpc/*", async (context) => {
const res = await fetchRequestHandler({
endpoint: "/trpc",
router: appRouter,
req: context.request,
createContext: () => createContext({ context }),
});
return res;
})
{{/if}}
.get("/", () => "OK")
.listen(3000, () => {
console.log("Server is running on http://localhost:3000");
});
`,
type: "text"
},
"backend/server/express/src/index.ts.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "7d15f582c5"
},
content: `import "dotenv/config";
{{#if (eq api "trpc")}}
import { createExpressMiddleware } from "@trpc/server/adapters/express";
import { createContext } from "./lib/context";
import { appRouter } from "./routers/index";
{{/if}}
{{#if (eq api "orpc")}}
import { RPCHandler } from "@orpc/server/node";
import { appRouter } from "./routers";
{{#if auth}}
import { createContext } from "./lib/context";
{{/if}}
{{/if}}
import cors from "cors";
import express from "express";
{{#if (includes examples "ai")}}
import { streamText } from "ai";
import { google } from "@ai-sdk/google";
{{/if}}
{{#if auth}}
import { auth } from "./lib/auth";
import { toNodeHandler } from "better-auth/node";
{{/if}}
const app = express();
app.use(
cors({
origin: process.env.CORS_ORIGIN || "",
methods: ["GET", "POST", "OPTIONS"],
{{#if auth}}
allowedHeaders: ["Content-Type", "Authorization"],
credentials: true,
{{/if}}
})
);
{{#if auth}}
app.all("/api/auth{/*path}", toNodeHandler(auth));
{{/if}}
{{#if (eq api "trpc")}}
app.use(
"/trpc",
createExpressMiddleware({
router: appRouter,
createContext
})
);
{{/if}}
{{#if (eq api "orpc")}}
const handler = new RPCHandler(appRouter);
app.use('/rpc{*path}', async (req, res, next) => {
const { matched } = await handler.handle(req, res, {
prefix: '/rpc',
{{#if auth}}
context: await createContext({ req }),
{{else}}
context: {},
{{/if}}
});
if (matched) return;
next();
});
{{/if}}
app.use(express.json())
{{#if (includes examples "ai")}}
app.post("/ai", async (req, res) => {
const { messages = [] } = req.body || {};
const result = streamText({
model: google("gemini-1.5-flash"),
messages,
});
result.pipeDataStreamToResponse(res);
});
{{/if}}
app.get("/", (_req, res) => {
res.status(200).send("OK");
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(\`Server is running on port \${port}\`);
});
`,
type: "text"
},
"backend/server/fastify/src/index.ts.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "202aee9233"
},
content: `import "dotenv/config";
import Fastify from "fastify";
import fastifyCors from "@fastify/cors";
{{#if (eq api "trpc")}}
import { fastifyTRPCPlugin, type FastifyTRPCPluginOptions } from "@trpc/server/adapters/fastify";
import { createContext } from "./lib/context";
import { appRouter, type AppRouter } from "./routers/index";
{{/if}}
{{#if (eq api "orpc")}}
import { RPCHandler } from "@orpc/server/node";
import { CORSPlugin } from "@orpc/server/plugins";
import { appRouter } from "./routers/index";
import { createServer } from "node:http";
{{#if auth}}
import { createContext } from "./lib/context";
{{/if}}
{{/if}}
{{#if (includes examples "ai")}}
import type { FastifyRequest, FastifyReply } from "fastify";
import { streamText, type Message } from "ai";
import { google } from "@ai-sdk/google";
{{/if}}
{{#if auth}}
import { auth } from "./lib/auth";
{{/if}}
const baseCorsConfig = {
origin: process.env.CORS_ORIGIN || "",
methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allowedHeaders: [
"Content-Type",
"Authorization",
"X-Requested-With"
],
credentials: true,
maxAge: 86400,
};
{{#if (eq api "orpc")}}
const handler = new RPCHandler(appRouter, {
plugins: [
new CORSPlugin({
origin: process.env.CORS_ORIGIN,
credentials: true,
allowHeaders: ["Content-Type", "Authorization"],
}),
],
});
const fastify = Fastify({
logger: true,
serverFactory: (fastifyHandler) => {
const server = createServer(async (req, res) => {
const { matched } = await handler.handle(req, res, {
context: await createContext(req.headers),
prefix: "/rpc",
});
if (matched) {
return;
}
fastifyHandler(req, res);
});
return server;
},
});
{{else}}
const fastify = Fastify({
logger: true,
});
{{/if}}
fastify.register(fastifyCors, baseCorsConfig);
{{#if auth}}
fastify.route({
method: ["GET", "POST"],
url: "/api/auth/*",
async handler(request, reply) {
try {
const url = new URL(request.url, \`http://\${request.headers.host}\`);
const headers = new Headers();
Object.entries(request.headers).forEach(([key, value]) => {
if (value) headers.append(key, value.toString());
});
const req = new Request(url.toString(), {
method: request.method,
headers,
body: request.body ? JSON.stringify(request.body) : undefined,
});
const response = await auth.handler(req);
reply.status(response.status);
response.headers.forEach((value, key) => reply.header(key, value));
reply.send(response.body ? await response.text() : null);
} catch (error) {
fastify.log.error("Authentication Error:", error);
reply.status(500).send({
error: "Internal authentication error",
code: "AUTH_FAILURE"
});
}
}
});
{{/if}}
{{#if (eq api "trpc")}}
fastify.register(fastifyTRPCPlugin, {
prefix: "/trpc",
trpcOptions: {
router: appRouter,
createContext,
onError({ path, error }) {
console.error(\`Error in tRPC handler on path '\${path}':\`, error);
},
} satisfies FastifyTRPCPluginOptions<AppRouter>["trpcOptions"],
});
{{/if}}
{{#if (includes examples "ai")}}
interface AiRequestBody {
id?: string;
messages: Message[];
}
fastify.post('/ai', async function (request, reply) {
const { messages } = request.body as AiRequestBody;
const result = streamText({
model: google('gemini-1.5-flash'),
messages,
});
reply.header('X-Vercel-AI-Data-Stream', 'v1');
reply.header('Content-Type', 'text/plain; charset=utf-8');
return reply.send(result.toDataStream());
});
{{/if}}
fastify.get('/', async () => {
return 'OK'
})
fastify.listen({ port: 3000 }, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
console.log("Server running on port 3000");
});
`,
type: "text"
},
"backend/server/hono/src/index.ts.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "db661b84bf"
},
content: `{{#if (or (eq runtime "bun") (eq runtime "node"))}}
import "dotenv/config";
{{/if}}
{{#if (eq runtime "workers")}}
import { env } from "cloudflare:workers";
{{/if}}
{{#if (eq api "orpc")}}
import { RPCHandler } from "@orpc/server/fetch";
import { createContext } from "./lib/context";
import { appRouter } from "./routers/index";
{{/if}}
{{#if (eq api "trpc")}}
import { trpcServer } from "@hono/trpc-server";
import { createContext } from "./lib/context";
import { appRouter } from "./routers/index";
{{/if}}
{{#if auth}}
import { auth } from "./lib/auth";
{{/if}}
import { Hono } from "hono";
import { cors } from "hono/cors";
import { logger } from "hono/logger";
{{#if (and (includes examples "ai") (or (eq runtime "bun") (eq runtime "node")))}}
import { streamText } from "ai";
import { google } from "@ai-sdk/google";
import { stream } from "hono/streaming";
{{/if}}
{{#if (and (includes examples "ai") (eq runtime "workers"))}}
import { streamText } from "ai";
import { stream } from "hono/streaming";
import { createGoogleGenerativeAI } from "@ai-sdk/google";
{{/if}}
const app = new Hono();
app.use(logger());
app.use("/*", cors({
{{#if (or (eq runtime "bun") (eq runtime "node"))}}
origin: process.env.CORS_ORIGIN || "",
{{/if}}
{{#if (eq runtime "workers")}}
origin: env.CORS_ORIGIN || "",
{{/if}}
allowMethods: ["GET", "POST", "OPTIONS"],
{{#if auth}}
allowHeaders: ["Content-Type", "Authorization"],
credentials: true,
{{/if}}
}));
{{#if auth}}
app.on(["POST", "GET"], "/api/auth/**", (c) => auth.handler(c.req.raw));
{{/if}}
{{#if (eq api "orpc")}}
const handler = new RPCHandler(appRouter);
app.use("/rpc/*", async (c, next) => {
const context = await createContext({ context: c });
const { matched, response } = await handler.handle(c.req.raw, {
prefix: "/rpc",
context: context,
});
if (matched) {
return c.newResponse(response.body, response);
}
await next();
});
{{/if}}
{{#if (eq api "trpc")}}
app.use("/trpc/*", trpcServer({
router: appRouter,
createContext: (_opts, context) => {
return createContext({ context });
},
}));
{{/if}}
{{#if (and (includes examples "ai") (or (eq runtime "bun") (eq runtime "node")))}}
app.post("/ai", async (c) => {
const body = await c.req.json();
const messages = body.messages || [];
const result = streamText({
model: google("gemini-1.5-flash"),
messages,
});
c.header("X-Vercel-AI-Data-Stream", "v1");
c.header("Content-Type", "text/plain; charset=utf-8");
return stream(c, (stream) => stream.pipe(result.toDataStream()));
});
{{/if}}
{{#if (and (includes examples "ai") (eq runtime "workers"))}}
app.post("/ai", async (c) => {
const body = await c.req.json();
const messages = body.messages || [];
const google = createGoogleGenerativeAI({
apiKey: env.GOOGLE_GENERATIVE_AI_API_KEY,
});
const result = streamText({
model: google("gemini-1.5-flash"),
messages,
});
c.header("X-Vercel-AI-Data-Stream", "v1");
c.header("Content-Type", "text/plain; charset=utf-8");
return stream(c, (stream) => stream.pipe(result.toDataStream()));
});
{{/if}}
app.get("/", (c) => {
return c.text("OK");
});
{{#if (eq runtime "node")}}
import { serve } from "@hono/node-server";
serve({
fetch: app.fetch,
port: 3000,
}, (info) => {
console.log(\`Server is running on http://localhost:\${info.port}\`);
});
{{else}}
{{#if (eq runtime "bun")}}
export default app;
{{/if}}
{{#if (eq runtime "workers")}}
export default app;
{{/if}}
{{/if}}
`,
type: "text"
},
"backend/server/next/next-env.d.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "f75a118439"
},
content: `/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
`,
type: "text"
},
"backend/server/next/next.config.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "89327ac52f"
},
content: `import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
};
export default nextConfig;
`,
type: "text"
},
"backend/server/next/package.json.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "0b109deaf9"
},
content: `{
"name": "server",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start"
},
"dependencies": {
"next": "15.3.0",
"dotenv": "^16.5.0"
},
{{#if (eq dbSetup 'supabase')}}
"trustedDependencies": [
"supabase"
],
{{/if}}
"devDependencies": {
"@types/node": "^20",
"@types/react": "^19",
"typescript": "^5"
}
}
`,
type: "text"
},
"backend/server/next/src/app/route.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "e40f5d7501"
},
content: `import { NextResponse } from "next/server";
export async function GET() {
return NextResponse.json({ message: "OK" });
}
`,
type: "text"
},
"backend/server/next/src/middleware.ts": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "d71ca4997c"
},
content: `import { NextResponse } from "next/server";
export function middleware() {
const res = NextResponse.next()
res.headers.append('Access-Control-Allow-Credentials', "true")
res.headers.append('Access-Control-Allow-Origin', process.env.CORS_ORIGIN || "")
res.headers.append('Access-Control-Allow-Methods', 'GET,POST,OPTIONS')
res.headers.append(
'Access-Control-Allow-Headers',
'Content-Type, Authorization'
)
return res
}
export const config = {
matcher: '/:path*',
}
`,
type: "text"
},
"backend/server/next/tsconfig.json.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "e47257abfb"
},
content: `{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
{{#unless (or (eq backend "convex") (eq backend "none"))}}
"composite": true,
{{/unless}}
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./src/*"]
{{#if (eq orm 'prisma')}},
"prisma": ["node_modules/prisma"]
{{/if}}
},
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
`,
type: "text"
},
"backend/server/server-base/package.json.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "1cd020a140"
},
content: `{
"name": "server",
"main": "src/index.ts",
"type": "module",
"scripts": {
"build": "tsc && tsc-alias",
"check-types": "tsc --noEmit",
"compile": "bun build --compile --minify --sourcemap --bytecode ./src/index.ts --outfile server"
},
{{#if (eq orm 'prisma')}}
"prisma": {
"schema": "./schema"
},
{{/if}}
"dependencies": {
"dotenv": "^16.4.7",
"zod": "^3.25.16"
},
{{#if (eq dbSetup 'supabase')}}
"trustedDependencies": [
"supabase"
],
{{/if}}
"devDependencies": {
"tsc-alias": "^1.8.11",
"typescript": "^5.8.2"
}
}
`,
type: "text"
},
"backend/server/server-base/src/routers/index.ts.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "2a92c7eab7"
},
content: `{{#if (eq api "orpc")}}
import { {{#if auth}}protectedProcedure, {{/if}}publicProcedure } from "../lib/orpc";
{{#if (includes examples "todo")}}
import { todoRouter } from "./todo";
{{/if}}
export const appRouter = {
healthCheck: publicProcedure.handler(() => {
return "OK";
}),
{{#if auth}}
privateData: protectedProcedure.handler(({ context }) => {
return {
message: "This is private",
user: context.session?.user,
};
}),
{{/if}}
{{#if (includes examples "todo")}}
todo: todoRouter,
{{/if}}
};
export type AppRouter = typeof appRouter;
{{else if (eq api "trpc")}}
import {
{{#if auth}}protectedProcedure, {{/if}}publicProcedure,
router,
} from "../lib/trpc";
{{#if (includes examples "todo")}}
import { todoRouter } from "./todo";
{{/if}}
export const appRouter = router({
healthCheck: publicProcedure.query(() => {
return "OK";
}),
{{#if auth}}
privateData: protectedProcedure.query(({ ctx }) => {
return {
message: "This is private",
user: ctx.session.user,
};
}),
{{/if}}
{{#if (includes examples "todo")}}
todo: todoRouter,
{{/if}}
});
export type AppRouter = typeof appRouter;
{{else}}
export const appRouter = {};
export type AppRouter = typeof appRouter;
{{/if}}
`,
type: "text"
},
"backend/server/server-base/tsconfig.json.hbs": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "e8e301561a"
},
content: `{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"verbatimModuleSyntax": true,
"strict": true,
"skipLibCheck": true,
"baseUrl": "./",
"paths": {
"@/*": ["./src/*"]
{{#if (eq orm "prisma")}},
"prisma": ["node_modules/prisma"]
{{/if}}
},
"outDir": "./dist",
"types": [
{{#if (eq runtime "node")}}
"node"
{{else if (eq runtime "bun")}}
"bun"
{{else if (eq runtime "workers")}}
"./worker-configuration",
"node"
{{else}}
"node",
"bun"
{{/if}}
],
{{#unless (or (eq backend "convex") (eq backend "none"))}}
"composite": true,
{{/unless}}
"jsx": "react-jsx"{{#if (eq backend "hono")}},
"jsxImportSource": "hono/jsx"{{/if}}
},
"tsc-alias": {
"resolveFullPaths": true
}
}
`,
type: "text"
},
"backend/server/server-base/_gitignore": {
metadata: {
updatedAt: "2025-06-17T06:06:35.000Z",
updatedHash: "22473bb619"
},
content: `# prod
dist/
/build
/out/
# dev
.yarn/
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
.vscode/*
!.vscode/launch.json
!.vscode/*.code-snippets
.idea/workspace.xml
.idea/usage.statistics.xml
.idea/shelf
.wrangler
/.next/
.vercel
# deps
node_modules/
/node_modules
/.pnp
.pnp.*
# env
.env*
.env.production
!.env.example
.dev.vars
# logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# misc
.DS_Store
*.pem
# local db
*.db*
# typescript
*.tsbuildinfo
next-env.d.ts
`,
type: "text"
}
}
}
};