tailwindcss/packages/@tailwindcss-node/src/esm-cache.loader.mts
Robin Malfait 51f0760d29
Fix crash when using @tailwindcss/vite using deno v2.8.x (#20245)
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.
2026-06-16 16:03:27 +02:00

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
}
}