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.

64 lines (52 loc) 1.78 kB
import { FORMAT_HTML, FORMAT_PLAIN, FORMATS, LoremFormat } from "../constants/formats"; import { LINE_ENDINGS } from "../constants/lineEndings"; import Generator, { IGeneratorOptions } from "../lib/generator"; import { isNode, isReactNative, isWindows, makeArrayOfStrings } from "../util"; class LoremIpsum { public generator: Generator; constructor( options: IGeneratorOptions = {}, public format: LoremFormat = FORMAT_PLAIN, public suffix?: string, ) { if (FORMATS.indexOf(format.toLowerCase()) === -1) { throw new Error( `${format} is an invalid format. Please use ${FORMATS.join(" or ")}.`, ); } this.generator = new Generator(options); } public getLineEnding() { if (this.suffix) { return this.suffix; } if (!isReactNative() && isNode() && isWindows()) { return LINE_ENDINGS.WIN32; } return LINE_ENDINGS.POSIX; } public formatString(str: string): string { if (this.format === FORMAT_HTML) { return `<p>${str}</p>`; } return str; } public formatStrings(strings: string[]): string[] { return strings.map((str) => this.formatString(str)); } public generateWords(num?: number): string { return this.formatString(this.generator.generateRandomWords(num)); } public generateSentences(num?: number): string { return this.formatString(this.generator.generateRandomParagraph(num)); } public generateParagraphs(num: number): string { const makeString = this.generator.generateRandomParagraph.bind( this.generator, ); return this.formatStrings(makeArrayOfStrings(num, makeString)).join( this.getLineEnding(), ); } } export default LoremIpsum;