deno.land / x / solidstart@v1.0.0-rc.0 / config / index.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277import { serverFunctions } from "@vinxi/server-functions/plugin";import { server as serverFunctionServer, serverTransform } from "@vinxi/server-functions/server";import defu from "defu";import { existsSync } from "node:fs";import { join } from "node:path";import { fileURLToPath } from "node:url";import { createApp, resolve } from "vinxi";import { normalize } from "vinxi/lib/path";import { config } from "vinxi/plugins/config";import solid from "vite-plugin-solid";import { SolidStartClientFileRouter, SolidStartServerFileRouter } from "./fs-router.js";import { serverComponents } from "./server-components.js";
const DEFAULT_EXTENSIONS = ["js", "jsx", "ts", "tsx"];
function solidStartClientFsRouter(config) { return (router, app) => new SolidStartClientFileRouter( { dir: resolve.absolute(config.dir, router.root), extensions: config.extensions ?? DEFAULT_EXTENSIONS }, router, app );}
function solidStartServerFsRouter(config) { return (router, app) => new SolidStartServerFileRouter( { dir: resolve.absolute(config.dir, router.root), extensions: config.extensions ?? DEFAULT_EXTENSIONS }, router, app );}
export function defineConfig(baseConfig = {}) { let { vite = {}, ...start } = baseConfig; const extensions = [...DEFAULT_EXTENSIONS, ...(start.extensions || [])]; start = defu(start, { appRoot: "./src", routeDir: "./routes", ssr: true, devOverlay: true, experimental: { islands: false }, solid: {}, server: { routeRules: { "/_build/assets/**": { headers: { "cache-control": "public, immutable, max-age=31536000" } } }, experimental: { asyncContext: true } } }); const routeDir = join(start.appRoot, start.routeDir); let server = start.server; if (!start.ssr) { server = { ...server, prerender: { routes: ["/"] } }; } let entryExtension = ".tsx"; if (existsSync(join(process.cwd(), start.appRoot, "app.jsx"))) { entryExtension = ".jsx"; }
return createApp({ server: { compressPublicAssets: { brotli: process.versions.bun ? false : true }, ...server }, routers: [ { name: "public", type: "static", base: "/", dir: "./public" }, { name: "ssr", type: "http", link: { client: start.experimental.islands ? undefined : "client" }, handler: `${start.appRoot}/entry-server${entryExtension}`, middleware: start.middleware, routes: solidStartServerFsRouter({ dir: routeDir, extensions }), extensions, target: "server", plugins: async () => { const userConfig = typeof vite === "function" ? await vite({ router: "server" }) : { ...vite }; const plugins = userConfig.plugins || []; delete userConfig.plugins; return [ config("user", { ...userConfig, optimizeDeps: { ...(userConfig.optimizeDeps || {}), include: [ ...(userConfig.optimizeDeps?.include || []), "@solidjs/start > source-map-js", "@solidjs/start > error-stack-parser" ] } }), ...plugins, serverTransform({ runtime: normalize( fileURLToPath(new URL("../dist/runtime/server-fns-runtime.js", import.meta.url)) ) }), start.experimental.islands ? serverComponents.server() : null, solid({ ...start.solid, ssr: true, extensions: extensions.map(ext => `.${ext}`) }), config("app-server", { resolve: { alias: { "#start/app": join(process.cwd(), start.appRoot, `app${entryExtension}`), "~": join(process.cwd(), start.appRoot), ...(!start.ssr ? { "@solidjs/start/server": "@solidjs/start/server/spa" } : {}), ...userConfig.resolve?.alias } }, cacheDir: "node_modules/.vinxi/server", define: { "import.meta.env.START_ISLANDS": JSON.stringify(start.experimental.islands), "import.meta.env.SSR": JSON.stringify(true), "import.meta.env.START_SSR": JSON.stringify(start.ssr), "import.meta.env.START_DEV_OVERLAY": JSON.stringify(start.devOverlay), ...userConfig.define } }) ]; } }, { name: "client", type: "client", base: "/_build", handler: `${start.appRoot}/entry-client${entryExtension}`, ...(start.experimental.islands ? {} : { routes: solidStartClientFsRouter({ dir: routeDir, extensions }) }), extensions, target: "browser", plugins: async () => { const userConfig = typeof vite === "function" ? await vite({ router: "client" }) : { ...vite }; const plugins = userConfig.plugins || []; delete userConfig.plugins; return [ config("user", { ...userConfig, optimizeDeps: { ...(userConfig.optimizeDeps || {}), include: [ ...(userConfig.optimizeDeps?.include || []), "@solidjs/start > source-map-js", "@solidjs/start > error-stack-parser" ] } }), ...plugins, serverFunctions.client({ runtime: normalize( fileURLToPath(new URL("../dist/runtime/server-runtime.js", import.meta.url)) ) }), start.experimental.islands ? serverComponents.client() : null, solid({ ...start.solid, ssr: start.ssr, extensions: extensions.map(ext => `.${ext}`) }), config("app-client", { resolve: { alias: { "#start/app": join(process.cwd(), start.appRoot, `app${entryExtension}`), "~": join(process.cwd(), start.appRoot), ...(start.experimental.islands ? { "@solidjs/start/client": "@solidjs/start/client/islands" } : {}), ...(!start.ssr ? { "@solidjs/start/client": "@solidjs/start/client/spa" } : {}), ...userConfig.resolve?.alias } }, cacheDir: "node_modules/.vinxi/client", define: { "import.meta.env.START_ISLANDS": JSON.stringify(start.experimental.islands), "import.meta.env.SSR": JSON.stringify(false), "import.meta.env.START_SSR": JSON.stringify(start.ssr), "import.meta.env.START_DEV_OVERLAY": JSON.stringify(start.devOverlay), "import.meta.env.SERVER_BASE_URL": JSON.stringify(server?.baseURL ?? ""), ...userConfig.define } }) ]; } },
{ name: "server-fns", type: "http", base: "/_server", handler: normalize( fileURLToPath(new URL("../dist/runtime/server-handler.js", import.meta.url)) ), middleware: start.middleware, target: "server", routes: solidStartServerFsRouter({ dir: routeDir, extensions }), plugins: async () => { const userConfig = typeof vite === "function" ? await vite({ router: "server-function" }) : { ...vite }; const plugins = userConfig.plugins || []; delete userConfig.plugins; return [ config("user", { ...userConfig, optimizeDeps: { ...(userConfig.optimizeDeps || {}), include: [ ...(userConfig.optimizeDeps?.include || []), "@solidjs/start > source-map-js", "@solidjs/start > error-stack-parser" ] }, cacheDir: "node_modules/.vinxi/server-fns" }), ...plugins, serverFunctionServer({ runtime: normalize( fileURLToPath(new URL("../dist/runtime/server-fns-runtime.js", import.meta.url)) ) }), solid({ ...start.solid, ssr: true, extensions: extensions.map(ext => `.${ext}`) }), config("app-server", { resolve: { alias: { "#start/app": join(process.cwd(), start.appRoot, `app${entryExtension}`), "~": join(process.cwd(), start.appRoot), ...(!start.ssr ? { "@solidjs/start/server": "@solidjs/start/server/spa" } : {}), ...userConfig.resolve?.alias } }, define: { "import.meta.env.START_ISLANDS": JSON.stringify(start.experimental.islands), "import.meta.env.SSR": JSON.stringify(true), "import.meta.env.START_SSR": JSON.stringify(start.ssr), "import.meta.env.START_DEV_OVERLAY": JSON.stringify(start.devOverlay), ...userConfig.define } }) ]; } } ] });}
Version Info