mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-19 16:13:19 +00:00
relevant files to review: \- memory-graph.tsx \- spaces-dropdown.tsx \- spaces-dropdown.css.ts
93 lines
2.6 KiB
TypeScript
93 lines
2.6 KiB
TypeScript
import { defineConfig, type Plugin } from "vite"
|
|
import react from "@vitejs/plugin-react"
|
|
import { resolve } from "path"
|
|
import { readFileSync } from "fs"
|
|
import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin"
|
|
|
|
/**
|
|
* Custom plugin to embed CSS content into the JS bundle for runtime injection.
|
|
* This allows the package to work with any bundler (Vite, webpack, Next.js, etc.)
|
|
*/
|
|
function injectCssPlugin(): Plugin {
|
|
let cssContent = ""
|
|
|
|
return {
|
|
name: "inject-css-content",
|
|
enforce: "post",
|
|
generateBundle(_, bundle) {
|
|
// Find the generated CSS file
|
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
if (fileName.endsWith(".css") && chunk.type === "asset") {
|
|
cssContent = chunk.source as string
|
|
break
|
|
}
|
|
}
|
|
|
|
// Replace placeholder in JS files with actual CSS content
|
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
if (
|
|
(fileName.endsWith(".js") || fileName.endsWith(".cjs")) &&
|
|
chunk.type === "chunk"
|
|
) {
|
|
// Escape the CSS for embedding in JS string
|
|
const escapedCss = JSON.stringify(cssContent)
|
|
chunk.code = chunk.code.replace(/__MEMORY_GRAPH_CSS__/g, escapedCss)
|
|
}
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
plugins: [react(), vanillaExtractPlugin(), injectCssPlugin()],
|
|
build: {
|
|
lib: {
|
|
entry: resolve(__dirname, "src/index.tsx"),
|
|
name: "MemoryGraph",
|
|
formats: ["es", "cjs"],
|
|
fileName: (format) => {
|
|
if (format === "es") return "memory-graph.js"
|
|
if (format === "cjs") return "memory-graph.cjs"
|
|
return "memory-graph.js"
|
|
},
|
|
},
|
|
rollupOptions: {
|
|
// Externalize only peer dependencies (React)
|
|
external: ["react", "react-dom", "react/jsx-runtime"],
|
|
output: {
|
|
// Provide global variables for UMD build (if needed later)
|
|
globals: {
|
|
react: "React",
|
|
"react-dom": "ReactDOM",
|
|
"react/jsx-runtime": "react/jsx-runtime",
|
|
},
|
|
// Preserve CSS as separate file (for manual import fallback)
|
|
assetFileNames: (assetInfo) => {
|
|
// Vanilla-extract generates index.css, rename to memory-graph.css
|
|
if (
|
|
assetInfo.name === "index.css" ||
|
|
assetInfo.name === "style.css"
|
|
) {
|
|
return "memory-graph.css"
|
|
}
|
|
return assetInfo.name || "asset"
|
|
},
|
|
// Don't preserve modules - bundle everything except externals
|
|
preserveModules: false,
|
|
},
|
|
},
|
|
// Ensure CSS is extracted
|
|
cssCodeSplit: false,
|
|
// Generate sourcemaps for debugging
|
|
sourcemap: true,
|
|
// Optimize deps
|
|
minify: "esbuild",
|
|
target: "esnext",
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
"@": resolve(__dirname, "./src"),
|
|
},
|
|
},
|
|
})
|