@paroicms/cli
Version:
CLI of ParoiCMS
142 lines • 4.47 kB
JavaScript
import { supportedLanguages } from "@paroicms/connector";
import commandLineArgs from "command-line-args";
import commandLineUsage from "command-line-usage";
import { existsSync } from "node:fs";
import { basename } from "node:path";
import { cliVersion } from "./context.js";
import { generateDatabase } from "./database-generator.js";
import { generateBlankSingleSite } from "./single-site-generator.js";
import { siteSchemaMigration } from "./site-schema-migration.js";
const optionDefinitions = [
{
name: "create",
alias: "c",
type: String,
description: "Create a directory and initialize a new website in it.",
typeLabel: "{underline new-directory-name}",
},
{
name: "language",
alias: "l",
type: String,
multiple: true,
defaultValue: "en",
typeLabel: "{underline 2-letters}",
description: 'Use with the "--create" option. Available values: "en", "fr".',
},
{
name: "migrate-site-schema",
type: String,
multiple: true,
typeLabel: "{underline path/to/directory}",
description: "Update your site-schema to the last version.",
},
{
name: "generate-database",
alias: "g",
type: Boolean,
description: "Generate a database from your site-schema.",
},
{
name: "version",
alias: "v",
type: Boolean,
description: "Print CLI version.",
},
{
name: "help",
alias: "h",
type: Boolean,
description: "Print this help message.",
},
];
main().catch((error) => {
console.error(error);
process.exit(1);
});
async function main() {
const options = parseOptions();
if (options.help) {
printHelp();
}
else if (options.version) {
console.info(cliVersion);
}
else if (options.create) {
const siteDir = options.create;
if (existsSync(siteDir)) {
console.error(`Error: directory "${siteDir}" already exists.`);
process.exit(-1);
}
const languageInput = options.language;
const languages = languageInput.reduce((acc, item) => {
acc.push(...item.split(/\s*,\s*/));
return acc;
}, []);
if (languages.length === 0 ||
languages.some((language) => !supportedLanguages.includes(language))) {
console.error(`Available languages are: "${supportedLanguages.join(`", "`)}"`);
printHelp();
process.exit(1);
}
await generateBlankSingleSite(siteDir, languages);
await generateDatabase(siteDir);
console.info(`Site "${basename(siteDir)}" is created.`);
console.info(`In order to install the dependencies, run: "cd ${siteDir} && npm i"
Then, to start the development server, run: "npm run dev"`);
}
else if (options["migrate-site-schema"]) {
const directories = options["migrate-site-schema"];
if (directories.length === 0) {
console.error("Missing site directories.");
printHelp();
process.exit(1);
}
await siteSchemaMigration(directories);
}
else if (options["generate-database"]) {
await generateDatabase();
}
else {
console.error("Missing command.");
printHelp();
process.exit(1);
}
}
function printHelp() {
const sections = [
{
header: "ParoiCMS CLI",
content: "The handyman of ParoiCMS.",
},
{
header: "Synopsis",
content: [
"$ npx @paroicms/cli {bold --create} {underline new-directory-name} --language {underline en}",
"$ npx @paroicms/cli {bold --generate-database}",
"$ npx @paroicms/cli {bold --migrate-site-schema}",
"$ npx @paroicms/cli {bold --help}",
],
},
{
header: "Options",
optionList: optionDefinitions,
},
{
content: "Project home: {underline https://www.npmjs.com/package/@paroicms/server}",
},
];
const usage = commandLineUsage(sections);
console.log(usage);
}
function parseOptions() {
try {
return commandLineArgs(optionDefinitions);
}
catch (error) {
console.log(`Error: ${error}`);
printHelp();
process.exit(1);
}
}
//# sourceMappingURL=start.js.map