@@ -11,15 +11,16 @@ import prettierParserTypescript from 'prettier/parser-typescript'
11
11
import { createContext as createContextFallback } from 'tailwindcss/lib/lib/setupContextUtils'
12
12
import { generateRules as generateRulesFallback } from 'tailwindcss/lib/lib/generateRules'
13
13
import resolveConfigFallback from 'tailwindcss/resolveConfig'
14
+ import loadConfigFallback from 'tailwindcss/loadConfig'
14
15
import * as recast from 'recast'
15
16
import * as astTypes from 'ast-types'
16
17
import * as path from 'path'
17
18
import requireFrom from 'import-from'
18
- import requireFresh from 'import-fresh'
19
19
import objectHash from 'object-hash'
20
20
import lineColumn from 'line-column'
21
21
import jsesc from 'jsesc'
22
22
import escalade from 'escalade/sync'
23
+ import clearModule from 'clear-module'
23
24
24
25
let base = getBasePlugins ( )
25
26
@@ -148,20 +149,36 @@ function createParser(parserFormat, transform) {
148
149
let resolveConfig = resolveConfigFallback
149
150
let createContext = createContextFallback
150
151
let generateRules = generateRulesFallback
152
+ let loadConfig = loadConfigFallback
151
153
152
154
let baseDir
153
155
let prettierConfigPath = prettier . resolveConfigFile . sync ( options . filepath )
154
156
155
157
if ( options . tailwindConfig ) {
156
158
baseDir = prettierConfigPath ? path . dirname ( prettierConfigPath ) : process . cwd ( )
157
- tailwindConfigPath = path . resolve ( baseDir , options . tailwindConfig )
158
- tailwindConfig = requireFresh ( tailwindConfigPath )
159
159
} else {
160
160
baseDir = prettierConfigPath
161
161
? path . dirname ( prettierConfigPath )
162
162
: options . filepath
163
163
? path . dirname ( options . filepath )
164
164
: process . cwd ( )
165
+ }
166
+
167
+ try {
168
+ resolveConfig = requireFrom ( baseDir , 'tailwindcss/resolveConfig' )
169
+ createContext = requireFrom ( baseDir , 'tailwindcss/lib/lib/setupContextUtils' ) . createContext
170
+ generateRules = requireFrom ( baseDir , 'tailwindcss/lib/lib/generateRules' ) . generateRules
171
+
172
+ // Prior to `[email protected] ` this won't exist so we load it last
173
+ loadConfig = requireFrom ( baseDir , 'tailwindcss/loadConfig' )
174
+ } catch { }
175
+
176
+ if ( options . tailwindConfig ) {
177
+ tailwindConfigPath = path . resolve ( baseDir , options . tailwindConfig )
178
+ clearModule ( tailwindConfigPath )
179
+ const loadedConfig = loadConfig ( tailwindConfigPath )
180
+ tailwindConfig = loadedConfig . default ?? loadedConfig
181
+ } else {
165
182
let configPath
166
183
try {
167
184
configPath = escalade ( baseDir , ( _dir , names ) => {
@@ -171,20 +188,22 @@ function createParser(parserFormat, transform) {
171
188
if ( names . includes ( 'tailwind.config.cjs' ) ) {
172
189
return 'tailwind.config.cjs'
173
190
}
191
+ if ( names . includes ( 'tailwind.config.mjs' ) ) {
192
+ return 'tailwind.config.mjs'
193
+ }
194
+ if ( names . includes ( 'tailwind.config.ts' ) ) {
195
+ return 'tailwind.config.ts'
196
+ }
174
197
} )
175
198
} catch { }
176
199
if ( configPath ) {
177
200
tailwindConfigPath = configPath
178
- tailwindConfig = requireFresh ( configPath )
201
+ clearModule ( tailwindConfigPath )
202
+ const loadedConfig = loadConfig ( tailwindConfigPath )
203
+ tailwindConfig = loadedConfig . default ?? loadedConfig
179
204
}
180
205
}
181
206
182
- try {
183
- resolveConfig = requireFrom ( baseDir , 'tailwindcss/resolveConfig' )
184
- createContext = requireFrom ( baseDir , 'tailwindcss/lib/lib/setupContextUtils' ) . createContext
185
- generateRules = requireFrom ( baseDir , 'tailwindcss/lib/lib/generateRules' ) . generateRules
186
- } catch { }
187
-
188
207
// suppress "empty content" warning
189
208
tailwindConfig . content = [ 'no-op' ]
190
209
0 commit comments