// CSS tests concern bundling bugs with CSS files import { devTest, minimalFramework } from "../dev-server-harness"; // Note: more in depth testing of plugins is done in test/bundler/bundler_plugin.test.ts devTest("onResolve", { framework: minimalFramework, pluginFile: ` import * as path from 'path'; export default [ { name: 'a', setup(build) { build.onResolve({ filter: /trigger/ }, (args) => { return { path: path.join(import.meta.dirname, '/file.ts') }; }); }, } ]; `, files: { "file.ts": ` export const value = 1; `, "routes/index.ts": ` import { value } from 'trigger'; export default function (req, meta) { return new Response('value: ' + value); } `, }, async test(dev) { await dev.fetch("/").expect('value: 1'); }, }); devTest("onLoad", { framework: minimalFramework, pluginFile: ` import * as path from 'path'; export default [ { name: 'a', setup(build) { build.onLoad({ filter: /trigger/ }, (args) => { return { contents: 'export const value = 1;', loader: 'ts' }; }); }, } ]; `, files: { "trigger.ts": ` throw new Error('should not be loaded'); `, "routes/index.ts": ` import { value } from '../trigger.ts'; export default function (req, meta) { return new Response('value: ' + value); } `, }, async test(dev) { await dev.fetch("/").expect('value: 1'); await dev.fetch("/").expect('value: 1'); await dev.fetch("/").expect('value: 1'); }, }); devTest("onResolve + onLoad virtual file", { framework: minimalFramework, pluginFile: ` import * as path from 'path'; export default [ { name: 'a', setup(build) { build.onResolve({ filter: /^trigger$/ }, (args) => { return { path: "hello.ts", namespace: "virtual" }; }); build.onLoad({ filter: /.*/, namespace: "virtual" }, (args) => { return { contents: 'export default ' + JSON.stringify(args) + ';', loader: 'ts' }; }); }, } ]; `, files: { // this file must not collide with the virtual file "hello.ts": ` export default "file-on-disk"; `, "routes/index.ts": ` import disk from '../hello'; import virtual from 'trigger'; export default function (req, meta) { return Response.json([virtual, disk]); } `, }, async test(dev) { await dev.fetch("/").expect([ { path: "hello.ts", namespace: "virtual", loader: "ts", side: "server", }, "file-on-disk", ]); }, }); // devTest("onLoad with watchFile", { // framework: minimalFramework, // pluginFile: ` // import * as path from 'path'; // export default [ // { // name: 'a', // setup(build) { // let a = 0; // build.onLoad({ filter: /trigger/ }, (args) => { // a += 1; // return { contents: 'export const value = ' + a + ';', loader: 'ts' }; // }); // }, // } // ]; // `, // files: { // "trigger.ts": ` // throw new Error('should not be loaded'); // `, // "routes/index.ts": ` // import { value } from '../trigger.ts'; // export default function (req, meta) { // return new Response('value: ' + value); // } // `, // }, // async test(dev) { // await dev.fetch("/").expect('value: 1'); // await dev.fetch("/").expect('value: 1'); // await dev.write("trigger.ts", "throw new Error('should not be loaded 2');"); // await dev.fetch("/").expect('value: 2'); // await dev.fetch("/").expect('value: 2'); // }, // });