33 lines
931 B
TypeScript
33 lines
931 B
TypeScript
import { dirname } from "path"
|
|
import { promises as fs } from "fs"
|
|
import * as esbuild from "esbuild"
|
|
|
|
export const stringImport = (): esbuild.Plugin => ({
|
|
name: "stringImport",
|
|
setup(build) {
|
|
build.onResolve({ filter: /\?string$/ }, async ({ path, importer }) => {
|
|
const resolved = await build.resolve(path.replace(/\?string$/, ""), {
|
|
kind: "import-statement",
|
|
importer,
|
|
resolveDir: dirname(importer),
|
|
})
|
|
|
|
return {
|
|
namespace: stringImport.name,
|
|
path: resolved.path,
|
|
}
|
|
})
|
|
|
|
build.onLoad({ filter: /.*/, namespace: stringImport.name }, async ({ path }) => {
|
|
let code = await fs.readFile(path, "utf-8")
|
|
if (build.initialOptions.minify && path.endsWith(".css")) {
|
|
;({ code } = await esbuild.transform(code, { loader: "css", minify: true }))
|
|
}
|
|
return {
|
|
contents: code,
|
|
loader: "text",
|
|
}
|
|
})
|
|
},
|
|
})
|