unmangle pseudo-element selectors
authorDan Allen <dan@opendevise.com>
Wed, 29 Apr 2020 11:41:29 +0000 (05:41 -0600)
committerDan Allen <dan@opendevise.com>
Fri, 1 May 2020 08:37:59 +0000 (02:37 -0600)
gulp.d/tasks/build.js

index 7a29aa3..5894cc1 100644 (file)
@@ -24,7 +24,7 @@ module.exports = (src, dest, preview) => () => {
   const sourcemaps = preview || process.env.SOURCEMAPS === 'true'
   const postcssPlugins = [
     postcssImport,
-    (root, { messages, opts: { file } }) =>
+    (css, { messages, opts: { file } }) =>
       Promise.all(
         messages
           .reduce((accum, { file: depPath, type }) => (type === 'dependency' ? accum.concat(depPath) : accum), [])
@@ -49,7 +49,9 @@ module.exports = (src, dest, preview) => () => {
     postcssVar({ preserve: preview }),
     preview ? postcssCalc : () => {},
     autoprefixer,
-    preview ? () => {} : cssnano({ preset: 'default' }),
+    preview
+      ? () => {}
+      : (css, result) => cssnano({ preset: 'default' })(css, result).then(() => postcssPseudoElementFixer(css, result)),
   ]
 
   return merge(
@@ -111,3 +113,9 @@ module.exports = (src, dest, preview) => () => {
     vfs.src('partials/*.hbs', opts)
   ).pipe(vfs.dest(dest, { sourcemaps: sourcemaps && '.' }))
 }
+
+function postcssPseudoElementFixer (css, result) {
+  css.walkRules(/(?:^|[^:]):(?:before|after)/, (rule) => {
+    rule.selector = rule.selectors.map((it) => it.replace(/(^|[^:]):(before|after)$/, '$1::$2')).join(',')
+  })
+}