Skip to content

Commit f78823d

Browse files
committed
refactor: don't use internal vite APIs
1 parent 5f73552 commit f78823d

File tree

1 file changed

+30
-25
lines changed

1 file changed

+30
-25
lines changed

packages/vite-plugin/src/stylesPlugin.ts

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,50 +27,54 @@ export function stylesPlugin (options: Options): PluginOption {
2727
let needsTouch = false
2828
const blockingModules = new Set<string>()
2929

30+
let pendingModules: string[]
3031
async function getPendingModules () {
3132
if (!server) {
32-
await new Promise(resolve => setTimeout(resolve, 50))
33+
await new Promise(resolve => setTimeout(resolve, 0))
34+
const modules = Array.from(context.getModuleIds())
35+
.filter(id => !blockingModules.has(id)) // Ignore the current file
36+
.map(id => context.getModuleInfo(id)!)
37+
.filter(module => module.code == null) // Ignore already loaded modules
38+
39+
pendingModules = modules.map(module => module.id)
40+
3341
return (await Promise.all(
34-
Array.from(context.getModuleIds())
35-
.filter(id => !blockingModules.has(id)) // Ignore the current file
36-
.map(id => context.getModuleInfo(id)!)
37-
.filter(module => module.code == null) // Ignore already loaded modules
38-
.map(module => context.load(module))
39-
)).filter(module => module.code == null)
40-
.map(module => module.id)
42+
modules.map(module => context.load(module))
43+
)).map(module => module.id)
4144
} else {
45+
const modules = Array.from(server.moduleGraph.urlToModuleMap.entries())
46+
.filter(([k, v]) => (
47+
v.transformResult == null &&
48+
!k.startsWith('/@id/') &&
49+
!blockingModules.has(v.id!)
50+
))
51+
52+
pendingModules = modules.map(([k, v]) => v.id!)
53+
4254
return (await Promise.all(
43-
Array.from(server._pendingRequests, ([k, v]) => {
44-
const module = server.moduleGraph.urlToModuleMap.get(k)
45-
return module?.id && !blockingModules.has(module.id)
46-
? v.then(() => module.id)
47-
: null
48-
}).filter(v => v != null)
49-
)) as string[]
55+
modules.map(([k, v]) => server.transformRequest(k).then(() => v))
56+
)).map(module => module.id!)
5057
}
5158
}
5259

53-
let pendingModules: string[]
5460
let timeout: NodeJS.Timeout
5561
async function awaitBlocking () {
5662
clearTimeout(timeout)
5763
timeout = setTimeout(() => {
5864
console.error('vuetify:styles fallback timeout hit', {
5965
blockingModules: Array.from(blockingModules.values()),
60-
pendingModules: server ? Array.from(server._pendingRequests.keys()) : pendingModules,
66+
pendingModules,
6167
})
6268
resolve(false)
6369
}, options.stylesTimeout)
6470

6571
let pending
6672
do {
67-
pending = await Promise.any([
73+
pending = await Promise.any<boolean | number | null>([
6874
promise,
69-
getPendingModules().then(v => {
70-
pendingModules = v
71-
return !!v.length
72-
})
75+
getPendingModules().then(v => v.length)
7376
])
77+
debug(pending, 'pending modules', pendingModules)
7478
} while (pending)
7579

7680
resolve(false)
@@ -127,7 +131,7 @@ export function stylesPlugin (options: Options): PluginOption {
127131
isSubdir(vuetifyBase, path.isAbsolute(source) ? source : importer)
128132
) {
129133
if (options.styles === 'none') {
130-
return '__void__'
134+
return '\0__void__'
131135
} else if (options.styles === 'expose') {
132136
awaitResolve()
133137

@@ -143,7 +147,7 @@ export function stylesPlugin (options: Options): PluginOption {
143147
files.add(resolution.id)
144148
}
145149

146-
return '__void__'
150+
return '\0__void__'
147151
}
148152
}
149153
}
@@ -158,12 +162,13 @@ export function stylesPlugin (options: Options): PluginOption {
158162
) {
159163
debug(`awaiting ${id}`)
160164
await awaitResolve(id)
165+
debug(`returning ${id}`)
161166

162167
return code.replace(styleImportRegexp, '@use ".cache/vuetify/styles.scss"')
163168
}
164169
},
165170
load (id) {
166-
if (id === '__void__') {
171+
if (id === '__void__' || id === '\0__void__') {
167172
return ''
168173
}
169174

0 commit comments

Comments
 (0)