UNPKG

create-blade

Version:

Create a new Blade project

105 lines (100 loc) 2.82 kB
#!/usr/bin/env node import { existsSync } from 'fs'; import { cp, writeFile } from 'fs/promises'; import path from 'path'; import { fileURLToPath } from 'url'; import { parseArgs } from 'util'; import chalk from 'chalk'; import gradient from 'gradient-string'; import ora from 'ora'; // package.json var package_default = { version: "3.11.0"}; // src/index.ts var TEMPLATES = ["advanced", "basic"]; var LOG_PREFIX = { info: `${chalk.bold(gradient(["#473b7b", "#3584a7", "#30d2be"])("BLADE"))} `, error: `${chalk.bold(gradient(["#930024", "#d4143e"])("ERROR"))} ` }; var logSpinner = (text) => ora({ // Make CTRL+C work as expected. discardStdin: false, prefixText: LOG_PREFIX.info, text }); var HELP_MESSAGE = ` Usage: create-blade [name] [options] Options: -h, --help Display this help message. -T, --template <name> Specify the template to use (default: basic). -v, --version Output the current version of create-blade. `; async function main() { const { positionals, values } = parseArgs({ allowPositionals: true, args: process.argv, options: { help: { default: false, short: "h", type: "boolean" }, template: { default: "basic", short: "T", type: "string" }, version: { default: false, short: "v", type: "boolean" } }, strict: true }); if (values.version) { console.log(package_default.version); process.exit(0); } if (values.help) { console.log(HELP_MESSAGE); process.exit(0); } if (!TEMPLATES.includes(values.template)) { console.error(LOG_PREFIX.error, `Invalid template "${values.template}"`); console.error(LOG_PREFIX.error, "Available templates:", TEMPLATES.join(", ")); process.exit(1); } const projectName = positionals.slice(2).at(-1) ?? "blade-example"; if (existsSync(path.join(process.cwd(), projectName))) { logSpinner( `Failed to create example app. A directory named \`${projectName}\` already exists` ).fail(); process.exit(1); } const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const directory = { origin: path.join(__dirname, "..", "templates", values.template), target: path.join(process.cwd(), projectName) }; try { await cp(directory.origin, directory.target, { errorOnExist: true, recursive: true }); await writeFile( path.join(directory.target, ".gitignore"), `# Build output .blade # Dependencies node_modules` ); logSpinner("Successfully created example app").succeed(); } catch (error) { logSpinner("Failed to create example app").fail(); console.error(error); process.exit(1); } } main().catch(console.error);