* found/fixed some errors while testing agains WPT * only run test.js with ava
52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
// https-loader.mjs
|
|
import { get } from 'https';
|
|
|
|
export function resolve(specifier, context, defaultResolve) {
|
|
const { parentURL = null } = context;
|
|
|
|
// Normally Node.js would error on specifiers starting with 'https://', so
|
|
// this hook intercepts them and converts them into absolute URLs to be
|
|
// passed along to the later hooks below.
|
|
if (specifier.startsWith('https://')) {
|
|
return {
|
|
url: specifier
|
|
};
|
|
} else if (parentURL && parentURL.startsWith('https://')) {
|
|
return {
|
|
url: new URL(specifier, parentURL).href
|
|
};
|
|
}
|
|
|
|
// Let Node.js handle all other specifiers.
|
|
return defaultResolve(specifier, context, defaultResolve);
|
|
}
|
|
|
|
export function getFormat(url, context, defaultGetFormat) {
|
|
// This loader assumes all network-provided JavaScript is ES module code.
|
|
if (url.startsWith('https://')) {
|
|
return {
|
|
format: 'module'
|
|
};
|
|
}
|
|
|
|
// Let Node.js handle all other URLs.
|
|
return defaultGetFormat(url, context, defaultGetFormat);
|
|
}
|
|
|
|
export function getSource(url, context, defaultGetSource) {
|
|
// For JavaScript to be loaded over the network, we need to fetch and
|
|
// return it.
|
|
if (url.startsWith('https://')) {
|
|
return new Promise((resolve, reject) => {
|
|
let data = ''
|
|
get(url, async res => {
|
|
for await (const chunk of res) data += chunk;
|
|
resolve({ source: data });
|
|
}).on('error', (err) => reject(err));
|
|
});
|
|
}
|
|
|
|
// Let Node.js handle all other URLs.
|
|
return defaultGetSource(url, context, defaultGetSource);
|
|
}
|