UNPKG

schemaghost

Version:

Instant mock API server from database schema

69 lines (68 loc) 2.71 kB
#!/usr/bin/env node "use strict"; 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 fs_1 = __importDefault(require("fs")); const server_1 = require("../server"); const loader_1 = require("../schema/loader"); const parser_1 = require("../schema/parser"); const mapper_1 = require("../schema/mapper"); const factory_1 = require("../generate/factory"); const program = new commander_1.Command(); program .name("schemaghost") .description("Schema-aware mock API generator") .option("-s, --schema <path>", "Path to Prisma schema file", fs_1.default.existsSync("./prisma/schema.prisma") ? "./prisma/schema.prisma" : "./examples/schema.prisma") .option("-p, --port <number>", "Port to run server on", "8080") .option("-c, --count <number>", "Number of records per model", "10") .option("-o, --output <file>", "Write mock data to JSON instead of serving") .option("-a, --adapter <name>", "Adapter (server|mirage|msw)", "server") .option("-d, --depth <number>", "Relation depth for nested data", "1"); // --- show help if no arguments --- if (process.argv.length <= 2) { program.help(); // prints help and exits } program.parse(process.argv); async function main() { const opts = program.opts(); // 1. Resolve schema path const schemaPath = path_1.default.resolve(process.cwd(), opts.schema); // 2. Load Prisma schema const schemaData = await (0, loader_1.loadSchema)(schemaPath); // 3. Parse + map schema const parsed = (0, parser_1.parseSchema)(schemaData.raw); const mapped = (0, mapper_1.mapSchema)(parsed); // 4. Generate mock data const data = (0, factory_1.generateData)(mapped, { count: parseInt(opts.count, 10), depth: parseInt(opts.depth, 10), }); // 5. Output or serve if (opts.output) { fs_1.default.writeFileSync(opts.output, JSON.stringify(data, null, 2)); console.log(`✅ Mock data written to ${opts.output}`); } else if (opts.adapter === "server") { (0, server_1.serve)({ schemaPath, port: Number(opts.port), data, // MockData }); } else if (opts.adapter === "mirage" || opts.adapter === "msw") { console.log(`⚡ Adapter "${opts.adapter}" not fully implemented yet.`); } else { console.error(`❌ Unknown adapter: ${opts.adapter}`); } } main().catch((err) => { console.error("❌ CLI Error:", err); process.exit(1); });