hack together preval plugin

This commit is contained in:
MapleLeaf
2022-01-02 20:10:13 -06:00
committed by Darius
parent 0c1f92a90a
commit ca26efe073
2 changed files with 46 additions and 1 deletions

View File

@@ -0,0 +1,40 @@
import { unlink, writeFile } from "node:fs/promises"
import type { Plugin } from "vite"
import { transformWithEsbuild } from "vite"
const prevalPattern = /\.preval\.(js|ts|jsx|tsx|mts|cts)$/
export function preval(): Plugin {
return {
name: "preval",
enforce: "pre",
async transform(code, filePath) {
if (!prevalPattern.test(filePath)) return
const tempFilePath = `${filePath}.preval.mjs`
try {
const transformResult = await transformWithEsbuild(code, filePath, {
target: "node16",
format: "esm",
})
await writeFile(tempFilePath, transformResult.code)
const runResult = await import(tempFilePath)
const serialized = Object.entries(runResult)
.map(([key, value]) => {
return key === "default"
? `export default ${JSON.stringify(value)}`
: `export const ${key} = ${JSON.stringify(value)}`
})
.join("\n")
return serialized + "\n"
} finally {
await unlink(tempFilePath).catch(console.warn)
}
},
}
}

View File

@@ -4,9 +4,13 @@ import react from "@vitejs/plugin-react"
import remarkFrontmatter from "remark-frontmatter"
import { defineConfig } from "vite"
import ssr from "vite-plugin-ssr/plugin"
import xdm from "xdm/rollup"
import xdm from "xdm/rollup.js"
import { preval } from "./plugins/preval"
export default defineConfig({
build: {
target: ["node16", "chrome89", "firefox89"],
},
plugins: [
ssr(),
react(),
@@ -14,6 +18,7 @@ export default defineConfig({
remarkPlugins: [remarkFrontmatter],
rehypePlugins: [rehypePrism],
}),
preval(),
],
resolve: {
alias: {