phial 0.0.1

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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/bin/phial.mjs +6 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +2 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +2 -0
  8. package/dist/lib/cli/index.d.ts +5 -0
  9. package/dist/lib/cli/index.d.ts.map +1 -0
  10. package/dist/lib/cli/index.js +101 -0
  11. package/dist/lib/cli/index.js.map +1 -0
  12. package/dist/lib/generated-routes.d.ts +176 -0
  13. package/dist/lib/server-routes/errors.js +16 -0
  14. package/dist/lib/server-routes/errors.js.map +1 -0
  15. package/dist/lib/vite-plugin/config.d.ts +54 -0
  16. package/dist/lib/vite-plugin/config.d.ts.map +1 -0
  17. package/dist/lib/vite-plugin/config.js +54 -0
  18. package/dist/lib/vite-plugin/config.js.map +1 -0
  19. package/dist/lib/vite-plugin/generated/client-entry.js +36 -0
  20. package/dist/lib/vite-plugin/generated/client-entry.js.map +1 -0
  21. package/dist/lib/vite-plugin/generated/virtual-modules.js +940 -0
  22. package/dist/lib/vite-plugin/generated/virtual-modules.js.map +1 -0
  23. package/dist/lib/vite-plugin/host/index.d.ts +4 -0
  24. package/dist/lib/vite-plugin/host/index.js +5 -0
  25. package/dist/lib/vite-plugin/host/plugin-build.d.ts +15 -0
  26. package/dist/lib/vite-plugin/host/plugin-build.d.ts.map +1 -0
  27. package/dist/lib/vite-plugin/host/plugin-build.js +242 -0
  28. package/dist/lib/vite-plugin/host/plugin-build.js.map +1 -0
  29. package/dist/lib/vite-plugin/host/plugin-dev-server.d.ts +19 -0
  30. package/dist/lib/vite-plugin/host/plugin-dev-server.d.ts.map +1 -0
  31. package/dist/lib/vite-plugin/host/plugin-dev-server.js +255 -0
  32. package/dist/lib/vite-plugin/host/plugin-dev-server.js.map +1 -0
  33. package/dist/lib/vite-plugin/host/plugin-prepare.d.ts +12 -0
  34. package/dist/lib/vite-plugin/host/plugin-prepare.d.ts.map +1 -0
  35. package/dist/lib/vite-plugin/host/plugin-prepare.js +29 -0
  36. package/dist/lib/vite-plugin/host/plugin-prepare.js.map +1 -0
  37. package/dist/lib/vite-plugin/host/plugin-server.d.ts +19 -0
  38. package/dist/lib/vite-plugin/host/plugin-server.d.ts.map +1 -0
  39. package/dist/lib/vite-plugin/host/plugin-server.js +60 -0
  40. package/dist/lib/vite-plugin/host/plugin-server.js.map +1 -0
  41. package/dist/lib/vite-plugin/index.d.ts +9 -0
  42. package/dist/lib/vite-plugin/index.d.ts.map +1 -0
  43. package/dist/lib/vite-plugin/index.js +261 -0
  44. package/dist/lib/vite-plugin/index.js.map +1 -0
  45. package/dist/lib/vite-plugin/scanners/app-pages-scanner.js +162 -0
  46. package/dist/lib/vite-plugin/scanners/app-pages-scanner.js.map +1 -0
  47. package/dist/lib/vite-plugin/scanners/app-runtime-scanner.js +39 -0
  48. package/dist/lib/vite-plugin/scanners/app-runtime-scanner.js.map +1 -0
  49. package/dist/lib/vite-plugin/scanners/route-manifest.js +60 -0
  50. package/dist/lib/vite-plugin/scanners/route-manifest.js.map +1 -0
  51. package/dist/lib/vite-plugin/scanners/routes-scanner.js +72 -0
  52. package/dist/lib/vite-plugin/scanners/routes-scanner.js.map +1 -0
  53. package/dist/lib/vite-plugin/scanners/scanner-utils.js +129 -0
  54. package/dist/lib/vite-plugin/scanners/scanner-utils.js.map +1 -0
  55. package/dist/lib/vite-plugin/scanners/server-routes-scanner.js +83 -0
  56. package/dist/lib/vite-plugin/scanners/server-routes-scanner.js.map +1 -0
  57. package/dist/lib/vite-plugin/scanners/types-generator.d.ts +9 -0
  58. package/dist/lib/vite-plugin/scanners/types-generator.d.ts.map +1 -0
  59. package/dist/lib/vite-plugin/scanners/types-generator.js +190 -0
  60. package/dist/lib/vite-plugin/scanners/types-generator.js.map +1 -0
  61. package/dist/vite-plugin.d.ts +7 -0
  62. package/dist/vite-plugin.js +8 -0
  63. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-modules.js","names":[],"sources":["../../../../src/lib/vite-plugin/generated/virtual-modules.ts"],"sourcesContent":["import type { ScannedRouteModule, ScannedRoutesResult } from \"../scanners/route-manifest\";\n\nexport const VIRTUAL_ROUTES_MANIFEST_ID = \"virtual:phial-routes-manifest\";\nexport const VIRTUAL_ROUTES_MODULES_ID = \"virtual:phial-routes-modules\";\nexport const VIRTUAL_APP_RUNTIME_ID = \"virtual:phial-app-runtime\";\nexport const GENERATED_ROUTES_MANIFEST_ID = \"phial/generated-routes-manifest\";\nexport const GENERATED_ROUTES_MODULES_ID = \"phial/generated-routes-modules\";\nexport const GENERATED_APP_RUNTIME_ID = \"phial/generated-app-runtime\";\nexport const GENERATED_APP_LOADER_ID = \"phial/generated-app-loader\";\nexport const GENERATED_APP_MIDDLEWARE_ID = \"phial/generated-app-middleware\";\nexport const GENERATED_APP_PLUGIN_ID = \"phial/generated-app-plugin\";\nexport const GENERATED_SERVER_ROUTES_ID = \"phial/generated-server-routes\";\nexport const GENERATED_SERVER_MIDDLEWARE_ID = \"phial/generated-server-middleware\";\nexport const GENERATED_SERVER_PLUGIN_ID = \"phial/generated-server-plugin\";\nexport const GENERATED_CONFIG_ID = \"phial/generated-config\";\nexport const RESOLVED_VIRTUAL_ROUTES_MANIFEST_ID = `\\0${VIRTUAL_ROUTES_MANIFEST_ID}`;\nexport const RESOLVED_VIRTUAL_ROUTES_MODULES_ID = `\\0${VIRTUAL_ROUTES_MODULES_ID}`;\nexport const RESOLVED_VIRTUAL_APP_RUNTIME_ID = `\\0${VIRTUAL_APP_RUNTIME_ID}`;\nexport const RESOLVED_GENERATED_ROUTES_MANIFEST_ID = `\\0${GENERATED_ROUTES_MANIFEST_ID}`;\nexport const RESOLVED_GENERATED_ROUTES_MODULES_ID = `\\0${GENERATED_ROUTES_MODULES_ID}`;\nexport const RESOLVED_GENERATED_APP_RUNTIME_ID = `\\0${GENERATED_APP_RUNTIME_ID}`;\nexport const RESOLVED_GENERATED_APP_LOADER_ID = `\\0${GENERATED_APP_LOADER_ID}`;\nexport const RESOLVED_GENERATED_APP_MIDDLEWARE_ID = `\\0${GENERATED_APP_MIDDLEWARE_ID}`;\nexport const RESOLVED_GENERATED_APP_PLUGIN_ID = `\\0${GENERATED_APP_PLUGIN_ID}`;\nexport const RESOLVED_GENERATED_SERVER_ROUTES_ID = `\\0${GENERATED_SERVER_ROUTES_ID}`;\nexport const RESOLVED_GENERATED_SERVER_MIDDLEWARE_ID = `\\0${GENERATED_SERVER_MIDDLEWARE_ID}`;\nexport const RESOLVED_GENERATED_SERVER_PLUGIN_ID = `\\0${GENERATED_SERVER_PLUGIN_ID}`;\nexport const RESOLVED_GENERATED_CONFIG_ID = `\\0${GENERATED_CONFIG_ID}`;\n\ntype RouteFileKey = keyof ScannedRouteModule[\"files\"];\n\nexport interface VirtualRoutesModuleOptions {\n moduleImportMode?: \"eager\" | \"lazy\";\n}\n\nexport function createVirtualRoutesManifestModule(result: ScannedRoutesResult): string {\n const manifest = JSON.stringify(result.manifest, null, 2);\n\n return [`export const manifest = ${manifest}`, \"\", \"export default manifest\"].join(\"\\n\");\n}\n\nexport function createVirtualRoutesModulesModule(\n result: ScannedRoutesResult,\n options: VirtualRoutesModuleOptions = {},\n): string {\n return options.moduleImportMode === \"eager\"\n ? createEagerRouteModulesModule(result)\n : createDynamicRouteModulesModule(result);\n}\n\nexport function createVirtualAppRuntimeModule(result: ScannedRoutesResult): string {\n const importEntries = [\n result.app.app\n ? {\n importedLocal: \"importedAppComponentModule\",\n local: \"appComponentModule\",\n exportName: \"appComponent\",\n specifier: createImportSpecifier(result.app.app),\n }\n : null,\n result.app.error\n ? {\n importedLocal: \"importedErrorComponentModule\",\n local: \"errorComponentModule\",\n exportName: \"errorComponent\",\n specifier: createImportSpecifier(result.app.error),\n }\n : null,\n result.app.loader\n ? {\n importedLocal: \"importedAppLoaderModule\",\n local: \"appLoaderModule\",\n exportName: \"appLoader\",\n specifier: createImportSpecifier(result.app.loader),\n }\n : null,\n result.app.config\n ? {\n importedLocal: \"importedAppConfigModule\",\n local: \"appConfigModule\",\n exportName: \"appConfig\",\n specifier: createImportSpecifier(result.app.config),\n }\n : null,\n ].filter(Boolean) as Array<{\n importedLocal: string;\n local: string;\n exportName: \"appComponent\" | \"errorComponent\" | \"appLoader\" | \"appConfig\";\n specifier: string;\n }>;\n const importLines = importEntries.map(\n ({ importedLocal, specifier }) =>\n `import * as ${importedLocal} from ${JSON.stringify(specifier)}`,\n );\n const mutableBindings = importEntries.map(\n ({ importedLocal, local }) => `let ${local} = ${importedLocal}`,\n );\n const exportInitializers = [\n 'let appComponent = resolveAppComponent(typeof appComponentModule !== \"undefined\" ? appComponentModule : undefined)',\n 'let errorComponent = resolveErrorComponent(typeof errorComponentModule !== \"undefined\" ? errorComponentModule : undefined)',\n 'export let appLoader = resolveAppLoader(typeof appLoaderModule !== \"undefined\" ? appLoaderModule : undefined)',\n 'let appConfig = resolveAppConfig(typeof appConfigModule !== \"undefined\" ? appConfigModule : undefined)',\n \"export let app = createAppModule(appComponent, errorComponent, appLoader)\",\n \"export let routes = createRouteRecords(manifest, routeModules)\",\n \"export function createIntegration(runtimeOptions = {}) {\",\n \" return createRouteRuntimeIntegration({\",\n \" app,\",\n \" routes,\",\n \" ...runtimeOptions\",\n \" })\",\n \"}\",\n \"export let integration = createIntegration()\",\n \"installRouteModuleHmrBridge()\",\n ];\n\n return [\n 'import { createRouteRuntimeIntegration } from \"vuepagelet/integration\"',\n `import { manifest } from ${JSON.stringify(GENERATED_ROUTES_MANIFEST_ID)}`,\n `import { routeModules } from ${JSON.stringify(GENERATED_ROUTES_MODULES_ID)}`,\n `import { appMiddlewareRegistry } from ${JSON.stringify(GENERATED_APP_MIDDLEWARE_ID)}`,\n \"\",\n ...importLines,\n ...(importLines.length > 0 ? [\"\"] : []),\n ...mutableBindings,\n ...(mutableBindings.length > 0 ? [\"\"] : []),\n ...exportInitializers,\n \"\",\n \"function resolveAppComponent(module) {\",\n \" return module?.default\",\n \"}\",\n \"\",\n \"function resolveErrorComponent(module) {\",\n \" return module?.default\",\n \"}\",\n \"\",\n \"function resolveAppLoader(module) {\",\n \" const loader = module?.loader ?? module?.default\",\n ' if (loader !== undefined && typeof loader !== \"function\") {',\n ' throw new Error(\"Invalid app loader module. Expected a default export or named \\\\\"loader\\\\\" export.\")',\n \" }\",\n \"\",\n \" return loader\",\n \"}\",\n \"\",\n \"function resolveAppConfig(module) {\",\n \" return module?.default ?? module?.appConfig ?? {}\",\n \"}\",\n \"\",\n \"function createAppModule(shell, error, loader) {\",\n \" return { shell, error, loader }\",\n \"}\",\n \"\",\n \"function createRouteRecords(routeManifest, loadedRouteModules) {\",\n \" const records = routeManifest.map((entry) => ({\",\n \" id: entry.id,\",\n \" path: entry.path,\",\n \" module: createRouteModule(entry, loadedRouteModules[entry.id]),\",\n \" children: []\",\n \" }))\",\n \" const recordMap = new Map(records.map((record) => [record.id, record]))\",\n \" const roots = []\",\n \"\",\n \" for (const entry of routeManifest) {\",\n \" const record = recordMap.get(entry.id)\",\n \" if (!record) {\",\n \" continue\",\n \" }\",\n \"\",\n \" if (entry.parentId) {\",\n \" const parent = recordMap.get(entry.parentId)\",\n \" if (parent) {\",\n \" parent.children.push(record)\",\n \" continue\",\n \" }\",\n \" }\",\n \"\",\n \" roots.push(record)\",\n \" }\",\n \"\",\n \" return attachAppMiddleware(roots, resolveGlobalMiddleware(appConfig, appMiddlewareRegistry))\",\n \"}\",\n \"\",\n \"function installRouteModuleHmrBridge() {\",\n ' if (typeof globalThis === \"undefined\") {',\n \" return\",\n \" }\",\n \"\",\n \" globalThis.__ROUTE_MODULE_HMR__ = async () => {\",\n \" const nextRoutes = createRouteRecords(manifest, routeModules)\",\n \" syncRouteRecords(routes, nextRoutes)\",\n \" integration = createIntegration()\",\n \" await notifyAppRuntimeHotUpdate({\",\n \" appComponent,\",\n \" errorComponent,\",\n \" config: appConfig,\",\n \" routes,\",\n \" })\",\n \" }\",\n \"}\",\n \"\",\n \"async function notifyAppRuntimeHotUpdate(payload) {\",\n ' if (typeof globalThis === \"undefined\") {',\n \" return false\",\n \" }\",\n \"\",\n \" const applyAppRuntimeHotUpdate = globalThis.__APP_RUNTIME_HMR__\",\n ' if (typeof applyAppRuntimeHotUpdate !== \"function\") {',\n \" return false\",\n \" }\",\n \"\",\n \" await applyAppRuntimeHotUpdate(payload)\",\n \" return true\",\n \"}\",\n \"\",\n \"function syncRouteRecords(targetRoutes, nextRoutes) {\",\n \" const targetRouteMap = new Map(flattenRoutes(targetRoutes).map((route) => [route.id, route]))\",\n \"\",\n \" for (const nextRoute of flattenRoutes(nextRoutes)) {\",\n \" const targetRoute = targetRouteMap.get(nextRoute.id)\",\n \" if (!targetRoute) {\",\n \" continue\",\n \" }\",\n \"\",\n \" targetRoute.path = nextRoute.path\",\n \" targetRoute.name = nextRoute.name\",\n \" targetRoute.module = nextRoute.module\",\n \" }\",\n \"}\",\n \"\",\n \"function flattenRoutes(routes) {\",\n \" return routes.flatMap((route) => [route, ...flattenRoutes(route.children ?? [])])\",\n \"}\",\n \"\",\n \"function createRouteModule(entry, module) {\",\n \" const resolvedModule = module ?? {}\",\n ' const routeModule = entry.kind === \"layout\"',\n \" ? { layout: resolveDefaultExport(resolvedModule) }\",\n \" : { component: resolveDefaultExport(resolvedModule) }\",\n \" const middleware = resolveMiddlewareReferences([\",\n \" ...(resolvedModule.directoryMiddleware ?? []),\",\n \" ...(resolvedModule.middleware ?? []),\",\n \" ], appMiddlewareRegistry)\",\n \"\",\n \" if (resolvedModule.Loading !== undefined) {\",\n \" routeModule.loading = resolvedModule.Loading\",\n \" }\",\n \"\",\n \" if (resolvedModule.ErrorBoundary !== undefined) {\",\n \" routeModule.error = resolvedModule.ErrorBoundary\",\n \" }\",\n \"\",\n \" if (resolvedModule.loader !== undefined) {\",\n \" routeModule.loader = resolvedModule.loader\",\n \" }\",\n \"\",\n \" if (resolvedModule.action !== undefined) {\",\n \" routeModule.action = resolvedModule.action\",\n \" }\",\n \"\",\n \" if (middleware.length > 0) {\",\n \" routeModule.middleware = middleware\",\n \" }\",\n \"\",\n \" if (resolvedModule.shouldRevalidate !== undefined) {\",\n \" routeModule.shouldRevalidate = resolvedModule.shouldRevalidate\",\n \" }\",\n \"\",\n \" return routeModule\",\n \"}\",\n \"\",\n \"function resolveDefaultExport(module) {\",\n \" return module?.default\",\n \"}\",\n \"\",\n \"function resolveGlobalMiddleware(config, registry) {\",\n \" return resolveMiddlewareReferences(config?.middleware ?? [], registry)\",\n \"}\",\n \"\",\n \"function resolveMiddlewareReferences(references, registry) {\",\n \" const entries = Array.isArray(references) ? references : [references]\",\n \" const middleware = []\",\n \"\",\n \" for (const reference of entries) {\",\n \" if (reference === undefined) {\",\n \" continue\",\n \" }\",\n \"\",\n ' if (typeof reference === \"function\") {',\n \" middleware.push(reference)\",\n \" continue\",\n \" }\",\n \"\",\n \" const handler = registry[reference]\",\n \" if (!handler) {\",\n ' throw new Error(`Unknown middleware reference \"${reference}\".`)',\n \" }\",\n \"\",\n \" middleware.push(handler)\",\n \" }\",\n \"\",\n \" return middleware\",\n \"}\",\n \"\",\n \"function attachAppMiddleware(routes, middleware) {\",\n \" if (!Array.isArray(middleware) || middleware.length === 0) {\",\n \" return routes\",\n \" }\",\n \"\",\n \" return routes.map((route) => ({\",\n \" ...route,\",\n \" module: {\",\n \" ...route.module,\",\n \" middleware: [...middleware, ...(route.module.middleware ?? [])],\",\n \" },\",\n \" }))\",\n \"}\",\n \"\",\n ...(importLines.length > 0 ? [\"\", ...createAppRuntimeHmrBlock(importEntries)] : []),\n \"\",\n \"export default integration\",\n ].join(\"\\n\");\n}\n\nexport function createVirtualAppLoaderModule(result: ScannedRoutesResult): string {\n if (!result.app.loader) {\n return [\"export const appLoader = undefined\", \"\", \"export default appLoader\"].join(\"\\n\");\n }\n\n return [\n `import * as appLoaderModule from ${JSON.stringify(createImportSpecifier(result.app.loader))}`,\n \"\",\n \"export const appLoader = resolveAppLoader(appLoaderModule)\",\n \"\",\n \"function resolveAppLoader(module) {\",\n \" const loader = module?.loader ?? module?.default\",\n ' if (typeof loader !== \"function\") {',\n ' throw new Error(\"Invalid app loader module. Expected a default export or named \\\\\"loader\\\\\" export.\")',\n \" }\",\n \"\",\n \" return loader\",\n \"}\",\n \"\",\n \"export default appLoader\",\n ].join(\"\\n\");\n}\n\nexport function createVirtualAppMiddlewareModule(result: ScannedRoutesResult): string {\n const middlewareEntries = Object.entries(result.app.middleware);\n const importLines = middlewareEntries.map(\n ([, file], index) =>\n `import * as middlewareModule${index} from ${JSON.stringify(createImportSpecifier(file))}`,\n );\n const registryEntries: Array<[string, string]> = middlewareEntries.map(([name], index) => [\n name,\n `resolveMiddleware(middlewareModule${index}, ${JSON.stringify(name)})`,\n ]);\n\n return [\n ...importLines,\n importLines.length > 0 ? \"\" : \"\",\n `export const appMiddlewareRegistry = ${serializeObject(registryEntries)}`,\n \"\",\n \"function resolveMiddleware(module, name) {\",\n \" const middleware = module?.middleware ?? module?.default\",\n ' if (typeof middleware !== \"function\") {',\n ' throw new Error(`Invalid middleware module \"${name}\". Expected a default export or named \"middleware\" export.`)',\n \" }\",\n \"\",\n \" return middleware\",\n \"}\",\n \"\",\n \"export default appMiddlewareRegistry\",\n ].join(\"\\n\");\n}\n\nexport function createVirtualServerRoutesModule(result: ScannedRoutesResult): string {\n const routeEntries = result.server.routes;\n const uniqueFiles = Array.from(\n new Set(routeEntries.flatMap((route) => [route.file, ...route.directoryMiddleware])),\n );\n const importLines = uniqueFiles.map(\n (specifier, index) =>\n `import * as importedServerFile${index} from ${JSON.stringify(createImportSpecifier(specifier))}`,\n );\n const fileModuleBindings = uniqueFiles.map(\n (_specifier, index) => `const serverFileModule${index} = importedServerFile${index}`,\n );\n const fileIndexMap = serializeObject(\n uniqueFiles.map((specifier, index) => [specifier, String(index)]),\n );\n\n return [\n `export { serverMiddlewareRegistry } from ${JSON.stringify(GENERATED_SERVER_MIDDLEWARE_ID)}`,\n \"\",\n ...importLines,\n importLines.length > 0 ? \"\" : \"\",\n ...fileModuleBindings,\n fileModuleBindings.length > 0 ? \"\" : \"\",\n `export const serverRoutes = ${serializeArrayOfObjects(\n routeEntries.map((route) => [\n [\"id\", JSON.stringify(route.id)],\n [\"path\", JSON.stringify(route.path)],\n [\"file\", JSON.stringify(route.file)],\n [\n \"definition\",\n `resolveServerRoute(getLoadedServerModule(${JSON.stringify(route.file)}), ${JSON.stringify(route.file)})`,\n ],\n [\n \"directoryMiddlewareNames\",\n `resolveDirectoryMiddlewareNames(${serializeArray(route.directoryMiddleware)})`,\n ],\n ]),\n )}`,\n \"\",\n \"function resolveDirectoryMiddlewareNames(files) {\",\n \" return files.flatMap((file) => resolveMiddlewareNames(getLoadedServerModule(file), file))\",\n \"}\",\n \"\",\n \"function resolveServerRoute(module, file) {\",\n \" const route = module?.default ?? module?.route\",\n ' if (!route || typeof route !== \"object\") {',\n ' throw new Error(`Invalid server route module \"${file}\". Expected a default export or named \"route\" export.`)',\n \" }\",\n \"\",\n \" return {\",\n \" middlewareNames: normalizeMiddlewareNames(route?.middleware),\",\n ' meta: route?.meta && typeof route.meta === \"object\" ? route.meta : undefined,',\n \" handler: asHandler(route?.handler),\",\n \" GET: asHandler(route?.GET),\",\n \" POST: asHandler(route?.POST),\",\n \" PUT: asHandler(route?.PUT),\",\n \" PATCH: asHandler(route?.PATCH),\",\n \" DELETE: asHandler(route?.DELETE),\",\n \" HEAD: asHandler(route?.HEAD),\",\n \" OPTIONS: asHandler(route?.OPTIONS),\",\n \" }\",\n \"}\",\n \"\",\n \"function resolveMiddlewareNames(module, file) {\",\n \" if (!module) {\",\n \" return []\",\n \" }\",\n \"\",\n \" const middleware = module?.middleware ?? module?.default\",\n \" if (middleware === undefined) {\",\n \" return []\",\n \" }\",\n \"\",\n ' if (!Array.isArray(middleware) || middleware.some((name) => typeof name !== \"string\")) {',\n ' throw new Error(`Invalid server route directory middleware \"${file}\". Expected a default export or named \"middleware\" export with a string array.`)',\n \" }\",\n \"\",\n \" return middleware\",\n \"}\",\n \"\",\n \"function normalizeMiddlewareNames(value) {\",\n \" if (value === undefined) {\",\n \" return undefined\",\n \" }\",\n \"\",\n ' if (!Array.isArray(value) || value.some((name) => typeof name !== \"string\")) {',\n \" throw new Error('Server route \\\"middleware\\\" must be a string array.')\",\n \" }\",\n \"\",\n \" return value\",\n \"}\",\n \"\",\n \"function asHandler(value) {\",\n ' return typeof value === \"function\" ? value : undefined',\n \"}\",\n \"\",\n \"function getLoadedServerModule(file) {\",\n ` const fileIndex = ${fileIndexMap}[file]`,\n \" if (fileIndex === undefined) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" return [\",\n ...uniqueFiles.map(\n (_, index) => ` serverFileModule${index}${index < uniqueFiles.length - 1 ? \",\" : \"\"}`,\n ),\n \" ][fileIndex]\",\n \"}\",\n \"\",\n \"export default serverRoutes\",\n ].join(\"\\n\");\n}\n\nexport function createVirtualServerMiddlewareModule(result: ScannedRoutesResult): string {\n const middlewareEntries = Object.entries(result.server.middleware);\n const importLines = middlewareEntries.map(\n ([, file], index) =>\n `import * as middlewareModule${index} from ${JSON.stringify(createImportSpecifier(file))}`,\n );\n const registryEntries: Array<[string, string]> = middlewareEntries.map(([name], index) => [\n name,\n `resolveMiddleware(middlewareModule${index}, ${JSON.stringify(name)})`,\n ]);\n\n return [\n ...importLines,\n importLines.length > 0 ? \"\" : \"\",\n `export const serverMiddlewareRegistry = ${serializeObject(registryEntries)}`,\n \"\",\n \"function resolveMiddleware(module, name) {\",\n \" const middleware = module?.middleware ?? module?.default\",\n ' if (typeof middleware !== \"function\") {',\n ' throw new Error(`Invalid server middleware module \"${name}\". Expected a default export or named \"middleware\" export.`)',\n \" }\",\n \"\",\n \" return middleware\",\n \"}\",\n \"\",\n \"export default serverMiddlewareRegistry\",\n ].join(\"\\n\");\n}\n\nexport function createVirtualAppPluginModule(): string {\n return [\n `import { createIntegration } from ${JSON.stringify(GENERATED_APP_RUNTIME_ID)}`,\n \"\",\n \"function createAppRouteMiddleware(getIntegration) {\",\n \" return async (request, next) => {\",\n \" const integration = await getIntegration()\",\n \" const routeMatch = integration.match(new URL(request.url).pathname)\",\n \" if (!routeMatch) {\",\n \" return next(request)\",\n \" }\",\n \"\",\n \" return integration.handleRequest(request)\",\n \" }\",\n \"}\",\n \"\",\n \"function createAppRouteServerPlugin(options = {}) {\",\n \" let integrationPromise\",\n \"\",\n \" return (server) => {\",\n \" server.options.middleware.push(\",\n \" createAppRouteMiddleware(() => {\",\n \" if (!integrationPromise) {\",\n \" integrationPromise = Promise.resolve(createIntegration(options))\",\n \" }\",\n \"\",\n \" return integrationPromise\",\n \" }),\",\n \" )\",\n \" }\",\n \"}\",\n \"\",\n \"export function createAppPlugin(options = {}) {\",\n \" return createAppRouteServerPlugin(options)\",\n \"}\",\n \"\",\n \"export const appPlugin = createAppPlugin()\",\n \"\",\n \"export default createAppPlugin\",\n ].join(\"\\n\");\n}\n\nexport function createVirtualServerPluginModule(): string {\n return [\n 'import { runMiddleware } from \"@hornjs/fest\"',\n `import { config } from ${JSON.stringify(GENERATED_CONFIG_ID)}`,\n `import { serverMiddlewareRegistry, serverRoutes } from ${JSON.stringify(GENERATED_SERVER_ROUTES_ID)}`,\n \"\",\n \"function createServerRoutesPlugin(options) {\",\n \" return (server) => {\",\n \" server.options.middleware.unshift(createServerRoutesMiddleware(options))\",\n \" }\",\n \"}\",\n \"\",\n \"function createServerRoutesMiddleware(options) {\",\n \" return async (request, next) => {\",\n \" const route = findServerRoute(options.routes, new URL(request.url).pathname)\",\n \" if (!route) {\",\n \" return next(request)\",\n \" }\",\n \"\",\n \" const handler = getRouteHandler(route, request.method)\",\n \" if (!handler) {\",\n ' return new Response(\"Method Not Allowed\", { status: 405 })',\n \" }\",\n \"\",\n \" const middleware = resolveMiddlewareChain(\",\n \" route,\",\n \" options.middlewareRegistry,\",\n \" options.globalMiddlewareNames,\",\n \" )\",\n \" if (middleware.length === 0) {\",\n \" return handleRoute(request, handler)\",\n \" }\",\n \"\",\n \" return runMiddleware(middleware, request, (nextRequest) => handleRoute(nextRequest, handler))\",\n \" }\",\n \"}\",\n \"\",\n \"async function handleRoute(request, handler) {\",\n \" const result = await handler(request)\",\n \" if (result instanceof Response) {\",\n \" return result\",\n \" }\",\n \"\",\n \" return Response.json(result)\",\n \"}\",\n \"\",\n \"function resolveMiddlewareChain(route, registry, globalMiddlewareNames = []) {\",\n \" const names = [\",\n \" ...globalMiddlewareNames,\",\n \" ...(route.directoryMiddlewareNames ?? []),\",\n \" ...(route.definition.middlewareNames ?? []),\",\n \" ]\",\n \"\",\n \" return names.map((name) => {\",\n \" const middleware = registry[name]\",\n \" if (!middleware) {\",\n ' throw new Error(`Unknown server middleware \"${name}\" referenced by route \"${route.id}\".`)',\n \" }\",\n \"\",\n \" return middleware\",\n \" })\",\n \"}\",\n \"\",\n \"function findServerRoute(routes, pathname) {\",\n \" const normalizedPathname = normalizePathname(pathname)\",\n \" return routes.find((route) => matchesServerRoutePath(route.path, normalizedPathname))\",\n \"}\",\n \"\",\n \"function matchesServerRoutePath(pattern, pathname) {\",\n \" const normalizedPattern = normalizePathname(pattern)\",\n \" if (normalizedPattern === pathname) {\",\n \" return true\",\n \" }\",\n \"\",\n \" const patternSegments = splitPathSegments(normalizedPattern)\",\n \" const pathnameSegments = splitPathSegments(pathname)\",\n \" if (patternSegments.length !== pathnameSegments.length) {\",\n \" return false\",\n \" }\",\n \"\",\n \" for (let index = 0; index < patternSegments.length; index += 1) {\",\n \" const patternSegment = patternSegments[index]\",\n \" const pathnameSegment = pathnameSegments[index]\",\n \"\",\n \" if (!patternSegment) {\",\n \" return false\",\n \" }\",\n \"\",\n ' if (patternSegment.startsWith(\":\")) {',\n \" continue\",\n \" }\",\n \"\",\n \" if (patternSegment !== pathnameSegment) {\",\n \" return false\",\n \" }\",\n \" }\",\n \"\",\n \" return true\",\n \"}\",\n \"\",\n \"function getRouteHandler(route, method) {\",\n \" const resolvedMethod = method.toUpperCase()\",\n \" const definition = route.definition\",\n \"\",\n \" switch (resolvedMethod) {\",\n ' case \"GET\":',\n \" return definition.GET ?? definition.handler\",\n ' case \"POST\":',\n \" return definition.POST ?? definition.handler\",\n ' case \"PUT\":',\n \" return definition.PUT ?? definition.handler\",\n ' case \"PATCH\":',\n \" return definition.PATCH ?? definition.handler\",\n ' case \"DELETE\":',\n \" return definition.DELETE ?? definition.handler\",\n ' case \"HEAD\":',\n \" return definition.HEAD ?? definition.handler\",\n ' case \"OPTIONS\":',\n \" return definition.OPTIONS ?? definition.handler\",\n \" default:\",\n \" return definition.handler\",\n \" }\",\n \"}\",\n \"\",\n \"function normalizePathname(pathname) {\",\n \" if (!pathname) {\",\n ' return \"/\"',\n \" }\",\n \"\",\n ' if (!pathname.startsWith(\"/\")) {',\n \" return `/${pathname}`\",\n \" }\",\n \"\",\n ' if (pathname.length > 1 && pathname.endsWith(\"/\")) {',\n ' return pathname.replace(/\\\\/+$/, \"\")',\n \" }\",\n \"\",\n \" return pathname\",\n \"}\",\n \"\",\n \"function splitPathSegments(pathname) {\",\n \" const normalized = normalizePathname(pathname)\",\n ' if (normalized === \"/\") {',\n \" return []\",\n \" }\",\n \"\",\n ' return normalized.replace(/^\\\\/+|\\\\/+$/g, \"\").split(\"/\")',\n \"}\",\n \"\",\n \"export function createServerPlugin() {\",\n \" return createServerRoutesPlugin({\",\n \" routes: serverRoutes,\",\n \" middlewareRegistry: serverMiddlewareRegistry,\",\n \" globalMiddlewareNames: config.server?.middleware ?? []\",\n \" })\",\n \"}\",\n \"\",\n \"export const serverPlugin = createServerPlugin()\",\n \"\",\n \"export default createServerPlugin\",\n ].join(\"\\n\");\n}\n\nexport function resolveVirtualModuleId(id: string): string | null {\n if (id === VIRTUAL_ROUTES_MANIFEST_ID || id === RESOLVED_VIRTUAL_ROUTES_MANIFEST_ID) {\n return RESOLVED_VIRTUAL_ROUTES_MANIFEST_ID;\n }\n\n if (id === VIRTUAL_ROUTES_MODULES_ID || id === RESOLVED_VIRTUAL_ROUTES_MODULES_ID) {\n return RESOLVED_VIRTUAL_ROUTES_MODULES_ID;\n }\n\n if (id === VIRTUAL_APP_RUNTIME_ID || id === RESOLVED_VIRTUAL_APP_RUNTIME_ID) {\n return RESOLVED_VIRTUAL_APP_RUNTIME_ID;\n }\n\n if (id === GENERATED_ROUTES_MANIFEST_ID || id === RESOLVED_GENERATED_ROUTES_MANIFEST_ID) {\n return RESOLVED_GENERATED_ROUTES_MANIFEST_ID;\n }\n\n if (id === GENERATED_ROUTES_MODULES_ID || id === RESOLVED_GENERATED_ROUTES_MODULES_ID) {\n return RESOLVED_GENERATED_ROUTES_MODULES_ID;\n }\n\n if (id === GENERATED_APP_RUNTIME_ID || id === RESOLVED_GENERATED_APP_RUNTIME_ID) {\n return RESOLVED_GENERATED_APP_RUNTIME_ID;\n }\n\n if (id === GENERATED_APP_LOADER_ID || id === RESOLVED_GENERATED_APP_LOADER_ID) {\n return RESOLVED_GENERATED_APP_LOADER_ID;\n }\n\n if (id === GENERATED_APP_MIDDLEWARE_ID || id === RESOLVED_GENERATED_APP_MIDDLEWARE_ID) {\n return RESOLVED_GENERATED_APP_MIDDLEWARE_ID;\n }\n\n if (id === GENERATED_APP_PLUGIN_ID || id === RESOLVED_GENERATED_APP_PLUGIN_ID) {\n return RESOLVED_GENERATED_APP_PLUGIN_ID;\n }\n\n if (id === GENERATED_SERVER_ROUTES_ID || id === RESOLVED_GENERATED_SERVER_ROUTES_ID) {\n return RESOLVED_GENERATED_SERVER_ROUTES_ID;\n }\n\n if (id === GENERATED_SERVER_MIDDLEWARE_ID || id === RESOLVED_GENERATED_SERVER_MIDDLEWARE_ID) {\n return RESOLVED_GENERATED_SERVER_MIDDLEWARE_ID;\n }\n\n if (id === GENERATED_SERVER_PLUGIN_ID || id === RESOLVED_GENERATED_SERVER_PLUGIN_ID) {\n return RESOLVED_GENERATED_SERVER_PLUGIN_ID;\n }\n\n if (id === GENERATED_CONFIG_ID || id === RESOLVED_GENERATED_CONFIG_ID) {\n return RESOLVED_GENERATED_CONFIG_ID;\n }\n\n return null;\n}\n\nexport function createVirtualConfigModule(options: {\n config: Record<string, unknown>;\n hasConfigFile: boolean;\n}): string {\n if (!options.hasConfigFile) {\n return [\n \"export const hasConfig = false\",\n \"export const config = {}\",\n \"\",\n \"export default config\",\n ].join(\"\\n\");\n }\n\n return [\n \"export const hasConfig = true\",\n `export const config = ${JSON.stringify(options.config, null, 2)}`,\n \"\",\n \"export default config\",\n ].join(\"\\n\");\n}\n\nfunction createDynamicRouteModulesModule(result: ScannedRoutesResult): string {\n const routeFiles = serializeObject(\n result.modules.map((module) => [module.id, serializeArray(resolveModuleSpecifiers(module))]),\n );\n const routeModules = serializeObject(\n result.modules.map((module) => [\n module.id,\n `() => loadResolvedRouteModule(${JSON.stringify(module.id)})`,\n ]),\n );\n const routeImportSpecifiers = Array.from(\n new Set(result.modules.flatMap((module) => resolveModuleSpecifiers(module))),\n );\n const hmrBlock = createRouteModulesHmrBlock(routeImportSpecifiers);\n\n return [\n `export const routeFiles = ${routeFiles}`,\n \"\",\n `export const routeModules = ${routeModules}`,\n \"\",\n \"export async function loadRouteModule(id) {\",\n \" const importer = routeModules[id]\",\n \" return importer ? importer() : undefined\",\n \"}\",\n \"\",\n \"async function loadResolvedRouteModule(id) {\",\n ` const routeDefinitions = ${serializeObject(result.modules.map((module) => [module.id, createRouteDefinition(module)]))}`,\n \" const definition = routeDefinitions[id]\",\n \" if (!definition) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" const loadedModules = await Promise.all(definition.files.map(file => import(file)))\",\n \" return createPhialRouteModule(definition, loadedModules)\",\n \"}\",\n \"\",\n ...createRouteModuleHelperLines(),\n ...(hmrBlock.length > 0 ? [\"\", ...hmrBlock] : []),\n \"\",\n \"export default routeModules\",\n ].join(\"\\n\");\n}\n\nfunction createEagerRouteModulesModule(result: ScannedRoutesResult): string {\n const uniqueFiles = Array.from(\n new Set(result.modules.flatMap((module) => resolveModuleSpecifiers(module))),\n );\n const importLines = uniqueFiles.map((specifier, index) => {\n return `import * as importedRouteFile${index} from ${JSON.stringify(specifier)}`;\n });\n const fileModuleInitializers = uniqueFiles.map((_specifier, index) => {\n return `let routeFileModule${index} = importedRouteFile${index}`;\n });\n const fileSetters = uniqueFiles.map((_specifier, index) => {\n return ` (nextModule) => { if (nextModule) routeFileModule${index} = nextModule }`;\n });\n const routeDefinitions = serializeObject(\n result.modules.map((module) => [module.id, createRouteDefinition(module)]),\n );\n const routeFiles = serializeObject(\n result.modules.map((module) => [module.id, serializeArray(resolveModuleSpecifiers(module))]),\n );\n const routeModules = serializeObject(\n result.modules.map((module) => [\n module.id,\n `createResolvedRouteModule(${JSON.stringify(module.id)})`,\n ]),\n );\n const hmrBlock = createRouteModulesHmrBlock(uniqueFiles, {\n applyUpdatedModules: [\n ` const applyFileModuleUpdates = [\\n${fileSetters.join(\",\\n\")}\\n ]`,\n \" nextModules.forEach((nextModule, index) => {\",\n \" const applyUpdate = applyFileModuleUpdates[index]\",\n \" if (applyUpdate) {\",\n \" applyUpdate(nextModule)\",\n \" }\",\n \" })\",\n \"\",\n ` const routeIds = ${JSON.stringify(result.modules.map((module) => module.id))}`,\n \" routeIds.forEach((routeId) => {\",\n \" routeModules[routeId] = createResolvedRouteModule(routeId)\",\n \" })\",\n \"\",\n ],\n });\n\n return [\n ...importLines,\n importLines.length > 0 ? \"\" : \"\",\n ...fileModuleInitializers,\n fileModuleInitializers.length > 0 ? \"\" : \"\",\n `const routeDefinitions = ${routeDefinitions}`,\n \"\",\n `export const routeFiles = ${routeFiles}`,\n \"\",\n `export const routeModules = ${routeModules}`,\n \"\",\n \"export function loadRouteModule(id) {\",\n \" return routeModules[id]\",\n \"}\",\n \"\",\n \"function createResolvedRouteModule(id) {\",\n \" const definition = routeDefinitions[id]\",\n \" if (!definition) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" const loadedModules = definition.files.map((file) => getLoadedRouteFileModule(file))\",\n \" return createPhialRouteModule(definition, loadedModules)\",\n \"}\",\n \"\",\n \"function getLoadedRouteFileModule(file) {\",\n ` const routeFileIndexMap = ${serializeObject(uniqueFiles.map((specifier, index) => [specifier, String(index)]))}`,\n \" const fileIndex = routeFileIndexMap[file]\",\n \" if (fileIndex === undefined) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" return [\",\n ...uniqueFiles.map(\n (_, index) => ` routeFileModule${index}${index < uniqueFiles.length - 1 ? \",\" : \"\"}`,\n ),\n \" ][fileIndex]\",\n \"}\",\n \"\",\n ...createRouteModuleHelperLines(),\n ...(hmrBlock.length > 0 ? [\"\", ...hmrBlock] : []),\n \"\",\n \"export default routeModules\",\n ].join(\"\\n\");\n}\n\nfunction createRouteModulesHmrBlock(\n routeImportSpecifiers: string[],\n options: {\n applyUpdatedModules?: string[];\n } = {},\n): string[] {\n if (routeImportSpecifiers.length === 0) {\n return [];\n }\n\n return [\n \"if (import.meta.hot) {\",\n ` import.meta.hot.accept(${JSON.stringify(routeImportSpecifiers)}, async (nextModules) => {`,\n ...(options.applyUpdatedModules ?? []),\n ' if (typeof window !== \"undefined\") {',\n \" const runtime = globalThis\",\n \" const applyRouteModuleHotUpdate = runtime.__ROUTE_MODULE_HMR__\",\n \"\",\n ' if (typeof applyRouteModuleHotUpdate === \"function\") {',\n \" await applyRouteModuleHotUpdate()\",\n \" return\",\n \" }\",\n \" }\",\n \"\",\n \" import.meta.hot.invalidate()\",\n \" })\",\n \"}\",\n ];\n}\n\nfunction createAppRuntimeHmrBlock(\n importEntries: Array<{\n local: string;\n exportName: \"appComponent\" | \"errorComponent\" | \"appLoader\" | \"appConfig\";\n specifier: string;\n }>,\n): string[] {\n const importSpecifiers = importEntries.map((entry) => entry.specifier);\n const updateBindings = importEntries.flatMap((entry, index) => {\n const resolveExpression =\n entry.exportName === \"appComponent\"\n ? `resolveAppComponent(${entry.local})`\n : entry.exportName === \"errorComponent\"\n ? `resolveErrorComponent(${entry.local})`\n : entry.exportName === \"appLoader\"\n ? `resolveAppLoader(${entry.local})`\n : `resolveAppConfig(${entry.local})`;\n\n return [\n ` if (nextModules[${index}]) {`,\n ` ${entry.local} = nextModules[${index}]`,\n \" }\",\n ` ${entry.exportName} = ${resolveExpression}`,\n ];\n });\n\n return [\n \"if (import.meta.hot) {\",\n ` import.meta.hot.accept(${JSON.stringify(importSpecifiers)}, async (nextModules) => {`,\n ...updateBindings,\n \" app = createAppModule(appComponent, errorComponent, appLoader)\",\n \" integration = createIntegration()\",\n \"\",\n \" if (await notifyAppRuntimeHotUpdate({\",\n \" appComponent,\",\n \" errorComponent,\",\n \" config: appConfig,\",\n \" routes,\",\n \" })) {\",\n \" return\",\n \" }\",\n \"\",\n \" import.meta.hot.invalidate()\",\n \" })\",\n \"}\",\n ];\n}\n\nfunction createRouteDefinition(module: ScannedRouteModule): string {\n const entries = Object.entries(module.files) as Array<[RouteFileKey, string]>;\n const fileEntries = entries.map(([key, file]) => [key, createImportSpecifier(file)] as const);\n const directoryMiddlewareFiles = module.directoryMiddleware.map((file) =>\n createImportSpecifier(file),\n );\n const files = Array.from(\n new Set([...fileEntries.map(([, specifier]) => specifier), ...directoryMiddlewareFiles]),\n );\n\n return `{\n id: ${JSON.stringify(module.id)},\n kind: ${JSON.stringify(module.kind)},\n files: ${serializeArray(files)},\n entryFiles: ${serializeObject(fileEntries.map(([key, specifier]) => [key, JSON.stringify(specifier)]))},\n directoryMiddlewareFiles: ${serializeArray(directoryMiddlewareFiles)}\n}`;\n}\n\nfunction createRouteModuleHelperLines(): string[] {\n return [\n \"function createPhialRouteModule(definition, loadedModules) {\",\n \" const modules = Object.fromEntries(definition.files.map((file, index) => [file, loadedModules[index]]))\",\n \" const primaryModule = resolvePrimaryModule(definition, modules)\",\n ' const errorModule = resolveEntryModule(definition, modules, \"error\")',\n ' const loadingModule = resolveEntryModule(definition, modules, \"loading\")',\n ' const loaderModule = resolveEntryModule(definition, modules, \"loader\")',\n ' const actionModule = resolveEntryModule(definition, modules, \"action\")',\n ' const middlewareModule = resolveEntryModule(definition, modules, \"middleware\")',\n \" const directoryMiddlewareModules = definition.directoryMiddlewareFiles.map((file) => modules[file])\",\n \"\",\n \" return {\",\n \" default: resolveDefaultExport(primaryModule),\",\n \" directoryMiddleware: directoryMiddlewareModules.flatMap((module) => resolveMiddlewareExport(module) ?? []),\",\n ' loader: resolveHandlerExport(loaderModule, \"loader\") ?? resolveNamedExport(primaryModule, \"loader\"),',\n ' action: resolveHandlerExport(actionModule, \"action\") ?? resolveNamedExport(primaryModule, \"action\"),',\n \" middleware: resolveMiddlewareExport(middlewareModule) ?? resolveMiddlewareExport(primaryModule, false),\",\n ' shouldRevalidate: resolveNamedExport(primaryModule, \"shouldRevalidate\"),',\n ' meta: resolveNamedExport(primaryModule, \"meta\"),',\n ' ErrorBoundary: resolveDefaultExport(errorModule) ?? resolveNamedExport(primaryModule, \"ErrorBoundary\"),',\n ' Loading: resolveDefaultExport(loadingModule) ?? resolveNamedExport(primaryModule, \"Loading\"),',\n ' onError: resolveHandlerExport(errorModule, \"onError\") ?? resolveNamedExport(primaryModule, \"onError\")',\n \" }\",\n \"}\",\n \"\",\n \"function resolvePrimaryModule(definition, modules) {\",\n \" const primaryFile = definition.entryFiles[definition.kind]\",\n \" return primaryFile ? modules[primaryFile] : undefined\",\n \"}\",\n \"\",\n \"function resolveEntryModule(definition, modules, key) {\",\n \" const file = definition.entryFiles[key]\",\n \" return file ? modules[file] : undefined\",\n \"}\",\n \"\",\n \"function resolveDefaultExport(module) {\",\n \" return module?.default\",\n \"}\",\n \"\",\n \"function resolveNamedExport(module, name) {\",\n \" return module?.[name]\",\n \"}\",\n \"\",\n \"function resolveHandlerExport(module, name) {\",\n \" if (!module) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" return module[name] ?? module.default\",\n \"}\",\n \"\",\n \"function resolveMiddlewareExport(module, allowDefault = true) {\",\n \" if (!module) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" const middleware = module.middleware ?? (allowDefault ? module.default : undefined)\",\n \" if (middleware === undefined) {\",\n \" return undefined\",\n \" }\",\n \"\",\n \" return Array.isArray(middleware) ? middleware : [middleware]\",\n \"}\",\n ];\n}\n\nfunction resolveModuleSpecifiers(module: ScannedRouteModule): string[] {\n return Array.from(\n new Set([\n ...Object.values(module.files).map((file) => createImportSpecifier(file)),\n ...module.directoryMiddleware.map((file) => createImportSpecifier(file)),\n ]),\n );\n}\n\nfunction serializeObject(entries: Array<[string, string]>): string {\n if (entries.length === 0) {\n return \"{}\";\n }\n\n return `{\\n${entries.map(([key, value]) => ` ${JSON.stringify(key)}: ${value}`).join(\",\\n\")}\\n}`;\n}\n\nfunction serializeArrayOfObjects(entries: Array<Array<[string, string]>>): string {\n if (entries.length === 0) {\n return \"[]\";\n }\n\n return `[\\n${entries.map((objectEntries) => ` ${serializeInlineObject(objectEntries)}`).join(\",\\n\")}\\n]`;\n}\n\nfunction serializeInlineObject(entries: Array<[string, string]>): string {\n if (entries.length === 0) {\n return \"{}\";\n }\n\n return `{ ${entries.map(([key, value]) => `${JSON.stringify(key)}: ${value}`).join(\", \")} }`;\n}\n\nfunction serializeArray(entries: string[]): string {\n if (entries.length === 0) {\n return \"[]\";\n }\n\n return `[\\n${entries.map((entry) => ` ${JSON.stringify(entry)}`).join(\",\\n\")}\\n]`;\n}\n\nfunction createImportSpecifier(file: string): string {\n return file.startsWith(\"/\") ? file : `/${file}`;\n}\n"],"mappings":";AAEA,MAAa,6BAA6B;AAC1C,MAAa,4BAA4B;AACzC,MAAa,yBAAyB;AACtC,MAAa,+BAA+B;AAC5C,MAAa,8BAA8B;AAC3C,MAAa,2BAA2B;AACxC,MAAa,0BAA0B;AACvC,MAAa,8BAA8B;AAC3C,MAAa,0BAA0B;AACvC,MAAa,6BAA6B;AAC1C,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAC1C,MAAa,sBAAsB;AACnC,MAAa,sCAAsC,KAAK;AACxD,MAAa,qCAAqC,KAAK;AACvD,MAAa,kCAAkC,KAAK;AACpD,MAAa,wCAAwC,KAAK;AAC1D,MAAa,uCAAuC,KAAK;AACzD,MAAa,oCAAoC,KAAK;AACtD,MAAa,mCAAmC,KAAK;AACrD,MAAa,uCAAuC,KAAK;AACzD,MAAa,mCAAmC,KAAK;AACrD,MAAa,sCAAsC,KAAK;AACxD,MAAa,0CAA0C,KAAK;AAC5D,MAAa,sCAAsC,KAAK;AACxD,MAAa,+BAA+B,KAAK;AAQjD,SAAgB,kCAAkC,QAAqC;AAGrF,QAAO;EAAC,2BAFS,KAAK,UAAU,OAAO,UAAU,MAAM,EAAE;EAEV;EAAI;EAA0B,CAAC,KAAK,KAAK;;AAG1F,SAAgB,iCACd,QACA,UAAsC,EAAE,EAChC;AACR,QAAO,QAAQ,qBAAqB,UAChC,8BAA8B,OAAO,GACrC,gCAAgC,OAAO;;AAG7C,SAAgB,8BAA8B,QAAqC;CACjF,MAAM,gBAAgB;EACpB,OAAO,IAAI,MACP;GACE,eAAe;GACf,OAAO;GACP,YAAY;GACZ,WAAW,sBAAsB,OAAO,IAAI,IAAI;GACjD,GACD;EACJ,OAAO,IAAI,QACP;GACE,eAAe;GACf,OAAO;GACP,YAAY;GACZ,WAAW,sBAAsB,OAAO,IAAI,MAAM;GACnD,GACD;EACJ,OAAO,IAAI,SACP;GACE,eAAe;GACf,OAAO;GACP,YAAY;GACZ,WAAW,sBAAsB,OAAO,IAAI,OAAO;GACpD,GACD;EACJ,OAAO,IAAI,SACP;GACE,eAAe;GACf,OAAO;GACP,YAAY;GACZ,WAAW,sBAAsB,OAAO,IAAI,OAAO;GACpD,GACD;EACL,CAAC,OAAO,QAAQ;CAMjB,MAAM,cAAc,cAAc,KAC/B,EAAE,eAAe,gBAChB,eAAe,cAAc,QAAQ,KAAK,UAAU,UAAU,GACjE;CACD,MAAM,kBAAkB,cAAc,KACnC,EAAE,eAAe,YAAY,OAAO,MAAM,KAAK,gBACjD;CACD,MAAM,qBAAqB;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AAED,QAAO;EACL;EACA,4BAA4B,KAAK,UAAU,6BAA6B;EACxE,gCAAgC,KAAK,UAAU,4BAA4B;EAC3E,yCAAyC,KAAK,UAAU,4BAA4B;EACpF;EACA,GAAG;EACH,GAAI,YAAY,SAAS,IAAI,CAAC,GAAG,GAAG,EAAE;EACtC,GAAG;EACH,GAAI,gBAAgB,SAAS,IAAI,CAAC,GAAG,GAAG,EAAE;EAC1C,GAAG;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E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AAkB,KAAK,CAAC,OAAO,UAAU,CACxF,MACA,qCAAqC,MAAM,IAAI,KAAK,UAAU,KAAK,CAAC,GACrE,CAAC;AAEF,QAAO;EACL,GAAG;EACH,YAAY,SAAS,IAAI,KAAK;EAC9B,2CAA2C,gBAAgB,gBAAgB;EAC3E;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;;AAGd,SAAgB,+BAAuC;AACrD,QAAO;EACL,qCAAqC,KAAK,UAAU,yBAAyB;EAC7E;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;;AAGd,SAAgB,kCAA0C;AACxD,QAAO;EACL;EACA,0BAA0B,KAAK,UAAU,oBAAoB;EAC7D,0DAA0D,KAAK,UAAU,2BAA2B;EACpG;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAC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"}
