@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
JavaScript
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;
}
}