From 2b3be692ec79138222ab75c7b92d7061d83c0b28 Mon Sep 17 00:00:00 2001 From: gabriel Date: Tue, 9 Apr 2024 18:09:37 -0400 Subject: [PATCH] fix: update postcss --- lib/stylePlugins/scoped.ts | 177 +++++++++++++++++++------------------ lib/stylePlugins/trim.ts | 21 +++-- package.json | 4 +- yarn.lock | 31 ++++--- 4 files changed, 128 insertions(+), 105 deletions(-) diff --git a/lib/stylePlugins/scoped.ts b/lib/stylePlugins/scoped.ts index 14e1a2d..65789b0 100644 --- a/lib/stylePlugins/scoped.ts +++ b/lib/stylePlugins/scoped.ts @@ -1,101 +1,108 @@ import { Root } from 'postcss' -import * as postcss from 'postcss' // postcss-selector-parser does have typings but it's problematic to work with. const selectorParser = require('postcss-selector-parser') -export default postcss.plugin('add-id', (options: any) => (root: Root) => { - const id: string = options - const keyframes = Object.create(null) +const addIdPlugin = (options: any) => { + return { + postcssPlugin: 'add-id', + Once(root: Root, {}) { + const id: string = options + const keyframes = Object.create(null) - root.each(function rewriteSelector(node: any) { - if (!node.selector) { - // handle media queries - if (node.type === 'atrule') { - if (node.name === 'media' || node.name === 'supports') { - node.each(rewriteSelector) - } else if (/-?keyframes$/.test(node.name)) { - // register keyframes - keyframes[node.params] = node.params = node.params + '-' + id + root.each(function rewriteSelector(node: any) { + if (!node.selector) { + // handle media queries + if (node.type === 'atrule') { + if (node.name === 'media' || node.name === 'supports') { + node.each(rewriteSelector) + } else if (/-?keyframes$/.test(node.name)) { + // register keyframes + keyframes[node.params] = node.params = node.params + '-' + id + } + } + return } - } - return - } - node.selector = selectorParser((selectors: any) => { - selectors.each((selector: any) => { - let node: any = null + node.selector = selectorParser((selectors: any) => { + selectors.each((selector: any) => { + let node: any = null - // find the last child node to insert attribute selector - selector.each((n: any) => { - // ">>>" combinator - // and /deep/ alias for >>>, since >>> doesn't work in SASS - if ( - n.type === 'combinator' && - (n.value === '>>>' || n.value === '/deep/') - ) { - n.value = ' ' - n.spaces.before = n.spaces.after = '' - return false - } + // find the last child node to insert attribute selector + selector.each((n: any) => { + // ">>>" combinator + // and /deep/ alias for >>>, since >>> doesn't work in SASS + if ( + n.type === 'combinator' && + (n.value === '>>>' || n.value === '/deep/') + ) { + n.value = ' ' + n.spaces.before = n.spaces.after = '' + return false + } - // in newer versions of sass, /deep/ support is also dropped, so add a ::v-deep alias - if (n.type === 'pseudo' && n.value === '::v-deep') { - n.value = n.spaces.before = n.spaces.after = '' - return false - } + // in newer versions of sass, /deep/ support is also dropped, so add a ::v-deep alias + if (n.type === 'pseudo' && n.value === '::v-deep') { + n.value = n.spaces.before = n.spaces.after = '' + return false + } - if (n.type !== 'pseudo' && n.type !== 'combinator') { - node = n - } - }) + if (n.type !== 'pseudo' && n.type !== 'combinator') { + node = n + } + }) - if (node) { - node.spaces.after = '' - } else { - // For deep selectors & standalone pseudo selectors, - // the attribute selectors are prepended rather than appended. - // So all leading spaces must be eliminated to avoid problems. - selector.first.spaces.before = '' - } + if (node) { + node.spaces.after = '' + } else { + // For deep selectors & standalone pseudo selectors, + // the attribute selectors are prepended rather than appended. + // So all leading spaces must be eliminated to avoid problems. + selector.first.spaces.before = '' + } - selector.insertAfter( - node, - selectorParser.attribute({ - attribute: id + selector.insertAfter( + node, + selectorParser.attribute({ + attribute: id, + }) + ) }) - ) + }).processSync(node.selector) }) - }).processSync(node.selector) - }) - // If keyframes are found in this