You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
815 B
JavaScript
31 lines
815 B
JavaScript
"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(_),
|
|
]);
|
|
}
|
|
});
|
|
};
|