typescript-scaffolder
Version:
 
148 lines (147 loc) • 9.45 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const path_1 = __importDefault(require("path"));
const logger_1 = require("./utils/logger");
const generate_interfaces_1 = require("./features/generate-interfaces");
const generate_enums_1 = require("./features/generate-enums");
const generate_factories_1 = require("./features/generate-factories");
const generate_env_loader_1 = require("./features/generate-env-loader");
const generate_api_client_1 = require("./features/api-client/generate-api-client");
const generate_api_client_registry_1 = require("./features/api-client/generate-api-client-registry");
const generate_webhook_app_1 = require("./features/webhooks/generate-webhook-app");
const generate_webhook_app_registry_1 = require("./features/webhooks/generate-webhook-app-registry");
const generate_sequence_runner_1 = require("./features/api-client/generate-sequence-runner");
const program = new commander_1.Command();
program
.command("interfaces")
.description("Generate TypeScript interfaces from JSON schemas")
.requiredOption("-i, --input <dir>", "Input directory")
.requiredOption("-o, --output <dir>", "Output directory")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating interfaces from "${options.input}" to "${options.output}"`);
await (0, generate_interfaces_1.generateInterfacesFromPath)(path_1.default.resolve(options.input), path_1.default.resolve(options.output));
});
program
.command("enums")
.description("Generate enums from TypeScript interface files")
.requiredOption("-i, --input <dir>", "Input directory")
.requiredOption("-o, --output <dir>", "Output directory")
.option("-e, --ext <extension>", "File extension to filter", ".ts")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating enums from "${options.input}" to "${options.output}" with ext "${options.ext}"`);
await (0, generate_enums_1.generateEnumsFromPath)(path_1.default.resolve(options.input), path_1.default.resolve(options.output), options.ext);
});
program
.command("factories")
.description("Generate factory classes from TypeScript interface files")
.requiredOption("-i, --input <dir>", "Input directory containing interface files")
.requiredOption("-o, --output <dir>", "Output directory for generated factories")
.option("--faker", "Use faker-based mock defaults", false)
.action(async (options) => {
logger_1.Logger.info("cli", `Generating factories from "${options.input}" to "${options.output}" (faker=${options.faker})`);
await (0, generate_factories_1.generateFactoriesFromPath)(path_1.default.resolve(options.input), path_1.default.resolve(options.output), options.faker);
});
program
.command("envloader")
.description("Generate TypeScript env loader from .env file")
.requiredOption("-e, --env-file <file>", "Path to .env file")
.requiredOption("-o, --output-dir <dir>", "Output directory")
.requiredOption("-f, --output-file <filename>", "Output filename (e.g. env.ts)")
.option("--class-name <name>", "Env class name", "EnvConfig")
.option("--enum-name <name>", "Env enum name", "EnvKeys")
.action((options) => {
logger_1.Logger.info("cli", `Generating env loader from "${options.envFile}" to "${options.outputDir}/${options.outputFile}"`);
(0, generate_env_loader_1.generateEnvLoader)(path_1.default.resolve(options.envFile), path_1.default.resolve(options.outputDir), options.outputFile, options.className, options.enumName);
});
program
.command("apiclient-file")
.description("Generate an API client from a single JSON config file")
.requiredOption("-c, --config <file>", "Path to JSON config file")
.requiredOption("-i, --interfaces <dir>", "Path to interfaces directory")
.requiredOption("-o, --output <dir>", "Output directory")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating API client from file "${options.config}"`);
await (0, generate_api_client_1.generateApiClientFromFile)(path_1.default.resolve(options.config), path_1.default.resolve(options.interfaces), path_1.default.resolve(options.output));
});
program
.command("apiclient-dir")
.description("Generate API clients from multiple JSON config files in a directory")
.requiredOption("-c, --config-dir <dir>", "Directory with JSON config files")
.requiredOption("-i, --interfaces-root <dir>", "Root interfaces directory")
.requiredOption("-o, --output-root <dir>", "Root output directory")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating API clients from directory "${options.configDir}"`);
await (0, generate_api_client_1.generateApiClientsFromPath)(path_1.default.resolve(options.configDir), path_1.default.resolve(options.interfacesRoot), path_1.default.resolve(options.outputRoot));
});
program
.command("apiclient-registry")
.description("Generate API client registry from API client files")
.requiredOption("-a, --api-root <dir>", "Root directory containing API client files")
.option("-r, --registry-file <filename>", "Name of the registry file", "registry.ts")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating API client registry in "${options.apiRoot}" with filename "${options.registryFile}"`);
await (0, generate_api_client_registry_1.generateApiRegistry)(path_1.default.resolve(options.apiRoot), options.registryFile);
});
program
.command("webhooks")
.description("Generate webhook app and registry from config file")
.requiredOption("-c, --config <file>", "path to config file")
.requiredOption("-i, --interfaces <dir>", "path to interfaces directory")
.requiredOption("-o, --output <dir>", "output directory")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating webhook app and registry from config "${options.config}", interfaces "${options.interfaces}", output "${options.output}"`);
await (0, generate_webhook_app_registry_1.generateWebhookAppRegistry)(path_1.default.resolve(options.output));
await (0, generate_webhook_app_1.generateWebhookAppFromPath)(path_1.default.resolve(options.config), path_1.default.resolve(options.interfaces), path_1.default.resolve(options.output));
});
program
.command("sequences")
.description("Generate sequence runners from JSON config files")
.requiredOption("-c, --config-dir <dir>", "Directory with sequence JSON config files")
.requiredOption("-o, --output <dir>", "Output directory for generated runners")
.action(async (options) => {
logger_1.Logger.info("cli", `Generating sequence runners from "${options.configDir}" to "${options.output}"`);
await (0, generate_sequence_runner_1.generateSequencesFromPath)(path_1.default.resolve(options.configDir), path_1.default.resolve(options.output));
});
program
.command("full")
.description("Run full scaffold pipeline from raw JSON and env file")
.requiredOption("--json <dir>", "Directory of input JSON files for interface generation")
.requiredOption("--env <file>", "Path to .env file")
.requiredOption("--output <dir>", "Root output directory (e.g. src/codegen)")
.action(async (options) => {
const jsonDir = path_1.default.resolve(options.json);
const envFile = path_1.default.resolve(options.env);
const outputRoot = path_1.default.resolve(options.output);
const interfaceOutput = path_1.default.resolve(outputRoot, "interfaces");
const enumOutput = path_1.default.resolve(outputRoot, "enums");
const factoryOutput = path_1.default.resolve(outputRoot, "factories");
const clientOutput = path_1.default.resolve(outputRoot, "apis");
const webhookOutput = path_1.default.resolve(outputRoot, "webhooks");
const envOutputDir = path_1.default.resolve(outputRoot, "config");
const envOutputFile = "env-config.ts";
const endpointConfig = path_1.default.resolve("config/endpoint-configs");
const sequenceConfig = path_1.default.resolve("config/sequence-configs");
const webhookConfig = path_1.default.resolve("config/webhook-configs");
logger_1.Logger.info("cli", `🔁 Starting full scaffold pipeline from "${jsonDir}" → "${outputRoot}"`);
(0, generate_env_loader_1.generateEnvLoader)(envFile, envOutputDir, envOutputFile);
await (0, generate_interfaces_1.generateInterfacesFromPath)(jsonDir, interfaceOutput);
await (0, generate_enums_1.generateEnumsFromPath)(interfaceOutput, enumOutput);
await (0, generate_factories_1.generateFactoriesFromPath)(interfaceOutput, factoryOutput);
await (0, generate_api_client_1.generateApiClientsFromPath)(endpointConfig, interfaceOutput, clientOutput);
await (0, generate_api_client_registry_1.generateApiRegistry)(clientOutput);
await (0, generate_sequence_runner_1.generateSequencesFromPath)(sequenceConfig, clientOutput);
await (0, generate_webhook_app_registry_1.generateWebhookAppRegistry)(webhookOutput);
await (0, generate_webhook_app_1.generateWebhookAppFromPath)(webhookConfig, interfaceOutput, webhookOutput);
});
program
.command("help")
.description("Display help information")
.action(() => {
program.outputHelp();
});
program.parse(process.argv);