vite-plugin-react-server 1.1.4 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts +1 -1
  3. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts.map +1 -1
  4. package/dist/plugin/config/autoDiscover/resolveBuildPages.js.map +1 -1
  5. package/dist/plugin/config/defaults.d.ts +1 -1
  6. package/dist/plugin/config/defaults.d.ts.map +1 -1
  7. package/dist/plugin/config/resolveUrlOption.d.ts +2 -2
  8. package/dist/plugin/config/resolveUrlOption.d.ts.map +1 -1
  9. package/dist/plugin/config/resolveUrlOption.js +4 -1
  10. package/dist/plugin/config/resolveUrlOption.js.map +1 -1
  11. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  12. package/dist/plugin/config/resolveUserConfig.js +10 -0
  13. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  14. package/dist/plugin/helpers/createRscStream.js +2 -1
  15. package/dist/plugin/helpers/createRscStream.js.map +1 -1
  16. package/dist/plugin/helpers/requestToRoute.d.ts +5 -0
  17. package/dist/plugin/helpers/requestToRoute.d.ts.map +1 -0
  18. package/dist/plugin/helpers/requestToRoute.js +24 -0
  19. package/dist/plugin/helpers/requestToRoute.js.map +1 -0
  20. package/dist/plugin/html.d.ts +1 -1
  21. package/dist/plugin/html.d.ts.map +1 -1
  22. package/dist/plugin/html.js +3 -2
  23. package/dist/plugin/html.js.map +1 -1
  24. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  25. package/dist/plugin/react-client/plugin.js.map +1 -1
  26. package/dist/plugin/react-client/server.d.ts +1 -1
  27. package/dist/plugin/react-client/server.d.ts.map +1 -1
  28. package/dist/plugin/react-client/server.js +51 -39
  29. package/dist/plugin/react-client/server.js.map +1 -1
  30. package/dist/plugin/react-server/server.d.ts +1 -1
  31. package/dist/plugin/react-server/server.d.ts.map +1 -1
  32. package/dist/plugin/react-server/server.js +36 -22
  33. package/dist/plugin/react-server/server.js.map +1 -1
  34. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  35. package/dist/plugin/react-static/plugin.js +24 -10
  36. package/dist/plugin/react-static/plugin.js.map +1 -1
  37. package/dist/plugin/react-static/renderPage.d.ts.map +1 -1
  38. package/dist/plugin/react-static/renderPage.js.map +1 -1
  39. package/dist/plugin/transformer/plugin.client.d.ts.map +1 -1
  40. package/dist/plugin/transformer/plugin.client.js +13 -3
  41. package/dist/plugin/transformer/plugin.client.js.map +1 -1
  42. package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
  43. package/dist/plugin/transformer/plugin.server.js +13 -3
  44. package/dist/plugin/transformer/plugin.server.js.map +1 -1
  45. package/dist/plugin/worker/createWorker.d.ts +1 -0
  46. package/dist/plugin/worker/createWorker.d.ts.map +1 -1
  47. package/dist/plugin/worker/createWorker.js +9 -16
  48. package/dist/plugin/worker/createWorker.js.map +1 -1
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +1 -1
  51. package/plugin/config/autoDiscover/resolveBuildPages.ts +1 -1
  52. package/plugin/config/resolveUrlOption.ts +19 -10
  53. package/plugin/config/resolveUserConfig.ts +18 -0
  54. package/plugin/helpers/createRscStream.tsx +2 -2
  55. package/plugin/helpers/requestToRoute.ts +23 -0
  56. package/plugin/html.tsx +2 -0
  57. package/plugin/react-client/plugin.ts +1 -0
  58. package/plugin/react-client/server.ts +62 -40
  59. package/plugin/react-server/server.ts +50 -25
  60. package/plugin/react-static/plugin.ts +30 -13
  61. package/plugin/react-static/renderPage.ts +0 -1
  62. package/plugin/transformer/plugin.client.ts +13 -3
  63. package/plugin/transformer/plugin.server.ts +14 -4
  64. package/plugin/worker/createWorker.ts +19 -21
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-react-server",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "Vite plugin for React Server Components (RSC)",
5
5
  "type": "module",
6
6
  "main": "./dist/plugin/index.js",
@@ -1,6 +1,6 @@
1
1
  import type { ResolvedBuildPages, ResolvedUserOptions } from "../../types.js";
2
2
  export declare function resolveBuildPages({ pages, userOptions, }: {
3
3
  pages: string[];
4
- userOptions: Pick<ResolvedUserOptions, "Page" | "props" | "build" | "moduleBase" | "projectRoot" | "normalizer">;
4
+ userOptions: Pick<ResolvedUserOptions, "Page" | "props" | "build" | "moduleBase" | "projectRoot" | "normalizer" | "moduleBasePath">;
5
5
  }): Promise<ResolvedBuildPages>;
6
6
  //# sourceMappingURL=resolveBuildPages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveBuildPages.d.ts","sourceRoot":"","sources":["../../../../plugin/config/autoDiscover/resolveBuildPages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAM9E,wBAAsB,iBAAiB,CAAC,EACtC,KAAK,EACL,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;CAClH,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmF9B"}
