import { promises as fs } from "fs"; import { extname, resolve } from "node:path"; import { embeddable_file_extensions } from "../embeddable-file-extensions.js"; import { PluginBuild } from "esbuild"; export const rewrite_asset_imports_plugin = (project_dir: string) => ({ name: "sealgen-rewrite-asset-imports", setup(build: PluginBuild) { build.onLoad({ filter: /\.tsx?$/ }, async (args) => { let contents = await fs.readFile(args.path, "utf8"); for (const ext of embeddable_file_extensions) { const regex_assets = new RegExp( `^import (\\w+|{[^}]+}) from "([^"]+.${ext})";`, "gm" ); contents = contents.replaceAll(regex_assets, (line) => { line = line.replace(`.${ext}"`, '.js"'); return line; }); } const regex_import = new RegExp( `^import ([^ ]+, )?(\\w+|{[^}]+}) from "([^"]+)";`, "gm" ); contents = contents.replaceAll(regex_import, (line) => { const replaced = line.replace( `"src/`, `"` + resolve(project_dir, "./dist") + "/" ); return replaced; }); return { contents, loader: extname(args.path) === ".tsx" ? "tsx" : "ts", }; }); }, });