diff --git a/index.js b/index.js index 3ea942f..16537a5 100644 --- a/index.js +++ b/index.js @@ -1,26 +1,34 @@ const vite = require("vite"); +const {isTestFilePath} = require('@web/test-runner') + module.exports = function () { - let server; + /** @type { import('vite').ViteDevServer } */ + let server - return { - name: "vite-plugin", + /** @type { (url: string) => boolean } */ + const isTestRunnerFile = url => url.startsWith('/__web-dev-server') || url.startsWith('/__web-test-runner') - async serverStart({ app }) { - server = await vite.createServer({ - clearScreen: false, - }); - await server.listen(); - const port = server.config.server.port; - const protocol = server.config.server.https ? "https" : "http"; - app.use((ctx, next) => { - ctx.redirect(`${protocol}://localhost:${port}${ctx.originalUrl}`); - return; - }); + /** @type {import('@web/test-runner').TestRunnerPlugin } */ + const plugin = { + name: 'vite-plugin', + async serverStart({app}) { + server = await vite.createServer({clearScreen: false}) + await server.listen() }, - async serverStop() { - return server.close(); + await server.close() + }, + async serve({request}) { + if (isTestRunnerFile(request.url)) return + const code = await server.transformRequest(request.path).code + return typeof code === 'string' ? {body: code} : undefined + }, + transformImport({source}) { + if (!isTestFilePath(source) || isTestRunnerFile(source)) return + const {port, https, host} = server.config.server + return `${https ? 'https' : 'http'}://${host ?? 'localhost'}:${port ?? 80}${source}` }, - }; + } + return plugin };