vegan-ipsum
Version:
Generates passages of vegan-themed placeholder text suitable for use in web pages, graphics, and more. Works in the browser, NodeJS, and React Native.
132 lines (117 loc) • 2.72 kB
text/typescript
import {
type LoremUnit,
type LoremFormat,
FORMAT_PLAIN,
UNIT_PARAGRAPHS,
UNIT_SENTENCES,
UNIT_WORDS,
} from './constants';
import { WORDS } from './constants/words';
import { type Prng } from './lib/generator';
import VeganIpsum from './lib/VeganIpsum';
/**
* Parameters for generating vegan ipsum text.
*/
export interface VeganIpsumParams {
/**
* Number of units to generate (e.g., paragraphs, sentences, or words).
*
* @default 1
*/
count?: number;
/**
* Format of the generated text (e.g., plain text or HTML).
*
* @default FORMAT_PLAIN
*/
format?: LoremFormat;
/**
* Minimum number of sentences per paragraph.
*
* @default 3
*/
paragraphLowerBound?: number;
/**
* Maximum number of sentences per paragraph.
*
* @default 7
*/
paragraphUpperBound?: number;
/**
* Custom random number generator.
*/
random?: Prng;
/**
* Minimum number of words per sentence.
*
* @default 5
*/
sentenceLowerBound?: number;
/**
* Maximum number of words per sentence.
*
* @default 15
*/
sentenceUpperBound?: number;
/**
* Unit type for the generated text (e.g., paragraphs, sentences, or words).
*
* @default UNIT_SENTENCES
*/
units?: LoremUnit;
/**
* Custom word list to use for generating text.
*
* @default WORDS
*/
words?: string[];
/**
* Suffix to append to the generated text.
*
* @default ""
*/
suffix?: string;
}
/**
* Generates vegan ipsum text based on the provided parameters.
*
* @param {VeganIpsumParams} params - Configuration options for generating vegan ipsum text.
*
* @returns {string} Generated vegan ipsum text as a string.
*/
const veganIpsum = ({
count = 1,
random,
format = FORMAT_PLAIN,
paragraphLowerBound = 3,
paragraphUpperBound = 7,
sentenceLowerBound = 5,
sentenceUpperBound = 15,
units = UNIT_SENTENCES,
words = WORDS,
suffix = '',
}: VeganIpsumParams = {}): string => {
const options: {
random?: Prng;
sentencesPerParagraph: { max: number; min: number };
words: string[];
wordsPerSentence: { max: number; min: number };
} = {
random,
sentencesPerParagraph: { max: paragraphUpperBound, min: paragraphLowerBound },
words,
wordsPerSentence: { max: sentenceUpperBound, min: sentenceLowerBound },
};
const lorem: VeganIpsum = new VeganIpsum(options, format, suffix);
switch (units) {
case UNIT_PARAGRAPHS:
return lorem.generateParagraphs(count);
case UNIT_SENTENCES:
return lorem.generateSentences(count);
case UNIT_WORDS:
return lorem.generateWords(count);
default:
return '';
}
};
export { veganIpsum, VeganIpsum };