treesap 0.3.3 → 0.3.5
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 +31 -1
- package/dist/vite.d.ts +8 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +47 -10
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,6 +24,7 @@ import { defineTreesapConfig } from "treesap/vite";
|
|
|
24
24
|
|
|
25
25
|
export default defineTreesapConfig({
|
|
26
26
|
appEntry: "src/server/app.tsx",
|
|
27
|
+
browserEntry: "src/treesap-client.ts",
|
|
27
28
|
islands: {
|
|
28
29
|
entries: {
|
|
29
30
|
counter: "src/islands/counter.ts",
|
|
@@ -56,6 +57,34 @@ Build with `vite build`, then run the server bundle with:
|
|
|
56
57
|
node dist/server/main.js
|
|
57
58
|
```
|
|
58
59
|
|
|
60
|
+
If your browser entry lives somewhere else, set `browserEntry` explicitly rather than relying on a fixed file location.
|
|
61
|
+
|
|
62
|
+
## Layout Assets
|
|
63
|
+
|
|
64
|
+
Render your browser assets from server layouts with `getViteBrowserAssets()`:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { getViteBrowserAssets } from "treesap/vite";
|
|
68
|
+
|
|
69
|
+
export default function BaseLayout(props: { children: string | object }) {
|
|
70
|
+
const browserAssets = getViteBrowserAssets();
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<html>
|
|
74
|
+
<head>
|
|
75
|
+
{browserAssets.styles.map((href) => (
|
|
76
|
+
<link rel="stylesheet" href={href} />
|
|
77
|
+
))}
|
|
78
|
+
{browserAssets.scripts.map((src) => (
|
|
79
|
+
<script type="module" src={src}></script>
|
|
80
|
+
))}
|
|
81
|
+
</head>
|
|
82
|
+
<body>{props.children}</body>
|
|
83
|
+
</html>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
59
88
|
## Islands
|
|
60
89
|
|
|
61
90
|
Register island client entries explicitly in `defineTreesapConfig()`:
|
|
@@ -65,6 +94,7 @@ import { defineTreesapConfig } from "treesap/vite";
|
|
|
65
94
|
|
|
66
95
|
export default defineTreesapConfig({
|
|
67
96
|
appEntry: "src/server/app.tsx",
|
|
97
|
+
browserEntry: "src/treesap-client.ts",
|
|
68
98
|
islands: {
|
|
69
99
|
entries: {
|
|
70
100
|
counter: "src/islands/counter.ts",
|
|
@@ -115,4 +145,4 @@ Recommended convention: keep island entries in `src/islands/`, but registration
|
|
|
115
145
|
## Exports
|
|
116
146
|
|
|
117
147
|
- `treesap`: `createApp`, `createRouter`, `serve`, `Context`, `cors`, `serveStatic`, `Island`
|
|
118
|
-
- `treesap/vite`: `defineTreesapConfig`, `getViteEntryAssets`, `getViteModuleAsset`, `treesap`
|
|
148
|
+
- `treesap/vite`: `defineTreesapConfig`, `getViteBrowserAssets`, `getViteEntryAssets`, `getViteModuleAsset`, `treesap`
|
package/dist/vite.d.ts
CHANGED
|
@@ -41,6 +41,14 @@ export declare function getViteEntryAssets(options: {
|
|
|
41
41
|
scripts: string[];
|
|
42
42
|
styles: string[];
|
|
43
43
|
};
|
|
44
|
+
export declare function getViteBrowserAssets(options?: {
|
|
45
|
+
mode?: string;
|
|
46
|
+
manifestPath?: string;
|
|
47
|
+
base?: string;
|
|
48
|
+
}): {
|
|
49
|
+
scripts: string[];
|
|
50
|
+
styles: string[];
|
|
51
|
+
};
|
|
44
52
|
export declare function getViteModuleAsset(options: {
|
|
45
53
|
entry: string;
|
|
46
54
|
mode?: string;
|
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;
|
|
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;CACf;;;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
|
@@ -103,10 +103,17 @@ function resolveConfigRoot(viteConfig) {
|
|
|
103
103
|
}
|
|
104
104
|
function resolveBrowserEntry(options) {
|
|
105
105
|
const root = resolveConfigRoot(options.vite);
|
|
106
|
-
const browserEntry = options.browserEntry ?? "src/
|
|
106
|
+
const browserEntry = options.browserEntry ?? "src/treesap-client.ts";
|
|
107
|
+
const absolutePath = path.resolve(root, browserEntry);
|
|
108
|
+
if (!existsSync(absolutePath)) {
|
|
109
|
+
if (options.browserEntry) {
|
|
110
|
+
throw new Error(`Treesap could not find browserEntry "${options.browserEntry}". Check the path or update defineTreesapConfig({ browserEntry }).`);
|
|
111
|
+
}
|
|
112
|
+
throw new Error('Treesap could not find the default browser entry "src/treesap-client.ts". Set browserEntry in defineTreesapConfig(...) if your client entry lives elsewhere.');
|
|
113
|
+
}
|
|
107
114
|
return {
|
|
108
115
|
entry: normalizeManifestLookupPath(browserEntry),
|
|
109
|
-
absolutePath
|
|
116
|
+
absolutePath,
|
|
110
117
|
};
|
|
111
118
|
}
|
|
112
119
|
function resolveAppEntry(options) {
|
|
@@ -179,6 +186,7 @@ function createTreesapSharedConfig(options) {
|
|
|
179
186
|
});
|
|
180
187
|
}
|
|
181
188
|
function createTreesapDevConfig(options) {
|
|
189
|
+
const browserEntry = resolveBrowserEntry(options);
|
|
182
190
|
return mergeConfig(createTreesapSharedConfig(options), {
|
|
183
191
|
base: "/",
|
|
184
192
|
plugins: [
|
|
@@ -186,7 +194,7 @@ function createTreesapDevConfig(options) {
|
|
|
186
194
|
appEntry: options.appEntry,
|
|
187
195
|
appFactoryExport: options.appFactoryExport,
|
|
188
196
|
appEntryPath: resolveAppEntry(options),
|
|
189
|
-
browserEntry:
|
|
197
|
+
browserEntry: browserEntry.entry,
|
|
190
198
|
islands: resolveIslandEntries(options),
|
|
191
199
|
islandRuntimeEntry: resolveIslandRuntimeEntry(),
|
|
192
200
|
}),
|
|
@@ -196,6 +204,7 @@ function createTreesapDevConfig(options) {
|
|
|
196
204
|
}
|
|
197
205
|
function createTreesapClientBuildConfig(options) {
|
|
198
206
|
const root = resolveConfigRoot(options.vite);
|
|
207
|
+
const browserEntry = resolveBrowserEntry(options);
|
|
199
208
|
return mergeConfig(createTreesapSharedConfig(options), {
|
|
200
209
|
base: "/",
|
|
201
210
|
publicDir: path.resolve(root, "public"),
|
|
@@ -204,7 +213,7 @@ function createTreesapClientBuildConfig(options) {
|
|
|
204
213
|
appEntry: options.appEntry,
|
|
205
214
|
appFactoryExport: options.appFactoryExport,
|
|
206
215
|
appEntryPath: resolveAppEntry(options),
|
|
207
|
-
browserEntry:
|
|
216
|
+
browserEntry: browserEntry.entry,
|
|
208
217
|
islands: resolveIslandEntries(options),
|
|
209
218
|
islandRuntimeEntry: resolveIslandRuntimeEntry(),
|
|
210
219
|
}),
|
|
@@ -221,6 +230,7 @@ function createTreesapClientBuildConfig(options) {
|
|
|
221
230
|
});
|
|
222
231
|
}
|
|
223
232
|
function createTreesapServerBuildConfig(options) {
|
|
233
|
+
const browserEntry = resolveBrowserEntry(options);
|
|
224
234
|
return mergeConfig(createTreesapSharedConfig(options), {
|
|
225
235
|
base: "/",
|
|
226
236
|
publicDir: false,
|
|
@@ -229,7 +239,7 @@ function createTreesapServerBuildConfig(options) {
|
|
|
229
239
|
appEntry: options.appEntry,
|
|
230
240
|
appFactoryExport: options.appFactoryExport,
|
|
231
241
|
appEntryPath: resolveAppEntry(options),
|
|
232
|
-
browserEntry:
|
|
242
|
+
browserEntry: browserEntry.entry,
|
|
233
243
|
islands: resolveIslandEntries(options),
|
|
234
244
|
islandRuntimeEntry: resolveIslandRuntimeEntry(),
|
|
235
245
|
}),
|
|
@@ -277,21 +287,31 @@ export function treesap(options) {
|
|
|
277
287
|
return {
|
|
278
288
|
name: "treesap",
|
|
279
289
|
transform(code, id) {
|
|
280
|
-
|
|
290
|
+
const hasBrowserEntry = Boolean(options.browserEntry);
|
|
291
|
+
const hasIslands = islandEntries.length > 0;
|
|
292
|
+
if (!hasBrowserEntry && !hasIslands) {
|
|
281
293
|
return null;
|
|
282
294
|
}
|
|
283
295
|
const moduleId = path.resolve(stripQuery(id));
|
|
284
296
|
const injectedGlobals = [
|
|
285
|
-
|
|
286
|
-
|
|
297
|
+
hasIslands
|
|
298
|
+
? `globalThis.__TREESAP_ISLANDS__ = ${JSON.stringify(Object.fromEntries(islandEntries.map((entry) => [entry.name, entry.entry])))};`
|
|
299
|
+
: null,
|
|
300
|
+
hasBrowserEntry
|
|
301
|
+
? `globalThis.__TREESAP_BROWSER_ENTRY__ = ${JSON.stringify(normalizeManifestLookupPath(options.browserEntry))};`
|
|
302
|
+
: null,
|
|
303
|
+
hasIslands && islandRuntimeEntry
|
|
287
304
|
? `globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__ = ${JSON.stringify(islandRuntimeEntry)};`
|
|
288
305
|
: null,
|
|
289
306
|
]
|
|
290
307
|
.filter(Boolean)
|
|
291
308
|
.join("\n");
|
|
292
309
|
if (appEntryPath && moduleId === appEntryPath) {
|
|
293
|
-
|
|
294
|
-
code.includes("globalThis.
|
|
310
|
+
const alreadyInjected = (!hasIslands || code.includes("globalThis.__TREESAP_ISLANDS__")) &&
|
|
311
|
+
(!hasBrowserEntry || code.includes("globalThis.__TREESAP_BROWSER_ENTRY__")) &&
|
|
312
|
+
(!hasIslands ||
|
|
313
|
+
code.includes("globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__"));
|
|
314
|
+
if (alreadyInjected) {
|
|
295
315
|
return null;
|
|
296
316
|
}
|
|
297
317
|
return {
|
|
@@ -404,6 +424,23 @@ export function getViteEntryAssets(options) {
|
|
|
404
424
|
styles: (entry?.css ?? []).map((href) => normalizePublicPath(href, base)),
|
|
405
425
|
};
|
|
406
426
|
}
|
|
427
|
+
function getRegisteredBrowserEntry() {
|
|
428
|
+
return globalThis.__TREESAP_BROWSER_ENTRY__ ?? null;
|
|
429
|
+
}
|
|
430
|
+
export function getViteBrowserAssets(options) {
|
|
431
|
+
const entry = getRegisteredBrowserEntry();
|
|
432
|
+
if (!entry) {
|
|
433
|
+
throw new Error("Treesap browser entry is not registered. Set browserEntry in defineTreesapConfig(...) or restart Vite.");
|
|
434
|
+
}
|
|
435
|
+
return getViteEntryAssets({
|
|
436
|
+
entry,
|
|
437
|
+
mode: options?.mode,
|
|
438
|
+
manifestPath: options?.manifestPath,
|
|
439
|
+
base: options?.base,
|
|
440
|
+
devScripts: ["/@vite/client"],
|
|
441
|
+
devStyles: [],
|
|
442
|
+
});
|
|
443
|
+
}
|
|
407
444
|
export function getViteModuleAsset(options) {
|
|
408
445
|
return (getViteEntryAssets({
|
|
409
446
|
entry: options.entry,
|
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/entry-style.ts\";\n\n return {\n entry: normalizeManifestLookupPath(browserEntry),\n absolutePath: path.resolve(root, browserEntry),\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 return mergeConfig(createTreesapSharedConfig(options), {\n base: \"/\",\n plugins: [\n treesap({\n appEntry: options.appEntry,\n appFactoryExport: options.appFactoryExport,\n appEntryPath: resolveAppEntry(options),\n browserEntry: resolveBrowserEntry(options).absolutePath,\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\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: resolveBrowserEntry(options).absolutePath,\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 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: resolveBrowserEntry(options).absolutePath,\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 if (islandEntries.length === 0) {\n return null;\n }\n\n const moduleId = path.resolve(stripQuery(id));\n const injectedGlobals = [\n `globalThis.__TREESAP_ISLANDS__ = ${JSON.stringify(\n Object.fromEntries(islandEntries.map((entry) => [entry.name, entry.entry]))\n )};`,\n 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 if (\n code.includes(\"globalThis.__TREESAP_ISLANDS__\") &&\n code.includes(\"globalThis.__TREESAP_ISLAND_RUNTIME_ENTRY__\")\n ) {\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\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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,KAAK,EACL,YAAY,EACZ,WAAW,GAKZ,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAwC3D,SAAS,kBAAkB;IACzB,MAAM,OAAO,GAAI,MAAM,CAAC,IAEtB,CAAC,GAAG,CAAC;IAEP,IAAI,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACpE,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAAY;IACrD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,0BAA0B;IACjC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iCAAiC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gCAAgC,CAAC;KAC9D,CAAC;IAEF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAa;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,UAAU;SACd,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,EAAU;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,OAAO,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,CACL,QAAQ,KAAK,eAAe;QAC5B,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;QAC5B,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;QAC5B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAC9B,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACrC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW,EAAE,OAAe;IAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAE1E,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACvC,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IAC1D,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,MAAqB,EACrB,QAAgB,EAChB,OAAoF;IAEpF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAC9D,YAAY,EACZ,OAAO,CAAC,cAAc,CACvB,CAAC;IACF,OAAO,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAqB,EAAE,KAAa,EAAE,UAAkB;IACpF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAErC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,gDAAgD,UAAU,QAAQ,KAAK,GAAG,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,wBAAwB,UAAU,QAAQ,KAAK,yCAAyC,CACzF,CAAC;IACJ,CAAC;IAED,OAAO,GAAgE,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAuB;IAChD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAmC;IAC9D,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,uBAAuB,CAAC;IACrE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEtD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,wCAAwC,OAAO,CAAC,YAAY,oEAAoE,CACjI,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,8JAA8J,CAC/J,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,2BAA2B,CAAC,YAAY,CAAC;QAChD,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAmC;IAC1D,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAmC;IAEnC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IAElD,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAErC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,mBAAmB,cAAc,yCAAyC,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,2BAA2B,CAAC,eAAe,CAAC;YACnD,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;SAClD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,mBAAmB,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,mBAAmB,CAAC;KAC9C,CAAC;IAEF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAmC;IAClE,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,YAAY,CAAC,YAAY;KACnC,CAAC;IAEF,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,wBAAwB,CAAC,GAAG,yBAAyB,EAAE,CAAC;IAChE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAmC;IACpE,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CACxE,CAAC;IAEF,OAAO;QACL,gCAAgC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAmC;IACpE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,WAAW,CAChB;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI;QACJ,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC;QAC1C,GAAG,EAAE;YACH,UAAU,EAAE,CAAC,MAAM,CAAC;SACrB;KACF,EACD;QACE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS;KACnB,CACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAmC;IACjE,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;QACrD,IAAI,EAAE,GAAG;QACT,OAAO,EAAE;YACP,OAAO,CAAC;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;gBACtC,YAAY,EAAE,YAAY,CAAC,KAAK;gBAChC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;gBACtC,kBAAkB,EAAE,yBAAyB,EAAE;aAChD,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,8BAA8B,CACrC,OAAmC;IAEnC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;QACrD,IAAI,EAAE,GAAG;QACT,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;QACvC,OAAO,EAAE;YACP,OAAO,CAAC;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;gBACtC,YAAY,EAAE,YAAY,CAAC,KAAK;gBAChC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;gBACtC,kBAAkB,EAAE,yBAAyB,EAAE;aAChD,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,aAAa;YACrB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE;gBACf,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC;aACxC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,8BAA8B,CACrC,OAAmC;IAEnC,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;QACrD,IAAI,EAAE,GAAG;QACT,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE;YACP,OAAO,CAAC;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC;gBACtC,YAAY,EAAE,YAAY,CAAC,KAAK;gBAChC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;gBACtC,kBAAkB,EAAE,yBAAyB,EAAE;aAChD,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B;QACD,KAAK,EAAE;YACL,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,cAAc;YAC1C,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE;gBACf,QAAQ,EAAE;oBACR,IAAI;oBACJ,MAAM;oBACN,KAAK;oBACL,QAAQ;oBACR,QAAQ;oBACR,QAAQ;oBACR,QAAQ;iBACT;gBACD,MAAM,EAAE;oBACN,MAAM,EAAE,KAAK;iBACd;aACF;SACF;QACD,GAAG,EAAE;YACH,GAAG,EAAE;gBACH,OAAO,EAAE,WAAW;gBACpB,YAAY,EAAE,UAAU;aACzB;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAiC;IACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,iBAAiB,CAAC;IACvE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,oBAAoB,CAAC;IAClE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,mBAAmB,CAAC;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAC5C,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB;QACnD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC;IAET,OAAO;QACL,IAAI,EAAE,SAAS;QACf,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YAE5C,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,MAAM,eAAe,GAAG;gBACtB,UAAU;oBACR,CAAC,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAChD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5E,GAAG;oBACN,CAAC,CAAC,IAAI;gBACR,eAAe;oBACb,CAAC,CAAC,0CAA0C,IAAI,CAAC,SAAS,CACtD,2BAA2B,CAAC,OAAO,CAAC,YAAY,CAAC,CAClD,GAAG;oBACN,CAAC,CAAC,IAAI;gBACR,UAAU,IAAI,kBAAkB;oBAC9B,CAAC,CAAC,iDAAiD,IAAI,CAAC,SAAS,CAC7D,kBAAkB,CACnB,GAAG;oBACN,CAAC,CAAC,IAAI;aACT;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,IAAI,YAAY,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9C,MAAM,eAAe,GACnB,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;oBAChE,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;oBAC3E,CAAC,CAAC,UAAU;wBACV,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBAElE,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO;oBACL,IAAI,EAAE,GAAG,eAAe,KAAK,IAAI,EAAE;oBACnC,GAAG,EAAE,IAAI;iBACV,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QACD,eAAe,CAAC,MAAM;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9C,MAAM,YAAY,GAAG,2BAA2B,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC1E,IAAI,YAAY,EAAE,CAAC;oBACjB,GAAG,CAAC,GAAG,GAAG,YAAY,CAAC;gBACzB,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC;gBAE1E,IAAI,CAAC;oBACH,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC5B,IAAI,EAAE,CAAC;wBACP,OAAO;oBACT,CAAC;oBAED,IAAI,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;wBACzC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;4BAClD,YAAY;4BACZ,cAAc;yBACf,CAAC,CAAC;wBACH,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;wBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;wBAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACd,OAAO;oBACT,CAAC;oBAED,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;oBAC7E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;oBACxC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC1C,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,gBAAgB,CAAC,KAAc,CAAC,CAAC;oBACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;oBAC3D,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,OAAO,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,OAAO;YACL,GAAG,yBAAyB,CAAC,OAAO,CAAC;YACrC,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE;gBACP,KAAK,CAAC,QAAQ,CAAC,OAAO;oBACpB,MAAM,KAAK,CAAC;wBACV,GAAG,8BAA8B,CAAC,OAAO,CAAC;wBAC1C,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;oBAEH,MAAM,KAAK,CAAC;wBACV,GAAG,8BAA8B,CAAC,OAAO,CAAC;wBAC1C,UAAU,EAAE,KAAK;qBAClB,CAAC,CAAC;oBAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;wBAC1D,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC7B,CAAC,CAAC,CAAC;gBACL,CAAC;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAOlC;IACC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,EAAE,CAAC;IAClD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,IAAI,GAAG,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7B,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC;SACxC,CAAC,CACH,CAAC;QAEF,OAAO;YACL,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,0BAA0B,EAAE,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,EAAc;YACvB,MAAM,EAAE,EAAc;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAG9D,CAAC;IACF,MAAM,WAAW,GAAG,2BAA2B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE/D,MAAM,KAAK,GACT,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC7C,MAAM,aAAa,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG;gBAC7B,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,CACL,aAAa,KAAK,WAAW;gBAC7B,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACnC,aAAa,KAAK,WAAW;gBAC7B,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAC9C,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEV,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACnE,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,UAAU,CAAC,yBAAyB,IAAI,IAAI,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAIpC;IACC,MAAM,KAAK,GAAG,yBAAyB,EAAE,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAED,OAAO,kBAAkB,CAAC;QACxB,KAAK;QACL,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,YAAY,EAAE,OAAO,EAAE,YAAY;QACnC,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,UAAU,EAAE,CAAC,eAAe,CAAC;QAC7B,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAKlC;IACC,OAAO,CACL,kBAAkB,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrD,SAAS,EAAE,EAAE;KACd,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CACtB,CAAC;AACJ,CAAC","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"]}
|