From fab4d7b8f635d5ebaf33a23a8e45cca66096cbc3 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Sun, 16 Aug 2020 15:24:35 +0200 Subject: [PATCH] cache buildSelectorVariant --- src/util/buildSelectorVariant.js | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/util/buildSelectorVariant.js b/src/util/buildSelectorVariant.js index a7c938f45..77c0b680d 100644 --- a/src/util/buildSelectorVariant.js +++ b/src/util/buildSelectorVariant.js @@ -1,15 +1,21 @@ import parser from 'postcss-selector-parser' import tap from 'lodash/tap' +import { useMemo } from './useMemo' -export default function buildSelectorVariant(selector, variantName, separator, onError = () => {}) { - return parser(selectors => { - tap(selectors.first.filter(({ type }) => type === 'class').pop(), classSelector => { - if (classSelector === undefined) { - onError('Variant cannot be generated because selector contains no classes.') - return - } +const buildSelectorVariant = useMemo( + (selector, variantName, separator, onError = () => {}) => { + return parser(selectors => { + tap(selectors.first.filter(({ type }) => type === 'class').pop(), classSelector => { + if (classSelector === undefined) { + onError('Variant cannot be generated because selector contains no classes.') + return + } - classSelector.value = `${variantName}${separator}${classSelector.value}` - }) - }).processSync(selector) -} + classSelector.value = `${variantName}${separator}${classSelector.value}` + }) + }).processSync(selector) + }, + (selector, variantName, separator) => [selector, variantName, separator].join('||') +) + +export default buildSelectorVariant