// 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); }