fix(preload): allow ignoring dep errors (#18046)

This commit is contained in:
Daniel Roe 2024-09-09 12:12:39 +02:00 committed by GitHub
parent 8062d36773
commit 3fb28896d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 9 deletions

View File

@ -81,7 +81,8 @@ function preload(
deps?: string[],
importerUrl?: string,
) {
let promise: Promise<unknown> = Promise.resolve()
let promise: Promise<PromiseSettledResult<unknown>[] | void> =
Promise.resolve()
// @ts-expect-error __VITE_IS_MODERN__ will be replaced with boolean later
if (__VITE_IS_MODERN__ && deps && deps.length > 0) {
const links = document.getElementsByTagName('link')
@ -93,7 +94,7 @@ function preload(
// in that case fallback to getAttribute
const cspNonce = cspNonceMeta?.nonce || cspNonceMeta?.getAttribute('nonce')
promise = Promise.all(
promise = Promise.allSettled(
deps.map((dep) => {
// @ts-expect-error assetsURL is declared before preload.toString()
dep = assetsURL(dep, importerUrl)
@ -144,18 +145,21 @@ function preload(
)
}
return promise
.then(() => baseModule())
.catch((err) => {
return promise.then((res) => {
for (const item of res || []) {
if (item.status !== 'rejected') continue
const e = new Event('vite:preloadError', {
cancelable: true,
}) as VitePreloadErrorEvent
e.payload = err
e.payload = item.reason
window.dispatchEvent(e)
if (!e.defaultPrevented) {
throw err
throw item.reason
}
})
}
return baseModule()
})
}
/**

View File

@ -140,7 +140,7 @@ describe.runIf(isBuild)('build tests', () => {
expect(formatSourcemapForSnapshot(JSON.parse(map))).toMatchInlineSnapshot(`
{
"ignoreList": [],
"mappings": ";63BAAA,OAAO,2BAAuB,EAAC,wBAE/B,QAAQ,IAAI,uBAAuB",
"mappings": ";s8BAAA,OAAO,2BAAuB,EAAC,wBAE/B,QAAQ,IAAI,uBAAuB",
"sources": [
"../../after-preload-dynamic.js",
],