@reliverse/rse-sdk
Version:
@reliverse/rse-sdk allows you to create new plugins for @reliverse/rse CLI, interact with reliverse.org, and even extend your own CLI functionality (you may also try @reliverse/dler-sdk for this case).
45 lines (44 loc) • 2.03 kB
JavaScript
import { z } from "zod";
export const DatabaseSchema = z.enum(["none", "sqlite", "postgres", "mysql", "mongodb"]).describe("Database type");
export const ORMSchema = z.enum(["drizzle", "prisma", "mongoose", "none"]).describe("ORM type");
export const BackendSchema = z.enum(["hono", "express", "fastify", "next", "elysia", "convex", "none"]).describe("Backend framework");
export const RuntimeSchema = z.enum(["bun", "node", "workers", "none"]).describe(
"Runtime environment (workers only available with hono backend and drizzle orm)"
);
export const FrontendSchema = z.enum([
"tanstack-router",
"react-router",
"tanstack-start",
"next",
"nuxt",
"native-nativewind",
"native-unistyles",
"svelte",
"solid",
"none"
]).describe("Frontend framework");
export const AddonsSchema = z.enum(["pwa", "tauri", "starlight", "biome", "husky", "turborepo", "none"]).describe("Additional addons");
export const ExamplesSchema = z.enum(["todo", "ai", "none"]).describe("Example templates to include");
export const PackageManagerSchema = z.enum(["npm", "pnpm", "bun"]).describe("Package manager");
export const DatabaseSetupSchema = z.enum([
"turso",
"neon",
"prisma-postgres",
"mongodb-atlas",
"supabase",
"none"
]).describe("Database hosting setup");
export const APISchema = z.enum(["trpc", "orpc", "none"]).describe("API type");
export const ProjectNameSchema = z.string().min(1, "Project name cannot be empty").max(255, "Project name must be less than 255 characters").refine(
(name) => name === "." || !name.startsWith("."),
"Project name cannot start with a dot (except for '.')"
).refine(
(name) => name === "." || !name.startsWith("-"),
"Project name cannot start with a dash"
).refine((name) => {
const invalidChars = ["<", ">", ":", '"', "|", "?", "*"];
return !invalidChars.some((char) => name.includes(char));
}, "Project name contains invalid characters").refine(
(name) => name.toLowerCase() !== "node_modules",
"Project name is reserved"
).describe("Project name or path");