-
Notifications
You must be signed in to change notification settings - Fork 0
/
loader.js
37 lines (29 loc) · 904 Bytes
/
loader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
export {resolve}
import {register, isBuiltin} from 'node:module';
if (!import.meta.url.endsWith("?loader")) {
register(`${import.meta.url}?loader`);
}
const selfURL = import.meta.url.replace(/\?loader$/, '')
const isSelf = url => url === selfURL
let id = 0;
async function resolve(specifier, context, nextResolve) {
const result = await nextResolve(specifier, context);
if (!isSelf(result.url) && !isBuiltin(result.url) && context.parentURL) {
const url = new URL(result.url);
const parentUrl = new URL(context.parentURL);
const instance = url.searchParams.get("reload") === ""
? `esm-reload-${id++}`
: parentUrl.searchParams.get("instance");
if (instance !== null) {
if (url.searchParams.has('reload')) {
url.searchParams.delete('reload')
}
url.searchParams.set("instance", instance);
return {
...result,
url: `${url}`,
};
}
}
return result;
}