create-blade
Version:
Create a new Blade project
105 lines (100 loc) • 2.82 kB
JavaScript
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);