UNPKG

nitropage

Version:

A free and open source, extensible visual page builder based on SolidStart.

130 lines (118 loc) 4.11 kB
import type { SolidStartInlineConfig } from "@solidjs/start/config"; import { defineConfig as defineConfig_ } from "@solidjs/start/config"; import { uniq } from "es-toolkit"; import lazyPlusPlugin from "solid-lazy-plus/vite"; import { mergeConfig } from "vite"; import { runtimePath } from "../lib/server/path"; import { initVinxiReload, manualChunks, resolveCwd } from "./lib"; import { solidRealmsPatchPlugin } from "./solidRealmsPatch"; type Result = ReturnType<typeof defineConfig_>; // Inspiration: https://github.com/mattrax/Mattrax/blob/04a5f5a18f0b9a6b9ef7455a55f63943b84e18ea/apps/web/app.config.ts#L61 export const defineConfig = (opts: SolidStartInlineConfig): Result => { const { vite, ...optsRest } = opts; const { plugins: serverPlugins, ...serverRest } = (optsRest.server ??= {}); const isBuild = process.env.NODE_ENV === "production"; const isMonoRepo = import.meta.url.endsWith( "packages/nitropage/dist/start/start.js", ); if (!isBuild) { initVinxiReload(); } return defineConfig_({ middleware: resolveCwd(runtimePath, "middleware.ts"), vite(params: any) { const { router } = params; const user = vite ? typeof vite === "function" ? vite(params) : vite : {}; const noOptimize = ["nitropage", "@npio/server"]; let internalLibraries = [ "@lufrai/quill", "isobject", "@paralleldrive/cuid2", ]; if (!isMonoRepo) { internalLibraries = internalLibraries.map((v) => `nitropage > ` + v); } const optimizeOnClient = ["clsx", ...internalLibraries]; const solidLibraries = [ "@corvu/resizable", "@kobalte/core", "@modular-forms/solid", "corvu", "fela-plugin-multiple-selectors", "fela-plugin-prefixer", "serfu", "solid-lazy-plus", ]; const serverLibraries = ["bcrypt", "fsevents", "minio", "sharp"]; const serverBundleLibraries = isBuild ? ["dotenv"] : []; const userOutput = user.build?.rollupOptions?.output; if (userOutput && !Array.isArray(userOutput) && userOutput.manualChunks) { console.warn( "Custom manualChunks is currently not supported and will be disabled!", ); delete userOutput.manualChunks; } const merged = mergeConfig( { build: { assetsInlineLimit: (path: any) => { if (path.match(/\.(j|t)sx?$/)) { return false; } return; }, rollupOptions: { output: { manualChunks, }, }, }, resolve: { alias: { "#client": resolveCwd( runtimePath, router === "client" ? "client.config.hot.ts" : "client.config.tsx", ), }, }, plugins: [solidRealmsPatchPlugin(), lazyPlusPlugin({ router })], optimizeDeps: { include: optimizeOnClient, exclude: uniq([ ...noOptimize, ...solidLibraries, ...serverLibraries, ]), }, ssr: { external: uniq([...serverLibraries, ...optimizeOnClient]), noExternal: uniq([...serverBundleLibraries, ...solidLibraries]), }, }, user, ); return merged; }, ...optsRest, server: { plugins: serverPlugins ?? [resolveCwd(runtimePath, "plugin.ts")], compressPublicAssets: false, esbuild: { options: { // Building projects outside of the monorepo fails without this // Nitro doesn't transpile typescript files in dependencies imported by plugins // https://github.com/nitrojs/nitro/blob/231c516e866a43c7e437e651c97ac14218ce1300/src/rollup/plugins/esbuild.ts#L42 exclude: [/node_modules(?!\/(.pnpm\/)?(nitropage|@npio))/], target: "esnext", }, }, ...serverRest, }, }); };