31 lines
964 B
TypeScript
31 lines
964 B
TypeScript
import { plugin, type BunPlugin } from "bun";
|
|
|
|
const imagePlugin: BunPlugin = {
|
|
name: "Image loader",
|
|
async setup(build) {
|
|
build.onLoad({ filter: /\.(png|jpe?g)$/ }, async (args) => {
|
|
const arrayBuffer = await Bun.file(args.path).arrayBuffer();
|
|
const buffer = Buffer.from(arrayBuffer);
|
|
const src = `data:;base64,${buffer.toString('base64')}`;
|
|
return {
|
|
contents: `
|
|
const img = new Image();
|
|
const promise = new Promise((resolve, reject) => {
|
|
img.onload = resolve;
|
|
img.onerror = reject;
|
|
});
|
|
img.src = (${JSON.stringify(src)});
|
|
|
|
await promise;
|
|
|
|
export default img;
|
|
`,
|
|
loader: 'js',
|
|
};
|
|
});
|
|
}
|
|
};
|
|
|
|
plugin(imagePlugin);
|
|
|
|
export default imagePlugin; |