import { Command } from "commander"; import grabDirNames from "../data/grab-dir-names"; import path from "path"; import dbSchemaToTypeDef from "../lib/mariadb/schema-to-typedef"; import appendDefaultFieldsToDbSchema from "../utils/append-default-fields-to-db-schema"; import chalk from "chalk"; import { writeLiveSchema } from "../functions/live-schema"; import createDBSchema from "../lib/schema/create-db-schema"; export default function () { return new Command("schema") .description("Build DB From Schema") .option("-t, --typedef", "Generate typescript type definitions") .action(async (opts) => { console.log(`Starting process ...`); const config = global.CONFIG; const dbSchema = global.DB_SCHEMA; const { ROOT_DIR } = grabDirNames(); try { const isTypeDef = Boolean(opts.typedef || opts.t); const finaldbSchema = appendDefaultFieldsToDbSchema({ dbSchema, }); await createDBSchema({ db_schema: finaldbSchema, config, }); if (isTypeDef && config.typedef_file_path) { const out_file = path.resolve(ROOT_DIR, config.typedef_file_path); dbSchemaToTypeDef({ dbSchema: finaldbSchema, dst_file: out_file, config, }); } writeLiveSchema({ schema: finaldbSchema }); console.log(`${chalk.bold(chalk.green(`DB Schema setup success!`))}`); process.exit(0); } catch (error) { console.error(error); process.exit(1); } }); }