"use strict"; const assureArray = require("assure-array"); const syncpipe = require("syncpipe"); const flatten = require("flatten"); module.exports = function extendClassnames(classes, mapper) { return assureArray(classes).map((item) => { if (typeof item === "string") { return mapper(item); } else if (Array.isArray(item)) { return item.map((subItem) => { return mapper(subItem); }); } else { // { className: condition } mapping return syncpipe(item, [ (_) => Object.entries(_), (_) => _.map(([ key, value ]) => syncpipe(key, [ (_) => mapper(_), (_) => assureArray(_), (_) => _.filter((className) => className != null), (_) => _.map((className) => [ className, value ]) ])), (_) => flatten(_, 1), (_) => Object.fromEntries(_), ]); } }); };