treesap 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/vite.d.ts +1 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +1 -1
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,7 +67,9 @@ Render your browser assets from server layouts with `getViteBrowserAssets()`:
|
|
|
67
67
|
import { getViteBrowserAssets } from "treesap/vite";
|
|
68
68
|
|
|
69
69
|
export default function BaseLayout(props: { children: string | object }) {
|
|
70
|
-
const browserAssets = getViteBrowserAssets(
|
|
70
|
+
const browserAssets = getViteBrowserAssets({
|
|
71
|
+
devStyles: ["/src/styles/main.css"],
|
|
72
|
+
});
|
|
71
73
|
|
|
72
74
|
return (
|
|
73
75
|
<html>
|
|
@@ -85,6 +87,8 @@ export default function BaseLayout(props: { children: string | object }) {
|
|
|
85
87
|
}
|
|
86
88
|
```
|
|
87
89
|
|
|
90
|
+
Use `devStyles` when you want an eager stylesheet `<link>` during development to avoid a flash of unstyled content before the browser entry module loads.
|
|
91
|
+
|
|
88
92
|
## Islands
|
|
89
93
|
|
|
90
94
|
Register island client entries explicitly in `defineTreesapConfig()`:
|
package/dist/vite.d.ts
CHANGED
package/dist/vite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,MAAM,CAAC;AASd,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,UAAU,4BAA4B;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,4BAA4B,EAAE,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAiED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,WAS7C;AA+RD,wBAAgB,OAAO,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAqGjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,qCA6BtE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;;;EAoDA;AAMD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,MAAM,CAAC;AASd,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,UAAU,4BAA4B;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,4BAA4B,EAAE,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAiED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,WAS7C;AA+RD,wBAAgB,OAAO,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAqGjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,qCA6BtE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;;;EAoDA;AAMD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;;;EAgBA;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,UAWA"}
|
package/dist/vite.js
CHANGED
|
@@ -438,7 +438,7 @@ export function getViteBrowserAssets(options) {
|
|
|
438
438
|
manifestPath: options?.manifestPath,
|
|
439
439
|
base: options?.base,
|
|
440
440
|
devScripts: ["/@vite/client"],
|
|
441
|
-
devStyles: [],
|
|
441
|
+
devStyles: options?.devStyles ?? [],
|
|
442
442
|
});
|
|
443
443
|
}
|
|
444
444
|
export function getViteModuleAsset(options) {
|
package/dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n build,\n defineConfig,\n mergeConfig,\n type Plugin,\n type PluginOption,\n type UserConfig,\n type ViteDevServer,\n} from \"vite\";\nimport { sendNodeResponse, toWebRequest } from \"./node.ts\";\n\ninterface ManifestEntry {\n file: string;\n src?: string;\n css?: string[];\n}\n\nexport interface TreesapIslandsOptions {\n entries: Record<string, string>;\n}\n\ninterface NormalizedTreesapIslandEntry {\n name: string;\n entry: string;\n absolutePath: string;\n}\n\nexport interface TreesapVitePluginOptions {\n appEntry: string;\n appFactoryExport?: string;\n appEntryPath?: string;\n browserEntry?: string;\n islands?: NormalizedTreesapIslandEntry[];\n islandRuntimeEntry?: string;\n spaBase?: string;\n spaIndexHtml?: string;\n spaEntryModule?: string;\n}\n\nexport interface DefineTreesapConfigOptions {\n appEntry: string;\n appFactoryExport?: string;\n serverEntry?: string;\n browserEntry?: string;\n islands?: TreesapIslandsOptions;\n plugins?: PluginOption[];\n vite?: UserConfig;\n}\n\nfunction resolveRuntimeMode() {\n const viteEnv = (import.meta as ImportMeta & {\n env?: { PROD?: boolean };\n }).env;\n\n if (viteEnv?.PROD === true || process.env.NODE_ENV === \"production\") {\n return \"production\";\n }\n\n return \"development\";\n}\n\nfunction normalizePublicPath(href: string, base: string) {\n if (href.startsWith(\"/\")) {\n return href;\n }\n\n return `${base.replace(/\\/$/, \"\")}/${href}`;\n}\n\nfunction resolveDefaultManifestPath() {\n const candidates = [\n path.resolve(process.cwd(), \"dist/client/.vite/manifest.json\"),\n path.resolve(process.cwd(), \"static/.vite/manifest.json\"),\n path.resolve(process.cwd(), \"static/app/.vite/manifest.json\"),\n ];\n\n return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];\n}\n\nfunction normalizeManifestLookupPath(entry: string) {\n const normalized = path.posix.normalize(entry.replaceAll(\"\\\\\", \"/\"));\n return normalized\n .replace(/^\\/+/, \"\")\n .replace(/^(\\.\\.\\/)+/, \"\")\n .replace(/^\\.\\//, \"\");\n}\n\nfunction stripQuery(id: string) {\n return id.replace(/\\?.*$/, \"\");\n}\n\nfunction createDevEntryScriptPath(entry: string) {\n if (path.isAbsolute(entry)) {\n return `/@fs/${entry.replaceAll(\"\\\\\", \"/\").replace(/^\\/+/, \"\")}`;\n }\n\n return `/${normalizeManifestLookupPath(entry)}`;\n}\n\nfunction normalizeSpaBase(base: string) {\n if (!base.startsWith(\"/\")) {\n return `/${base}`;\n }\n\n return base.endsWith(\"/\") ? base.slice(0, -1) : base;\n}\n\nfunction isFileRequest(pathname: string) {\n const lastSegment = pathname.split(\"/\").at(-1) ?? \"\";\n return lastSegment.includes(\".\");\n}\n\nexport function isViteRequest(pathname: string) {\n return (\n pathname === \"/@vite/client\" ||\n pathname.startsWith(\"/@fs/\") ||\n pathname.startsWith(\"/@id/\") ||\n pathname.startsWith(\"/@vite/\") ||\n pathname.startsWith(\"/node_modules/\") ||\n pathname.startsWith(\"/src/\")\n );\n}\n\nfunction maybeRewriteSpaAssetRequest(url: string, spaBase: string) {\n const currentUrl = new URL(url, \"http://treesap.local\");\n if (!currentUrl.pathname.startsWith(`${spaBase}/`)) {\n return null;\n }\n\n const strippedPathname = currentUrl.pathname.slice(spaBase.length) || \"/\";\n\n if (!isViteRequest(strippedPathname) && !isFileRequest(strippedPathname)) {\n return null;\n }\n\n currentUrl.pathname = strippedPathname;\n return `${currentUrl.pathname}${currentUrl.search}`;\n}\n\nfunction isSpaShellRequest(pathname: string, spaBase: string) {\n if (pathname === spaBase || pathname === `${spaBase}/`) {\n return true;\n }\n\n if (!pathname.startsWith(`${spaBase}/`)) {\n return false;\n }\n\n const suffix = pathname.slice(spaBase.length + 1);\n return suffix.length > 0 && !suffix.split(\"/\").at(-1)?.includes(\".\");\n}\n\nasync function renderSpaShell(\n server: ViteDevServer,\n pathname: string,\n options: Required<Pick<TreesapVitePluginOptions, \"spaIndexHtml\" | \"spaEntryModule\">>\n) {\n const templatePath = path.resolve(server.config.root, options.spaIndexHtml);\n const template = (await readFile(templatePath, \"utf-8\")).replace(\n \"./main.tsx\",\n options.spaEntryModule\n );\n return server.transformIndexHtml(pathname, template);\n}\n\nasync function loadTreesapApp(server: ViteDevServer, entry: string, exportName: string) {\n const module = await server.ssrLoadModule(entry);\n const createApp = module[exportName];\n\n if (typeof createApp !== \"function\") {\n throw new Error(\n `Treesap could not find exported app factory \"${exportName}\" in ${entry}.`\n );\n }\n\n const app = await createApp();\n if (!app || typeof app.fetch !== \"function\") {\n throw new Error(\n `Treesap app factory \"${exportName}\" in ${entry} did not return an object with fetch().`\n );\n }\n\n return app as { fetch(request: Request): Response | Promise<Response> };\n}\n\nfunction resolveConfigRoot(viteConfig?: UserConfig) {\n return path.resolve(viteConfig?.root ?? process.cwd());\n}\n\nfunction resolveBrowserEntry(options: DefineTreesapConfigOptions) {\n const root = resolveConfigRoot(options.vite);\n const browserEntry = options.browserEntry ?? \"src/treesap-client.ts\";\n const absolutePath = path.resolve(root, browserEntry);\n\n if (!existsSync(absolutePath)) {\n if (options.browserEntry) {\n throw new Error(\n `Treesap could not find browserEntry \"${options.browserEntry}\". Check the path or update defineTreesapConfig({ browserEntry }).`\n );\n }\n\n throw new Error(\n 'Treesap could not find the default browser entry \"src/treesap-client.ts\". Set browserEntry in defineTreesapConfig(...) if your client entry lives elsewhere.'\n );\n }\n\n return {\n entry: normalizeManifestLookupPath(browserEntry),\n absolutePath,\n };\n}\n\nfunction resolveAppEntry(options: DefineTreesapConfigOptions) {\n const root = resolveConfigRoot(options.vite);\n\n return path.resolve(root, options.appEntry);\n}\n\nfunction resolveIslandEntries(\n options: DefineTreesapConfigOptions\n): NormalizedTreesapIslandEntry[] {\n const root = resolveConfigRoot(options.vite);\n const rawEntries = options.islands?.entries ?? {};\n\n return Object.entries(rawEntries).map(([name, entry]) => {\n const normalizedName = name.trim();\n const normalizedEntry = entry.trim();\n\n if (!normalizedName) {\n throw new Error(\"Treesap islands entries must have a non-empty name.\");\n }\n\n if (!normalizedEntry) {\n throw new Error(\n `Treesap island \"${normalizedName}\" must point to a non-empty entry path.`\n );\n }\n\n return {\n name: normalizedName,\n entry: normalizeManifestLookupPath(normalizedEntry),\n absolutePath: path.resolve(root, normalizedEntry),\n };\n });\n}\n\nfunction resolveIslandRuntimeEntry() {\n const runtimeDir = path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n path.resolve(runtimeDir, \"island-runtime.js\"),\n path.resolve(runtimeDir, \"island-runtime.ts\"),\n ];\n\n const resolved = candidates.find((candidate) => existsSync(candidate));\n if (!resolved) {\n throw new Error(\"Treesap could not resolve its island runtime module.\");\n }\n\n return resolved;\n}\n\nfunction createClientBuildInputs(options: DefineTreesapConfigOptions) {\n const browserEntry = resolveBrowserEntry(options);\n const islandEntries = resolveIslandEntries(options);\n\n const input: Record<string, string> = {\n browser: browserEntry.absolutePath,\n };\n\n islandEntries.forEach((island) => {\n input[`island-${island.name}`] = island.absolutePath;\n });\n\n if (islandEntries.length > 0) {\n input[\"treesap-island-runtime\"] = resolveIslandRuntimeEntry();\n }\n\n return input;\n}\n\nfunction createTreesapDefineConfig(options: DefineTreesapConfigOptions) {\n const islandEntries = Object.fromEntries(\n resolveIslandEntries(options).map((entry) => [entry.name, entry.entry])\n );\n\n return {\n \"globalThis.__TREESAP_ISLANDS__\": JSON.stringify(islandEntries),\n };\n}\n\nfunction createTreesapSharedConfig(options: DefineTreesapConfigOptions): UserConfig {\n const root = resolveConfigRoot(options.vite);\n\n return mergeConfig(\n {\n appType: \"custom\",\n root,\n define: createTreesapDefineConfig(options),\n ssr: {\n noExternal: [\"hono\"],\n },\n },\n {\n ...(options.vite ?? {}),\n plugins: undefined,\n }\n );\n}\n\nfunction createTreesapDevConfig(options: DefineTreesapConfigOptions): UserConfig {\n const browserEntry = resolveBrowserEntry(options);\n\n return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: browserEntry.entry,\n islands: resolveIslandEntries(options),\n islandRuntimeEntry: resolveIslandRuntimeEntry(),\n }),\n ...(options.plugins ?? []),\n ],\n });\n}\n\nfunction createTreesapClientBuildConfig(\n options: DefineTreesapConfigOptions\n): UserConfig {\n const root = resolveConfigRoot(options.vite);\n const browserEntry = resolveBrowserEntry(options);\n\n return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n publicDir: path.resolve(root, \"public\"),\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: browserEntry.entry,\n islands: resolveIslandEntries(options),\n islandRuntimeEntry: resolveIslandRuntimeEntry(),\n }),\n ...(options.plugins ?? []),\n ],\n build: {\n manifest: true,\n outDir: \"dist/client\",\n emptyOutDir: true,\n rolldownOptions: {\n input: createClientBuildInputs(options),\n },\n },\n });\n}\n\nfunction createTreesapServerBuildConfig(\n options: DefineTreesapConfigOptions\n): UserConfig {\n const browserEntry = resolveBrowserEntry(options);\n\n return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n publicDir: false,\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: browserEntry.entry,\n islands: resolveIslandEntries(options),\n islandRuntimeEntry: resolveIslandRuntimeEntry(),\n }),\n ...(options.plugins ?? []),\n ],\n build: {\n ssr: options.serverEntry ?? \"src/main.tsx\",\n target: \"node22\",\n outDir: \"dist/server\",\n sourcemap: true,\n emptyOutDir: false,\n rolldownOptions: {\n external: [\n \"fs\",\n \"path\",\n \"url\",\n \"module\",\n \"crypto\",\n \"stream\",\n /^node:/,\n ],\n output: {\n format: \"esm\",\n },\n },\n },\n oxc: {\n jsx: {\n runtime: \"automatic\",\n importSource: \"hono/jsx\",\n },\n },\n });\n}\n\nexport function treesap(options: TreesapVitePluginOptions): Plugin {\n const spaBase = normalizeSpaBase(options.spaBase ?? \"/app\");\n const appFactoryExport = options.appFactoryExport ?? \"createServerApp\";\n const spaIndexHtml = options.spaIndexHtml ?? \"src/app/index.html\";\n const spaEntryModule = options.spaEntryModule ?? \"/src/app/main.tsx\";\n const appEntryPath = options.appEntryPath ? path.resolve(options.appEntryPath) : null;\n const islandEntries = options.islands ?? [];\n const islandRuntimeEntry = options.islandRuntimeEntry\n ? path.resolve(options.islandRuntimeEntry)\n : null;\n\n return {\n name: \"treesap\",\n transform(code, id) {\n const hasBrowserEntry = Boolean(options.browserEntry);\n const hasIslands = islandEntries.length > 0;\n\n if (!hasBrowserEntry && !hasIslands) {\n return null;\n }\n\n const moduleId = path.resolve(stripQuery(id));\n const injectedGlobals = [\n hasIslands\n ? `globalThis.__TREESAP_ISLANDS__ = ${JSON.stringify(\n Object.fromEntries(islandEntries.map((entry) => [entry.name, entry.entry]))\n )};`\n : null,\n hasBrowserEntry\n ? `globalThis.__TREESAP_BROWSER_ENTRY__ = ${JSON.stringify(\n normalizeManifestLookupPath(options.browserEntry)\n )};`\n : null,\n hasIslands && islandRuntimeEntry\n ? `globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__ = ${JSON.stringify(\n islandRuntimeEntry\n )};`\n : null,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n if (appEntryPath && moduleId === appEntryPath) {\n const alreadyInjected =\n (!hasIslands || code.includes(\"globalThis.__TREESAP_ISLANDS__\")) &&\n (!hasBrowserEntry || code.includes(\"globalThis.__TREESAP_BROWSER_ENTRY__\")) &&\n (!hasIslands ||\n code.includes(\"globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__\"));\n\n if (alreadyInjected) {\n return null;\n }\n\n return {\n code: `${injectedGlobals}\\n${code}`,\n map: null,\n };\n }\n\n return null;\n },\n configureServer(server) {\n server.middlewares.use(async (req, res, next) => {\n const rewrittenUrl = maybeRewriteSpaAssetRequest(req.url ?? \"/\", spaBase);\n if (rewrittenUrl) {\n req.url = rewrittenUrl;\n }\n\n const pathname = new URL(req.url ?? \"/\", \"http://treesap.local\").pathname;\n\n try {\n if (isViteRequest(pathname)) {\n next();\n return;\n }\n\n if (isSpaShellRequest(pathname, spaBase)) {\n const html = await renderSpaShell(server, pathname, {\n spaIndexHtml,\n spaEntryModule,\n });\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"text/html; charset=UTF-8\");\n res.end(html);\n return;\n }\n\n const app = await loadTreesapApp(server, options.appEntry, appFactoryExport);\n const request = await toWebRequest(req);\n const response = await app.fetch(request);\n await sendNodeResponse(res, response);\n } catch (error) {\n server.ssrFixStacktrace(error as Error);\n console.error(error);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"text/plain; charset=UTF-8\");\n res.end(\"Internal Server Error\");\n }\n });\n },\n };\n}\n\nexport function defineTreesapConfig(options: DefineTreesapConfigOptions) {\n return defineConfig(({ command }) => {\n if (command === \"serve\") {\n return createTreesapDevConfig(options);\n }\n\n return {\n ...createTreesapSharedConfig(options),\n base: \"/\",\n publicDir: false,\n builder: {\n async buildApp(builder) {\n await build({\n ...createTreesapClientBuildConfig(options),\n configFile: false,\n });\n\n await build({\n ...createTreesapServerBuildConfig(options),\n configFile: false,\n });\n\n Object.values(builder.environments).forEach((environment) => {\n environment.isBuilt = true;\n });\n },\n },\n };\n });\n}\n\nexport function getViteEntryAssets(options: {\n entry: string;\n mode?: string;\n devScripts?: string[];\n devStyles?: string[];\n manifestPath?: string;\n base?: string;\n}) {\n const mode = options.mode ?? resolveRuntimeMode();\n if (mode !== \"production\") {\n const scripts = Array.from(\n new Set([\n ...(options.devScripts ?? []),\n createDevEntryScriptPath(options.entry),\n ])\n );\n\n return {\n scripts,\n styles: options.devStyles ?? [],\n };\n }\n\n const manifestPath = options.manifestPath ?? resolveDefaultManifestPath();\n const base = options.base ?? \"/\";\n\n if (!existsSync(manifestPath)) {\n return {\n scripts: [] as string[],\n styles: [] as string[],\n };\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf-8\")) as Record<\n string,\n ManifestEntry\n >;\n const lookupEntry = normalizeManifestLookupPath(options.entry);\n\n const entry =\n manifest[options.entry] ??\n Object.entries(manifest).find(([key, value]) => {\n const normalizedKey = normalizeManifestLookupPath(key);\n const normalizedSrc = value.src\n ? normalizeManifestLookupPath(value.src)\n : undefined;\n\n return (\n normalizedKey === lookupEntry ||\n normalizedKey.endsWith(lookupEntry) ||\n normalizedSrc === lookupEntry ||\n normalizedSrc?.endsWith(lookupEntry) === true\n );\n })?.[1];\n\n return {\n scripts: entry?.file ? [normalizePublicPath(entry.file, base)] : [],\n styles: (entry?.css ?? []).map((href) => normalizePublicPath(href, base)),\n };\n}\n\nfunction getRegisteredBrowserEntry() {\n return globalThis.__TREESAP_BROWSER_ENTRY__ ?? null;\n}\n\nexport function getViteBrowserAssets(options?: {\n mode?: string;\n manifestPath?: string;\n base?: string;\n}) {\n const entry = getRegisteredBrowserEntry();\n if (!entry) {\n throw new Error(\n \"Treesap browser entry is not registered. Set browserEntry in defineTreesapConfig(...) or restart Vite.\"\n );\n }\n\n return getViteEntryAssets({\n entry,\n mode: options?.mode,\n manifestPath: options?.manifestPath,\n base: options?.base,\n devScripts: [\"/@vite/client\"],\n devStyles: [],\n });\n}\n\nexport function getViteModuleAsset(options: {\n entry: string;\n mode?: string;\n manifestPath?: string;\n base?: string;\n}) {\n return (\n getViteEntryAssets({\n entry: options.entry,\n mode: options.mode,\n manifestPath: options.manifestPath,\n base: options.base,\n devScripts: [createDevEntryScriptPath(options.entry)],\n devStyles: [],\n }).scripts[0] ?? null\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n build,\n defineConfig,\n mergeConfig,\n type Plugin,\n type PluginOption,\n type UserConfig,\n type ViteDevServer,\n} from \"vite\";\nimport { sendNodeResponse, toWebRequest } from \"./node.ts\";\n\ninterface ManifestEntry {\n file: string;\n src?: string;\n css?: string[];\n}\n\nexport interface TreesapIslandsOptions {\n entries: Record<string, string>;\n}\n\ninterface NormalizedTreesapIslandEntry {\n name: string;\n entry: string;\n absolutePath: string;\n}\n\nexport interface TreesapVitePluginOptions {\n appEntry: string;\n appFactoryExport?: string;\n appEntryPath?: string;\n browserEntry?: string;\n islands?: NormalizedTreesapIslandEntry[];\n islandRuntimeEntry?: string;\n spaBase?: string;\n spaIndexHtml?: string;\n spaEntryModule?: string;\n}\n\nexport interface DefineTreesapConfigOptions {\n appEntry: string;\n appFactoryExport?: string;\n serverEntry?: string;\n browserEntry?: string;\n islands?: TreesapIslandsOptions;\n plugins?: PluginOption[];\n vite?: UserConfig;\n}\n\nfunction resolveRuntimeMode() {\n const viteEnv = (import.meta as ImportMeta & {\n env?: { PROD?: boolean };\n }).env;\n\n if (viteEnv?.PROD === true || process.env.NODE_ENV === \"production\") {\n return \"production\";\n }\n\n return \"development\";\n}\n\nfunction normalizePublicPath(href: string, base: string) {\n if (href.startsWith(\"/\")) {\n return href;\n }\n\n return `${base.replace(/\\/$/, \"\")}/${href}`;\n}\n\nfunction resolveDefaultManifestPath() {\n const candidates = [\n path.resolve(process.cwd(), \"dist/client/.vite/manifest.json\"),\n path.resolve(process.cwd(), \"static/.vite/manifest.json\"),\n path.resolve(process.cwd(), \"static/app/.vite/manifest.json\"),\n ];\n\n return candidates.find((candidate) => existsSync(candidate)) ?? candidates[0];\n}\n\nfunction normalizeManifestLookupPath(entry: string) {\n const normalized = path.posix.normalize(entry.replaceAll(\"\\\\\", \"/\"));\n return normalized\n .replace(/^\\/+/, \"\")\n .replace(/^(\\.\\.\\/)+/, \"\")\n .replace(/^\\.\\//, \"\");\n}\n\nfunction stripQuery(id: string) {\n return id.replace(/\\?.*$/, \"\");\n}\n\nfunction createDevEntryScriptPath(entry: string) {\n if (path.isAbsolute(entry)) {\n return `/@fs/${entry.replaceAll(\"\\\\\", \"/\").replace(/^\\/+/, \"\")}`;\n }\n\n return `/${normalizeManifestLookupPath(entry)}`;\n}\n\nfunction normalizeSpaBase(base: string) {\n if (!base.startsWith(\"/\")) {\n return `/${base}`;\n }\n\n return base.endsWith(\"/\") ? base.slice(0, -1) : base;\n}\n\nfunction isFileRequest(pathname: string) {\n const lastSegment = pathname.split(\"/\").at(-1) ?? \"\";\n return lastSegment.includes(\".\");\n}\n\nexport function isViteRequest(pathname: string) {\n return (\n pathname === \"/@vite/client\" ||\n pathname.startsWith(\"/@fs/\") ||\n pathname.startsWith(\"/@id/\") ||\n pathname.startsWith(\"/@vite/\") ||\n pathname.startsWith(\"/node_modules/\") ||\n pathname.startsWith(\"/src/\")\n );\n}\n\nfunction maybeRewriteSpaAssetRequest(url: string, spaBase: string) {\n const currentUrl = new URL(url, \"http://treesap.local\");\n if (!currentUrl.pathname.startsWith(`${spaBase}/`)) {\n return null;\n }\n\n const strippedPathname = currentUrl.pathname.slice(spaBase.length) || \"/\";\n\n if (!isViteRequest(strippedPathname) && !isFileRequest(strippedPathname)) {\n return null;\n }\n\n currentUrl.pathname = strippedPathname;\n return `${currentUrl.pathname}${currentUrl.search}`;\n}\n\nfunction isSpaShellRequest(pathname: string, spaBase: string) {\n if (pathname === spaBase || pathname === `${spaBase}/`) {\n return true;\n }\n\n if (!pathname.startsWith(`${spaBase}/`)) {\n return false;\n }\n\n const suffix = pathname.slice(spaBase.length + 1);\n return suffix.length > 0 && !suffix.split(\"/\").at(-1)?.includes(\".\");\n}\n\nasync function renderSpaShell(\n server: ViteDevServer,\n pathname: string,\n options: Required<Pick<TreesapVitePluginOptions, \"spaIndexHtml\" | \"spaEntryModule\">>\n) {\n const templatePath = path.resolve(server.config.root, options.spaIndexHtml);\n const template = (await readFile(templatePath, \"utf-8\")).replace(\n \"./main.tsx\",\n options.spaEntryModule\n );\n return server.transformIndexHtml(pathname, template);\n}\n\nasync function loadTreesapApp(server: ViteDevServer, entry: string, exportName: string) {\n const module = await server.ssrLoadModule(entry);\n const createApp = module[exportName];\n\n if (typeof createApp !== \"function\") {\n throw new Error(\n `Treesap could not find exported app factory \"${exportName}\" in ${entry}.`\n );\n }\n\n const app = await createApp();\n if (!app || typeof app.fetch !== \"function\") {\n throw new Error(\n `Treesap app factory \"${exportName}\" in ${entry} did not return an object with fetch().`\n );\n }\n\n return app as { fetch(request: Request): Response | Promise<Response> };\n}\n\nfunction resolveConfigRoot(viteConfig?: UserConfig) {\n return path.resolve(viteConfig?.root ?? process.cwd());\n}\n\nfunction resolveBrowserEntry(options: DefineTreesapConfigOptions) {\n const root = resolveConfigRoot(options.vite);\n const browserEntry = options.browserEntry ?? \"src/treesap-client.ts\";\n const absolutePath = path.resolve(root, browserEntry);\n\n if (!existsSync(absolutePath)) {\n if (options.browserEntry) {\n throw new Error(\n `Treesap could not find browserEntry \"${options.browserEntry}\". Check the path or update defineTreesapConfig({ browserEntry }).`\n );\n }\n\n throw new Error(\n 'Treesap could not find the default browser entry \"src/treesap-client.ts\". Set browserEntry in defineTreesapConfig(...) if your client entry lives elsewhere.'\n );\n }\n\n return {\n entry: normalizeManifestLookupPath(browserEntry),\n absolutePath,\n };\n}\n\nfunction resolveAppEntry(options: DefineTreesapConfigOptions) {\n const root = resolveConfigRoot(options.vite);\n\n return path.resolve(root, options.appEntry);\n}\n\nfunction resolveIslandEntries(\n options: DefineTreesapConfigOptions\n): NormalizedTreesapIslandEntry[] {\n const root = resolveConfigRoot(options.vite);\n const rawEntries = options.islands?.entries ?? {};\n\n return Object.entries(rawEntries).map(([name, entry]) => {\n const normalizedName = name.trim();\n const normalizedEntry = entry.trim();\n\n if (!normalizedName) {\n throw new Error(\"Treesap islands entries must have a non-empty name.\");\n }\n\n if (!normalizedEntry) {\n throw new Error(\n `Treesap island \"${normalizedName}\" must point to a non-empty entry path.`\n );\n }\n\n return {\n name: normalizedName,\n entry: normalizeManifestLookupPath(normalizedEntry),\n absolutePath: path.resolve(root, normalizedEntry),\n };\n });\n}\n\nfunction resolveIslandRuntimeEntry() {\n const runtimeDir = path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n path.resolve(runtimeDir, \"island-runtime.js\"),\n path.resolve(runtimeDir, \"island-runtime.ts\"),\n ];\n\n const resolved = candidates.find((candidate) => existsSync(candidate));\n if (!resolved) {\n throw new Error(\"Treesap could not resolve its island runtime module.\");\n }\n\n return resolved;\n}\n\nfunction createClientBuildInputs(options: DefineTreesapConfigOptions) {\n const browserEntry = resolveBrowserEntry(options);\n const islandEntries = resolveIslandEntries(options);\n\n const input: Record<string, string> = {\n browser: browserEntry.absolutePath,\n };\n\n islandEntries.forEach((island) => {\n input[`island-${island.name}`] = island.absolutePath;\n });\n\n if (islandEntries.length > 0) {\n input[\"treesap-island-runtime\"] = resolveIslandRuntimeEntry();\n }\n\n return input;\n}\n\nfunction createTreesapDefineConfig(options: DefineTreesapConfigOptions) {\n const islandEntries = Object.fromEntries(\n resolveIslandEntries(options).map((entry) => [entry.name, entry.entry])\n );\n\n return {\n \"globalThis.__TREESAP_ISLANDS__\": JSON.stringify(islandEntries),\n };\n}\n\nfunction createTreesapSharedConfig(options: DefineTreesapConfigOptions): UserConfig {\n const root = resolveConfigRoot(options.vite);\n\n return mergeConfig(\n {\n appType: \"custom\",\n root,\n define: createTreesapDefineConfig(options),\n ssr: {\n noExternal: [\"hono\"],\n },\n },\n {\n ...(options.vite ?? {}),\n plugins: undefined,\n }\n );\n}\n\nfunction createTreesapDevConfig(options: DefineTreesapConfigOptions): UserConfig {\n const browserEntry = resolveBrowserEntry(options);\n\n return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: browserEntry.entry,\n islands: resolveIslandEntries(options),\n islandRuntimeEntry: resolveIslandRuntimeEntry(),\n }),\n ...(options.plugins ?? []),\n ],\n });\n}\n\nfunction createTreesapClientBuildConfig(\n options: DefineTreesapConfigOptions\n): UserConfig {\n const root = resolveConfigRoot(options.vite);\n const browserEntry = resolveBrowserEntry(options);\n\n return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n publicDir: path.resolve(root, \"public\"),\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: browserEntry.entry,\n islands: resolveIslandEntries(options),\n islandRuntimeEntry: resolveIslandRuntimeEntry(),\n }),\n ...(options.plugins ?? []),\n ],\n build: {\n manifest: true,\n outDir: \"dist/client\",\n emptyOutDir: true,\n rolldownOptions: {\n input: createClientBuildInputs(options),\n },\n },\n });\n}\n\nfunction createTreesapServerBuildConfig(\n options: DefineTreesapConfigOptions\n): UserConfig {\n const browserEntry = resolveBrowserEntry(options);\n\n return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n publicDir: false,\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: browserEntry.entry,\n islands: resolveIslandEntries(options),\n islandRuntimeEntry: resolveIslandRuntimeEntry(),\n }),\n ...(options.plugins ?? []),\n ],\n build: {\n ssr: options.serverEntry ?? \"src/main.tsx\",\n target: \"node22\",\n outDir: \"dist/server\",\n sourcemap: true,\n emptyOutDir: false,\n rolldownOptions: {\n external: [\n \"fs\",\n \"path\",\n \"url\",\n \"module\",\n \"crypto\",\n \"stream\",\n /^node:/,\n ],\n output: {\n format: \"esm\",\n },\n },\n },\n oxc: {\n jsx: {\n runtime: \"automatic\",\n importSource: \"hono/jsx\",\n },\n },\n });\n}\n\nexport function treesap(options: TreesapVitePluginOptions): Plugin {\n const spaBase = normalizeSpaBase(options.spaBase ?? \"/app\");\n const appFactoryExport = options.appFactoryExport ?? \"createServerApp\";\n const spaIndexHtml = options.spaIndexHtml ?? \"src/app/index.html\";\n const spaEntryModule = options.spaEntryModule ?? \"/src/app/main.tsx\";\n const appEntryPath = options.appEntryPath ? path.resolve(options.appEntryPath) : null;\n const islandEntries = options.islands ?? [];\n const islandRuntimeEntry = options.islandRuntimeEntry\n ? path.resolve(options.islandRuntimeEntry)\n : null;\n\n return {\n name: \"treesap\",\n transform(code, id) {\n const hasBrowserEntry = Boolean(options.browserEntry);\n const hasIslands = islandEntries.length > 0;\n\n if (!hasBrowserEntry && !hasIslands) {\n return null;\n }\n\n const moduleId = path.resolve(stripQuery(id));\n const injectedGlobals = [\n hasIslands\n ? `globalThis.__TREESAP_ISLANDS__ = ${JSON.stringify(\n Object.fromEntries(islandEntries.map((entry) => [entry.name, entry.entry]))\n )};`\n : null,\n hasBrowserEntry\n ? `globalThis.__TREESAP_BROWSER_ENTRY__ = ${JSON.stringify(\n normalizeManifestLookupPath(options.browserEntry)\n )};`\n : null,\n hasIslands && islandRuntimeEntry\n ? `globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__ = ${JSON.stringify(\n islandRuntimeEntry\n )};`\n : null,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n if (appEntryPath && moduleId === appEntryPath) {\n const alreadyInjected =\n (!hasIslands || code.includes(\"globalThis.__TREESAP_ISLANDS__\")) &&\n (!hasBrowserEntry || code.includes(\"globalThis.__TREESAP_BROWSER_ENTRY__\")) &&\n (!hasIslands ||\n code.includes(\"globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__\"));\n\n if (alreadyInjected) {\n return null;\n }\n\n return {\n code: `${injectedGlobals}\\n${code}`,\n map: null,\n };\n }\n\n return null;\n },\n configureServer(server) {\n server.middlewares.use(async (req, res, next) => {\n const rewrittenUrl = maybeRewriteSpaAssetRequest(req.url ?? \"/\", spaBase);\n if (rewrittenUrl) {\n req.url = rewrittenUrl;\n }\n\n const pathname = new URL(req.url ?? \"/\", \"http://treesap.local\").pathname;\n\n try {\n if (isViteRequest(pathname)) {\n next();\n return;\n }\n\n if (isSpaShellRequest(pathname, spaBase)) {\n const html = await renderSpaShell(server, pathname, {\n spaIndexHtml,\n spaEntryModule,\n });\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"text/html; charset=UTF-8\");\n res.end(html);\n return;\n }\n\n const app = await loadTreesapApp(server, options.appEntry, appFactoryExport);\n const request = await toWebRequest(req);\n const response = await app.fetch(request);\n await sendNodeResponse(res, response);\n } catch (error) {\n server.ssrFixStacktrace(error as Error);\n console.error(error);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"text/plain; charset=UTF-8\");\n res.end(\"Internal Server Error\");\n }\n });\n },\n };\n}\n\nexport function defineTreesapConfig(options: DefineTreesapConfigOptions) {\n return defineConfig(({ command }) => {\n if (command === \"serve\") {\n return createTreesapDevConfig(options);\n }\n\n return {\n ...createTreesapSharedConfig(options),\n base: \"/\",\n publicDir: false,\n builder: {\n async buildApp(builder) {\n await build({\n ...createTreesapClientBuildConfig(options),\n configFile: false,\n });\n\n await build({\n ...createTreesapServerBuildConfig(options),\n configFile: false,\n });\n\n Object.values(builder.environments).forEach((environment) => {\n environment.isBuilt = true;\n });\n },\n },\n };\n });\n}\n\nexport function getViteEntryAssets(options: {\n entry: string;\n mode?: string;\n devScripts?: string[];\n devStyles?: string[];\n manifestPath?: string;\n base?: string;\n}) {\n const mode = options.mode ?? resolveRuntimeMode();\n if (mode !== \"production\") {\n const scripts = Array.from(\n new Set([\n ...(options.devScripts ?? []),\n createDevEntryScriptPath(options.entry),\n ])\n );\n\n return {\n scripts,\n styles: options.devStyles ?? [],\n };\n }\n\n const manifestPath = options.manifestPath ?? resolveDefaultManifestPath();\n const base = options.base ?? \"/\";\n\n if (!existsSync(manifestPath)) {\n return {\n scripts: [] as string[],\n styles: [] as string[],\n };\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf-8\")) as Record<\n string,\n ManifestEntry\n >;\n const lookupEntry = normalizeManifestLookupPath(options.entry);\n\n const entry =\n manifest[options.entry] ??\n Object.entries(manifest).find(([key, value]) => {\n const normalizedKey = normalizeManifestLookupPath(key);\n const normalizedSrc = value.src\n ? normalizeManifestLookupPath(value.src)\n : undefined;\n\n return (\n normalizedKey === lookupEntry ||\n normalizedKey.endsWith(lookupEntry) ||\n normalizedSrc === lookupEntry ||\n normalizedSrc?.endsWith(lookupEntry) === true\n );\n })?.[1];\n\n return {\n scripts: entry?.file ? [normalizePublicPath(entry.file, base)] : [],\n styles: (entry?.css ?? []).map((href) => normalizePublicPath(href, base)),\n };\n}\n\nfunction getRegisteredBrowserEntry() {\n return globalThis.__TREESAP_BROWSER_ENTRY__ ?? null;\n}\n\nexport function getViteBrowserAssets(options?: {\n mode?: string;\n manifestPath?: string;\n base?: string;\n devStyles?: string[];\n}) {\n const entry = getRegisteredBrowserEntry();\n if (!entry) {\n throw new Error(\n \"Treesap browser entry is not registered. Set browserEntry in defineTreesapConfig(...) or restart Vite.\"\n );\n }\n\n return getViteEntryAssets({\n entry,\n mode: options?.mode,\n manifestPath: options?.manifestPath,\n base: options?.base,\n devScripts: [\"/@vite/client\"],\n devStyles: options?.devStyles ?? [],\n });\n}\n\nexport function getViteModuleAsset(options: {\n entry: string;\n mode?: string;\n manifestPath?: string;\n base?: string;\n}) {\n return (\n getViteEntryAssets({\n entry: options.entry,\n mode: options.mode,\n manifestPath: options.manifestPath,\n base: options.base,\n devScripts: [createDevEntryScriptPath(options.entry)],\n devStyles: [],\n }).scripts[0] ?? null\n );\n}\n"]}
|