@@ -11,7 +11,8 @@ import { clearRequireCache } from '@tailwindcss/node/require-cache'
1111import { Scanner } from '@tailwindcss/oxide'
1212import fs from 'node:fs/promises'
1313import path from 'node:path'
14- import type { Plugin , ResolvedConfig , ViteDevServer } from 'vite'
14+ import type { Environment , Plugin , ResolvedConfig , ViteDevServer } from 'vite'
15+ import * as vite from 'vite'
1516
1617const DEBUG = env . DEBUG
1718const SPECIAL_QUERY_RE = / [ ? & ] (?: w o r k e r | s h a r e d w o r k e r | r a w | u r l ) \b /
@@ -21,27 +22,50 @@ const INLINE_STYLE_ID_RE = /[?&]index\=\d+\.css$/
2122export default function tailwindcss ( ) : Plugin [ ] {
2223 let servers : ViteDevServer [ ] = [ ]
2324 let config : ResolvedConfig | null = null
25+ let roots = new Map < string , Root > ( )
2426
2527 let isSSR = false
2628 let minify = false
2729
28- let roots : DefaultMap < string , Root > = new DefaultMap ( ( id ) => {
29- let cssResolver = config ! . createResolver ( {
30- ...config ! . resolve ,
31- extensions : [ '.css' ] ,
32- mainFields : [ 'style' ] ,
33- conditions : [ 'style' , 'development|production' ] ,
34- tryIndex : false ,
35- preferRelative : true ,
36- } )
37- function customCssResolver ( id : string , base : string ) {
38- return cssResolver ( id , base , true , isSSR )
39- }
30+ function createRoot ( env : Environment | null , id : string ) {
31+ type ResolveFn = ( id : string , base : string ) => Promise < string | false | undefined >
32+
33+ let customCssResolver : ResolveFn
34+ let customJsResolver : ResolveFn
35+
36+ if ( ! env ) {
37+ // Older, pre-environment Vite API
38+ // TODO: Can we drop this??
39+ let cssResolver = config ! . createResolver ( {
40+ ...config ! . resolve ,
41+ extensions : [ '.css' ] ,
42+ mainFields : [ 'style' ] ,
43+ conditions : [ 'style' , 'development|production' ] ,
44+ tryIndex : false ,
45+ preferRelative : true ,
46+ } )
47+
48+ let jsResolver = config ! . createResolver ( config ! . resolve )
49+
50+ customCssResolver = ( id : string , base : string ) => cssResolver ( id , base , true , isSSR )
51+ customJsResolver = ( id : string , base : string ) => jsResolver ( id , base , true , isSSR )
52+ } else {
53+ // Newer View versions
54+ let cssResolver = vite . createIdResolver ( env . config , {
55+ ...env . config . resolve ,
56+ extensions : [ '.css' ] ,
57+ mainFields : [ 'style' ] ,
58+ conditions : [ 'style' , 'development|production' ] ,
59+ tryIndex : false ,
60+ preferRelative : true ,
61+ } )
4062
41- let jsResolver = config ! . createResolver ( config ! . resolve )
42- function customJsResolver ( id : string , base : string ) {
43- return jsResolver ( id , base , true , isSSR )
63+ let jsResolver = vite . createIdResolver ( env . config , env . config . resolve )
64+
65+ customCssResolver = ( id : string , base : string ) => cssResolver ( env , id , base , true )
66+ customJsResolver = ( id : string , base : string ) => jsResolver ( env , id , base , true )
4467 }
68+
4569 return new Root (
4670 id ,
4771 config ! . root ,
@@ -51,7 +75,7 @@ export default function tailwindcss(): Plugin[] {
5175 customCssResolver ,
5276 customJsResolver ,
5377 )
54- } )
78+ }
5579
5680 return [
5781 {
@@ -83,6 +107,10 @@ export default function tailwindcss(): Plugin[] {
83107 DEBUG && I . start ( '[@tailwindcss/vite] Generate CSS (serve)' )
84108
85109 let root = roots . get ( id )
110+ if ( ! root ) {
111+ root ??= createRoot ( this . environment ?? null , id )
112+ roots . set ( id , root )
113+ }
86114
87115 let result = await root . generate ( src , ( file ) => this . addWatchFile ( file ) , I )
88116 if ( ! result ) {
@@ -108,6 +136,10 @@ export default function tailwindcss(): Plugin[] {
108136 DEBUG && I . start ( '[@tailwindcss/vite] Generate CSS (build)' )
109137
110138 let root = roots . get ( id )
139+ if ( ! root ) {
140+ root ??= createRoot ( this . environment ?? null , id )
141+ roots . set ( id , root )
142+ }
111143
112144 let result = await root . generate ( src , ( file ) => this . addWatchFile ( file ) , I )
113145 if ( ! result ) {
0 commit comments