import { dirname, join } from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' const stubUrl = pathToFileURL( join(dirname(fileURLToPath(import.meta.url)), 'kody-runtime-stub.js') ).href const srcUrl = new URL('../src/', import.meta.url).href // A src import with this query loads a separate module graph whose // src/config.js says SENDING = 'allowed'. The committed file stays barred. export const ALLOWED_QUERY = '?sending=allowed' const BARRED_LINE = "export const SENDING = 'barred'" const ALLOWED_LINE = "export const SENDING = 'allowed'" export async function resolve(specifier, context, nextResolve) { if (specifier === 'kody:runtime') { return { url: stubUrl, shortCircuit: true } } const resolved = await nextResolve(specifier, context) if (context.parentURL?.endsWith(ALLOWED_QUERY) && resolved.url.startsWith(srcUrl)) { return { ...resolved, url: resolved.url + ALLOWED_QUERY } } return resolved } export async function load(url, context, nextLoad) { const loaded = await nextLoad(url, context) if (url !== `${srcUrl}config.js${ALLOWED_QUERY}`) return loaded const source = typeof loaded.source === 'string' ? loaded.source : new TextDecoder().decode(loaded.source) if (!source.includes(BARRED_LINE)) { throw new Error(`test/hooks.mjs: src/config.js no longer contains ${BARRED_LINE}`) } return { ...loaded, source: source.replace(BARRED_LINE, ALLOWED_LINE) } }