Rhys Sullivanfmtc92c57d6 months agoHistory
57 lines · 2.0 KB · TypeScript
RawDownload
import { existsSync } from "node:fs";import fs from "node:fs/promises";import path from "node:path";import { Command } from "commander";import { collectSchemas } from "@executor-js/sdk/core";import { getConfig } from "../utils/get-config.js";import { generateDrizzleSchema } from "../generators/drizzle.js"; async function generateAction(opts: { cwd: string; config?: string; output?: string }) {  const cwd = path.resolve(opts.cwd);  if (!existsSync(cwd)) {    console.error(`The directory "${cwd}" does not exist.`);    process.exit(1);  }   const config = await getConfig({ cwd, configPath: opts.config });  if (!config) {    console.error(      "No configuration file found. Add an `executor.config.ts` file to " +        "your project or pass the path using the `--config` flag.",    );    process.exit(1);  }   // The CLI never reaches plugin runtime — `plugins()` is called with  // no host deps and only `plugin.schema` is read. Each plugin's  // factory tolerates missing host deps for this introspection-only  // path; runtime callers (apps) pass real deps.  const schema = collectSchemas(config.plugins());   const result = await generateDrizzleSchema({    schema,    dialect: config.dialect,    file: opts.output,  });   if (!result.code) {    console.log("Schema is already up to date.");    process.exit(0);  }   const outPath = path.resolve(cwd, result.fileName);  const outDir = path.dirname(outPath);  if (!existsSync(outDir)) {    await fs.mkdir(outDir, { recursive: true });  }   await fs.writeFile(outPath, result.code);  console.log(`Schema generated: ${path.relative(cwd, outPath)}`);} export const generate = new Command("generate")  .description("Generate a drizzle schema file from the executor config")  .option("-c, --cwd <cwd>", "the working directory", process.cwd())  .option("--config <config>", "path to the executor config file")  .option("--output <output>", "output file path for the generated schema")  .action(generateAction);