This PR might fix an issue where resolvers don't work on deno v2.8.x (they do work on deno v2.7.x) when using `@tailwindcss/vite`. This happens when the `context.parentURL` is not actually a URL at all, and therefore the `new URL(…)` just crashes. This PR will fallback to the incoming result for files that are not passed proper URLs. Fixes: #20232 ## Test plan 1. Existing tests pass 2. Can't seem to figure out how to test this in the reproduction issue without publishing first. So going to merge this and test the insiders version instead.
40 lines
1,004 B
TypeScript
40 lines
1,004 B
TypeScript
import {
|
|
isBuiltin,
|
|
type ResolveFnOutput,
|
|
type ResolveHook,
|
|
type ResolveHookContext,
|
|
type ResolveHookSync,
|
|
} from 'node:module'
|
|
|
|
export let resolve: ResolveHook = async (specifier, context, nextResolve) => {
|
|
let result = await nextResolve(specifier, context)
|
|
return processResolve(context, result)
|
|
}
|
|
|
|
export let resolveSync: ResolveHookSync = (specifier, context, nextResolve) => {
|
|
let result = nextResolve(specifier, context)
|
|
return processResolve(context, result)
|
|
}
|
|
|
|
function processResolve(context: ResolveHookContext, result: ResolveFnOutput) {
|
|
try {
|
|
if (result.url === import.meta.url) return result
|
|
if (isBuiltin(result.url)) return result
|
|
if (!context.parentURL) return result
|
|
|
|
let parent = new URL(context.parentURL)
|
|
|
|
let id = parent.searchParams.get('id')
|
|
if (id === null) return result
|
|
|
|
let url = new URL(result.url)
|
|
url.searchParams.set('id', id)
|
|
|
|
return {
|
|
...result,
|
|
url: `${url}`,
|
|
}
|
|
} catch {
|
|
return result
|
|
}
|
|
}
|