@@ -0,0 +1,4 @@
1
+ import { PhialBuildOptions, PhialBuildResult, buildPhialApp } from "./plugin-build.js";
2
+ import { PhialDevServerHandle, PhialDevServerOptions, startPhialDevServer } from "./plugin-dev-server.js";
3
+ import { PhialPrepareOptions, preparePhialApp } from "./plugin-prepare.js";
4
+ import { PhialStartServerHandle, PhialStartServerOptions, startPhialServer } from "./plugin-server.js";
@@ -0,0 +1,5 @@
1
+ import "./plugin-build.js";
2
+ import "./plugin-dev-server.js";
3
+ import "./plugin-prepare.js";
4
+ import "./plugin-server.js";
5
+ export {};
@@ -0,0 +1,15 @@
1
+ import { LoadPhialConfigOptions } from "../config.js";
2
+ import { build } from "vite";
3
+
4
+ //#region src/lib/vite-plugin/host/plugin-build.d.ts
5
+ interface PhialBuildOptions extends LoadPhialConfigOptions {
6
+ watch?: boolean;
7
+ }
8
+ interface PhialBuildResult {
9
+ client: Awaited<ReturnType<typeof build>>;
10
+ server: Awaited<ReturnType<typeof build>>;
11
+ }
12
+ declare function buildPhialApp(options?: PhialBuildOptions): Promise<PhialBuildResult>;
13
+ //#endregion
14
+ export { PhialBuildOptions, PhialBuildResult, buildPhialApp };
15
+ //# sourceMappingURL=plugin-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-build.d.ts","names":[],"sources":["../../../../src/lib/vite-plugin/host/plugin-build.ts"],"mappings":";;;;UAuBiB,iBAAA,SAA0B,sBAAA;EACzC,KAAA;AAAA;AAAA,UAGe,gBAAA;EACf,MAAA,EAAQ,OAAA,CAAQ,UAAA,QAAkB,KAAA;EAClC,MAAA,EAAQ,OAAA,CAAQ,UAAA,QAAkB,KAAA;AAAA;AAAA,iBAkDd,aAAA,CAAc,OAAA,GAAS,iBAAA,GAAyB,OAAA,CAAQ,gBAAA"}
@@ -0,0 +1,242 @@
1
+ import { loadPhialConfig } from "../config.js";
2
+ import { createClientEntryModule } from "../generated/client-entry.js";
3
+ import { phialVitePlugin } from "../index.js";
4
+ import { resolve } from "node:path";
5
+ import { build, mergeConfig } from "vite";
6
+ import { mkdir } from "node:fs/promises";
7
+ import vue from "@vitejs/plugin-vue";
8
+ import vueJsx from "@vitejs/plugin-vue-jsx";
9
+ //#region src/lib/vite-plugin/host/plugin-build.ts
10
+ const PHIAL_BUILD_CLIENT_ENTRY_ID = "virtual:phial-client-entry";
11
+ const RESOLVED_PHIAL_BUILD_CLIENT_ENTRY_ID = "\0virtual:phial-client-entry";
12
+ const PHIAL_BUILD_SERVER_ENTRY_ID = "virtual:phial-server-entry";
13
+ const RESOLVED_PHIAL_BUILD_SERVER_ENTRY_ID = "\0virtual:phial-server-entry";
14
+ const DEFAULT_CLIENT_BUILD_OUT_DIR = ".output/public";
15
+ const DEFAULT_SERVER_BUILD_OUT_DIR = ".output/server";
16
+ function createPhialBuildServerEntryModule() {
17
+ return [
18
+ "import { Server } from \"@hornjs/fest\"",
19
+ "import { NodeRuntimeAdapter } from \"@hornjs/fest/node\"",
20
+ "import { serveStatic } from \"@hornjs/fest/static\"",
21
+ "import createAppPlugin from \"phial/generated-app-plugin\"",
22
+ "import createServerPlugin from \"phial/generated-server-plugin\"",
23
+ "",
24
+ "export const generatedAppPluginId = \"phial/generated-app-plugin\"",
25
+ "export const generatedServerPluginId = \"phial/generated-server-plugin\"",
26
+ "",
27
+ "export function createServerApp(options = {}) {",
28
+ " const {",
29
+ " manual = false,",
30
+ " clientEntryPath,",
31
+ " publicDir,",
32
+ " fetch = createNotFoundResponse,",
33
+ " middleware = [],",
34
+ " plugins = [],",
35
+ " adapter = new NodeRuntimeAdapter(),",
36
+ " ...serverOptions",
37
+ " } = options",
38
+ " return new Server({",
39
+ " manual,",
40
+ " adapter,",
41
+ " ...serverOptions,",
42
+ " middleware: [",
43
+ " ...(publicDir ? [serveStatic({ dir: publicDir })] : []),",
44
+ " ...middleware,",
45
+ " ],",
46
+ " plugins: [",
47
+ " createServerPlugin(),",
48
+ " createAppPlugin({ clientEntryPath }),",
49
+ " ...plugins,",
50
+ " ],",
51
+ " fetch,",
52
+ " })",
53
+ "}",
54
+ "",
55
+ "function createNotFoundResponse() {",
56
+ " return new Response(\"Not Found\", { status: 404 })",
57
+ "}",
58
+ "",
59
+ "export default createServerApp"
60
+ ].join("\n");
61
+ }
62
+ async function buildPhialApp(options = {}) {
63
+ const loadedConfig = await loadPhialConfig({
64
+ root: options.root,
65
+ configFile: options.configFile,
66
+ command: "build",
67
+ mode: options.mode ?? "production",
68
+ isSsrBuild: false,
69
+ isPreview: false,
70
+ logLevel: options.logLevel
71
+ });
72
+ const root = loadedConfig.configRoot;
73
+ return {
74
+ client: await build(createPhialClientBuildConfig(loadedConfig.config, root, options)),
75
+ server: await build(await createPhialServerBuildConfig(loadedConfig.config, root, options))
76
+ };
77
+ }
78
+ function createPhialClientBuildConfig(config, root, options) {
79
+ const vueFeatureFlags = {
80
+ __VUE_OPTIONS_API__: true,
81
+ __VUE_PROD_DEVTOOLS__: false,
82
+ __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: true
83
+ };
84
+ const routesPlugin = phialVitePlugin({
85
+ ...config.plugin,
86
+ root: config.plugin?.root ?? root
87
+ });
88
+ const clientEntryPlugin = createPhialBuildClientEntryPlugin();
89
+ const userViteConfig = config.vite ?? {};
90
+ const userPlugins = normalizePlugins(userViteConfig.plugins);
91
+ const defaultBuildConfig = createDefaultClientBuildConfig(userViteConfig, options.watch);
92
+ return mergeConfig({
93
+ configFile: false,
94
+ root,
95
+ appType: "custom",
96
+ mode: "production",
97
+ logLevel: options.logLevel ?? "info",
98
+ define: vueFeatureFlags,
99
+ optimizeDeps: { rolldownOptions: { transform: { define: Object.fromEntries(Object.entries(vueFeatureFlags).map(([key, value]) => [key, JSON.stringify(value)])) } } },
100
+ plugins: createBuildPlugins({
101
+ entryPlugin: clientEntryPlugin,
102
+ routesPlugin,
103
+ userPlugins
104
+ }),
105
+ build: defaultBuildConfig
106
+ }, userViteConfig);
107
+ }
108
+ async function createPhialServerBuildConfig(config, root, options) {
109
+ const routesPlugin = phialVitePlugin({
110
+ ...config.plugin,
111
+ root: config.plugin?.root ?? root
112
+ });
113
+ const serverEntryPlugin = createPhialBuildServerEntryPlugin();
114
+ const userViteConfig = config.vite ?? {};
115
+ const userPlugins = normalizePlugins(userViteConfig.plugins);
116
+ const serverOutDir = resolve(root, DEFAULT_SERVER_BUILD_OUT_DIR);
117
+ await mkdir(serverOutDir, { recursive: true });
118
+ return mergeConfig({
119
+ configFile: false,
120
+ root,
121
+ appType: "custom",
122
+ mode: "production",
123
+ logLevel: options.logLevel ?? "info",
124
+ plugins: createBuildPlugins({
125
+ entryPlugin: serverEntryPlugin,
126
+ routesPlugin,
127
+ userPlugins
128
+ }),
129
+ build: {
130
+ ssr: true,
131
+ outDir: serverOutDir,
132
+ emptyOutDir: true,
133
+ copyPublicDir: false,
134
+ minify: false,
135
+ watch: options.watch ? {} : null,
136
+ manifest: false,
137
+ ssrManifest: false,
138
+ rollupOptions: {
139
+ input: PHIAL_BUILD_SERVER_ENTRY_ID,
140
+ output: {
141
+ format: "es",
142
+ entryFileNames: "index.js"
143
+ }
144
+ }
145
+ }
146
+ }, {
147
+ ...userViteConfig,
148
+ build: {
149
+ ...userViteConfig.build,
150
+ ssr: true,
151
+ outDir: serverOutDir,
152
+ emptyOutDir: true,
153
+ copyPublicDir: false,
154
+ minify: false,
155
+ watch: options.watch ? userViteConfig.build?.watch ?? {} : null,
156
+ manifest: false,
157
+ ssrManifest: false,
158
+ rollupOptions: mergeConfig({
159
+ input: PHIAL_BUILD_SERVER_ENTRY_ID,
160
+ output: {
161
+ format: "es",
162
+ entryFileNames: "index.js"
163
+ }
164
+ }, userViteConfig.build?.rollupOptions ?? {})
165
+ }
166
+ });
167
+ }
168
+ function createDefaultClientBuildConfig(userViteConfig, watch) {
169
+ const userBuild = userViteConfig.build ?? {};
170
+ const hasCustomInput = Boolean(userBuild.lib || userBuild.rollupOptions?.input);
171
+ return {
172
+ outDir: userBuild.outDir ?? ".output/public",
173
+ manifest: userBuild.manifest ?? true,
174
+ ...watch ? { watch: userBuild.watch ?? {} } : {},
175
+ ...!hasCustomInput ? { rollupOptions: mergeConfig({ input: { "client-entry": PHIAL_BUILD_CLIENT_ENTRY_ID } }, userBuild.rollupOptions ?? {}) } : {}
176
+ };
177
+ }
178
+ function createPhialBuildClientEntryPlugin() {
179
+ return {
180
+ name: "phial:build-client-entry",
181
+ enforce: "pre",
182
+ resolveId(id) {
183
+ if (id === PHIAL_BUILD_CLIENT_ENTRY_ID) return RESOLVED_PHIAL_BUILD_CLIENT_ENTRY_ID;
184
+ return null;
185
+ },
186
+ load(id) {
187
+ if (id === RESOLVED_PHIAL_BUILD_CLIENT_ENTRY_ID) return createClientEntryModule({ idPrefix: "" });
188
+ return null;
189
+ }
190
+ };
191
+ }
192
+ function createPhialBuildServerEntryPlugin() {
193
+ return {
194
+ name: "phial:build-server-entry",
195
+ enforce: "pre",
196
+ resolveId(id) {
197
+ if (id === PHIAL_BUILD_SERVER_ENTRY_ID) return RESOLVED_PHIAL_BUILD_SERVER_ENTRY_ID;
198
+ return null;
199
+ },
200
+ load(id) {
201
+ if (id === RESOLVED_PHIAL_BUILD_SERVER_ENTRY_ID) return createPhialBuildServerEntryModule();
202
+ return null;
203
+ }
204
+ };
205
+ }
206
+ function createBuildPlugins(options) {
207
+ return [
208
+ options.entryPlugin,
209
+ ...hasVuePlugin(options.userPlugins) ? [] : [vue()],
210
+ ...hasVueJsxPlugin(options.userPlugins) ? [] : [vueJsx()],
211
+ ...hasPhialPlugin(options.userPlugins) ? [] : [options.routesPlugin],
212
+ ...options.userPlugins
213
+ ];
214
+ }
215
+ function hasPhialPlugin(plugins) {
216
+ return plugins.some((plugin) => plugin && typeof plugin === "object" && "name" in plugin && plugin.name === "phial:routes");
217
+ }
218
+ function hasVuePlugin(plugins) {
219
+ return plugins.some((plugin) => plugin && typeof plugin === "object" && "name" in plugin && plugin.name === "vite:vue");
220
+ }
221
+ function hasVueJsxPlugin(plugins) {
222
+ return plugins.some((plugin) => plugin && typeof plugin === "object" && "name" in plugin && plugin.name === "vite:vue-jsx");
223
+ }
224
+ function normalizePlugins(plugins) {
225
+ if (!plugins) return [];
226
+ return flattenPlugins(Array.isArray(plugins) ? plugins : [plugins]);
227
+ }
228
+ function flattenPlugins(plugins) {
229
+ const flattened = [];
230
+ for (const plugin of plugins) {
231
+ if (Array.isArray(plugin)) {
232
+ flattened.push(...flattenPlugins(plugin));
233
+ continue;
234
+ }
235
+ flattened.push(plugin);
236
+ }
237
+ return flattened;
238
+ }
239
+ //#endregion
240
+ export { DEFAULT_CLIENT_BUILD_OUT_DIR, DEFAULT_SERVER_BUILD_OUT_DIR, buildPhialApp, createPhialBuildServerEntryModule };
241
+
242
+ //# sourceMappingURL=plugin-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-build.js","names":["viteBuild"],"sources":["../../../../src/lib/vite-plugin/host/plugin-build.ts"],"sourcesContent":["import { mkdir } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport vue from \"@vitejs/plugin-vue\";\nimport vueJsx from \"@vitejs/plugin-vue-jsx\";\nimport {\n build as viteBuild,\n mergeConfig,\n type InlineConfig,\n type Plugin,\n type PluginOption,\n} from \"vite\";\nimport { loadPhialConfig, type PhialConfig, type LoadPhialConfigOptions } from \"../config\";\nimport { createClientEntryModule } from \"../generated/client-entry\";\nimport { phialVitePlugin } from \"../index\";\n\nconst PHIAL_BUILD_CLIENT_ENTRY_ID = \"virtual:phial-client-entry\";\nconst RESOLVED_PHIAL_BUILD_CLIENT_ENTRY_ID = \"\\0virtual:phial-client-entry\";\nconst PHIAL_BUILD_SERVER_ENTRY_ID = \"virtual:phial-server-entry\";\nconst RESOLVED_PHIAL_BUILD_SERVER_ENTRY_ID = \"\\0virtual:phial-server-entry\";\n\nexport const DEFAULT_CLIENT_BUILD_OUT_DIR = \".output/public\";\nexport const DEFAULT_SERVER_BUILD_OUT_DIR = \".output/server\";\n\nexport interface PhialBuildOptions extends LoadPhialConfigOptions {\n watch?: boolean;\n}\n\nexport interface PhialBuildResult {\n client: Awaited<ReturnType<typeof viteBuild>>;\n server: Awaited<ReturnType<typeof viteBuild>>;\n}\n\nexport function createPhialBuildServerEntryModule(): string {\n return [\n 'import { Server } from \"@hornjs/fest\"',\n 'import { NodeRuntimeAdapter } from \"@hornjs/fest/node\"',\n 'import { serveStatic } from \"@hornjs/fest/static\"',\n 'import createAppPlugin from \"phial/generated-app-plugin\"',\n 'import createServerPlugin from \"phial/generated-server-plugin\"',\n \"\",\n 'export const generatedAppPluginId = \"phial/generated-app-plugin\"',\n 'export const generatedServerPluginId = \"phial/generated-server-plugin\"',\n \"\",\n \"export function createServerApp(options = {}) {\",\n \" const {\",\n \" manual = false,\",\n \" clientEntryPath,\",\n \" publicDir,\",\n \" fetch = createNotFoundResponse,\",\n \" middleware = [],\",\n \" plugins = [],\",\n \" adapter = new NodeRuntimeAdapter(),\",\n \" ...serverOptions\",\n \" } = options\",\n \" return new Server({\",\n \" manual,\",\n \" adapter,\",\n \" ...serverOptions,\",\n \" middleware: [\",\n \" ...(publicDir ? [serveStatic({ dir: publicDir })] : []),\",\n \" ...middleware,\",\n \" ],\",\n \" plugins: [\",\n \" createServerPlugin(),\",\n \" createAppPlugin({ clientEntryPath }),\",\n \" ...plugins,\",\n \" ],\",\n \" fetch,\",\n \" })\",\n \"}\",\n \"\",\n \"function createNotFoundResponse() {\",\n ' return new Response(\"Not Found\", { status: 404 })',\n \"}\",\n \"\",\n \"export default createServerApp\",\n ].join(\"\\n\");\n}\n\nexport async function buildPhialApp(options: PhialBuildOptions = {}): Promise<PhialBuildResult> {\n const loadedConfig = await loadPhialConfig({\n root: options.root,\n configFile: options.configFile,\n command: \"build\",\n mode: options.mode ?? \"production\",\n isSsrBuild: false,\n isPreview: false,\n logLevel: options.logLevel,\n });\n const root = loadedConfig.configRoot;\n const client = await viteBuild(createPhialClientBuildConfig(loadedConfig.config, root, options));\n const server = await viteBuild(\n await createPhialServerBuildConfig(loadedConfig.config, root, options),\n );\n\n return {\n client,\n server,\n };\n}\n\nfunction createPhialClientBuildConfig(\n config: PhialConfig,\n root: string,\n options: Pick<PhialBuildOptions, \"watch\" | \"logLevel\">,\n): InlineConfig {\n const vueFeatureFlags = {\n __VUE_OPTIONS_API__: true,\n __VUE_PROD_DEVTOOLS__: false,\n __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: true,\n };\n const routesPlugin = phialVitePlugin({\n ...config.plugin,\n root: config.plugin?.root ?? root,\n });\n const clientEntryPlugin = createPhialBuildClientEntryPlugin();\n const userViteConfig = config.vite ?? {};\n const userPlugins = normalizePlugins(userViteConfig.plugins);\n const defaultBuildConfig = createDefaultClientBuildConfig(userViteConfig, options.watch);\n const baseConfig: InlineConfig = {\n configFile: false,\n root,\n appType: \"custom\",\n mode: \"production\",\n logLevel: options.logLevel ?? \"info\",\n define: vueFeatureFlags,\n optimizeDeps: {\n rolldownOptions: {\n transform: {\n define: Object.fromEntries(\n Object.entries(vueFeatureFlags).map(([key, value]) => [key, JSON.stringify(value)]),\n ),\n },\n },\n },\n plugins: createBuildPlugins({\n entryPlugin: clientEntryPlugin,\n routesPlugin,\n userPlugins,\n }),\n build: defaultBuildConfig,\n };\n\n return mergeConfig(baseConfig, userViteConfig);\n}\n\nasync function createPhialServerBuildConfig(\n config: PhialConfig,\n root: string,\n options: Pick<PhialBuildOptions, \"watch\" | \"logLevel\">,\n): Promise<InlineConfig> {\n const routesPlugin = phialVitePlugin({\n ...config.plugin,\n root: config.plugin?.root ?? root,\n });\n const serverEntryPlugin = createPhialBuildServerEntryPlugin();\n const userViteConfig = config.vite ?? {};\n const userPlugins = normalizePlugins(userViteConfig.plugins);\n const serverOutDir = resolve(root, DEFAULT_SERVER_BUILD_OUT_DIR);\n\n await mkdir(serverOutDir, {\n recursive: true,\n });\n const baseConfig: InlineConfig = {\n configFile: false,\n root,\n appType: \"custom\",\n mode: \"production\",\n logLevel: options.logLevel ?? \"info\",\n plugins: createBuildPlugins({\n entryPlugin: serverEntryPlugin,\n routesPlugin,\n userPlugins,\n }),\n build: {\n ssr: true,\n outDir: serverOutDir,\n emptyOutDir: true,\n copyPublicDir: false,\n minify: false,\n watch: options.watch ? {} : null,\n manifest: false,\n ssrManifest: false,\n rollupOptions: {\n input: PHIAL_BUILD_SERVER_ENTRY_ID,\n output: {\n format: \"es\",\n entryFileNames: \"index.js\",\n },\n },\n },\n };\n\n return mergeConfig(baseConfig, {\n ...userViteConfig,\n build: {\n ...userViteConfig.build,\n ssr: true,\n outDir: serverOutDir,\n emptyOutDir: true,\n copyPublicDir: false,\n minify: false,\n watch: options.watch ? (userViteConfig.build?.watch ?? {}) : null,\n manifest: false,\n ssrManifest: false,\n rollupOptions: mergeConfig(\n {\n input: PHIAL_BUILD_SERVER_ENTRY_ID,\n output: {\n format: \"es\",\n entryFileNames: \"index.js\",\n },\n },\n userViteConfig.build?.rollupOptions ?? {},\n ),\n },\n });\n}\n\nfunction createDefaultClientBuildConfig(\n userViteConfig: InlineConfig,\n watch: boolean | undefined,\n): NonNullable<InlineConfig[\"build\"]> {\n const userBuild = userViteConfig.build ?? {};\n const hasCustomInput = Boolean(userBuild.lib || userBuild.rollupOptions?.input);\n\n return {\n outDir: userBuild.outDir ?? DEFAULT_CLIENT_BUILD_OUT_DIR,\n manifest: userBuild.manifest ?? true,\n ...(watch ? { watch: userBuild.watch ?? {} } : {}),\n ...(!hasCustomInput\n ? {\n rollupOptions: mergeConfig(\n {\n input: {\n \"client-entry\": PHIAL_BUILD_CLIENT_ENTRY_ID,\n },\n },\n userBuild.rollupOptions ?? {},\n ),\n }\n : {}),\n };\n}\n\nfunction createPhialBuildClientEntryPlugin(): Plugin {\n return {\n name: \"phial:build-client-entry\",\n enforce: \"pre\",\n resolveId(id) {\n if (id === PHIAL_BUILD_CLIENT_ENTRY_ID) {\n return RESOLVED_PHIAL_BUILD_CLIENT_ENTRY_ID;\n }\n\n return null;\n },\n load(id) {\n if (id === RESOLVED_PHIAL_BUILD_CLIENT_ENTRY_ID) {\n return createClientEntryModule({\n idPrefix: \"\",\n });\n }\n\n return null;\n },\n };\n}\n\nfunction createPhialBuildServerEntryPlugin(): Plugin {\n return {\n name: \"phial:build-server-entry\",\n enforce: \"pre\",\n resolveId(id) {\n if (id === PHIAL_BUILD_SERVER_ENTRY_ID) {\n return RESOLVED_PHIAL_BUILD_SERVER_ENTRY_ID;\n }\n\n return null;\n },\n load(id) {\n if (id === RESOLVED_PHIAL_BUILD_SERVER_ENTRY_ID) {\n return createPhialBuildServerEntryModule();\n }\n\n return null;\n },\n };\n}\n\nfunction createBuildPlugins(options: {\n entryPlugin: Plugin;\n routesPlugin: Plugin;\n userPlugins: PluginOption[];\n}): PluginOption[] {\n return [\n options.entryPlugin,\n ...(hasVuePlugin(options.userPlugins) ? [] : [vue() as PluginOption]),\n ...(hasVueJsxPlugin(options.userPlugins) ? [] : [vueJsx() as PluginOption]),\n ...(hasPhialPlugin(options.userPlugins) ? [] : [options.routesPlugin]),\n ...options.userPlugins,\n ];\n}\n\nfunction hasPhialPlugin(plugins: PluginOption[]): boolean {\n return plugins.some(\n (plugin) =>\n plugin && typeof plugin === \"object\" && \"name\" in plugin && plugin.name === \"phial:routes\",\n );\n}\n\nfunction hasVuePlugin(plugins: PluginOption[]): boolean {\n return plugins.some(\n (plugin) =>\n plugin && typeof plugin === \"object\" && \"name\" in plugin && plugin.name === \"vite:vue\",\n );\n}\n\nfunction hasVueJsxPlugin(plugins: PluginOption[]): boolean {\n return plugins.some(\n (plugin) =>\n plugin && typeof plugin === \"object\" && \"name\" in plugin && plugin.name === \"vite:vue-jsx\",\n );\n}\n\nfunction normalizePlugins(plugins: InlineConfig[\"plugins\"]): PluginOption[] {\n if (!plugins) {\n return [];\n }\n\n return flattenPlugins(Array.isArray(plugins) ? plugins : [plugins]);\n}\n\nfunction flattenPlugins(plugins: readonly PluginOption[]): PluginOption[] {\n const flattened: PluginOption[] = [];\n\n for (const plugin of plugins) {\n if (Array.isArray(plugin)) {\n flattened.push(...flattenPlugins(plugin));\n continue;\n }\n\n flattened.push(plugin);\n }\n\n return flattened;\n}\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { LoadPhialConfigOptions } from "../config.js";
2
+ import { InlineConfig, ViteDevServer } from "vite";
3
+ import { Server } from "node:http";
4
+ //#region src/lib/vite-plugin/host/plugin-dev-server.d.ts
5
+ interface PhialDevServerOptions extends LoadPhialConfigOptions {
6
+ host?: string;
7
+ port?: number;
8
+ root?: string;
9
+ }
10
+ interface PhialDevServerHandle {
11
+ vite: ViteDevServer;
12
+ server: Server;
13
+ url: string;
14
+ close(): Promise<void>;
15
+ }
16
+ declare function startPhialDevServer(options?: PhialDevServerOptions): Promise<PhialDevServerHandle>;
17
+ //#endregion
18
+ export { PhialDevServerHandle, PhialDevServerOptions, startPhialDevServer };
19
+ //# sourceMappingURL=plugin-dev-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-dev-server.d.ts","names":[],"sources":["../../../../src/lib/vite-plugin/host/plugin-dev-server.ts"],"mappings":";;;;UAyBiB,qBAAA,SAA8B,sBAAA;EAC7C,IAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,oBAAA;EACf,IAAA,EAAM,aAAA;EACN,MAAA,EAAQ,MAAA;EACR,GAAA;EACA,KAAA,IAAS,OAAA;AAAA;AAAA,iBAcW,mBAAA,CACpB,OAAA,GAAS,qBAAA,GACR,OAAA,CAAQ,oBAAA"}