Skip to content

Commit 739c0fb

Browse files
authored
Add glob property to dir-dependency messages (tailwindlabs#4539)
* add `glob` property to `dir-dependency` messages * Add `glob` to `dir-dependency` messages
1 parent 2713381 commit 739c0fb

File tree

4 files changed

+58
-26
lines changed

4 files changed

+58
-26
lines changed

src/jit/lib/setupTrackingContext.js

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import fs from 'fs'
22
import path from 'path'
33

44
import fastGlob from 'fast-glob'
5-
import isGlob from 'is-glob'
6-
import globParent from 'glob-parent'
75
import LRU from 'quick-lru'
86
import normalizePath from 'normalize-path'
97

@@ -17,6 +15,7 @@ import resolveConfigPath from '../../util/resolveConfigPath'
1715
import { env } from './sharedState'
1816

1917
import { getContext, getFileModifiedMap } from './setupContextUtils'
18+
import parseDependency from '../../util/parseDependency'
2019

2120
let configPathCache = new LRU({ maxSize: 100 })
2221

@@ -167,17 +166,8 @@ export default function setupTrackingContext(configOrPath) {
167166
let fileModifiedMap = getFileModifiedMap(context)
168167

169168
// Add template paths as postcss dependencies.
170-
for (let maybeGlob of candidateFiles) {
171-
if (isGlob(maybeGlob)) {
172-
// rollup-plugin-postcss does not support dir-dependency messages
173-
// but directories can be watched in the same way as files
174-
registerDependency(
175-
path.resolve(globParent(maybeGlob)),
176-
env.ROLLUP_WATCH === 'true' ? 'dependency' : 'dir-dependency'
177-
)
178-
} else {
179-
registerDependency(path.resolve(maybeGlob))
180-
}
169+
for (let fileOrGlob of candidateFiles) {
170+
registerDependency(parseDependency(fileOrGlob))
181171
}
182172

183173
for (let changedContent of resolvedChangedContent(
@@ -190,7 +180,7 @@ export default function setupTrackingContext(configOrPath) {
190180
}
191181

192182
for (let file of configDependencies) {
193-
registerDependency(file)
183+
registerDependency({ type: 'dependency', file })
194184
}
195185

196186
return context

src/jit/lib/setupWatchingContext.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ export default function setupWatchingContext(configOrPath) {
308308
let contextConfigDependencies = getConfigDependencies(context)
309309

310310
for (let file of configDependencies) {
311-
registerDependency(file)
311+
registerDependency({ type: 'dependency', file })
312312
}
313313

314314
context.disposables.push((oldContext) => {
@@ -338,7 +338,7 @@ export default function setupWatchingContext(configOrPath) {
338338
// to trigger rebuilds.
339339
let touchFile = getTouchFile(context)
340340
if (touchFile) {
341-
registerDependency(touchFile)
341+
registerDependency({ type: 'dependency', file: touchFile })
342342
}
343343

344344
if (tailwindDirectives.size > 0) {

src/jit/processTailwindFeatures.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@ import { createContext } from './lib/setupContextUtils'
88

99
export default function processTailwindFeatures(setupContext) {
1010
return function (root, result) {
11-
function registerDependency(fileName, type = 'dependency') {
12-
result.messages.push({
13-
type,
14-
plugin: 'tailwindcss',
15-
parent: result.opts.from,
16-
[type === 'dir-dependency' ? 'dir' : 'file']: fileName,
17-
})
18-
}
19-
2011
let tailwindDirectives = normalizeTailwindDirectives(root)
2112

2213
let context = setupContext({
2314
tailwindDirectives,
24-
registerDependency,
15+
registerDependency(dependency) {
16+
result.messages.push({
17+
plugin: 'tailwindcss',
18+
parent: result.opts.from,
19+
...dependency,
20+
})
21+
},
2522
createContext(tailwindConfig, changedContent) {
2623
return createContext(tailwindConfig, changedContent, tailwindDirectives, root)
2724
},

src/util/parseDependency.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import isGlob from 'is-glob'
2+
import globParent from 'glob-parent'
3+
import path from 'path'
4+
5+
// Based on `glob-base`
6+
// https://github.com/micromatch/glob-base/blob/master/index.js
7+
function parseGlob(pattern) {
8+
let glob = pattern
9+
let base = globParent(pattern)
10+
11+
if (base !== '.') {
12+
glob = pattern.substr(base.length)
13+
if (glob.charAt(0) === '/') {
14+
glob = glob.substr(1)
15+
}
16+
}
17+
18+
if (glob.substr(0, 2) === './') {
19+
glob = glob.substr(2)
20+
}
21+
if (glob.charAt(0) === '/') {
22+
glob = glob.substr(1)
23+
}
24+
25+
return { base, glob }
26+
}
27+
28+
export default function parseDependency(normalizedFileOrGlob) {
29+
let message
30+
31+
if (isGlob(normalizedFileOrGlob)) {
32+
let { base, glob } = parseGlob(normalizedFileOrGlob)
33+
message = { type: 'dir-dependency', dir: path.resolve(base), glob }
34+
} else {
35+
message = { type: 'dependency', file: path.resolve(normalizedFileOrGlob) }
36+
}
37+
38+
// rollup-plugin-postcss does not support dir-dependency messages
39+
// but directories can be watched in the same way as files
40+
if (message.type === 'dir-dependency' && process.env.ROLLUP_WATCH === 'true') {
41+
message = { type: 'dependency', file: message.dir }
42+
}
43+
44+
return message
45+
}

0 commit comments

Comments
 (0)