import { MODIFIERS } from "./constants"; interface ISafelistOptions { variants?: boolean | string[]; sizes?: boolean | string[]; shapes?: boolean | string[]; } interface ISafelistPattern { pattern: RegExp; } /** * @param type - modifier type, can be "variants", "sizes" or "shapes" * @param modifiers - if true return all modifiers of given type, else if array, checks the given modifiers and if ok returns the given modifiers, else throw an error * @returns */ const getModifiers = ( type: "variants" | "sizes" | "shapes", modifiers: boolean | string[] ) => { if (modifiers === true) return Object.values(MODIFIERS[type]); if (Array.isArray(modifiers)) { //check for invalid modifier and notify user for (const modifier of modifiers) { if (!Object.values(MODIFIERS[type]).includes(modifier)) { throw new Error(`Invalid DaisyUi modifier "${modifier}"`); } } return modifiers; } return []; }; /** * * @param componentName - component's class name prefix (e.g. "btn", "input" etc.) * @param options - variants to include in the safelist * @returns */ export const createComponentSafelist = ( componentName: string, options: ISafelistOptions ): ISafelistPattern => { const modifiers: Array = [ ...getModifiers("variants", options.variants || []), ...getModifiers("sizes", options.sizes || []), ...getModifiers("shapes", options.shapes || []), ]; const pattern = new RegExp(`${componentName}-(${modifiers.join("|")})`); return { pattern }; };