diff --git a/lib/compileTemplate.ts b/lib/compileTemplate.ts index 28151e3..4947dbb 100644 --- a/lib/compileTemplate.ts +++ b/lib/compileTemplate.ts @@ -87,12 +87,16 @@ function preprocess( source, finalPreprocessOptions, (_err: Error | null, _res: string) => { - if (_err) err = _err + if (_err) { + err = _err + } res = _res } ) - if (err) throw err + if (err) { + throw err + } return res } diff --git a/lib/parse.ts b/lib/parse.ts index 035b823..aea667c 100644 --- a/lib/parse.ts +++ b/lib/parse.ts @@ -56,7 +56,9 @@ export function parse(options: ParseOptions): SFCDescriptor { filename + source + JSON.stringify(compilerParseOptions) ) let output: SFCDescriptor = cache.get(cacheKey) - if (output) return output + if (output) { + return output + } output = compiler.parseComponent(source, compilerParseOptions) if (needMap) { if (output.script && !output.script.src) { diff --git a/lib/stylePlugins/scoped.ts b/lib/stylePlugins/scoped.ts index 14e1a2d..1b5369f 100644 --- a/lib/stylePlugins/scoped.ts +++ b/lib/stylePlugins/scoped.ts @@ -1,101 +1,107 @@ 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) +export default (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