From 137a85c0ff26ee32874d60cc647009c015218eb5 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Thu, 15 Sep 2022 16:24:33 -0400 Subject: [PATCH] Refactor `parseDependency` --- src/lib/setupTrackingContext.js | 3 +- src/util/parseDependency.js | 51 +++++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/lib/setupTrackingContext.js b/src/lib/setupTrackingContext.js index 14cd92984..28656bb57 100644 --- a/src/lib/setupTrackingContext.js +++ b/src/lib/setupTrackingContext.js @@ -162,8 +162,7 @@ export default function setupTrackingContext(configOrPath) { // Add template paths as postcss dependencies. for (let fileOrGlob of candidateFiles) { - let dependency = parseDependency(fileOrGlob) - if (dependency) { + for (let dependency of parseDependency(fileOrGlob)) { registerDependency(dependency) } } diff --git a/src/util/parseDependency.js b/src/util/parseDependency.js index 1051df473..bb9118cbe 100644 --- a/src/util/parseDependency.js +++ b/src/util/parseDependency.js @@ -1,6 +1,8 @@ import isGlob from 'is-glob' import globParent from 'glob-parent' +import fs from 'fs' import path from 'path' +import { flagEnabled } from '../featureFlags' // Based on `glob-base` // https://github.com/micromatch/glob-base/blob/master/index.js @@ -25,25 +27,50 @@ function parseGlob(pattern) { return { base, glob } } -export default function parseDependency(normalizedFileOrGlob) { - if (normalizedFileOrGlob.startsWith('!')) { - return null +function toDependency(pathDesc) { + if (!pathDesc.glob) { + return { + type: 'dependency', + file: pathDesc.base, + } } - let message + if (process.env.ROLLUP_WATCH === 'true') { + // rollup-plugin-postcss does not support dir-dependency messages + // but directories can be watched in the same way as files + return { + type: 'dependency', + file: pathDesc.base, + } + } + + return { + type: 'dir-dependency', + dir: pathDesc.base, + glob: pathDesc.glob, + } +} + +export default function parseDependency(normalizedFileOrGlob) { + if (normalizedFileOrGlob.startsWith('!')) { + return [] + } + + let paths = [] if (isGlob(normalizedFileOrGlob)) { let { base, glob } = parseGlob(normalizedFileOrGlob) - message = { type: 'dir-dependency', dir: path.resolve(base), glob } + + paths.push({ base: base, glob }) } else { - message = { type: 'dependency', file: path.resolve(normalizedFileOrGlob) } + paths.push({ base: normalizedFileOrGlob, glob: null }) } - // rollup-plugin-postcss does not support dir-dependency messages - // but directories can be watched in the same way as files - if (message.type === 'dir-dependency' && process.env.ROLLUP_WATCH === 'true') { - message = { type: 'dependency', file: message.dir } - } + paths = paths.map((pathDesc) => + Object.assign(pathDesc, { + base: path.resolve(pathDesc.base), + }) + ) - return message + return paths.map(toDependency) }