UNPKG

lorem-ipsum

Version:

Generates passages of lorem ipsum text suitable for use as placeholder copy in web pages, graphics, and more. Works in the browser, NodeJS, and React Native.

61 lines (53 loc) 1.9 kB
import { Option, program } from "commander"; import { loremIpsum } from ".."; import { FORMATS, FORMAT_PLAIN } from "../constants/formats"; import { REGEX } from "../constants/regex"; import { DESCRIPTION, USAGE } from "./constants/cli"; import { copyToClipboard, getVersion } from "./util"; program .version(getVersion()) .usage(USAGE) .description(DESCRIPTION) .argument('count', 'The number of units') .argument('units', 'Words, sentences, or paragraphs') .option("-c --copy", "Copy") .addOption(new Option("-f --format <format>", "Format").choices(FORMATS).default(FORMAT_PLAIN)) .action(( num: string = "1", units: "words" | "word" | "sentences" | "sentence" | "paragraphs" | "paragraph" | undefined = "sentence", ) => { if (REGEX.UNITS.test(units) === false) { // tslint:disable-next-line:no-console console.error( `${units} is not valid. Choose from paragraph(s), sentence(s), or word(s).`, ); process.exit(1); } const count = parseInt(num, 10); if (!count || count < 1) { // tslint:disable-next-line:no-console console.error(`${count} is not valid. Choose a number greater than 1.`); process.exit(1); } const output = loremIpsum({ count, format: program.getOptionValue('format'), units, }); // tslint:disable-next-line:no-console console.log(output); if (program.getOptionValue('copy') === true) { copyToClipboard(output) .then(() => { // tslint:disable-next-line:no-console console.log(""); // tslint:disable-next-line:no-console console.log("✓ copied"); }) .catch((err) => { // tslint:disable-next-line:no-console console.log(err.message); }); } }); program.parse(process.argv);