import chalk from "chalk"; import { select } from "@inquirer/prompts"; import { AppData } from "../../data/app-data"; import showEntries from "./show-entries"; import showFields from "./show-fields"; import dbHandler from "../../lib/db-handler"; import MariaDBQuoteGen from "../../lib/schema/mariadb-quote-gen"; export default async function listTables(params) { const tables = (await dbHandler({ query: `SELECT table_name FROM ${MariaDBQuoteGen(AppData["DbSchemaManagerTableName"])}`, })).payload; if (!tables?.length) { console.log(chalk.yellow("\nNo tables found.\n")); return; } while (true) { const tableName = await select({ message: "Select a table:", choices: [ ...tables.map((t) => ({ name: t.table_name, value: t.table_name, })), { name: chalk.dim("← Go Back"), value: "__back__" }, { name: chalk.dim("✕ Exit"), value: "__exit__" }, ], }); if (tableName === "__back__") break; if (tableName === "__exit__") return "__exit__"; while (true) { const action = await select({ message: `"${tableName}" — choose an action:`, choices: [ { name: "Entries", value: "entries" }, { name: "Fields", value: "fields" }, { name: "Schema", value: "schema" }, { name: chalk.dim("← Go Back"), value: "__back__" }, { name: chalk.dim("✕ Exit"), value: "__exit__" }, ], }); if (action === "__back__") break; if (action === "__exit__") return "__exit__"; if (action === "entries") { const result = await showEntries({ tableName }); if (result === "__exit__") return "__exit__"; } if (action === "fields") { const result = await showFields({ tableName }); if (result === "__exit__") return "__exit__"; } if (action === "schema") { const columns = (await dbHandler({ query: `SELECT ORDINAL_POSITION, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_KEY, EXTRA FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? ORDER BY ORDINAL_POSITION`, values: [tableName], })).payload; console.log(`\n${chalk.bold(`Schema for "${tableName}":`)} \n`); if (columns?.length) { console.table(columns.map((c) => ({ "#": c.ORDINAL_POSITION, Name: c.COLUMN_NAME, Type: c.COLUMN_TYPE, Nullable: c.IS_NULLABLE, Default: c.COLUMN_DEFAULT ?? "(none)", Key: c.COLUMN_KEY || "", Extra: c.EXTRA || "", }))); } else { console.log(chalk.yellow("No columns found.")); } console.log(); } } } }