react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
40 lines • 5.91 kB
JavaScript
import { componentDisplayName } from "./componentDisplayName";
export const createHocNameFunction = selector => {
return function hocName({
Component,
hoc
}, ...args) {
function parseArg(arg) {
if (typeof arg === "string") {
return arg;
}
if (typeof arg === "number") {
return String(arg);
}
if (typeof arg === "function") {
return arg.name || "[unnamed function]";
}
if (Array.isArray(arg)) {
return arg.map(a => parseArg(a)).filter(Boolean).join(".");
}
if (arg === undefined || typeof arg === "function") {
return undefined;
}
if (arg === null) {
return "null";
}
if (typeof arg === "object") {
return Object.keys(arg).join(".");
}
return String(arg);
}
const nameByArgs = (() => {
const arg = selector(...args);
return parseArg(arg);
})();
return `${[hoc.name, nameByArgs].filter(Boolean).join(".")}(${componentDisplayName.get(Component)})`;
};
};
export const defaultHocName = createHocNameFunction(firstArg => firstArg);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21wb25lbnREaXNwbGF5TmFtZSIsImNyZWF0ZUhvY05hbWVGdW5jdGlvbiIsInNlbGVjdG9yIiwiaG9jTmFtZSIsIkNvbXBvbmVudCIsImhvYyIsImFyZ3MiLCJwYXJzZUFyZyIsImFyZyIsIlN0cmluZyIsIm5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJhIiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwibmFtZUJ5QXJncyIsImdldCIsImRlZmF1bHRIb2NOYW1lIiwiZmlyc3RBcmciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaG9jTmFtZUZvcldpdGhTdHlsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY29tcG9uZW50RGlzcGxheU5hbWUgfSBmcm9tIFwiLi9jb21wb25lbnREaXNwbGF5TmFtZVwiO1xuaW1wb3J0IHsgR2V0SG9jQXJncywgSG9jRGVmaW5pdGlvbiwgTmV3SG9jUmV0dXJuIH0gZnJvbSBcIi4vbmV3SG9jXCI7XG5cbmV4cG9ydCB0eXBlIEhvY05hbWVGYWN0b3J5ID0gKFxuICB7XG4gICAgQ29tcG9uZW50LFxuICAgIGhvYyxcbiAgfToge1xuICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgIGhvYzogSG9jRGVmaW5pdGlvbjxhbnk+O1xuICB9LFxuICAuLi5hcmdzOiBhbnlcbikgPT4gc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlSG9jTmFtZUZ1bmN0aW9uID0gPFROZXdIb2NSZXR1cm4gZXh0ZW5kcyBOZXdIb2NSZXR1cm48YW55Pj4oXG4gIHNlbGVjdG9yOiAoLi4uYXJnczogR2V0SG9jQXJnczxUTmV3SG9jUmV0dXJuPikgPT4gdW5rbm93biB8IHVuZGVmaW5lZCxcbik6IEhvY05hbWVGYWN0b3J5ID0+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhvY05hbWUoXG4gICAge1xuICAgICAgQ29tcG9uZW50LFxuICAgICAgaG9jLFxuICAgIH06IHtcbiAgICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+O1xuICAgICAgaG9jOiBIb2NEZWZpbml0aW9uPEdldEhvY0FyZ3M8VE5ld0hvY1JldHVybj4+O1xuICAgIH0sXG4gICAgLi4uYXJnczogR2V0SG9jQXJnczxUTmV3SG9jUmV0dXJuPlxuICApOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIHBhcnNlQXJnKGFyZzogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gU3RyaW5nKGFyZyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBhcmcubmFtZSB8fCBcIlt1bm5hbWVkIGZ1bmN0aW9uXVwiO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gYXJnXG4gICAgICAgICAgLm1hcCgoYSkgPT4gcGFyc2VBcmcoYSkpXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIC5qb2luKFwiLlwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgYXJnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFyZykuam9pbihcIi5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUJ5QXJncyA9ICgoKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IGFyZyA9IHNlbGVjdG9yKC4uLmFyZ3MpO1xuXG4gICAgICByZXR1cm4gcGFyc2VBcmcoYXJnKTtcbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIGAke1tob2MubmFtZSwgbmFtZUJ5QXJnc11cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiLlwiKX0oJHtjb21wb25lbnREaXNwbGF5TmFtZS5nZXQoQ29tcG9uZW50KX0pYDtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SG9jTmFtZTogSG9jTmFtZUZhY3RvcnkgPSBjcmVhdGVIb2NOYW1lRnVuY3Rpb24oXG4gIChmaXJzdEFyZzogdW5rbm93bikgPT4gZmlyc3RBcmcsXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxvQkFBb0IsUUFBUSx3QkFBd0I7QUFjN0QsT0FBTyxNQUFNQyxxQkFBcUIsR0FDaENDLFFBQXFFLElBQ2xEO0VBQ25CLE9BQU8sU0FBU0MsT0FBT0EsQ0FDckI7SUFDRUMsU0FBUztJQUNUQztFQUlGLENBQUMsRUFDRCxHQUFHQyxJQUErQixFQUMxQjtJQUNSLFNBQVNDLFFBQVFBLENBQUNDLEdBQVEsRUFBc0I7TUFDOUMsSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLE9BQU9BLEdBQUc7TUFDWjtNQUNBLElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPQyxNQUFNLENBQUNELEdBQUcsQ0FBQztNQUNwQjtNQUNBLElBQUksT0FBT0EsR0FBRyxLQUFLLFVBQVUsRUFBRTtRQUM3QixPQUFPQSxHQUFHLENBQUNFLElBQUksSUFBSSxvQkFBb0I7TUFDekM7TUFDQSxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osR0FBRyxDQUFDLEVBQUU7UUFDdEIsT0FBT0EsR0FBRyxDQUNQSyxHQUFHLENBQUVDLENBQUMsSUFBS1AsUUFBUSxDQUFDTyxDQUFDLENBQUMsQ0FBQyxDQUN2QkMsTUFBTSxDQUFDQyxPQUFPLENBQUMsQ0FDZkMsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUNkO01BQ0EsSUFBSVQsR0FBRyxLQUFLVSxTQUFTLElBQUksT0FBT1YsR0FBRyxLQUFLLFVBQVUsRUFBRTtRQUNsRCxPQUFPVSxTQUFTO01BQ2xCO01BQ0EsSUFBSVYsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNoQixPQUFPLE1BQU07TUFDZjtNQUNBLElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPVyxNQUFNLENBQUNDLElBQUksQ0FBQ1osR0FBRyxDQUFDLENBQUNTLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDbkM7TUFDQSxPQUFPUixNQUFNLENBQUNELEdBQUcsQ0FBQztJQUNwQjtJQUVBLE1BQU1hLFVBQVUsR0FBRyxDQUFDLE1BQTBCO01BQzVDLE1BQU1iLEdBQUcsR0FBR04sUUFBUSxDQUFDLEdBQUdJLElBQUksQ0FBQztNQUU3QixPQUFPQyxRQUFRLENBQUNDLEdBQUcsQ0FBQztJQUN0QixDQUFDLEVBQUUsQ0FBQztJQUVKLE9BQVEsR0FBRSxDQUFDSCxHQUFHLENBQUNLLElBQUksRUFBRVcsVUFBVSxDQUFDLENBQzdCTixNQUFNLENBQUNDLE9BQU8sQ0FBQyxDQUNmQyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQUdqQixvQkFBb0IsQ0FBQ3NCLEdBQUcsQ0FBQ2xCLFNBQVMsQ0FBRSxHQUFFO0VBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxNQUFNbUIsY0FBOEIsR0FBR3RCLHFCQUFxQixDQUNoRXVCLFFBQWlCLElBQUtBLFFBQ3pCLENBQUMifQ==
//# sourceMappingURL=hocNameForWithStyle.js.map