#!/usr/bin/env node import { Command } from "commander"; import execa from "execa"; import { readFileSync } from "fs"; import handleExample from "./example"; import { greeting } from "./greeting"; const bootstrap = () => { const packageJson = JSON.parse( readFileSync(`${__dirname}/../package.json`, "utf8"), ); const program = new Command(); program .version( packageJson.version, "-v, --version", "Output the current version.", ) .usage(" [options]") .helpOption("-h, --help", "Output usage information.") .option( "-s, --source ", "specify a custom source of plugins", ) .option( "-b, --branch ", "specify a custom branch in source of plugins", ) .option( "-o, --preset ", "specify a preset to use for the project", ) .option( "-l, --lucky", "use this option to generate a project with random answers", ) .option( "-e, --example [destination]", "get a clone of an example from the refine repository", ) .option( "-d, --download ", "specify a download type (zip | git) of source", "zip", ) .option("-p, --project ", "specify a project type to use") .option("--disable-telemetry", "disable telemetry data collection") .allowUnknownOption(true) .allowExcessArguments(true) .action(async (_, command: Command) => { try { await greeting(); // --example if (command.getOptionValue("example")) { handleExample( command.getOptionValue("example"), command.args[0], ); return; } // rest const superplateExecutable = require.resolve(".bin/superplate"); execa.sync( superplateExecutable, [ ...command.args, command.getOptionValue("project") ? "--project=" + command.getOptionValue("project") : "--project=refine", "--download=zip", command.getOptionValue("source") ? "--source=" + command.getOptionValue("source") : "", command.getOptionValue("branch") ? "--branch=" + command.getOptionValue("branch") : "", command.getOptionValue("preset") ? "--preset=" + command.getOptionValue("preset") : "", command.getOptionValue("lucky") ? "--lucky" : "", command.getOptionValue("download") ? "--download=" + command.getOptionValue("download") : "", command.getOptionValue("disableTelemetry") ? "--disable-telemetry" : "", ], { stdio: "inherit", env: { ...process.env, INITIAL_COMMIT_MESSAGE: "Initial commit from create-refine-app", }, }, ); } catch (err) {} }); program.parse(process.argv); }; bootstrap();