vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
96 lines (95 loc) • 3.86 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseCli = parseCli;
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
const utils_js_1 = require("./utils.js");
const getEnvVarObject_js_1 = require("../vite/shared/getEnvVarObject.js");
const commands = [
{ name: 'dev', desc: 'Start development server' },
{ name: 'build', desc: 'Build for production' },
{ name: 'preview', desc: 'Start preview server using production build (only works for SSG apps)' },
{ name: 'prerender', desc: 'Pre-render pages (only needed when prerender.disableAutoRun is true)' },
];
function parseCli() {
const command = getCommand();
const cliOptions = getCliOptions();
return { command, cliOptions };
}
function getCommand() {
const firstArg = process.argv[2];
if ((0, utils_js_1.includes)(commands.map((c) => c.name), firstArg)) {
return firstArg;
}
if (!firstArg)
showHelp();
showHelpOrVersion(firstArg);
wrongUsage(`Unknown command ${picocolors_1.default.bold(firstArg)}`);
}
function getCliOptions() {
let cliOptions = {};
let configNameCurrent;
const commitIfDefinedWithoutValue = () => {
if (configNameCurrent)
commit(true);
};
const commit = (val) => {
(0, utils_js_1.assert)(configNameCurrent);
cliOptions[configNameCurrent] = val;
configNameCurrent = undefined;
};
for (const arg of process.argv.slice(3)) {
showHelpOrVersion(arg);
if (arg.startsWith('--')) {
commitIfDefinedWithoutValue();
configNameCurrent = arg.slice('--'.length);
}
else {
if (!configNameCurrent)
wrongUsage(`Unknown option ${picocolors_1.default.bold(arg)}`);
commit((0, getEnvVarObject_js_1.parseJson5)(arg, `CLI option --${configNameCurrent}`));
}
}
commitIfDefinedWithoutValue();
return cliOptions;
}
function showHelp() {
const TAB = ' '.repeat(3);
const nameMaxLength = Math.max(...commands.map((c) => c.name.length));
console.log([
`vike@${utils_js_1.PROJECT_VERSION}`,
'',
'Usage:',
...[...commands, { name: '-v', desc: "Print Vike's installed version" }].map((c) => ` ${picocolors_1.default.dim('$')} vike ${c.name.startsWith('-') ? picocolors_1.default.cyan(`${c.name}`) : picocolors_1.default.bold(`${c.name}`)}${' '.repeat(nameMaxLength - c.name.length)}${TAB}${picocolors_1.default.dim(`# ${c.desc}`)}`),
'',
'Common CLI options:',
[`vike dev ${picocolors_1.default.cyan('--host')}`, `vike dev ${picocolors_1.default.cyan('--port')} 80`, `vike build ${picocolors_1.default.cyan('--mode')} staging`]
.map((o) => ` ${picocolors_1.default.dim('$')} ${o}`)
.join('\n'),
'',
`More Vike settings can be passed over the ${picocolors_1.default.cyan('VIKE_CONFIG')} environment variable or as ${picocolors_1.default.cyan('CLI options')}.`,
`More Vite settings can be passed over the ${picocolors_1.default.cyan('VITE_CONFIG')} environment variable.`,
``,
`See ${picocolors_1.default.underline('https://vike.dev/cli')} for more information.`,
].join('\n'));
process.exit(1);
}
function showHelpOrVersion(arg) {
if (arg === '--version' || arg === '-v' || arg === '--v') {
showVersion();
}
if (arg === '--help' || arg === '-h' || arg === '--h') {
showHelp();
}
}
function showVersion() {
console.log(utils_js_1.PROJECT_VERSION);
process.exit(1);
}
function wrongUsage(msg) {
console.error(picocolors_1.default.red(msg));
console.log();
showHelp();
}