@@ -13,21 +13,32 @@ export type PluginFilterWithFallback = (
1313) => boolean | FallbackValues
1414export type TransformHookFilter = ( id : string , code : string ) => boolean
1515
16- export type StringFilter =
17- | string
18- | RegExp
19- | Array < string | RegExp >
16+ export type StringFilter < Value = string | RegExp > =
17+ | Value
18+ | Array < Value >
2019 | {
21- include ?: string | RegExp | Array < string | RegExp >
22- exclude ?: string | RegExp | Array < string | RegExp >
20+ include ?: Value | Array < Value >
21+ exclude ?: Value | Array < Value >
2322 }
2423
2524type NormalizedStringFilter = {
2625 include ?: Array < string | RegExp >
2726 exclude ?: Array < string | RegExp >
2827}
2928
30- function patternToIdFilter ( pattern : string | RegExp ) : PluginFilter {
29+ function getMatcherString ( glob : string , cwd : string ) {
30+ if ( glob . startsWith ( '**' ) || path . isAbsolute ( glob ) ) {
31+ return slash ( glob )
32+ }
33+
34+ const resolved = path . join ( cwd , glob )
35+ return slash ( resolved )
36+ }
37+
38+ function patternToIdFilter (
39+ pattern : string | RegExp ,
40+ cwd : string ,
41+ ) : PluginFilter {
3142 if ( pattern instanceof RegExp ) {
3243 return ( id : string ) => {
3344 const normalizedId = slash ( id )
@@ -37,10 +48,10 @@ function patternToIdFilter(pattern: string | RegExp): PluginFilter {
3748 }
3849 }
3950
40- const cwd = process . cwd ( )
41- const matcher = picomatch ( pattern , { dot : true } )
51+ const glob = getMatcherString ( pattern , cwd )
52+ const matcher = picomatch ( glob , { dot : true } )
4253 return ( id : string ) => {
43- const normalizedId = slash ( path . relative ( cwd , id ) )
54+ const normalizedId = slash ( id )
4455 return matcher ( normalizedId )
4556 }
4657}
@@ -94,11 +105,12 @@ function normalizeFilter(filter: StringFilter): NormalizedStringFilter {
94105
95106export function createIdFilter (
96107 filter : StringFilter | undefined ,
108+ cwd = process . cwd ( ) ,
97109) : PluginFilterWithFallback | undefined {
98110 if ( ! filter ) return
99111 const { exclude, include } = normalizeFilter ( filter )
100- const excludeFilter = exclude ?. map ( patternToIdFilter )
101- const includeFilter = include ?. map ( patternToIdFilter )
112+ const excludeFilter = exclude ?. map ( ( p ) => patternToIdFilter ( p , cwd ) )
113+ const includeFilter = include ?. map ( ( p ) => patternToIdFilter ( p , cwd ) )
102114 return createFilter ( excludeFilter , includeFilter )
103115}
104116
@@ -115,9 +127,10 @@ export function createCodeFilter(
115127export function createFilterForTransform (
116128 idFilter : StringFilter | undefined ,
117129 codeFilter : StringFilter | undefined ,
130+ cwd ?: string ,
118131) : TransformHookFilter | undefined {
119132 if ( ! idFilter && ! codeFilter ) return
120- const idFilterFn = createIdFilter ( idFilter )
133+ const idFilterFn = createIdFilter ( idFilter , cwd )
121134 const codeFilterFn = createCodeFilter ( codeFilter )
122135 return ( id , code ) => {
123136 let fallback = true
0 commit comments