UNPKG

6.32 kBSource Map (JSON)View Raw
1{"version":3,"file":"classes.umd.js","sources":["../src/index.ts"],"sourcesContent":["type IsClassPresent = classes.IsClassPresent;\r\ntype NormalizedClassObject = classes.NormalizedClassObject;\r\ntype ClassName = classes.ClassName;\r\n\r\nfunction eachTrue(\r\n base: Record<string, unknown>,\r\n callback: (key: string) => void\r\n): void;\r\n\r\nfunction eachTrue<R>(\r\n base: Record<string, unknown>,\r\n callback: (key: string, output: R) => R,\r\n output: R\r\n): R;\r\n\r\nfunction eachTrue<R>(\r\n base: Record<string, unknown>,\r\n callback: (key: string, output?: R | undefined) => R | undefined,\r\n output?: R,\r\n): R | undefined {\r\n for (const key in base) {\r\n if (base[key]) {\r\n output = callback(\r\n key,\r\n output,\r\n );\r\n }\r\n }\r\n return output;\r\n}\r\n\r\nfunction normStrings(names: string[], value: boolean, output: NormalizedClassObject): NormalizedClassObject {\r\n const { length } = names;\r\n for (let i = 0; i < length; i++) {\r\n if (names[i]) {\r\n output[names[i]] = value;\r\n }\r\n }\r\n return output;\r\n}\r\n\r\nfunction processItem(item: ClassName, output: NormalizedClassObject): void {\r\n if (item && typeof item === 'object') {\r\n if (Array.isArray(item)) {\r\n normArray(\r\n item,\r\n output,\r\n );\r\n } else {\r\n for (const key in item) {\r\n if ({}.hasOwnProperty.call(item, key)) {\r\n if (key) {\r\n let value = item[key];\r\n if (typeof value === 'function') {\r\n value = (value as IsClassPresent)(\r\n eachTrue<Record<string, true>>(\r\n output,\r\n (key, result) => {\r\n result[key] = true;\r\n return result;\r\n },\r\n {},\r\n ),\r\n key.split(' '),\r\n );\r\n }\r\n normStrings(\r\n key.split(' '),\r\n !!value,\r\n output,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } else if (typeof item === 'function') {\r\n processItem(\r\n item(\r\n eachTrue<Record<string, true>>(\r\n output,\r\n (key, result) => {\r\n result[key] = true;\r\n return result;\r\n },\r\n {},\r\n ),\r\n ),\r\n output,\r\n );\r\n } else if (item != null) {\r\n const names = `${item}`;\r\n if (names) {\r\n normStrings(\r\n names.split(' '),\r\n true,\r\n output,\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction normArray(array: ArrayLike<ClassName>, output: NormalizedClassObject): NormalizedClassObject {\r\n const { length } = array;\r\n for (let i = 0; i < length; i++) {\r\n const item = array[i];\r\n processItem(item, output);\r\n }\r\n return output;\r\n}\r\n\r\nfunction classes(...classnames: ClassName[]): string;\r\nfunction classes(): string {\r\n return eachTrue(\r\n normArray(\r\n // eslint-disable-next-line prefer-rest-params\r\n arguments as ArrayLike<ClassName>,\r\n {},\r\n ),\r\n (name, result) => result ? `${result} ${name}` : name,\r\n '',\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nnamespace classes {\r\n export type CurrentState = Readonly<Record<string, true>>;\r\n export type IsClassPresent = (current: CurrentState, classnames: string[]) => unknown;\r\n export type ResolveClass = (current: CurrentState) => ClassName;\r\n export type ClassObject = Record<string, IsClassPresent | unknown>;\r\n export type NormalizedClassObject = Record<string, boolean>;\r\n export type ClassName = string | ResolveClass | ClassArray | ClassObject | NormalizedClassObject | null | undefined | void;\r\n export type ClassArray = ClassName[];\r\n}\r\n\r\nexport default classes;\r\n"],"names":["eachTrue","base","callback","output","key","normStrings","names","value","length","i","processItem","item","Array","isArray","normArray","hasOwnProperty","call","result","split","array","classes","arguments","name"],"mappings":"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"}
\No newline at end of file