From ca26efe073370075e9e06b03637d0f93874ba02e Mon Sep 17 00:00:00 2001 From: MapleLeaf <19603573+itsMapleLeaf@users.noreply.github.com> Date: Sun, 2 Jan 2022 20:10:13 -0600 Subject: [PATCH] hack together preval plugin --- packages/docs-new/plugins/preval.ts | 40 +++++++++++++++++++++++++++++ packages/docs-new/vite.config.ts | 7 ++++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packages/docs-new/plugins/preval.ts diff --git a/packages/docs-new/plugins/preval.ts b/packages/docs-new/plugins/preval.ts new file mode 100644 index 0000000..36249fc --- /dev/null +++ b/packages/docs-new/plugins/preval.ts @@ -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) + } + }, + } +} diff --git a/packages/docs-new/vite.config.ts b/packages/docs-new/vite.config.ts index 31fe285..24f8710 100644 --- a/packages/docs-new/vite.config.ts +++ b/packages/docs-new/vite.config.ts @@ -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: {