UNPKG

@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).

82 lines (81 loc) 2.2 kB
import path from "@reliverse/pathkit"; import { ensuredir } from "@reliverse/relifso"; import { relinka } from "@reliverse/relinka"; import { selectPrompt, confirmPrompt } from "@reliverse/rempts"; import { addNewTable, removeTable, setupDrizzle, renameTable, manageRelations, detectDatabaseProvider } from "./manageDrizzleSchemaUtils.js"; export async function manageDrizzleSchema(cwd, isDev) { const singleSchemaDir = isDev ? path.join(cwd, "src/app/db") : path.join(cwd, "src/db"); const multiSchemaDir = path.join(singleSchemaDir, "schema"); let provider = await detectDatabaseProvider(cwd); if (!provider) { provider = await setupDrizzle(cwd, isDev); if (!provider) { relinka("error", "Failed to set up Drizzle."); return; } } const useMultipleFiles = await confirmPrompt({ title: "Would you like to use multiple files for schema (one file per table)?", content: "This will organize tables in src/db/schema/* instead of a single schema.ts file", defaultValue: false }); if (useMultipleFiles) { await ensuredir(multiSchemaDir); } else { await ensuredir(singleSchemaDir); } const action = await selectPrompt({ title: "What would you like to do?", options: [ { label: "Add new table", value: "add" }, { label: "Remove table", value: "remove" }, { label: "Rename table", value: "rename" }, { label: "Manage relations", value: "relations" } ] }); switch (action) { case "add": await addNewTable( cwd, useMultipleFiles, provider // singleSchemaDir, // multiSchemaDir, ); break; case "remove": await removeTable( cwd, useMultipleFiles, provider // singleSchemaDir, // multiSchemaDir, ); break; case "rename": await renameTable( cwd, useMultipleFiles, provider // singleSchemaDir, // multiSchemaDir, ); break; case "relations": await manageRelations( cwd, useMultipleFiles, provider // singleSchemaDir, // multiSchemaDir, ); break; } }