UNPKG

@paroicms/cli

Version:
142 lines 4.47 kB
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