1
+ {"version":3,"file":"resolveBuildPages.d.ts","sourceRoot":"","sources":["../../../../plugin/config/autoDiscover/resolveBuildPages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAM9E,wBAAsB,iBAAiB,CAAC,EACtC,KAAK,EACL,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,CAAC,CAAC;CACrI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmF9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveBuildPages.js","sources":["../../../../plugin/config/autoDiscover/resolveBuildPages.ts"],"sourcesContent":["import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { ResolvedBuildPages, ResolvedUserOptions } from \"../../types.js\";\nimport { resolveUrlOption } from \"../resolveUrlOption.js\";\n\nlet stashedBuildPages: ResolvedBuildPages | null = null;\nlet stashedPages: string[] | null = null;\n\nexport async function resolveBuildPages({\n pages,\n userOptions,\n}: {\n pages: string[];\n userOptions: Pick<ResolvedUserOptions, \"Page\" | \"props\" | \"build\" | \"moduleBase\" | \"projectRoot\" | \"normalizer\">;\n}): Promise<ResolvedBuildPages> {\n // Check if pages array has changed\n const pagesChanged =\n !stashedPages ||\n stashedPages.length !== pages.length ||\n !stashedPages.every((page, i) => page === pages[i]);\n\n if (stashedBuildPages && !pagesChanged) {\n return stashedBuildPages; // Return directly without Promise.resolve\n }\n const errors: Error[] = [];\n const pageMap = new Map<string, string>();\n const propsMap = new Map<string, string>();\n const urlMap = new Map<string, { props: string | undefined; page: string }>();\n const routeMap = new Map<string, string[]>();\n\n for (const page of pages) {\n const pageResult = await resolveUrlOption(userOptions, \"Page\", page);\n if(pageResult.type === \"error\") {\n errors.push(pageResult.error);\n continue;\n }\n if(!userOptions.props) {\n urlMap.set(page, { props: undefined, page: pageResult.Page });\n pageMap.set(page, pageResult.Page);\n // Add to routeMap\n const routes = routeMap.get(pageResult.Page) || [];\n routes.push(page);\n routeMap.set(pageResult.Page, routes);\n continue;\n }\n const propsResult = await resolveUrlOption(userOptions, \"props\", page);\n if(propsResult.type === \"error\") {\n errors.push(propsResult.error);\n continue;\n }\n const [pageKey, pageValue] = userOptions.normalizer(pageResult.Page);\n\n try {\n await access(join(userOptions.projectRoot, pageValue));\n } catch {\n errors.push(new Error(`Page file not found: ${pageValue}`));\n }\n\n // If propsPath is defined, check if it exists\n if (propsResult.props) {\n const [propsKey, propsValue] = userOptions.normalizer(propsResult.props);\n if (propsValue !== pageValue) {\n try {\n await access(join(userOptions.projectRoot, propsValue));\n } catch {\n errors.push(\n new Error(`Props file not found: ${propsValue}`)\n );\n }\n }\n urlMap.set(page, { props: propsValue, page: pageValue });\n propsMap.set(propsKey, propsValue);\n \n // Add to routeMap for both page and props files\n const pageRoutes = routeMap.get(pageValue) || [];\n pageRoutes.push(page);\n routeMap.set(pageValue, pageRoutes);\n \n const propsRoutes = routeMap.get(propsValue) || [];\n propsRoutes.push(page);\n routeMap.set(propsValue, propsRoutes);\n } else {\n // If no props path, use the page path for both\n urlMap.set(page, { props: undefined, page: pageValue });\n \n // Add to routeMap for page file only\n const routes = routeMap.get(pageValue) || [];\n routes.push(page);\n routeMap.set(pageValue, routes);\n }\n\n pageMap.set(pageKey, pageValue);\n }\n\n stashedBuildPages = { pageMap, propsMap, urlMap, routeMap, errors };\n stashedPages = [...pages];\n return stashedBuildPages;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveBuildPages.js","sources":["../../../../plugin/config/autoDiscover/resolveBuildPages.ts"],"sourcesContent":["import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { ResolvedBuildPages, ResolvedUserOptions } from \"../../types.js\";\nimport { resolveUrlOption } from \"../resolveUrlOption.js\";\n\nlet stashedBuildPages: ResolvedBuildPages | null = null;\nlet stashedPages: string[] | null = null;\n\nexport async function resolveBuildPages({\n pages,\n userOptions,\n}: {\n pages: string[];\n userOptions: Pick<ResolvedUserOptions, \"Page\" | \"props\" | \"build\" | \"moduleBase\" | \"projectRoot\" | \"normalizer\" | \"moduleBasePath\">;\n}): Promise<ResolvedBuildPages> {\n // Check if pages array has changed\n const pagesChanged =\n !stashedPages ||\n stashedPages.length !== pages.length ||\n !stashedPages.every((page, i) => page === pages[i]);\n\n if (stashedBuildPages && !pagesChanged) {\n return stashedBuildPages; // Return directly without Promise.resolve\n }\n const errors: Error[] = [];\n const pageMap = new Map<string, string>();\n const propsMap = new Map<string, string>();\n const urlMap = new Map<string, { props: string | undefined; page: string }>();\n const routeMap = new Map<string, string[]>();\n\n for (const page of pages) {\n const pageResult = await resolveUrlOption(userOptions, \"Page\", page);\n if(pageResult.type === \"error\") {\n errors.push(pageResult.error);\n continue;\n }\n if(!userOptions.props) {\n urlMap.set(page, { props: undefined, page: pageResult.Page });\n pageMap.set(page, pageResult.Page);\n // Add to routeMap\n const routes = routeMap.get(pageResult.Page) || [];\n routes.push(page);\n routeMap.set(pageResult.Page, routes);\n continue;\n }\n const propsResult = await resolveUrlOption(userOptions, \"props\", page);\n if(propsResult.type === \"error\") {\n errors.push(propsResult.error);\n continue;\n }\n const [pageKey, pageValue] = userOptions.normalizer(pageResult.Page);\n\n try {\n await access(join(userOptions.projectRoot, pageValue));\n } catch {\n errors.push(new Error(`Page file not found: ${pageValue}`));\n }\n\n // If propsPath is defined, check if it exists\n if (propsResult.props) {\n const [propsKey, propsValue] = userOptions.normalizer(propsResult.props);\n if (propsValue !== pageValue) {\n try {\n await access(join(userOptions.projectRoot, propsValue));\n } catch {\n errors.push(\n new Error(`Props file not found: ${propsValue}`)\n );\n }\n }\n urlMap.set(page, { props: propsValue, page: pageValue });\n propsMap.set(propsKey, propsValue);\n \n // Add to routeMap for both page and props files\n const pageRoutes = routeMap.get(pageValue) || [];\n pageRoutes.push(page);\n routeMap.set(pageValue, pageRoutes);\n \n const propsRoutes = routeMap.get(propsValue) || [];\n propsRoutes.push(page);\n routeMap.set(propsValue, propsRoutes);\n } else {\n // If no props path, use the page path for both\n urlMap.set(page, { props: undefined, page: pageValue });\n \n // Add to routeMap for page file only\n const routes = routeMap.get(pageValue) || [];\n routes.push(page);\n routeMap.set(pageValue, routes);\n }\n\n pageMap.set(pageKey, pageValue);\n }\n\n stashedBuildPages = { pageMap, propsMap, urlMap, routeMap, errors };\n stashedPages = [...pages];\n return stashedBuildPages;\n}\n"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export declare const DEFAULT_CONFIG: {
17
17
  readonly LOADER_PATH: "worker/loader.js";
18
18
  readonly RSC_EXTENSION: ".rsc";
19
19
  readonly CSS_COLLECTOR: typeof CssCollector;
20
- readonly HTML: ({ children, CssCollector, cssFiles, globalCss, }: React.PropsWithChildren<import("../types.js").HtmlProps>) => import("react").JSX.Element;
20
+ readonly HTML: ({ children, CssCollector, cssFiles, globalCss, moduleBasePath, }: React.PropsWithChildren<import("../types.js").HtmlProps>) => import("react").JSX.Element;
21
21
  readonly ON_METRICS: () => void;
22
22
  readonly DEV_PORT: 5173;
23
23
  readonly PREVIEW_PORT: 4173;
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../plugin/config/defaults.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;sEAIlB,MAAO,iBACL;;;;;;;;;;;;;;;;;;;;;;;;iCAyCe,MAAM,EAAE;+BACV,MAAM,EAAE;;qCAEA,MAAM,EAAE;;oCAUjB,MAAM;kCACR,MAAM;mCACL,MAAM;uCACF,MAAM;sCACP,MAAM;iCACX,MAAM;uCACA,MAAM;qCACR,MAAM;oCACP,MAAM;kCAER,MAAM;kCACN,MAAM;+BACT,MAAM;+BACN,MAAM;iCACJ,MAAM;;6BAER,MAAM;CACd,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../plugin/config/defaults.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;sFAKtB,MAAO,iBACP;;;;;;;;;;;;;;;;;;;;;;;;iCAwCqB,MAAM,EAAE;+BACV,MAAM,EAAE;;qCAEA,MAAM,EAAE;;oCAUjB,MAAM;kCACR,MAAM;mCACL,MAAM;uCACF,MAAM;sCACP,MAAM;iCACX,MAAM;uCACA,MAAM;qCACR,MAAM;oCACP,MAAM;kCAER,MAAM;kCACN,MAAM;+BACT,MAAM;+BACN,MAAM;iCACJ,MAAM;;6BAER,MAAM;CACd,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ResolvedUserOptions } from '../types.js';
1
+ import type { ResolvedUserOptions } from "../types.js";
2
2
  type ResolvePageAndPropsOptionsSuccess<T extends "Page" | "props"> = {
3
3
  [optionName in T]: string;
4
4
  } & {
@@ -11,6 +11,6 @@ type ResolvePageAndPropsOptionsError<T extends "Page" | "props"> = {
11
11
  type: "error";
12
12
  error: Error;
13
13
  };
14
- export declare function resolveUrlOption<T extends "Page" | "props">(options: Pick<ResolvedUserOptions, T>, optionName: T, url: string): Promise<ResolvePageAndPropsOptionsSuccess<T> | ResolvePageAndPropsOptionsError<T>>;
14
+ export declare function resolveUrlOption<T extends "Page" | "props">(options: Pick<ResolvedUserOptions, T | "moduleBasePath">, optionName: T, url: string): Promise<ResolvePageAndPropsOptionsSuccess<T> | ResolvePageAndPropsOptionsError<T>>;
15
15
  export {};
16
16
  //# sourceMappingURL=resolveUrlOption.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveUrlOption.d.ts","sourceRoot":"","sources":["../../../plugin/config/resolveUrlOption.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,KAAK,iCAAiC,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,IAAI;KAClE,UAAU,IAAI,CAAC,GAAG,MAAM;CAC1B,GAAG;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAC,KAAK,CAAA;CAAC,CAAA;AAEnC,KAAK,+BAA+B,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,IAAI;KAChE,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;CAC1B,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAEnC,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,EAC/D,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,EACrC,UAAU,EAAE,CAAC,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC,CA4BpF"}
1
+ {"version":3,"file":"resolveUrlOption.d.ts","sourceRoot":"","sources":["../../../plugin/config/resolveUrlOption.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,KAAK,iCAAiC,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,IAAI;KAClE,UAAU,IAAI,CAAC,GAAG,MAAM;CAC1B,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEvC,KAAK,+BAA+B,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,IAAI;KAChE,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK;CAC1B,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,EAC/D,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,gBAAgB,CAAC,EACxD,UAAU,EAAE,CAAC,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CACR,iCAAiC,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAC1E,CAmCA"}
@@ -7,7 +7,10 @@ async function resolveUrlOption(options, optionName, url) {
7
7
  try {
8
8
  switch (typeof options[optionName]) {
9
9
  case "function":
10
- const result = options[optionName](url);
10
+ const result = options[optionName](
11
+ // quick normalization to make it easier to work with dynamic moduleBasePaths (so that you don't have to change the Page/props function)
12
+ options.moduleBasePath !== "" && options.moduleBasePath !== "/" && url.startsWith(options.moduleBasePath) ? url.slice(options.moduleBasePath.length) : url
13
+ );
11
14
  if (typeof result === "string") {
12
15
  return { type: "success", [optionName]: result };
13
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolveUrlOption.js","sources":["../../../plugin/config/resolveUrlOption.ts"],"sourcesContent":["import type { ResolvedUserOptions } from '../types.js';\n\ntype ResolvePageAndPropsOptionsSuccess<T extends \"Page\" | \"props\"> = {\n [optionName in T]: string;\n} & {type: \"success\"; error?:never}\n\ntype ResolvePageAndPropsOptionsError<T extends \"Page\" | \"props\"> = {\n [optionName in T]?: never;\n} & { type: \"error\"; error: Error }\n\nexport async function resolveUrlOption<T extends \"Page\" | \"props\">(\n options: Pick<ResolvedUserOptions, T>,\n optionName: T,\n url: string\n): Promise<ResolvePageAndPropsOptionsSuccess<T> | ResolvePageAndPropsOptionsError<T>> {\n try {\n switch (typeof options[optionName]) {\n case \"function\":\n const result = options[optionName](url);\n if(typeof result === \"string\") {\n return { type: \"success\", [optionName]: result };\n }\n if(result instanceof Promise) {\n try {\n const promiseResult = await result;\n if(typeof promiseResult === \"string\") {\n return { type: \"success\", [optionName]: promiseResult };\n }\n } catch (error) {\n return { type: \"error\", error: error as Error };\n }\n }\n break;\n case \"string\":\n return { type: \"success\", [optionName]: options[optionName] };\n default:\n break;\n }\n return { type: \"error\", error: new Error(\"Page must return a string\") };\n } catch (error) {\n return { type: \"error\", error: error as Error };\n }\n} "],"names":[],"mappings":";;;;;AAUsB,eAAA,gBAAA,CACpB,OACA,EAAA,UAAA,EACA,GACoF,EAAA;AACpF,EAAI,IAAA;AACF,IAAQ,QAAA,OAAO,OAAQ,CAAA,UAAU,CAAG;AAAA,MAClC,KAAK,UAAA;AACH,QAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,UAAU,CAAA,CAAE,GAAG,CAAA;AACtC,QAAG,IAAA,OAAO,WAAW,QAAU,EAAA;AAC7B,UAAA,OAAO,EAAE,IAAM,EAAA,SAAA,EAAW,CAAC,UAAU,GAAG,MAAO,EAAA;AAAA;AAEjD,QAAA,IAAG,kBAAkB,OAAS,EAAA;AAC5B,UAAI,IAAA;AACF,YAAA,MAAM,gBAAgB,MAAM,MAAA;AAC5B,YAAG,IAAA,OAAO,kBAAkB,QAAU,EAAA;AACpC,cAAA,OAAO,EAAE,IAAM,EAAA,SAAA,EAAW,CAAC,UAAU,GAAG,aAAc,EAAA;AAAA;AACxD,mBACO,KAAO,EAAA;AACd,YAAO,OAAA,EAAE,IAAM,EAAA,OAAA,EAAS,KAAsB,EAAA;AAAA;AAChD;AAEF,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAO,OAAA,EAAE,MAAM,SAAW,EAAA,CAAC,UAAU,GAAG,OAAA,CAAQ,UAAU,CAAE,EAAA;AAAA,MAC9D;AACE,QAAA;AAAA;AAEJ,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,EAAS,OAAO,IAAI,KAAA,CAAM,2BAA2B,CAAE,EAAA;AAAA,WAC/D,KAAO,EAAA;AACd,IAAO,OAAA,EAAE,IAAM,EAAA,OAAA,EAAS,KAAsB,EAAA;AAAA;AAElD;;;;"}
1
+ {"version":3,"file":"resolveUrlOption.js","sources":["../../../plugin/config/resolveUrlOption.ts"],"sourcesContent":["import type { ResolvedUserOptions } from \"../types.js\";\n\ntype ResolvePageAndPropsOptionsSuccess<T extends \"Page\" | \"props\"> = {\n [optionName in T]: string;\n} & { type: \"success\"; error?: never };\n\ntype ResolvePageAndPropsOptionsError<T extends \"Page\" | \"props\"> = {\n [optionName in T]?: never;\n} & { type: \"error\"; error: Error };\n\nexport async function resolveUrlOption<T extends \"Page\" | \"props\">(\n options: Pick<ResolvedUserOptions, T | \"moduleBasePath\">,\n optionName: T,\n url: string\n): Promise<\n ResolvePageAndPropsOptionsSuccess<T> | ResolvePageAndPropsOptionsError<T>\n> {\n try {\n switch (typeof options[optionName]) {\n case \"function\":\n const result = options[optionName](\n // quick normalization to make it easier to work with dynamic moduleBasePaths (so that you don't have to change the Page/props function)\n options.moduleBasePath !== \"\" &&\n options.moduleBasePath !== \"/\" &&\n url.startsWith(options.moduleBasePath)\n ? url.slice(options.moduleBasePath.length)\n : url\n );\n if (typeof result === \"string\") {\n return { type: \"success\", [optionName]: result };\n }\n if (result instanceof Promise) {\n try {\n const promiseResult = await result;\n if (typeof promiseResult === \"string\") {\n return { type: \"success\", [optionName]: promiseResult };\n }\n } catch (error) {\n return { type: \"error\", error: error as Error };\n }\n }\n break;\n case \"string\":\n return { type: \"success\", [optionName]: options[optionName] };\n default:\n break;\n }\n return { type: \"error\", error: new Error(\"Page must return a string\") };\n } catch (error) {\n return { type: \"error\", error: error as Error };\n }\n}\n"],"names":[],"mappings":";;;;;AAUsB,eAAA,gBAAA,CACpB,OACA,EAAA,UAAA,EACA,GAGA,EAAA;AACA,EAAI,IAAA;AACF,IAAQ,QAAA,OAAO,OAAQ,CAAA,UAAU,CAAG;AAAA,MAClC,KAAK,UAAA;AACH,QAAM,MAAA,MAAA,GAAS,QAAQ,UAAU,CAAA;AAAA;AAAA,UAE/B,QAAQ,cAAmB,KAAA,EAAA,IACzB,OAAQ,CAAA,cAAA,KAAmB,OAC3B,GAAI,CAAA,UAAA,CAAW,OAAQ,CAAA,cAAc,IACnC,GAAI,CAAA,KAAA,CAAM,OAAQ,CAAA,cAAA,CAAe,MAAM,CACvC,GAAA;AAAA,SACN;AACA,QAAI,IAAA,OAAO,WAAW,QAAU,EAAA;AAC9B,UAAA,OAAO,EAAE,IAAM,EAAA,SAAA,EAAW,CAAC,UAAU,GAAG,MAAO,EAAA;AAAA;AAEjD,QAAA,IAAI,kBAAkB,OAAS,EAAA;AAC7B,UAAI,IAAA;AACF,YAAA,MAAM,gBAAgB,MAAM,MAAA;AAC5B,YAAI,IAAA,OAAO,kBAAkB,QAAU,EAAA;AACrC,cAAA,OAAO,EAAE,IAAM,EAAA,SAAA,EAAW,CAAC,UAAU,GAAG,aAAc,EAAA;AAAA;AACxD,mBACO,KAAO,EAAA;AACd,YAAO,OAAA,EAAE,IAAM,EAAA,OAAA,EAAS,KAAsB,EAAA;AAAA;AAChD;AAEF,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAO,OAAA,EAAE,MAAM,SAAW,EAAA,CAAC,UAAU,GAAG,OAAA,CAAQ,UAAU,CAAE,EAAA;AAAA,MAC9D;AACE,QAAA;AAAA;AAEJ,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,EAAS,OAAO,IAAI,KAAA,CAAM,2BAA2B,CAAE,EAAA;AAAA,WAC/D,KAAO,EAAA;AACd,IAAO,OAAA,EAAE,IAAM,EAAA,OAAA,EAAS,KAAsB,EAAA;AAAA;AAElD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveUserConfig.d.ts","sourceRoot":"","sources":["../../../plugin/config/resolveUserConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAMrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,cAAc,GAAG,cAAc,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;IACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,MAAM,EACN,SAAS,EACT,WAAW,EACX,mBAAmB,GACpB,EAAE,sBAAsB,GAAG,uBAAuB,CAkMlD"}
1
+ {"version":3,"file":"resolveUserConfig.d.ts","sourceRoot":"","sources":["../../../plugin/config/resolveUserConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAMrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,cAAc,GAAG,cAAc,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;IACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,MAAM,EACN,SAAS,EACT,WAAW,EACX,mBAAmB,GACpB,EAAE,sBAAsB,GAAG,uBAAuB,CAoNlD"}
@@ -54,6 +54,7 @@ function resolveUserConfig({
54
54
  ...config,
55
55
  root,
56
56
  mode,
57
+ base: userOptions.moduleBasePath,
57
58
  resolve: {
58
59
  ...config.resolve,
59
60
  external: config.resolve?.external ?? [
@@ -108,12 +109,21 @@ function resolveUserConfig({
108
109
  ...config,
109
110
  root,
110
111
  mode,
112
+ base: userOptions.moduleBasePath,
111
113
  resolve: {
112
114
  ...config.resolve,
113
115
  externalConditions: config.resolve?.externalConditions ?? [
114
116
  "react-server"
115
117
  ]
116
118
  },
119
+ define: {
120
+ ...config.define,
121
+ "process.env.VITE_SSR": `"1"`,
122
+ "process.env.VITE_DEV": `"${mode === "development" ? "1" : "0"}"`,
123
+ "process.env.VITE_PROD": `"${mode === "production" ? "1" : "0"}"`,
124
+ "process.env.VITE_MODE": `"${mode}"`,
125
+ "process.env.VITE_BASE": `"${userOptions.moduleBasePath === "" || userOptions.moduleBasePath === "/" ? "/" : !userOptions.moduleBasePath.endsWith("/") ? userOptions.moduleBasePath + "/" : userOptions.moduleBasePath}"`
126
+ },
117
127
  ssr: {
118
128
  ...config.ssr,
119
129
  target: config.ssr?.target ?? "node",
@@ -1 +1 @@
1
- {"version":3,"file":"resolveUserConfig.js","sources":["../../../plugin/config/resolveUserConfig.ts"],"sourcesContent":["import type { ConfigEnv, UserConfig } from \"vite\";\nimport type {\n ResolvedUserConfig,\n ResolvedUserOptions,\n AutoDiscoveredFiles,\n} from \"../types.js\";\nimport { join } from \"node:path\";\nimport type { OutputOptions } from \"rollup\";\n\nlet stashedUserConfig: Record<string, ResolvedUserConfig | null> = {};\n\nexport type ResolveUserConfigProps = {\n condition: \"react-client\" | \"react-server\";\n config: UserConfig;\n configEnv: ConfigEnv;\n userOptions: ResolvedUserOptions;\n autoDiscoveredFiles: Pick<AutoDiscoveredFiles, \"inputs\" | \"staticManifest\">;\n};\n\nexport type ResolveUserConfigReturn =\n | { type: \"success\"; userConfig: ResolvedUserConfig }\n | { type: \"error\"; error: Error };\n\nexport function resolveUserConfig({\n condition,\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n}: ResolveUserConfigProps): ResolveUserConfigReturn {\n const ssr =\n typeof config.build?.ssr === \"boolean\"\n ? config.build?.ssr\n : Boolean(configEnv.isSsrBuild) || condition === \"react-server\";\n const envDir =\n condition === \"react-client\" && ssr\n ? userOptions.build.client\n : condition === \"react-client\"\n ? userOptions.build.static\n : userOptions.build.server;\n const envId = `${envDir}${ssr ? \"-ssr\" : \"\"}`;\n\n if (stashedUserConfig[envId]) {\n return {\n type: \"success\",\n userConfig: stashedUserConfig[envId],\n };\n }\n\n // Get existing inputs\n const root = config.root ?? userOptions.projectRoot ?? process.cwd();\n const staticEntries =\n ssr && autoDiscoveredFiles.staticManifest\n ? Object.entries(autoDiscoveredFiles.staticManifest)\n : [];\n const pluginOutput = {\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n entryFileNames: (info) => {\n if (ssr) {\n const entry = staticEntries.find(([, { file }]) =>\n file.startsWith(info.name)\n );\n if (entry) {\n return entry[1].file;\n }\n }\n return userOptions.build.entryFile(info, ssr);\n },\n assetFileNames: (i) => {\n return userOptions.build.assetFile(i, false);\n },\n chunkFileNames: (i) => {\n return userOptions.build.chunkFile(i, ssr);\n },\n format: \"esm\",\n exports: \"named\",\n } satisfies OutputOptions;\n\n let newOutput = Array.isArray(config.build?.rollupOptions?.output)\n ? [...config.build?.rollupOptions?.output, pluginOutput]\n : typeof config.build?.rollupOptions?.output === \"object\" &&\n config.build?.rollupOptions?.output !== null\n ? [config.build?.rollupOptions?.output, pluginOutput]\n : pluginOutput;\n const mode =\n process.env[\"NODE_ENV\"] === \"development\"\n ? \"development\"\n : config.mode\n ? config.mode\n : configEnv.mode\n ? configEnv.mode\n : configEnv.command === \"build\"\n ? \"production\"\n : \"development\";\n const minify = config.build?.minify;\n if (condition === \"react-client\") {\n // client plugin build options (client plugin still outputs server files)\n stashedUserConfig[envId] = {\n ...config,\n root: root,\n mode: mode,\n resolve: {\n ...config.resolve,\n external: config.resolve?.external ?? [\n \"react\",\n \"react-dom\",\n \"react-server-dom-esm/client\",\n ],\n },\n ssr: {\n ...config.ssr,\n target: config.ssr?.target ?? \"node\",\n optimizeDeps: {\n ...config.ssr?.optimizeDeps,\n include: config.ssr?.optimizeDeps?.include ?? [\n \"react\",\n \"react-dom\",\n \"react-server-dom-esm/client\",\n ],\n },\n resolve: {\n ...config.ssr?.resolve,\n externalConditions: config.ssr?.resolve?.externalConditions ?? [\n \"react-server\",\n ],\n },\n },\n // client build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: config.build?.outDir ?? join(userOptions.build.outDir, envDir),\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n copyPublicDir: config.build?.copyPublicDir ?? true,\n // modern browsers\n target: config.build?.target ?? [\"esnext\"],\n minify: minify,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: autoDiscoveredFiles.inputs,\n output: newOutput,\n preserveEntrySignatures:\n config.build?.rollupOptions?.preserveEntrySignatures ??\n \"exports-only\",\n },\n ssr: ssr,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets: config.build?.ssrEmitAssets ?? true,\n cssCodeSplit:\n typeof config.build?.cssCodeSplit === \"boolean\"\n ? config.build?.cssCodeSplit\n : true,\n },\n };\n } else {\n stashedUserConfig[envId] = {\n ...config,\n root: root,\n mode: mode,\n resolve: {\n ...config.resolve,\n externalConditions: config.resolve?.externalConditions ?? [\n \"react-server\",\n ],\n },\n ssr: {\n ...config.ssr,\n target: config.ssr?.target ?? \"node\",\n resolve: {\n ...config.ssr?.resolve,\n externalConditions: config.ssr?.resolve?.externalConditions ?? [\n \"react-server\",\n ],\n },\n },\n // server build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: config.build?.outDir ?? join(userOptions.build.outDir, envDir),\n target: config.build?.target ?? \"node18\",\n minify: minify,\n ssr: ssr,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets:\n typeof config.build?.ssrEmitAssets === \"boolean\"\n ? config.build?.ssrEmitAssets\n : true,\n copyPublicDir:\n typeof config.build?.copyPublicDir === \"boolean\"\n ? config.build?.copyPublicDir\n : true,\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n // Ensure CSS files are output to static directory\n cssCodeSplit:\n typeof config.build?.cssCodeSplit === \"boolean\"\n ? config.build?.cssCodeSplit\n : true,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: autoDiscoveredFiles.inputs,\n preserveEntrySignatures:\n config.build?.rollupOptions?.preserveEntrySignatures ?? \"strict\",\n output: newOutput,\n },\n },\n };\n }\n if (!stashedUserConfig[envId]) {\n return {\n type: \"error\",\n error: new Error(\"Failed to resolve config\"),\n };\n }\n\n return {\n type: \"success\",\n userConfig: stashedUserConfig[envId],\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveUserConfig.js","sources":["../../../plugin/config/resolveUserConfig.ts"],"sourcesContent":["import type { ConfigEnv, UserConfig } from \"vite\";\nimport type {\n ResolvedUserConfig,\n ResolvedUserOptions,\n AutoDiscoveredFiles,\n} from \"../types.js\";\nimport { join } from \"node:path\";\nimport type { OutputOptions } from \"rollup\";\n\nlet stashedUserConfig: Record<string, ResolvedUserConfig | null> = {};\n\nexport type ResolveUserConfigProps = {\n condition: \"react-client\" | \"react-server\";\n config: UserConfig;\n configEnv: ConfigEnv;\n userOptions: ResolvedUserOptions;\n autoDiscoveredFiles: Pick<AutoDiscoveredFiles, \"inputs\" | \"staticManifest\">;\n};\n\nexport type ResolveUserConfigReturn =\n | { type: \"success\"; userConfig: ResolvedUserConfig }\n | { type: \"error\"; error: Error };\n\nexport function resolveUserConfig({\n condition,\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n}: ResolveUserConfigProps): ResolveUserConfigReturn {\n const ssr =\n typeof config.build?.ssr === \"boolean\"\n ? config.build?.ssr\n : Boolean(configEnv.isSsrBuild) || condition === \"react-server\";\n const envDir =\n condition === \"react-client\" && ssr\n ? userOptions.build.client\n : condition === \"react-client\"\n ? userOptions.build.static\n : userOptions.build.server;\n const envId = `${envDir}${ssr ? \"-ssr\" : \"\"}`;\n\n if (stashedUserConfig[envId]) {\n return {\n type: \"success\",\n userConfig: stashedUserConfig[envId],\n };\n }\n\n // Get existing inputs\n const root = config.root ?? userOptions.projectRoot ?? process.cwd();\n const staticEntries =\n ssr && autoDiscoveredFiles.staticManifest\n ? Object.entries(autoDiscoveredFiles.staticManifest)\n : [];\n const pluginOutput = {\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n entryFileNames: (info) => {\n if (ssr) {\n const entry = staticEntries.find(([, { file }]) =>\n file.startsWith(info.name)\n );\n if (entry) {\n return entry[1].file;\n }\n }\n return userOptions.build.entryFile(info, ssr);\n },\n assetFileNames: (i) => {\n return userOptions.build.assetFile(i, false);\n },\n chunkFileNames: (i) => {\n return userOptions.build.chunkFile(i, ssr);\n },\n format: \"esm\",\n exports: \"named\",\n } satisfies OutputOptions;\n\n let newOutput = Array.isArray(config.build?.rollupOptions?.output)\n ? [...config.build?.rollupOptions?.output, pluginOutput]\n : typeof config.build?.rollupOptions?.output === \"object\" &&\n config.build?.rollupOptions?.output !== null\n ? [config.build?.rollupOptions?.output, pluginOutput]\n : pluginOutput;\n const mode =\n process.env[\"NODE_ENV\"] === \"development\"\n ? \"development\"\n : config.mode\n ? config.mode\n : configEnv.mode\n ? configEnv.mode\n : configEnv.command === \"build\"\n ? \"production\"\n : \"development\";\n const minify = config.build?.minify;\n if (condition === \"react-client\") {\n // client plugin build options (client plugin still outputs server files)\n stashedUserConfig[envId] = {\n ...config,\n root: root,\n mode: mode,\n base: userOptions.moduleBasePath,\n resolve: {\n ...config.resolve,\n external: config.resolve?.external ?? [\n \"react\",\n \"react-dom\",\n \"react-server-dom-esm/client\",\n ],\n },\n ssr: {\n ...config.ssr,\n target: config.ssr?.target ?? \"node\",\n optimizeDeps: {\n ...config.ssr?.optimizeDeps,\n include: config.ssr?.optimizeDeps?.include ?? [\n \"react\",\n \"react-dom\",\n \"react-server-dom-esm/client\",\n ],\n },\n resolve: {\n ...config.ssr?.resolve,\n externalConditions: config.ssr?.resolve?.externalConditions ?? [\n \"react-server\",\n ],\n },\n },\n // client build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: config.build?.outDir ?? join(userOptions.build.outDir, envDir),\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n copyPublicDir: config.build?.copyPublicDir ?? true,\n // modern browsers\n target: config.build?.target ?? [\"esnext\"],\n minify: minify,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: autoDiscoveredFiles.inputs,\n output: newOutput,\n preserveEntrySignatures:\n config.build?.rollupOptions?.preserveEntrySignatures ??\n \"exports-only\",\n },\n ssr: ssr,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets: config.build?.ssrEmitAssets ?? true,\n cssCodeSplit:\n typeof config.build?.cssCodeSplit === \"boolean\"\n ? config.build?.cssCodeSplit\n : true,\n },\n };\n } else {\n stashedUserConfig[envId] = {\n ...config,\n root: root,\n mode: mode,\n base: userOptions.moduleBasePath,\n resolve: {\n ...config.resolve,\n externalConditions: config.resolve?.externalConditions ?? [\n \"react-server\",\n ],\n },\n define: {\n ...config.define,\n \"process.env.VITE_SSR\": `\"1\"`,\n \"process.env.VITE_DEV\": `\"${mode === \"development\" ? \"1\" : \"0\"}\"`,\n \"process.env.VITE_PROD\": `\"${mode === \"production\" ? \"1\" : \"0\"}\"`,\n \"process.env.VITE_MODE\": `\"${mode}\"`,\n \"process.env.VITE_BASE\": `\"${\n userOptions.moduleBasePath === \"\" ||\n userOptions.moduleBasePath === \"/\"\n ? \"/\"\n : !userOptions.moduleBasePath.endsWith(\"/\")\n ? userOptions.moduleBasePath + \"/\"\n : userOptions.moduleBasePath\n }\"`,\n },\n ssr: {\n ...config.ssr,\n target: config.ssr?.target ?? \"node\",\n\n resolve: {\n ...config.ssr?.resolve,\n externalConditions: config.ssr?.resolve?.externalConditions ?? [\n \"react-server\",\n ],\n },\n },\n // server build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: config.build?.outDir ?? join(userOptions.build.outDir, envDir),\n target: config.build?.target ?? \"node18\",\n minify: minify,\n ssr: ssr,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets:\n typeof config.build?.ssrEmitAssets === \"boolean\"\n ? config.build?.ssrEmitAssets\n : true,\n copyPublicDir:\n typeof config.build?.copyPublicDir === \"boolean\"\n ? config.build?.copyPublicDir\n : true,\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n // Ensure CSS files are output to static directory\n cssCodeSplit:\n typeof config.build?.cssCodeSplit === \"boolean\"\n ? config.build?.cssCodeSplit\n : true,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: autoDiscoveredFiles.inputs,\n preserveEntrySignatures:\n config.build?.rollupOptions?.preserveEntrySignatures ?? \"strict\",\n output: newOutput,\n },\n },\n };\n }\n if (!stashedUserConfig[envId]) {\n return {\n type: \"error\",\n error: new Error(\"Failed to resolve config\"),\n };\n }\n\n return {\n type: \"success\",\n userConfig: stashedUserConfig[envId],\n };\n}\n"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  * MIT License
5
5
  */
6
6
  import { React, ReactDOMServer } from '../vendor.server.js';
7
+ import { join } from 'node:path';
7
8
 
8
9
  function createRscStream({
9
10
  Html = React.Fragment,
@@ -24,7 +25,7 @@ function createRscStream({
24
25
  }) {
25
26
  const startTime = performance.now();
26
27
  const htmlIsFragment = Html == React.Fragment;
27
- const url = moduleBaseURL !== "" ? new URL(route, moduleBaseURL).toString() : route;
28
+ const url = moduleBaseURL !== "" ? new URL(join(route, moduleBasePath), moduleBaseURL).toString() : route;
28
29
  let errorCount = 0;
29
30
  let streamError = null;
30
31
  if (!PageComponent) {
@@ -1 +1 @@
1
- {"version":3,"file":"createRscStream.js","sources":["../../../plugin/helpers/createRscStream.tsx"],"sourcesContent":["import { React, ReactDOMServer } from \"../vendor.server.js\";\nimport type { CreateHandlerOptions, StreamMetrics } from \"../types.js\";\n\nexport function createRscStream<\n T,\n C extends React.ComponentType<T>,\n InlineCSS extends boolean = true\n>({\n Html = React.Fragment,\n PageComponent,\n pageProps,\n moduleBase,\n moduleRootPath,\n moduleBasePath,\n moduleBaseURL,\n cssFiles = new Map(),\n globalCss = new Map(),\n route,\n pipeableStreamOptions,\n CssCollector,\n manifest,\n onEvent,\n projectRoot,\n}: Pick<\n CreateHandlerOptions<T, C, InlineCSS>,\n | \"Html\"\n | \"PageComponent\"\n | \"pageProps\"\n | \"moduleBase\"\n | \"moduleRootPath\"\n | \"moduleBasePath\"\n | \"moduleBaseURL\"\n | \"cssFiles\"\n | \"route\"\n | \"pipeableStreamOptions\"\n | \"CssCollector\"\n | \"globalCss\"\n | \"manifest\"\n | \"projectRoot\"\n> & {\n onEvent?: (event: \"error\" | \"postpone\", data: any) => void;\n}):\n | { type: \"success\"; stream: any; metrics: StreamMetrics }\n | { type: \"error\"; error: Error; metrics: StreamMetrics } {\n const startTime = performance.now()\n const htmlIsFragment = Html == React.Fragment;\n const url =\n moduleBaseURL !== \"\" ? new URL(route, moduleBaseURL).toString() : route;\n let errorCount = 0;\n let streamError: Error | null = null;\n\n if (!PageComponent) {\n return {\n type: \"error\",\n error: new Error(\"PageComponent is required\"),\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount: 0,\n duration: 0,\n startTime: 0,\n },\n };\n }\n const elements = htmlIsFragment ? (\n <CssCollector\n cssFiles={cssFiles}\n >\n <PageComponent {...(pageProps as any)} />\n </CssCollector>\n ) : (\n <Html\n moduleBase={moduleBase}\n moduleBaseURL={moduleBaseURL}\n moduleBasePath={moduleBasePath}\n moduleRootPath={moduleRootPath}\n projectRoot={projectRoot}\n url={url}\n route={route}\n pageProps={pageProps}\n cssFiles={cssFiles}\n globalCss={globalCss}\n CssCollector={CssCollector}\n manifest={manifest}\n >\n <PageComponent {...(pageProps as any)} />\n </Html>\n );\n try {\n const stream = ReactDOMServer.renderToPipeableStream(\n elements,\n moduleBasePath,\n {\n ...pipeableStreamOptions,\n onError(error: Error, errorInfo: any) {\n const err = error instanceof Error ? error : new Error(String(error));\n streamError = err;\n onEvent?.(\"error\", { route, error: err, errorInfo });\n errorCount++;\n },\n onPostpone(reason: string) {\n onEvent?.(\"postpone\", { route, reason });\n },\n }\n );\n\n // If we have a stream error, return it immediately\n if (streamError) {\n return {\n type: \"error\",\n error: streamError,\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount,\n duration: Date.now() - startTime,\n startTime: startTime,\n },\n };\n }\n\n return {\n type: \"success\",\n stream,\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount,\n duration: Date.now() - startTime,\n startTime: startTime,\n },\n };\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n onEvent?.(\"error\", { route, error: err });\n return {\n type: \"error\",\n error: err,\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount: errorCount + 1,\n duration: Date.now() - startTime,\n startTime: startTime,\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createRscStream.js","sources":["../../../plugin/helpers/createRscStream.tsx"],"sourcesContent":["import { React, ReactDOMServer } from \"../vendor.server.js\";\nimport type { CreateHandlerOptions, StreamMetrics } from \"../types.js\";\nimport { join } from \"node:path\";\nexport function createRscStream<\n T,\n C extends React.ComponentType<T>,\n InlineCSS extends boolean = true\n>({\n Html = React.Fragment,\n PageComponent,\n pageProps,\n moduleBase,\n moduleRootPath,\n moduleBasePath,\n moduleBaseURL,\n cssFiles = new Map(),\n globalCss = new Map(),\n route,\n pipeableStreamOptions,\n CssCollector,\n manifest,\n onEvent,\n projectRoot,\n}: Pick<\n CreateHandlerOptions<T, C, InlineCSS>,\n | \"Html\"\n | \"PageComponent\"\n | \"pageProps\"\n | \"moduleBase\"\n | \"moduleRootPath\"\n | \"moduleBasePath\"\n | \"moduleBaseURL\"\n | \"cssFiles\"\n | \"route\"\n | \"pipeableStreamOptions\"\n | \"CssCollector\"\n | \"globalCss\"\n | \"manifest\"\n | \"projectRoot\"\n> & {\n onEvent?: (event: \"error\" | \"postpone\", data: any) => void;\n}):\n | { type: \"success\"; stream: any; metrics: StreamMetrics }\n | { type: \"error\"; error: Error; metrics: StreamMetrics } {\n const startTime = performance.now()\n const htmlIsFragment = Html == React.Fragment;\n const url =\n moduleBaseURL !== \"\" ? new URL(join(route, moduleBasePath), moduleBaseURL).toString() : route;\n let errorCount = 0;\n let streamError: Error | null = null;\n\n if (!PageComponent) {\n return {\n type: \"error\",\n error: new Error(\"PageComponent is required\"),\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount: 0,\n duration: 0,\n startTime: 0,\n },\n };\n }\n const elements = htmlIsFragment ? (\n <CssCollector\n cssFiles={cssFiles}\n >\n <PageComponent {...(pageProps as any)} />\n </CssCollector>\n ) : (\n <Html\n moduleBase={moduleBase}\n moduleBaseURL={moduleBaseURL}\n moduleBasePath={moduleBasePath}\n moduleRootPath={moduleRootPath}\n projectRoot={projectRoot}\n url={url}\n route={route}\n pageProps={pageProps}\n cssFiles={cssFiles}\n globalCss={globalCss}\n CssCollector={CssCollector}\n manifest={manifest}\n >\n <PageComponent {...(pageProps as any)} />\n </Html>\n );\n try {\n const stream = ReactDOMServer.renderToPipeableStream(\n elements,\n moduleBasePath,\n {\n ...pipeableStreamOptions,\n onError(error: Error, errorInfo: any) {\n const err = error instanceof Error ? error : new Error(String(error));\n streamError = err;\n onEvent?.(\"error\", { route, error: err, errorInfo });\n errorCount++;\n },\n onPostpone(reason: string) {\n onEvent?.(\"postpone\", { route, reason });\n },\n }\n );\n\n // If we have a stream error, return it immediately\n if (streamError) {\n return {\n type: \"error\",\n error: streamError,\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount,\n duration: Date.now() - startTime,\n startTime: startTime,\n },\n };\n }\n\n return {\n type: \"success\",\n stream,\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount,\n duration: Date.now() - startTime,\n startTime: startTime,\n },\n };\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n onEvent?.(\"error\", { route, error: err });\n return {\n type: \"error\",\n error: err,\n metrics: {\n chunks: 0,\n bytes: 0,\n backpressureCount: 0,\n drainCount: 0,\n errorCount: errorCount + 1,\n duration: Date.now() - startTime,\n startTime: startTime,\n },\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAGO,SAAS,eAId,CAAA;AAAA,EACA,OAAO,KAAM,CAAA,QAAA;AAAA,EACb,aAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,uBAAe,GAAI,EAAA;AAAA,EACnB,SAAA,uBAAgB,GAAI,EAAA;AAAA,EACpB,KAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAoB4D,EAAA;AAC1D,EAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA;AAClC,EAAM,MAAA,cAAA,GAAiB,QAAQ,KAAM,CAAA,QAAA;AACrC,EAAA,MAAM,GACJ,GAAA,aAAA,KAAkB,EAAK,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,KAAO,EAAA,cAAc,CAAG,EAAA,aAAa,CAAE,CAAA,QAAA,EAAa,GAAA,KAAA;AAC1F,EAAA,IAAI,UAAa,GAAA,CAAA;AACjB,EAAA,IAAI,WAA4B,GAAA,IAAA;AAEhC,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,KAAA,EAAO,IAAI,KAAA,CAAM,2BAA2B,CAAA;AAAA,MAC5C,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,CAAA;AAAA,QACR,KAAO,EAAA,CAAA;AAAA,QACP,iBAAmB,EAAA,CAAA;AAAA,QACnB,UAAY,EAAA,CAAA;AAAA,QACZ,UAAY,EAAA,CAAA;AAAA,QACZ,QAAU,EAAA,CAAA;AAAA,QACV,SAAW,EAAA;AAAA;AACb,KACF;AAAA;AAEF,EAAA,MAAM,WAAW,cACf,mBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAAC,aAAe,EAAA,EAAA,GAAI,SAAmB,EAAA;AAAA,GAGzC,mBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAAC,aAAe,EAAA,EAAA,GAAI,SAAmB,EAAA;AAAA,GACzC;AAEF,EAAI,IAAA;AACF,IAAA,MAAM,SAAS,cAAe,CAAA,sBAAA;AAAA,MAC5B,QAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,QACE,GAAG,qBAAA;AAAA,QACH,OAAA,CAAQ,OAAc,SAAgB,EAAA;AACpC,UAAM,MAAA,GAAA,GAAM,iBAAiB,KAAQ,GAAA,KAAA,GAAQ,IAAI,KAAM,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,UAAc,WAAA,GAAA,GAAA;AACd,UAAA,OAAA,GAAU,SAAS,EAAE,KAAA,EAAO,KAAO,EAAA,GAAA,EAAK,WAAW,CAAA;AACnD,UAAA,UAAA,EAAA;AAAA,SACF;AAAA,QACA,WAAW,MAAgB,EAAA;AACzB,UAAA,OAAA,GAAU,UAAY,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,CAAA;AAAA;AACzC;AACF,KACF;AAGA,IAAA,IAAI,WAAa,EAAA;AACf,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,OAAA;AAAA,QACN,KAAO,EAAA,WAAA;AAAA,QACP,OAAS,EAAA;AAAA,UACP,MAAQ,EAAA,CAAA;AAAA,UACR,KAAO,EAAA,CAAA;AAAA,UACP,iBAAmB,EAAA,CAAA;AAAA,UACnB,UAAY,EAAA,CAAA;AAAA,UACZ,UAAA;AAAA,UACA,QAAA,EAAU,IAAK,CAAA,GAAA,EAAQ,GAAA,SAAA;AAAA,UACvB;AAAA;AACF,OACF;AAAA;AAGF,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,MAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,CAAA;AAAA,QACR,KAAO,EAAA,CAAA;AAAA,QACP,iBAAmB,EAAA,CAAA;AAAA,QACnB,UAAY,EAAA,CAAA;AAAA,QACZ,UAAA;AAAA,QACA,QAAA,EAAU,IAAK,CAAA,GAAA,EAAQ,GAAA,SAAA;AAAA,QACvB;AAAA;AACF,KACF;AAAA,WACO,KAAO,EAAA;AACd,IAAM,MAAA,GAAA,GAAM,iBAAiB,KAAQ,GAAA,KAAA,GAAQ,IAAI,KAAM,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,IAAA,OAAA,GAAU,OAAS,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,KAAK,CAAA;AACxC,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,KAAO,EAAA,GAAA;AAAA,MACP,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,CAAA;AAAA,QACR,KAAO,EAAA,CAAA;AAAA,QACP,iBAAmB,EAAA,CAAA;AAAA,QACnB,UAAY,EAAA,CAAA;AAAA,QACZ,YAAY,UAAa,GAAA,CAAA;AAAA,QACzB,QAAA,EAAU,IAAK,CAAA,GAAA,EAAQ,GAAA,SAAA;AAAA,QACvB;AAAA;AACF,KACF;AAAA;AAEJ;;;;"}
@@ -0,0 +1,5 @@
1
+ import type { CreateHandlerOptions } from "../types.js";
2
+ export declare function requestToRoute(req: {
3
+ url?: string;
4
+ }, handlerOptions: Pick<CreateHandlerOptions, "moduleBasePath" | "build">): string | undefined;
5
+ //# sourceMappingURL=requestToRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestToRoute.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/requestToRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,wBAAgB,cAAc,CAC5B,GAAG,EAAE;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAC,EACnB,cAAc,EAAE,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAkBvE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ function requestToRoute(req, handlerOptions) {
7
+ let route = req.url?.replace("/" + handlerOptions.build.rscOutputPath, "");
8
+ if (typeof route !== "string") {
9
+ return route;
10
+ }
11
+ if (route.startsWith(handlerOptions.moduleBasePath)) {
12
+ route = route.slice(handlerOptions.moduleBasePath.length);
13
+ }
14
+ if (!route || route === "") {
15
+ route = "/";
16
+ }
17
+ if (!route.startsWith("/")) {
18
+ route = "/" + route;
19
+ }
20
+ return route;
21
+ }
22
+
23
+ export { requestToRoute };
24
+ //# sourceMappingURL=requestToRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestToRoute.js","sources":["../../../plugin/helpers/requestToRoute.ts"],"sourcesContent":["import type { CreateHandlerOptions } from \"../types.js\";\n\nexport function requestToRoute(\n req: {url?: string},\n handlerOptions: Pick<CreateHandlerOptions, \"moduleBasePath\" | \"build\">\n) {\n let route = req.url?.replace(\"/\" + handlerOptions.build.rscOutputPath, \"\");\n if (typeof route !== \"string\") {\n return route;\n }\n if (\n route.startsWith(handlerOptions.moduleBasePath)\n ) {\n route = route.slice(handlerOptions.moduleBasePath.length);\n }\n if (!route || route === \"\") {\n route = \"/\";\n }\n if (!route.startsWith(\"/\")) {\n route = \"/\" + route;\n }\n return route;\n}\n"],"names":[],"mappings":";;;;;AAEgB,SAAA,cAAA,CACd,KACA,cACA,EAAA;AACA,EAAI,IAAA,KAAA,GAAQ,IAAI,GAAK,EAAA,OAAA,CAAQ,MAAM,cAAe,CAAA,KAAA,CAAM,eAAe,EAAE,CAAA;AACzE,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,IACE,KAAM,CAAA,UAAA,CAAW,cAAe,CAAA,cAAc,CAC9C,EAAA;AACA,IAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,cAAe,CAAA,cAAA,CAAe,MAAM,CAAA;AAAA;AAE1D,EAAI,IAAA,CAAC,KAAS,IAAA,KAAA,KAAU,EAAI,EAAA;AAC1B,IAAQ,KAAA,GAAA,GAAA;AAAA;AAEV,EAAA,IAAI,CAAC,KAAA,CAAM,UAAW,CAAA,GAAG,CAAG,EAAA;AAC1B,IAAA,KAAA,GAAQ,GAAM,GAAA,KAAA;AAAA;AAEhB,EAAO,OAAA,KAAA;AACT;;;;"}
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import type { HtmlProps } from "./types.js";
3
- export declare const Html: ({ children, CssCollector, cssFiles, globalCss, }: React.PropsWithChildren<HtmlProps>) => React.JSX.Element;
3
+ export declare const Html: ({ children, CssCollector, cssFiles, globalCss, moduleBasePath, }: React.PropsWithChildren<HtmlProps>) => React.JSX.Element;
4
4
  //# sourceMappingURL=html.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../plugin/html.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,IAAI,qDAKd,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,sBAWpC,CAAC"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../plugin/html.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,IAAI,qEAMd,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,sBAYpC,CAAC"}
@@ -10,8 +10,9 @@ const Html = ({
10
10
  children,
11
11
  CssCollector,
12
12
  cssFiles,
13
- globalCss
14
- }) => /* @__PURE__ */ React__default.createElement("html", null, /* @__PURE__ */ React__default.createElement("head", null, /* @__PURE__ */ React__default.createElement(CssCollectorElements, { cssFiles: globalCss })), /* @__PURE__ */ React__default.createElement("body", null, /* @__PURE__ */ React__default.createElement(CssCollector, { as: "div", id: "root", cssFiles }, children)));
13
+ globalCss,
14
+ moduleBasePath
15
+ }) => /* @__PURE__ */ React__default.createElement("html", null, /* @__PURE__ */ React__default.createElement("head", null, moduleBasePath !== "" && /* @__PURE__ */ React__default.createElement("base", { href: moduleBasePath }), /* @__PURE__ */ React__default.createElement(CssCollectorElements, { cssFiles: globalCss })), /* @__PURE__ */ React__default.createElement("body", null, /* @__PURE__ */ React__default.createElement(CssCollector, { as: "div", id: "root", cssFiles }, children)));
15
16
 
16
17
  export { Html };
17
18
  //# sourceMappingURL=html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sources":["../../plugin/html.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HtmlProps } from \"./types.js\";\nimport { CssCollectorElements } from \"./css-collector-elements.js\";\nexport const Html = ({\n children,\n CssCollector,\n cssFiles,\n globalCss,\n}: React.PropsWithChildren<HtmlProps>) => (\n <html>\n <head>\n <CssCollectorElements cssFiles={globalCss} />\n </head>\n <body>\n <CssCollector as={\"div\"} id=\"root\" cssFiles={cssFiles}>\n {children}\n </CssCollector>\n </body>\n </html>\n);\n"],"names":["React"],"mappings":";;;;;;;;AAGO,MAAM,OAAO,CAAC;AAAA,EACnB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CACE,qBAAAA,cAAA,CAAA,aAAA,CAAC,8BACEA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,+CACE,oBAAqB,EAAA,EAAA,QAAA,EAAU,WAAW,CAC7C,CAAA,+CACC,MACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAa,EAAI,EAAA,KAAA,EAAO,IAAG,MAAO,EAAA,QAAA,EAAA,EAChC,QACH,CACF,CACF;;;;"}
1
+ {"version":3,"file":"html.js","sources":["../../plugin/html.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HtmlProps } from \"./types.js\";\nimport { CssCollectorElements } from \"./css-collector-elements.js\";\nexport const Html = ({\n children,\n CssCollector,\n cssFiles,\n globalCss,\n moduleBasePath,\n}: React.PropsWithChildren<HtmlProps>) => (\n <html>\n <head>\n {moduleBasePath !== \"\" && <base href={moduleBasePath} />}\n <CssCollectorElements cssFiles={globalCss} />\n </head>\n <body>\n <CssCollector as={\"div\"} id=\"root\" cssFiles={cssFiles}>\n {children}\n </CssCollector>\n </body>\n </html>\n);\n"],"names":["React"],"mappings":";;;;;;;;AAGO,MAAM,OAAO,CAAC;AAAA,EACnB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,qBACGA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EACE,cAAmB,KAAA,EAAA,oBAAOA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAK,IAAM,EAAA,cAAA,EAAgB,CACtD,kBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAU,SAAW,EAAA,CAC7C,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,YAAa,EAAA,EAAA,EAAA,EAAI,KAAO,EAAA,EAAA,EAAG,MAAO,EAAA,QAAA,EAAA,EAChC,QACH,CACF,CACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAcrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA8GtE"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAcrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA+GtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type Plugin } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { resolveAutoDiscover } from \"../config/resolveAutoDiscover.js\";\nimport { configureWorkerRequestHandler } from \"./server.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { MessageChannel } from \"node:worker_threads\";\n\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet root: string;\nlet autoDiscoveredFiles: AutoDiscoveredFiles;\nlet hmrChannel: MessageChannel | null = null;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n }\n\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-client\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-client\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return userConfig;\n },\n\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n await configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n });\n },\n\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Check if the file is a page or props file\n const isPageFile = userOptions.autoDiscover.modulePattern(file);\n if (!isPageFile) return;\n\n // Get the route for this file\n const [, value] = userOptions.normalizer(file);\n \n // Find all routes affected by this file change\n const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];\n\n // Send HMR update directly to worker through MessageChannel\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_UPDATE',\n path: file,\n timestamp,\n routes: affectedRoutes\n });\n\n // Trigger a full page refresh for affected routes\n for (const route of affectedRoutes) {\n server.ws.send({\n type: 'full-reload',\n path: route\n });\n }\n }\n\n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_ERROR',\n path: file,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n return ctx.modules;\n }\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type Plugin } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { resolveAutoDiscover } from \"../config/resolveAutoDiscover.js\";\nimport { configureWorkerRequestHandler } from \"./server.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { MessageChannel } from \"node:worker_threads\";\n\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet root: string;\nlet autoDiscoveredFiles: AutoDiscoveredFiles;\nlet hmrChannel: MessageChannel | null = null;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n }\n\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-client\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-client\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return userConfig;\n },\n\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n\n await configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n });\n },\n\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Check if the file is a page or props file\n const isPageFile = userOptions.autoDiscover.modulePattern(file);\n if (!isPageFile) return;\n\n // Get the route for this file\n const [, value] = userOptions.normalizer(file);\n \n // Find all routes affected by this file change\n const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];\n\n // Send HMR update directly to worker through MessageChannel\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_UPDATE',\n path: file,\n timestamp,\n routes: affectedRoutes\n });\n\n // Trigger a full page refresh for affected routes\n for (const route of affectedRoutes) {\n server.ws.send({\n type: 'full-reload',\n path: route\n });\n }\n }\n\n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_ERROR',\n path: file,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n return ctx.modules;\n }\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export declare function handleWorkerRscStream(worker: NodeWorker, message: Omit<
18
18
  * @param autoDiscoveredFiles - The auto discovered files
19
19
  * @param userOptions - The user options
20
20
  */
21
- export declare function configureWorkerRequestHandler({ server, autoDiscoveredFiles, userOptions, hmrChannel, }: {
21
+ export declare function configureWorkerRequestHandler({ server, autoDiscoveredFiles, userOptions: _userOptions, hmrChannel, }: {
22
22
  server: ViteDevServer;
23
23
  autoDiscoveredFiles: AutoDiscoveredFiles;
24
24
  userOptions: ResolvedUserOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA0HrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,GAC7C,cAAc,CAAC,UAAU,CAAC,CAe5B;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,MAAM,EACN,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,iBAiGA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2HrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,GAC7C,cAAc,CAAC,UAAU,CAAC,CAe5B;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,iBAuHA"}
@@ -3,11 +3,11 @@
3
3
  * Copyright (c) Nico Brinkkemper
4
4
  * MIT License
5
5
  */
6
- import { join } from 'node:path';
7
6
  import 'node:worker_threads';
8
7
  import { serializedOptions, serializedDevServerConfig } from '../helpers/serializeUserOptions.js';
9
8
  import { createWorker } from '../worker/createWorker.js';
10
9
  import { getRouteFiles } from '../helpers/getRouteFiles.js';
10
+ import { requestToRoute } from '../helpers/requestToRoute.js';
11
11
 
12
12
  let currentWorker = null;
13
13
  let isRestarting = false;
@@ -108,16 +108,21 @@ function handleWorkerRscStream(worker, message) {
108
108
  async function configureWorkerRequestHandler({
109
109
  server,
110
110
  autoDiscoveredFiles,
111
- userOptions,
111
+ userOptions: _userOptions,
112
112
  hmrChannel
113
113
  }) {
114
- if (server.config.root !== userOptions.projectRoot) {
115
- server.config.logger.error("[react-client] Project root mismatch", {
116
- error: new Error(`Server root ${server.config.root} does not match user options root ${userOptions.projectRoot}`)
117
- });
118
- return;
119
- }
120
- await restartWorker(server, autoDiscoveredFiles, userOptions, hmrChannel);
114
+ let {
115
+ // remove these
116
+ moduleBaseURL: _moduleBaseURL,
117
+ projectRoot: _projectRoot,
118
+ ...handlerUserOptions
119
+ } = _userOptions;
120
+ const handlerOptions = Object.assign({}, handlerUserOptions, {
121
+ moduleBaseURL: typeof server.config.server.host === "string" ? `${server.config.server.https ? "https" : "http"}://${server.config.server.host}:${server.config.server.port}` : "",
122
+ moduleBasePath: server.config.base === "/" ? "" : server.config.base.endsWith("/") ? server.config.base.slice(0, -1) : server.config.base,
123
+ projectRoot: server.config.root
124
+ });
125
+ await restartWorker(server, autoDiscoveredFiles, handlerOptions, hmrChannel);
121
126
  const handler = async (req, res, next) => {
122
127
  if (!req.url || req.headers.accept !== "text/x-component") return next();
123
128
  try {
@@ -125,16 +130,22 @@ async function configureWorkerRequestHandler({
125
130
  server.config.logger.error("[react-client] No worker available");
126
131
  return next();
127
132
  }
128
- let route = req.url;
129
- if (!route || route === "") route = "/";
133
+ let route = requestToRoute(req, {
134
+ moduleBasePath: handlerOptions.moduleBasePath,
135
+ build: handlerOptions.build
136
+ });
137
+ if (!route) {
138
+ return next();
139
+ }
130
140
  const routeFiles = await getRouteFiles(
131
141
  route,
132
142
  autoDiscoveredFiles,
133
- userOptions
143
+ handlerOptions
134
144
  );
135
145
  if (routeFiles.type === "error") {
136
- server.config.logger.error("[react-client] Error getting route files", {
137
- error: routeFiles.error
146
+ server.config.logger.error(routeFiles.error.message, {
147
+ error: routeFiles.error,
148
+ timestamp: true
138
149
  });
139
150
  return next();
140
151
  }
@@ -142,12 +153,8 @@ async function configureWorkerRequestHandler({
142
153
  res.setHeader("Content-Type", "text/x-component; charset=utf-8");
143
154
  res.setHeader("Transfer-Encoding", "chunked");
144
155
  res.setHeader("Connection", "keep-alive");
145
- let timeout = setTimeout(() => {
146
- server.config.logger.error("[react-client] RSC render timeout");
147
- res.end();
148
- }, 5e3);
149
156
  const serializedUserOptions = serializedOptions(
150
- userOptions,
157
+ handlerOptions,
151
158
  autoDiscoveredFiles
152
159
  );
153
160
  const stream = handleWorkerRscStream(currentWorker, {
@@ -158,33 +165,38 @@ async function configureWorkerRequestHandler({
158
165
  propsPath: props,
159
166
  // override these at all times to ensure the settings will work for the dev server
160
167
  projectRoot: server.config.root,
161
- moduleRootPath: join(server.config.root, userOptions.moduleBase),
162
- moduleBaseURL: "",
163
- moduleBasePath: "",
164
168
  build: serializedUserOptions.build,
165
169
  manifest: autoDiscoveredFiles.staticManifest,
166
170
  cssFiles: /* @__PURE__ */ new Map(),
167
171
  globalCss: /* @__PURE__ */ new Map()
168
172
  });
169
- stream.pipeTo(
170
- new WritableStream({
171
- write(chunk) {
172
- res.write(chunk);
173
- },
174
- close() {
175
- clearTimeout(timeout);
176
- res.end();
177
- },
178
- abort() {
179
- clearTimeout(timeout);
180
- restartWorker(server, autoDiscoveredFiles, userOptions, hmrChannel);
181
- res.end();
182
- }
183
- })
184
- );
173
+ const writeStream = new WritableStream({
174
+ write(chunk) {
175
+ res.write(chunk);
176
+ },
177
+ close() {
178
+ clearTimeout(timeout);
179
+ res.end();
180
+ },
181
+ abort() {
182
+ clearTimeout(timeout);
183
+ restartWorker(
184
+ server,
185
+ autoDiscoveredFiles,
186
+ handlerOptions,
187
+ hmrChannel
188
+ );
189
+ res.end();
190
+ }
191
+ });
192
+ let timeout = setTimeout(() => {
193
+ server.config.logger.error("[react-client] RSC render timeout");
194
+ res.end();
195
+ }, 5e3);
196
+ stream.pipeTo(writeStream);
185
197
  } catch (error) {
186
198
  if (error instanceof Error) {
187
- server.config.logger.error("[react-client] Error handling request", {
199
+ server.config.logger.error(error.message, {
188
200
  error
189
201
  });
190
202
  }