2026-05-11 16:25:28 +02:00
|
|
|
import {
|
|
|
|
|
isBuiltin,
|
|
|
|
|
type ResolveFnOutput,
|
|
|
|
|
type ResolveHook,
|
|
|
|
|
type ResolveHookContext,
|
|
|
|
|
type ResolveHookSync,
|
|
|
|
|
} from 'node:module'
|
2024-09-02 12:03:16 -04:00
|
|
|
|
|
|
|
|
export let resolve: ResolveHook = async (specifier, context, nextResolve) => {
|
|
|
|
|
let result = await nextResolve(specifier, context)
|
2026-05-11 16:25:28 +02:00
|
|
|
return processResolve(context, result)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export let resolveSync: ResolveHookSync = (specifier, context, nextResolve) => {
|
|
|
|
|
let result = nextResolve(specifier, context)
|
|
|
|
|
return processResolve(context, result)
|
|
|
|
|
}
|
2024-09-02 12:03:16 -04:00
|
|
|
|
2026-05-11 16:25:28 +02:00
|
|
|
function processResolve(context: ResolveHookContext, result: ResolveFnOutput) {
|
2026-06-16 16:03:27 +02:00
|
|
|
try {
|
|
|
|
|
if (result.url === import.meta.url) return result
|
|
|
|
|
if (isBuiltin(result.url)) return result
|
|
|
|
|
if (!context.parentURL) return result
|
2024-09-02 12:03:16 -04:00
|
|
|
|
2026-06-16 16:03:27 +02:00
|
|
|
let parent = new URL(context.parentURL)
|
2024-09-02 12:03:16 -04:00
|
|
|
|
2026-06-16 16:03:27 +02:00
|
|
|
let id = parent.searchParams.get('id')
|
|
|
|
|
if (id === null) return result
|
2024-09-02 12:03:16 -04:00
|
|
|
|
2026-06-16 16:03:27 +02:00
|
|
|
let url = new URL(result.url)
|
|
|
|
|
url.searchParams.set('id', id)
|
2024-09-02 12:03:16 -04:00
|
|
|
|
2026-06-16 16:03:27 +02:00
|
|
|
return {
|
|
|
|
|
...result,
|
|
|
|
|
url: `${url}`,
|
|
|
|
|
}
|
|
|
|
|
} catch {
|
|
|
|
|
return result
|
2024-09-02 12:03:16 -04:00
|
|
|
}
|
|
|
|
|
}
|