Files
bun.sh/test/bake/dev/dev-plugins.test.ts
2024-11-29 19:07:56 -08:00

150 lines
3.7 KiB
TypeScript

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