schemaghost
Version:
Instant mock API server from database schema
69 lines (68 loc) • 2.71 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 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);
});
;