import * as td from 'testdouble' import { register } from 'prom-client' import request from 'supertest' import { Response } from 'node-fetch' export function generateSimpleViteManifest (mapping) { const viteManifest = {} for (const [file, value] of Object.entries(mapping)) { viteManifest[file] = { file, meta: typeof value === 'string' ? { manifests: [{ namespace: value }] } : {} } if (typeof value === 'object') Object.assign(viteManifest[file], value) } return viteManifest } export function mockConfig ({ urls = [] } = {}) { td.replaceEsm('fs/promises', {}, { readFile () { return `baseUrls:\n${urls.map(u => ` - ${u}`).join('\n')}` } }) } export function mockFetch (servers = {}) { td.replaceEsm('node-fetch', {}, async function ({ origin, pathname }) { const response = servers[origin]?.[pathname] if (response === undefined) return new Response('', { status: 404 }) if (response instanceof Function) return response.apply(this, arguments) if (typeof response === 'object') { return new Response(JSON.stringify(response), { status: 200, headers: { 'Content-Type': 'application/json' } }) } return new Response(response, { status: 200 }) }) } export async function mockApp () { register.clear() const { createApp } = await import('../src/createApp.js') const app = createApp() await request(app).get('/ready') return app }