mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
150 lines
3.7 KiB
TypeScript
150 lines
3.7 KiB
TypeScript
// Plugin tests concern plugins in development mode.
|
|
import { devTest, minimalFramework } from "../bake-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("/").equals("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("/").equals("value: 1");
|
|
await dev.fetch("/").equals("value: 1");
|
|
await dev.fetch("/").equals("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("/").equals([
|
|
{
|
|
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');
|
|
// },
|
|
// });
|