-
Notifications
You must be signed in to change notification settings - Fork 29.6k
/
hooks-custom.mjs
109 lines (94 loc) Β· 2.47 KB
/
hooks-custom.mjs
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import { pathToFileURL } from 'node:url';
import count from '../es-modules/stateful.mjs';
// Arbitrary instance of manipulating a module's internal state
// used to assert node-land and user-land have different contexts
count();
export function resolve(specifier, { importAttributes }, next) {
let format = '';
if (specifier === 'esmHook/format.false') {
format = false;
}
if (specifier === 'esmHook/format.true') {
format = true;
}
if (specifier === 'esmHook/preknownFormat.pre') {
format = 'module';
}
if (specifier.startsWith('esmHook')) {
return {
format,
shortCircuit: true,
url: pathToFileURL(specifier).href,
importAttributes,
};
}
return next(specifier);
}
/**
* @param {string} url A fully resolved file url.
* @param {object} context Additional info.
* @param {function} next for now, next is defaultLoad a wrapper for
* defaultGetFormat + defaultGetSource
* @returns {{ format: string, source: (string|SharedArrayBuffer|Uint8Array) }}
*/
export function load(url, context, next) {
// Load all .js files as ESM, regardless of package scope
if (url.endsWith('.js')) {
return next(url, {
...context,
format: 'module',
});
}
if (url.endsWith('.ext')) {
return next(url, {
...context,
format: 'module',
});
}
if (url.endsWith('esmHook/badReturnVal.mjs')) {
return 'export function returnShouldBeObject() {}';
}
if (url.endsWith('esmHook/badReturnFormatVal.mjs')) {
return {
format: Array(0),
shortCircuit: true,
source: '',
};
}
if (url.endsWith('esmHook/unsupportedReturnFormatVal.mjs')) {
return {
format: 'foo', // Not one of the allowable inputs: no translator named 'foo'
shortCircuit: true,
source: '',
};
}
if (url.endsWith('esmHook/badReturnSourceVal.mjs')) {
return {
format: 'module',
shortCircuit: true,
source: Array(0),
};
}
if (url.endsWith('esmHook/preknownFormat.pre')) {
return {
format: context.format,
shortCircuit: true,
source: `const msg = 'hello world'; export default msg;`
};
}
if (url.endsWith('esmHook/virtual.mjs')) {
return {
format: 'module',
shortCircuit: true,
source: `export const message = 'Woohoo!'.toUpperCase();`,
};
}
if (url.endsWith('esmHook/commonJsNullSource.mjs')) {
return {
format: 'commonjs',
shortCircuit: true,
source: 1n,
};
}
return next(url);
}