@lomray/vite-ssr-boost 8.0.0-beta.1 → 8.0.0-beta.2

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 (204) hide show
  1. package/README.md +2 -1
  2. package/adapters/body.d.ts +1 -1
  3. package/adapters/body.js +1 -1
  4. package/adapters/body.js.map +1 -1
  5. package/adapters/compression.d.ts +5 -5
  6. package/adapters/compression.js +1 -1
  7. package/adapters/compression.js.map +1 -1
  8. package/adapters/edge.d.ts +5 -5
  9. package/adapters/edge.js.map +1 -1
  10. package/adapters/express/create-request.d.ts +2 -2
  11. package/adapters/express/create-request.js.map +1 -1
  12. package/adapters/express/entry.d.ts +17 -19
  13. package/adapters/express/entry.js.map +1 -1
  14. package/adapters/express/prepare-server.d.ts +7 -25
  15. package/adapters/express/prepare-server.js +1 -1
  16. package/adapters/express/prepare-server.js.map +1 -1
  17. package/adapters/express/render.d.ts +14 -15
  18. package/adapters/express/render.js +1 -1
  19. package/adapters/express/render.js.map +1 -1
  20. package/adapters/express/server.d.ts +5 -6
  21. package/adapters/express/server.js +1 -1
  22. package/adapters/express/server.js.map +1 -1
  23. package/adapters/express.d.ts +5 -5
  24. package/adapters/express.js.map +1 -1
  25. package/adapters/fastify.d.ts +5 -5
  26. package/adapters/fastify.js +1 -1
  27. package/adapters/fastify.js.map +1 -1
  28. package/adapters/hono.d.ts +2 -2
  29. package/adapters/hono.js.map +1 -1
  30. package/adapters/node.d.ts +6 -5
  31. package/adapters/node.js.map +1 -1
  32. package/browser/entry.d.ts +9 -9
  33. package/browser/entry.js +1 -1
  34. package/browser/entry.js.map +1 -1
  35. package/cli/build.d.ts +2 -2
  36. package/cli/build.js.map +1 -1
  37. package/cli/helpers/keyboard-input.d.ts +1 -1
  38. package/cli/helpers/keyboard-input.js +1 -1
  39. package/cli/helpers/keyboard-input.js.map +1 -1
  40. package/cli/helpers/vite-reset-cache.d.ts +1 -1
  41. package/cli/helpers/vite-reset-cache.js.map +1 -1
  42. package/cli/interfaces/actions.d.ts +8 -9
  43. package/cli/run-amplify-build.d.ts +1 -1
  44. package/cli/run-amplify-build.js.map +1 -1
  45. package/cli/run-dev.d.ts +3 -4
  46. package/cli/run-dev.js.map +1 -1
  47. package/cli/run-docker-build.d.ts +2 -2
  48. package/cli/run-docker-build.js.map +1 -1
  49. package/cli/run-prod.d.ts +4 -5
  50. package/cli/run-prod.js.map +1 -1
  51. package/cli/run-serverless.d.ts +2 -2
  52. package/cli/run-serverless.js.map +1 -1
  53. package/cli/run-vercel-build.d.ts +1 -1
  54. package/cli/run-vercel-build.js.map +1 -1
  55. package/cli.js +1 -1
  56. package/cli.js.map +1 -1
  57. package/components/navigate.d.ts +3 -3
  58. package/components/navigate.js.map +1 -1
  59. package/components/only-client.d.ts +2 -2
  60. package/components/only-client.js +1 -1
  61. package/components/only-client.js.map +1 -1
  62. package/components/render-client.d.ts +4 -4
  63. package/components/render-client.js +1 -1
  64. package/components/render-client.js.map +1 -1
  65. package/components/response-status.d.ts +2 -2
  66. package/components/response-status.js.map +1 -1
  67. package/components/scroll-to-top.d.ts +2 -2
  68. package/components/scroll-to-top.js +1 -1
  69. package/components/scroll-to-top.js.map +1 -1
  70. package/components/with-suspense.d.ts +3 -3
  71. package/components/with-suspense.js.map +1 -1
  72. package/constants/cli-actions.d.ts +1 -1
  73. package/constants/cli-actions.js.map +1 -1
  74. package/constants/cli-context.d.ts +4 -5
  75. package/constants/cli-context.js.map +1 -1
  76. package/constants/cli-name.d.ts +1 -1
  77. package/constants/cli-name.js.map +1 -1
  78. package/constants/cli-shortcuts.d.ts +2 -2
  79. package/constants/cli-shortcuts.js +1 -1
  80. package/constants/cli-shortcuts.js.map +1 -1
  81. package/constants/common.js.map +1 -1
  82. package/constants/plugin-name.d.ts +1 -1
  83. package/constants/plugin-name.js.map +1 -1
  84. package/constants/stream-error.d.ts +1 -1
  85. package/constants/stream-error.js.map +1 -1
  86. package/context/server.d.ts +3 -4
  87. package/context/server.js.map +1 -1
  88. package/core/compose-html.d.ts +2 -2
  89. package/core/compose-html.js.map +1 -1
  90. package/core/early-hints.d.ts +2 -2
  91. package/core/early-hints.js.map +1 -1
  92. package/core/handler.d.ts +3 -3
  93. package/core/handler.js.map +1 -1
  94. package/core/head-response.d.ts +1 -1
  95. package/core/head-response.js.map +1 -1
  96. package/core/headers.d.ts +3 -4
  97. package/core/headers.js +1 -1
  98. package/core/headers.js.map +1 -1
  99. package/core/render.d.ts +13 -13
  100. package/core/render.js +1 -1
  101. package/core/render.js.map +1 -1
  102. package/core/transform-html.d.ts +1 -1
  103. package/core/transform-html.js.map +1 -1
  104. package/core/types.d.ts +2 -3
  105. package/edge/render-to-stream.d.ts +2 -2
  106. package/edge/render-to-stream.js +1 -1
  107. package/edge/render-to-stream.js.map +1 -1
  108. package/helpers/build-custom-state.d.ts +1 -1
  109. package/helpers/build-custom-state.js +1 -1
  110. package/helpers/build-custom-state.js.map +1 -1
  111. package/helpers/build-router-state.d.ts +2 -2
  112. package/helpers/build-router-state.js.map +1 -1
  113. package/helpers/create-focus-only.d.ts +3 -3
  114. package/helpers/create-focus-only.js.map +1 -1
  115. package/helpers/dev-marker.d.ts +1 -1
  116. package/helpers/dev-marker.js.map +1 -1
  117. package/helpers/get-server-state.d.ts +1 -1
  118. package/helpers/get-server-state.js.map +1 -1
  119. package/helpers/html-escape.d.ts +1 -1
  120. package/helpers/html-escape.js +1 -1
  121. package/helpers/html-escape.js.map +1 -1
  122. package/helpers/import-route.d.ts +7 -7
  123. package/helpers/import-route.js +1 -1
  124. package/helpers/import-route.js.map +1 -1
  125. package/helpers/is-route-file.d.ts +1 -1
  126. package/helpers/is-route-file.js.map +1 -1
  127. package/helpers/obtain-stream-error.d.ts +3 -3
  128. package/helpers/obtain-stream-error.js.map +1 -1
  129. package/helpers/plugin-config.d.ts +5 -5
  130. package/helpers/plugin-config.js +1 -1
  131. package/helpers/plugin-config.js.map +1 -1
  132. package/helpers/print-server-info.d.ts +3 -4
  133. package/helpers/print-server-info.js +1 -1
  134. package/helpers/print-server-info.js.map +1 -1
  135. package/helpers/print-server-urls.d.ts +2 -2
  136. package/helpers/print-server-urls.js +1 -1
  137. package/helpers/print-server-urls.js.map +1 -1
  138. package/helpers/process-stop.d.ts +1 -1
  139. package/helpers/process-stop.js.map +1 -1
  140. package/helpers/resolve-server-urls.d.ts +3 -4
  141. package/helpers/resolve-server-urls.js +1 -1
  142. package/helpers/resolve-server-urls.js.map +1 -1
  143. package/helpers/serialize-errors.d.ts +2 -2
  144. package/helpers/serialize-errors.js.map +1 -1
  145. package/helpers/vite-aliases.d.ts +2 -2
  146. package/helpers/vite-aliases.js +1 -1
  147. package/helpers/vite-aliases.js.map +1 -1
  148. package/interfaces/fc-route.d.ts +4 -4
  149. package/interfaces/fc-route.js.map +1 -1
  150. package/interfaces/fc.d.ts +3 -4
  151. package/interfaces/route-object.d.ts +6 -6
  152. package/node/compress-response.d.ts +2 -2
  153. package/node/compress-response.js +1 -1
  154. package/node/compress-response.js.map +1 -1
  155. package/node/create-headers.d.ts +1 -1
  156. package/node/create-headers.js.map +1 -1
  157. package/node/create-request.d.ts +2 -2
  158. package/node/create-request.js.map +1 -1
  159. package/node/http.d.ts +4 -6
  160. package/node/render-to-stream.d.ts +2 -2
  161. package/node/render-to-stream.js +1 -1
  162. package/node/render-to-stream.js.map +1 -1
  163. package/node/request-signal.d.ts +2 -2
  164. package/node/request-signal.js.map +1 -1
  165. package/node/split-link-header.d.ts +1 -1
  166. package/node/split-link-header.js.map +1 -1
  167. package/node/write-early-hints.d.ts +2 -2
  168. package/node/write-early-hints.js.map +1 -1
  169. package/node/write-fetch-response.d.ts +3 -2
  170. package/node/write-fetch-response.js +1 -1
  171. package/node/write-fetch-response.js.map +1 -1
  172. package/package.json +52 -32
  173. package/plugin.d.ts +7 -7
  174. package/plugin.js.map +1 -1
  175. package/plugins/create-spa-index.d.ts +3 -3
  176. package/plugins/create-spa-index.js.map +1 -1
  177. package/plugins/handle-custom-entrypoint.d.ts +4 -4
  178. package/plugins/handle-custom-entrypoint.js +1 -1
  179. package/plugins/handle-custom-entrypoint.js.map +1 -1
  180. package/plugins/make-aliases.d.ts +3 -3
  181. package/plugins/make-aliases.js +1 -1
  182. package/plugins/make-aliases.js.map +1 -1
  183. package/plugins/normalize-route.d.ts +3 -3
  184. package/plugins/normalize-route.js.map +1 -1
  185. package/services/build.d.ts +5 -51
  186. package/services/build.js +1 -1
  187. package/services/build.js.map +1 -1
  188. package/services/logger.d.ts +2 -30
  189. package/services/logger.js.map +1 -1
  190. package/services/parse-routes.d.ts +5 -42
  191. package/services/parse-routes.js +1 -1
  192. package/services/parse-routes.js.map +1 -1
  193. package/services/path-normalize.d.ts +3 -18
  194. package/services/path-normalize.js +1 -1
  195. package/services/path-normalize.js.map +1 -1
  196. package/services/server-api.d.ts +1 -7
  197. package/services/server-api.js.map +1 -1
  198. package/services/server-config.d.ts +4 -48
  199. package/services/server-config.js +1 -1
  200. package/services/server-config.js.map +1 -1
  201. package/services/ssr-manifest.d.ts +6 -63
  202. package/services/ssr-manifest.js +1 -1
  203. package/services/ssr-manifest.js.map +1 -1
  204. package/workflow/Dockerfile +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.js","sources":["../../src/services/server-config.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport type { Logger, ViteDevServer } from 'vite';\nimport type { IPluginConfig } from '@helpers/plugin-config';\nimport getPluginConfig from '@helpers/plugin-config';\nimport type { IBuildEntrypoint } from '@services/build';\nimport DefaultLogger from '@services/logger';\n\ninterface IConfigOptions {\n isProd?: boolean;\n isHost?: boolean;\n isOnlyClient?: boolean; // SPA mode\n isModulePreload?: boolean;\n mode?: string;\n entrypointName?: string;\n}\n\ninterface IConfigParams {\n root: string;\n publicDir: string;\n pluginPath: string;\n isProd: boolean;\n isSPA: boolean;\n indexFile: string;\n clientFile: string;\n serverFile: string;\n host: string;\n port: number;\n}\n\n/**\n * Server config\n */\nclass ServerConfig {\n /**\n * Production build\n */\n public readonly isProd: boolean;\n\n /**\n * Server host mode\n */\n public readonly isHost: boolean;\n\n /**\n * Add module preload scripts to server output\n */\n public readonly isModulePreload: boolean;\n\n /**\n * Env mode\n */\n public readonly mode: string;\n\n /**\n * Run specified entrypoint\n */\n protected readonly entrypointName?: string;\n\n /**\n * Vite config - only for development\n */\n protected vite?: ViteDevServer;\n\n /**\n * Express application\n */\n protected app?: unknown;\n\n /**\n * Config params\n */\n protected params: IConfigParams;\n\n /**\n * Default params\n */\n protected defaultParams: Partial<IConfigParams>;\n\n /**\n * Vite logger for dev mode or console for production\n */\n protected logger: Logger;\n\n /**\n * Default root dir\n */\n protected defaultBuildRoots = ['./build', './dist'];\n\n /**\n * @constructor\n */\n protected constructor(\n {\n entrypointName,\n isProd = false,\n isHost = false,\n isOnlyClient = false,\n isModulePreload = false,\n mode = 'production',\n }: IConfigOptions,\n prodParams: Partial<IConfigParams>,\n ) {\n this.isProd = isProd;\n this.isHost = isHost;\n this.isModulePreload = isModulePreload;\n this.mode = mode;\n this.entrypointName = entrypointName;\n this.defaultParams = {\n publicDir: '/client', // default for production,\n indexFile: '/client/index.html',\n serverFile: '/server/server.js',\n host: '127.0.0.1',\n isSPA: isOnlyClient,\n ...prodParams,\n };\n\n this.makeParams();\n }\n\n /**\n * Initialize service\n */\n public static init(\n options: IConfigOptions = {},\n prodOptions: Partial<IConfigParams> = {},\n ): ServerConfig {\n return new ServerConfig(options, prodOptions);\n }\n\n /**\n * Lookup build folder\n */\n protected getBuildDir(root?: string): string {\n for (const dir of [root, ...this.defaultBuildRoots]) {\n if (dir && fs.existsSync(dir)) {\n return dir;\n }\n }\n\n return root ?? this.defaultBuildRoots[0];\n }\n\n /**\n * Make config params\n */\n protected makeParams(): void {\n this.applyEntrypointConfig();\n\n const pluginConfig = (this.getPluginConfig() ?? {}) as Partial<IPluginConfig>;\n const { config } = this.vite ?? {};\n const {\n root,\n publicDir,\n indexFile,\n clientFile,\n serverFile,\n host: defaultHost,\n isSPA,\n } = this.defaultParams;\n const dirInfo = new URL(import.meta.url);\n const pluginPath =\n pluginConfig.pluginPath ?? path.resolve(path.dirname(dirInfo.pathname), '../');\n const entrypoint = this.getEntrypoint();\n\n const host =\n typeof config?.server.host === 'boolean' || this.isHost\n ? '0.0.0.0'\n : (config?.server.host ?? defaultHost!);\n const port = Number(config?.env.VITE_PORT ?? config?.server.port ?? this.defaultParams.port!);\n\n this.params = {\n root: config?.root ?? this.getBuildDir(root),\n publicDir: config?.publicDir ?? publicDir!,\n indexFile: pluginConfig.indexFile ?? indexFile!,\n clientFile: pluginConfig.clientFile ?? clientFile!,\n serverFile: pluginConfig.serverFile ?? serverFile!,\n pluginPath,\n host,\n port,\n isSPA: entrypoint ? entrypoint.type === 'spa' : isSPA!,\n isProd: this.isProd,\n };\n this.logger = this.vite?.config.logger ?? new DefaultLogger();\n }\n\n /**\n * Set vite server\n */\n public setVite(vite: ViteDevServer): void {\n this.vite = vite;\n\n this.makeParams();\n }\n\n /**\n * Set express server\n */\n public setApp<T>(app: T): void {\n this.app = app;\n }\n\n /**\n * Return vite dev server\n * NOTE: only on development mode\n */\n public getVite(): ViteDevServer | undefined {\n return this.vite;\n }\n\n /**\n * Return express server\n */\n public getApp<T = unknown>(): T | undefined {\n return this.app as T | undefined;\n }\n\n /**\n * Return plugin config\n * NOTE: only on development mode\n */\n public getPluginConfig(): IPluginConfig | undefined {\n return this.vite ? getPluginConfig(this.vite.config) : undefined;\n }\n\n /**\n * Return config params\n */\n public getParams(): IConfigParams {\n return this.params;\n }\n\n /**\n * Get server logger\n */\n public getLogger(): Logger {\n return this.logger;\n }\n\n /**\n * Set custom logger\n */\n public setLogger(logger: Logger): void {\n this.logger = logger;\n }\n\n /**\n * Apply config to specified entrypoint\n */\n protected applyEntrypointConfig(): void {\n const config = this.getPluginConfig();\n\n if (!this.vite || !config || !this.entrypointName) {\n return;\n }\n\n const entrypointConfig = this.getEntrypoint();\n\n // apply specified entrypoint config\n if (entrypointConfig) {\n (['indexFile', 'clientFile', 'serverFile'] as const).forEach((optName) => {\n if (entrypointConfig[optName]) {\n config[optName] = entrypointConfig[optName]!;\n }\n });\n }\n }\n\n /**\n * Get current entrypoint\n */\n protected getEntrypoint(): IBuildEntrypoint | undefined {\n const config = this.vite ? getPluginConfig(this.vite.config) : undefined;\n\n return config?.entrypoint?.find(({ name }) => name === this.entrypointName);\n }\n}\n\nexport default ServerConfig;\n"],"names":["ServerConfig","isProd","isHost","isModulePreload","mode","entrypointName","vite","app","params","defaultParams","logger","defaultBuildRoots","constructor","isOnlyClient","prodParams","this","publicDir","indexFile","serverFile","host","isSPA","makeParams","static","options","prodOptions","getBuildDir","root","dir","fs","existsSync","applyEntrypointConfig","pluginConfig","getPluginConfig","config","clientFile","defaultHost","dirInfo","URL","url","pluginPath","path","resolve","dirname","pathname","entrypoint","getEntrypoint","server","port","Number","env","VITE_PORT","type","DefaultLogger","setVite","setApp","getVite","getApp","undefined","getParams","getLogger","setLogger","entrypointConfig","forEach","optName","find","name"],"mappings":"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"}
1
+ {"version":3,"file":"server-config.js","sources":["../../src/services/server-config.ts"],"sourcesContent":[null],"names":["ServerConfig","isProd","isHost","isModulePreload","mode","entrypointName","vite","app","params","defaultParams","logger","defaultBuildRoots","constructor","isOnlyClient","prodParams","this","publicDir","indexFile","serverFile","host","isSPA","makeParams","init","options","prodOptions","getBuildDir","root","dir","fs","existsSync","applyEntrypointConfig","pluginConfig","getPluginConfig","config","clientFile","defaultHost","dirInfo","URL","url","pluginPath","path","resolve","dirname","pathname","entrypoint","getEntrypoint","server","port","Number","env","VITE_PORT","type","DefaultLogger","setVite","setApp","getVite","getApp","undefined","getParams","getLogger","setLogger","entrypointConfig","forEach","optName","find","name"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { RouterState, StaticHandlerContext } from 'react-router';
2
- import { Alias, ModuleNode, RenderBuiltAssetUrl } from 'vite';
3
- import { TRoutesTree } from "./parse-routes.js";
4
- import PathNormalize from "./path-normalize.js";
5
- import ServerConfig from "./server-config.js";
1
+ import type { RouterState, StaticHandlerContext } from 'react-router';
2
+ import type { Alias, ModuleNode, RenderBuiltAssetUrl } from 'vite';
3
+ import type { TRoutesTree } from './parse-routes.js';
4
+ import PathNormalize from './path-normalize.js';
5
+ import type ServerConfig from './server-config.js';
6
6
  interface ISsrManifestParams {
7
7
  buildDir?: string;
8
8
  viteAliases?: Alias[];
@@ -89,138 +89,81 @@ declare class SsrManifest {
89
89
  * Loaded assets manifest file
90
90
  */
91
91
  protected routesAssets: Record<string, IAsset[]> | null;
92
- /**
93
- * @constructor
94
- */
95
92
  /**
96
93
  * @constructor
97
94
  */
98
95
  protected constructor(config: ServerConfig, { buildDir, viteAliases, basename, renderBuiltUrl }?: ISsrManifestParams);
99
- /**
100
- * Get singleton instance
101
- */
102
96
  /**
103
97
  * Get singleton instance
104
98
  */
105
99
  static get(config: ServerConfig, params?: ISsrManifestParams): SsrManifest;
106
- /**
107
- * Get output dir
108
- */
109
100
  /**
110
101
  * Get output dir
111
102
  */
112
103
  protected getOutDir(): string;
113
- /**
114
- * Get assets manifest file name
115
- */
116
104
  /**
117
105
  * Get assets manifest file name
118
106
  */
119
107
  protected getAssetsManifestFile(): string;
120
- /**
121
- * Load client ssr manifest
122
- */
123
108
  /**
124
109
  * Load client ssr manifest
125
110
  */
126
111
  protected loadClientManifest(): IManifest;
127
- /**
128
- * Load assets manifest
129
- */
130
112
  /**
131
113
  * Load assets manifest
132
114
  */
133
115
  protected loadAssetsManifest(): Record<string, IAsset[]>;
134
- /**
135
- * Same as 'getAsyncRoutesIds' but for routes tree from 'ParseRoutes'
136
- */
137
116
  /**
138
117
  * Same as 'getAsyncRoutesIds' but for routes tree from 'ParseRoutes'
139
118
  */
140
119
  protected getRoutesTreeIds(routes: TRoutesTree[], index?: string): Record<string, string | undefined>;
141
- /**
142
- * Sort assets
143
- */
144
120
  /**
145
121
  * Sort assets
146
122
  */
147
123
  protected sortAssets(assets: IAsset[]): IAsset[];
148
- /**
149
- * Get recursive module assets
150
- */
151
124
  /**
152
125
  * Get recursive module assets
153
126
  */
154
127
  protected getRouteAssets(manifest: IManifest, module: IManifest[string], isNested?: boolean): Record<string, IAsset>;
155
- /**
156
- * Build routes manifest file
157
- */
158
128
  /**
159
129
  * Build routes manifest file
160
130
  */
161
131
  buildRoutesManifest(): void;
162
- /**
163
- * Get route assets
164
- */
165
132
  /**
166
133
  * Get route assets
167
134
  */
168
135
  protected getAssets(routes?: RouterState['matches']): IAsset[];
169
- /**
170
- * Get development route assets
171
- */
172
136
  /**
173
137
  * Get development route assets
174
138
  */
175
139
  protected getDevModules(routes?: RouterState['matches']): ModuleNode[];
176
- /**
177
- * Compile SSR graph styles before the browser has populated the client graph.
178
- */
179
140
  /**
180
141
  * Compile SSR graph styles before the browser has populated the client graph.
181
142
  */
182
143
  prepareDevAssets(routes?: RouterState['matches']): Promise<void>;
183
- /**
184
- * Collect development assets from the current server and client module graphs.
185
- */
186
144
  /**
187
145
  * Collect development assets from the current server and client module graphs.
188
146
  */
189
147
  protected getAssetsDev(routes?: RouterState['matches']): IAsset[];
190
- /**
191
- * Get module assets
192
- */
193
148
  /**
194
149
  * Get module assets
195
150
  */
196
151
  protected getModuleAssets(module?: ModuleNode, skipModules?: Set<string>): TAssets;
197
- /**
198
- * Get asset weight
199
- */
200
152
  /**
201
153
  * Get asset weight
202
154
  */
203
155
  protected getAssetWeight(asset: string): number;
204
- /**
205
- * Get asset type
206
- */
207
156
  /**
208
157
  * Get asset type
209
158
  */
210
159
  protected getAssetType(asset: string): AssetType | null;
211
- /**
212
- * Build preload hints without depending on a particular HTTP transport.
213
- */
214
160
  /**
215
161
  * Build preload hints without depending on a particular HTTP transport.
216
162
  */
217
163
  getEarlyHints(assets: IAsset[]): Headers;
218
- /**
219
- * Inject route assets to head html
220
- */
221
164
  /**
222
165
  * Inject route assets to head html
223
166
  */
224
167
  injectAssets({ routerContext, html }: IInjectAssetsContext): Headers;
225
168
  }
226
- export { SsrManifest as default };
169
+ export default SsrManifest;
@@ -1,2 +1,2 @@
1
- import e from"node:fs";import s from"node:path";import t from"chalk";import i from"./parse-routes.js";import r from"./path-normalize.js";var n;!function(e){e.style="style",e.script="script",e.image="image",e.font="font"}(n||(n={}));class o{static instance=null;config;pathNormalize;root;buildDir;manifestName="manifest.json";assetsManifest="assets-manifest.json";viteAliases;basename;renderBuiltUrl;routesAssets=null;constructor(e,{buildDir:s,viteAliases:t,basename:i,renderBuiltUrl:n}={}){this.config=e,this.root=e.getParams().root,this.buildDir=s,this.viteAliases=t??e.getVite()?.config?.resolve.alias,this.pathNormalize=new r(e,t),this.basename=i,this.renderBuiltUrl=n}static get(e,s={}){return null===o.instance&&(o.instance=new o(e,s)),o.instance}getOutDir(){return s.resolve(this.root,this.buildDir||"")}getAssetsManifestFile(){return`${this.getOutDir()}/server/${this.assetsManifest}`}loadClientManifest(){const t=s.resolve(this.root,`${this.buildDir||""}/client/.vite`),i=`${t}/${this.manifestName}`;if(!e.existsSync(i))return{};const r=JSON.parse(e.readFileSync(i,{encoding:"utf-8"}));return e.rmSync(i),0===e.readdirSync(t).length&&e.rmSync(t,{recursive:!0}),r}loadAssetsManifest(){if(null!==this.routesAssets)return this.routesAssets;const s=this.getAssetsManifestFile();return e.existsSync(s)?(this.routesAssets=JSON.parse(e.readFileSync(s,{encoding:"utf-8"})),this.routesAssets):{}}getRoutesTreeIds(e,s){const t={};return e.forEach(((e,i)=>{const r=[s,String(i)].filter(Boolean).join("-");e.import&&(t[r]=this.pathNormalize.getAppPath(e.import)),e.children.length>0&&Object.assign(t,this.getRoutesTreeIds(e.children,r))})),t}sortAssets(e){return e.sort(((e,s)=>e.weight===s.weight?Number(e.isNested)-Number(s.isNested):e.weight-s.weight))}getRouteAssets(e,t,i=!1){const r=[...t?.assets??[],...t?.css??[],t?.file].reduce(((e,r)=>{if(r){const n=this.getAssetType(r),o=t.isEntry&&t.file===r;if(n){const t=s.posix.normalize(`${this.basename}/${r}`),a=this.renderBuiltUrl?.(t,{type:"asset",ssr:!0,hostId:"",hostType:t.split(".").at(-1)?.toLowerCase()});e[r]={url:"string"==typeof a?a:t,weight:o?1.9:this.getAssetWeight(r),type:n,isNested:i,isPreload:!o}}}return e}),{});return t?.imports?.length&&t.imports.forEach((s=>{const t=e[s];t&&Object.assign(r,this.getRouteAssets(e,t,!0))})),r}buildRoutesManifest(){const s=this.loadClientManifest(),t=new i(this.config,this.viteAliases),r=this.getRoutesTreeIds(t.parse()),n=this.pathNormalize.getImportPostfix(),o={};Object.entries(r).forEach((([e,t])=>{const i=n.find((e=>void 0!==s[`${t}${e}`])),r=s[`${t}${i||""}`];o[e]=this.sortAssets(Object.values(this.getRouteAssets(s,r)))})),e.writeFileSync(this.getAssetsManifestFile(),JSON.stringify(o,null,2),{encoding:"utf-8"})}getAssets(e){if(this.config.getVite())return this.getAssetsDev(e);const s=e?.map((({route:e})=>e.id)).filter(Boolean)??[];if(!s.length)return[];const t=this.loadAssetsManifest();return this.sortAssets(s.map((e=>t[e])).flat().filter(Boolean))}getDevModules(e){const t=e?.map((({route:e})=>this.pathNormalize.getAppPath(e?.pathId,!0))).filter(Boolean)??[],i=this.pathNormalize.getImportPostfix(),r=this.config.getPluginConfig(),n=[r?.clientFile??"client.ts",r?.serverFile??"server.ts"].map((e=>s.resolve(this.root,e))),o=[];return[...n,...t].forEach((e=>{for(const s of i){const t=this.config.getVite()?.moduleGraph.getModuleById(`${e}${s}`);if(t){o.push(t);break}}})),o}async prepareDevAssets(e){const s=this.config.getVite();if(!s)return;const t=new Set,i=async e=>{t.has(e.url)||(t.add(e.url),e.file&&/\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(e.file)&&await s.transformRequest(e.url),await Promise.all([...e.importedModules].map(i)))};await Promise.all(this.getDevModules(e).map(i))}getAssetsDev(e){const s=Object.assign({},...this.getDevModules(e).map((e=>this.getModuleAssets(e))));return Object.values(s)}getModuleAssets(e,s=new Set){const i=e?.importedModules??e?.clientImportedModules;if(!i?.size||s.has(e.file))return{};let r={};return s.add(e.file),i.forEach((e=>{const{file:i,transformResult:o}=e,a=i?.split(".").at(-1);if(i&&a&&["css","scss","sass","less","styl","stylus","pcss","postcss"].includes(a)){const e=o?.code.match(/__vite__css\s+=\s+"(?<css>.+)"/)?.groups?.css;if(e)try{r[i]={type:n.style,url:i,weight:this.getAssetWeight(i),content:JSON.parse(`{"style": "${e}"}`).style,isNested:Boolean(s.size),isPreload:!1}}catch{console.warn(t.yellowBright("Failed to parse style: ",i))}}else r={...r,...this.getModuleAssets(e,s)}})),r}getAssetWeight(e){switch(this.getAssetType(e)){case n.style:return 1;case n.script:return 2;default:return 3}}getAssetType(e){const s=e.split(".").at(-1)?.toLowerCase();switch(s){case"css":case"scss":return n.style;case"js":return n.script;case"svg":case"jpg":case"jpeg":case"png":case"webp":case"gif":case"ico":return n.image;case"ttf":case"otf":case"woff":case"woff2":return n.font;default:return null}}getEarlyHints(e){const s=new Headers;return e.forEach((({type:e,url:t})=>{e&&["style","script"].includes(e)&&s.append("Link",`<${t}>; rel=preload; as=${e}`)})),s}injectAssets({routerContext:e,html:s}){const t=this.getAssets(e?.matches),i=t.map((({type:e,url:s,isPreload:t,content:i=""})=>{switch(e){case n.style:return this.config.getVite()?`<style data-vite-dev-id="${s}">${i}</style>`:`<link rel="stylesheet" href="${s}">`;case n.script:return t?this.config.isModulePreload?`<link rel="modulepreload" as="script" crossorigin href="${s}">`:null:`<script async type="module" crossorigin src="${s}"><\/script>`}return null})).filter(Boolean);return s.header=s.header.replace("</head>",`${i.join("\n")}</head>`),this.getEarlyHints(t)}}export{o as default};
1
+ import e from"node:fs";import s from"node:path";import t from"chalk";import i from"./parse-routes.js";import r from"./path-normalize.js";var n;!function(e){e.style="style",e.script="script",e.image="image",e.font="font"}(n||(n={}));class o{static instance=null;config;pathNormalize;root;buildDir;manifestName="manifest.json";assetsManifest="assets-manifest.json";viteAliases;basename;renderBuiltUrl;routesAssets=null;constructor(e,{buildDir:s,viteAliases:t,basename:i,renderBuiltUrl:n}={}){this.config=e,this.root=e.getParams().root,this.buildDir=s,this.viteAliases=t??e.getVite()?.config?.resolve.alias,this.pathNormalize=new r(e,t),this.basename=i,this.renderBuiltUrl=n}static get(e,s={}){return null===o.instance&&(o.instance=new o(e,s)),o.instance}getOutDir(){return s.resolve(this.root,this.buildDir||"")}getAssetsManifestFile(){return`${this.getOutDir()}/server/${this.assetsManifest}`}loadClientManifest(){const t=s.resolve(this.root,`${this.buildDir||""}/client/.vite`),i=`${t}/${this.manifestName}`;if(!e.existsSync(i))return{};const r=JSON.parse(e.readFileSync(i,{encoding:"utf-8"}));return e.rmSync(i),0===e.readdirSync(t).length&&e.rmSync(t,{recursive:!0}),r}loadAssetsManifest(){if(null!==this.routesAssets)return this.routesAssets;const s=this.getAssetsManifestFile();return e.existsSync(s)?(this.routesAssets=JSON.parse(e.readFileSync(s,{encoding:"utf-8"})),this.routesAssets):{}}getRoutesTreeIds(e,s){const t={};return e.forEach((e,i)=>{const r=[s,String(i)].filter(Boolean).join("-");e.import&&(t[r]=this.pathNormalize.getAppPath(e.import)),e.children.length>0&&Object.assign(t,this.getRoutesTreeIds(e.children,r))}),t}sortAssets(e){return e.sort((e,s)=>e.weight===s.weight?Number(e.isNested)-Number(s.isNested):e.weight-s.weight)}getRouteAssets(e,t,i=!1){const r=[...t?.assets??[],...t?.css??[],t?.file].reduce((e,r)=>{if(r){const n=this.getAssetType(r),o=t.isEntry&&t.file===r;if(n){const t=s.posix.normalize(`${this.basename}/${r}`),a=this.renderBuiltUrl?.(t,{type:"asset",ssr:!0,hostId:"",hostType:t.split(".").at(-1)?.toLowerCase()});e[r]={url:"string"==typeof a?a:t,weight:o?1.9:this.getAssetWeight(r),type:n,isNested:i,isPreload:!o}}}return e},{});return t?.imports?.length&&t.imports.forEach(s=>{const t=e[s];t&&Object.assign(r,this.getRouteAssets(e,t,!0))}),r}buildRoutesManifest(){const s=this.loadClientManifest(),t=new i(this.config,this.viteAliases),r=this.getRoutesTreeIds(t.parse()),n=this.pathNormalize.getImportPostfix(),o={};Object.entries(r).forEach(([e,t])=>{const i=n.find(e=>void 0!==s[`${t}${e}`]),r=s[`${t}${i||""}`];o[e]=this.sortAssets(Object.values(this.getRouteAssets(s,r)))}),e.writeFileSync(this.getAssetsManifestFile(),JSON.stringify(o,null,2),{encoding:"utf-8"})}getAssets(e){if(this.config.getVite())return this.getAssetsDev(e);const s=e?.map(({route:e})=>e.id).filter(Boolean)??[];if(!s.length)return[];const t=this.loadAssetsManifest();return this.sortAssets(s.map(e=>t[e]).flat().filter(Boolean))}getDevModules(e){const t=e?.map(({route:e})=>this.pathNormalize.getAppPath(e?.pathId,!0)).filter(Boolean)??[],i=this.pathNormalize.getImportPostfix(),r=this.config.getPluginConfig(),n=[r?.clientFile??"client.ts",r?.serverFile??"server.ts"].map(e=>s.resolve(this.root,e)),o=[];return[...n,...t].forEach(e=>{for(const s of i){const t=this.config.getVite()?.moduleGraph.getModuleById(`${e}${s}`);if(t){o.push(t);break}}}),o}async prepareDevAssets(e){const s=this.config.getVite();if(!s)return;const t=new Set,i=async e=>{t.has(e.url)||(t.add(e.url),e.file&&/\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(e.file)&&await s.transformRequest(e.url),await Promise.all([...e.importedModules].map(i)))};await Promise.all(this.getDevModules(e).map(i))}getAssetsDev(e){const s=Object.assign({},...this.getDevModules(e).map(e=>this.getModuleAssets(e)));return Object.values(s)}getModuleAssets(e,s=new Set){const i=e?.importedModules??e?.clientImportedModules;if(!i?.size||s.has(e.file))return{};let r={};return s.add(e.file),i.forEach(e=>{const{file:i,transformResult:o}=e,a=i?.split(".").at(-1);if(i&&a&&["css","scss","sass","less","styl","stylus","pcss","postcss"].includes(a)){const e=o?.code.match(/__vite__css\s+=\s+"(?<css>.+)"/)?.groups?.css;if(e)try{r[i]={type:n.style,url:i,weight:this.getAssetWeight(i),content:JSON.parse(`{"style": "${e}"}`).style,isNested:Boolean(s.size),isPreload:!1}}catch{console.warn(t.yellowBright("Failed to parse style: ",i))}}else r={...r,...this.getModuleAssets(e,s)}}),r}getAssetWeight(e){switch(this.getAssetType(e)){case n.style:return 1;case n.script:return 2;default:return 3}}getAssetType(e){const s=e.split(".").at(-1)?.toLowerCase();switch(s){case"css":case"scss":return n.style;case"js":return n.script;case"svg":case"jpg":case"jpeg":case"png":case"webp":case"gif":case"ico":return n.image;case"ttf":case"otf":case"woff":case"woff2":return n.font;default:return null}}getEarlyHints(e){const s=new Headers;return e.forEach(({type:e,url:t})=>{e&&["style","script"].includes(e)&&s.append("Link",`<${t}>; rel=preload; as=${e}`)}),s}injectAssets({routerContext:e,html:s}){const t=this.getAssets(e?.matches),i=t.map(({type:e,url:s,isPreload:t,content:i=""})=>{switch(e){case n.style:return this.config.getVite()?`<style data-vite-dev-id="${s}">${i}</style>`:`<link rel="stylesheet" href="${s}">`;case n.script:return t?this.config.isModulePreload?`<link rel="modulepreload" as="script" crossorigin href="${s}">`:null:`<script async type="module" crossorigin src="${s}"><\/script>`}return null}).filter(Boolean);return s.header=s.header.replace("</head>",`${i.join("\n")}</head>`),this.getEarlyHints(t)}}export{o as default};
2
2
  //# sourceMappingURL=ssr-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssr-manifest.js","sources":["../../src/services/ssr-manifest.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport chalk from 'chalk';\nimport type { RouterState, StaticHandlerContext } from 'react-router';\nimport type { Alias, ModuleNode, RenderBuiltAssetUrl } from 'vite';\nimport type { IAsyncRoute } from '@helpers/import-route';\nimport type { TRoutesTree } from '@services/parse-routes';\nimport ParseRoutes from '@services/parse-routes';\nimport PathNormalize from '@services/path-normalize';\nimport type ServerConfig from '@services/server-config';\n\ninterface ISsrManifestParams {\n buildDir?: string;\n viteAliases?: Alias[];\n basename?: string;\n renderBuiltUrl?: RenderBuiltAssetUrl;\n}\n\ninterface IManifest {\n [path: string]: {\n assets: string[];\n css: string[];\n file: string;\n isEntry?: boolean;\n imports: string[];\n };\n}\n\nenum AssetType {\n style = 'style',\n script = 'script',\n image = 'image',\n font = 'font',\n}\n\ninterface IAsset {\n type: AssetType;\n url: string;\n weight: number;\n isNested: boolean;\n isPreload: boolean;\n content?: string;\n}\n\ntype TAssets = { [id: string]: IAsset };\n\ninterface IInjectAssetsContext {\n html: {\n header: string;\n };\n routerContext?: StaticHandlerContext;\n}\n\n/**\n * Working with SSR Manifest file\n */\nclass SsrManifest {\n /**\n * Singleton\n */\n protected static instance: SsrManifest | null = null;\n\n /**\n * Server config\n */\n protected readonly config: ServerConfig;\n\n /**\n * Path normalize service\n */\n protected readonly pathNormalize: PathNormalize;\n\n /**\n * Project root path\n */\n protected readonly root: string;\n\n /**\n * Build dir\n */\n protected readonly buildDir?: string;\n\n /**\n * Client manifest file name\n */\n protected readonly manifestName = 'manifest.json';\n\n /**\n * Assets manifest file name\n */\n protected readonly assetsManifest = 'assets-manifest.json';\n\n /**\n * Vite resolve aliases\n */\n protected readonly viteAliases?: Alias[];\n\n /**\n * Vite base\n */\n protected readonly basename?: string;\n\n /**\n * Vite renderBuiltUrl config func\n */\n protected readonly renderBuiltUrl?: RenderBuiltAssetUrl;\n\n /**\n * Loaded assets manifest file\n */\n protected routesAssets: Record<string, IAsset[]> | null = null;\n\n /**\n * @constructor\n */\n protected constructor(\n config: ServerConfig,\n { buildDir, viteAliases, basename, renderBuiltUrl }: ISsrManifestParams = {},\n ) {\n this.config = config;\n this.root = config.getParams().root;\n this.buildDir = buildDir;\n this.viteAliases = viteAliases ?? config.getVite()?.config?.resolve.alias;\n this.pathNormalize = new PathNormalize(config, viteAliases);\n this.basename = basename;\n this.renderBuiltUrl = renderBuiltUrl;\n }\n\n /**\n * Get singleton instance\n */\n public static get(config: ServerConfig, params: ISsrManifestParams = {}): SsrManifest {\n if (SsrManifest.instance === null) {\n SsrManifest.instance = new SsrManifest(config, params);\n }\n\n return SsrManifest.instance;\n }\n\n /**\n * Get output dir\n */\n protected getOutDir() {\n return path.resolve(this.root, this.buildDir || '');\n }\n\n /**\n * Get assets manifest file name\n */\n protected getAssetsManifestFile(): string {\n return `${this.getOutDir()}/server/${this.assetsManifest}`;\n }\n\n /**\n * Load client ssr manifest\n */\n protected loadClientManifest(): IManifest {\n const clientManifestDir = path.resolve(this.root, `${this.buildDir || ''}/client/.vite`);\n const clientSsrManifest = `${clientManifestDir}/${this.manifestName}`;\n\n if (!fs.existsSync(clientSsrManifest)) {\n return {};\n }\n\n const result = JSON.parse(\n fs.readFileSync(clientSsrManifest, { encoding: 'utf-8' }),\n ) as IManifest;\n\n fs.rmSync(clientSsrManifest);\n\n // try to remove empty .vite dir\n if (fs.readdirSync(clientManifestDir).length === 0) {\n fs.rmSync(clientManifestDir, { recursive: true });\n }\n\n return result;\n }\n\n /**\n * Load assets manifest\n */\n protected loadAssetsManifest(): Record<string, IAsset[]> {\n if (this.routesAssets !== null) {\n return this.routesAssets;\n }\n\n const manifestFile = this.getAssetsManifestFile();\n\n if (!fs.existsSync(manifestFile)) {\n return {};\n }\n\n this.routesAssets = JSON.parse(fs.readFileSync(manifestFile, { encoding: 'utf-8' })) as Record<\n string,\n IAsset[]\n >;\n\n return this.routesAssets;\n }\n\n /**\n * Same as 'getAsyncRoutesIds' but for routes tree from 'ParseRoutes'\n */\n protected getRoutesTreeIds(\n routes: TRoutesTree[],\n index?: string,\n ): Record<string, string | undefined> {\n const result: Record<string, string | undefined> = {};\n\n routes.forEach((route, routeIndex) => {\n const routeId = [index, String(routeIndex)].filter(Boolean).join('-');\n\n if (route.import) {\n result[routeId] = this.pathNormalize.getAppPath(route.import);\n }\n\n if (route.children.length > 0) {\n Object.assign(result, this.getRoutesTreeIds(route.children, routeId));\n }\n });\n\n return result;\n }\n\n /**\n * Sort assets\n */\n protected sortAssets(assets: IAsset[]): IAsset[] {\n return assets.sort((a, b) =>\n a.weight === b.weight ? Number(a.isNested) - Number(b.isNested) : a.weight - b.weight,\n );\n }\n\n /**\n * Get recursive module assets\n */\n protected getRouteAssets(\n manifest: IManifest,\n module: IManifest[string],\n isNested = false,\n ): Record<string, IAsset> {\n const rootAssets = [...(module?.assets ?? []), ...(module?.css ?? []), module?.file];\n\n const assets = rootAssets.reduce(\n (res, asset) => {\n if (asset) {\n const type = this.getAssetType(asset);\n const isEntry = module.isEntry && module.file === asset;\n\n // keep only js,css,image,fonts files\n if (type) {\n const filename = path.posix.normalize(`${this.basename}/${asset}`);\n const modifiedFilename = this.renderBuiltUrl?.(filename, {\n type: 'asset',\n ssr: true,\n hostId: '',\n hostType: filename.split('.').at(-1)?.toLowerCase() as 'js',\n });\n\n res[asset] = {\n url: typeof modifiedFilename === 'string' ? modifiedFilename : filename,\n weight: isEntry ? 1.9 : this.getAssetWeight(asset),\n type,\n isNested,\n isPreload: !isEntry,\n };\n }\n }\n\n return res;\n },\n {} as Record<string, IAsset>,\n );\n\n // nested assets\n if (module?.imports?.length) {\n module.imports.forEach((nestedAsset) => {\n const nestedModule = manifest[nestedAsset];\n\n if (nestedModule) {\n Object.assign(assets, this.getRouteAssets(manifest, nestedModule, true));\n }\n });\n }\n\n return assets;\n }\n\n /**\n * Build routes manifest file\n */\n public buildRoutesManifest(): void {\n const manifest = this.loadClientManifest();\n const routesService = new ParseRoutes(this.config, this.viteAliases);\n const routesPaths = this.getRoutesTreeIds(routesService.parse());\n\n const postfixes = this.pathNormalize.getImportPostfix();\n const result: Record<string, IAsset[]> = {};\n\n // find route assets\n Object.entries(routesPaths).forEach(([routeId, routePath]) => {\n const routePostfix = postfixes.find((postfix) => {\n const filePath = `${routePath}${postfix}`;\n\n return manifest[filePath] !== undefined;\n });\n const routeFile = `${routePath}${routePostfix || ''}`;\n const routeMeta = manifest[routeFile];\n\n result[routeId] = this.sortAssets(Object.values(this.getRouteAssets(manifest, routeMeta)));\n });\n\n fs.writeFileSync(this.getAssetsManifestFile(), JSON.stringify(result, null, 2), {\n encoding: 'utf-8',\n });\n }\n\n /**\n * Get route assets\n */\n protected getAssets(routes?: RouterState['matches']): IAsset[] {\n if (this.config.getVite()) {\n return this.getAssetsDev(routes);\n }\n\n const routeIds = routes?.map(({ route }) => route.id).filter(Boolean) ?? [];\n\n if (!routeIds.length) {\n return [];\n }\n\n const routesAssets = this.loadAssetsManifest();\n\n return this.sortAssets(\n routeIds\n .map((routeId) => routesAssets[routeId])\n .flat()\n .filter(Boolean),\n );\n }\n\n /**\n * Get development route assets\n */\n protected getDevModules(routes?: RouterState['matches']): ModuleNode[] {\n const routeIds =\n (routes\n ?.map(({ route }) => this.pathNormalize.getAppPath((route as IAsyncRoute)?.pathId, true))\n .filter(Boolean) as string[]) ?? [];\n\n const postfixes = this.pathNormalize.getImportPostfix();\n const pluginConfig = this.config.getPluginConfig();\n const rootIds = [\n pluginConfig?.clientFile ?? 'client.ts',\n pluginConfig?.serverFile ?? 'server.ts',\n ].map((file) => path.resolve(this.root, file));\n const modules: ModuleNode[] = [];\n\n [...rootIds, ...routeIds].forEach((moduleId) => {\n for (const ext of postfixes) {\n const module = this.config.getVite()?.moduleGraph.getModuleById(`${moduleId}${ext}`);\n\n if (module) {\n modules.push(module);\n break;\n }\n }\n });\n\n return modules;\n }\n\n /**\n * Compile SSR graph styles before the browser has populated the client graph.\n */\n public async prepareDevAssets(routes?: RouterState['matches']): Promise<void> {\n const vite = this.config.getVite();\n\n if (!vite) {\n return;\n }\n\n const visited = new Set<string>();\n\n /**\n * Transform each stylesheet once, including dependencies shared by several routes.\n */\n const visit = async (module: ModuleNode): Promise<void> => {\n if (visited.has(module.url)) {\n return;\n }\n\n visited.add(module.url);\n\n if (module.file && /\\.(?:css|less|s[ac]ss|styl(?:us)?|pcss|postcss)$/.test(module.file)) {\n await vite.transformRequest(module.url);\n }\n\n await Promise.all([...module.importedModules].map(visit));\n };\n\n await Promise.all(this.getDevModules(routes).map(visit));\n }\n\n /**\n * Collect development assets from the current server and client module graphs.\n */\n protected getAssetsDev(routes?: RouterState['matches']): IAsset[] {\n const assets = Object.assign(\n {},\n ...this.getDevModules(routes).map((module) => this.getModuleAssets(module)),\n ) as TAssets;\n\n return Object.values(assets);\n }\n\n /**\n * Get module assets\n */\n protected getModuleAssets(module?: ModuleNode, skipModules: Set<string> = new Set()): TAssets {\n const imports = module?.importedModules ?? module?.clientImportedModules;\n\n if (!imports?.size || skipModules.has(module!.file!)) {\n return {};\n }\n\n let assets: TAssets = {};\n\n skipModules.add(module!.file!);\n\n imports.forEach((subModule) => {\n const { file, transformResult } = subModule;\n const ext = file?.split('.').at(-1);\n\n if (\n file &&\n ext &&\n ['css', 'scss', 'sass', 'less', 'styl', 'stylus', 'pcss', 'postcss'].includes(ext)\n ) {\n // @TODO investigate better method?\n const code = transformResult?.code.match(/__vite__css\\s+=\\s+\"(?<css>.+)\"/)?.groups?.css;\n\n if (code) {\n try {\n assets[file] = {\n type: AssetType.style,\n url: file,\n weight: this.getAssetWeight(file),\n content: (JSON.parse(`{\"style\": \"${code}\"}`) as { style: string }).style,\n isNested: Boolean(skipModules.size),\n isPreload: false,\n };\n } catch {\n console.warn(chalk.yellowBright('Failed to parse style: ', file));\n }\n }\n } else {\n assets = {\n ...assets,\n ...this.getModuleAssets(subModule, skipModules),\n };\n }\n });\n\n return assets;\n }\n\n /**\n * Get asset weight\n */\n protected getAssetWeight(asset: string): number {\n const type = this.getAssetType(asset);\n\n switch (type) {\n case AssetType.style:\n return 1;\n\n case AssetType.script:\n return 2;\n\n default:\n return 3;\n }\n }\n\n /**\n * Get asset type\n */\n protected getAssetType(asset: string): AssetType | null {\n const ext = asset.split('.').at(-1)?.toLowerCase();\n\n switch (ext) {\n case 'css':\n case 'scss':\n return AssetType.style;\n\n case 'js':\n return AssetType.script;\n\n case 'svg':\n case 'jpg':\n case 'jpeg':\n case 'png':\n case 'webp':\n case 'gif':\n case 'ico':\n return AssetType.image;\n\n case 'ttf':\n case 'otf':\n case 'woff':\n case 'woff2':\n return AssetType.font;\n\n default:\n return null;\n }\n }\n\n /**\n * Build preload hints without depending on a particular HTTP transport.\n */\n public getEarlyHints(assets: IAsset[]): Headers {\n const headers = new Headers();\n\n assets.forEach(({ type, url }) => {\n if (!type || !['style', 'script'].includes(type)) {\n return;\n }\n\n headers.append('Link', `<${url}>; rel=preload; as=${type}`);\n });\n\n return headers;\n }\n\n /**\n * Inject route assets to head html\n */\n public injectAssets({ routerContext, html }: IInjectAssetsContext): Headers {\n const assets = this.getAssets(routerContext?.matches);\n const htmlAssets = assets\n .map(({ type, url, isPreload, content = '' }) => {\n switch (type) {\n case AssetType.style:\n return this.config.getVite()\n ? `<style data-vite-dev-id=\"${url}\">${content}</style>`\n : `<link rel=\"stylesheet\" href=\"${url}\">`;\n\n case AssetType.script:\n return isPreload\n ? this.config.isModulePreload\n ? // can reduce lighthouse performance\n `<link rel=\"modulepreload\" as=\"script\" crossorigin href=\"${url}\">`\n : null\n : `<script async type=\"module\" crossorigin src=\"${url}\"></script>`;\n }\n\n return null;\n })\n .filter(Boolean);\n\n html.header = html.header.replace('</head>', `${htmlAssets.join('\\n')}</head>`);\n\n return this.getEarlyHints(assets);\n }\n}\n\nexport default SsrManifest;\n"],"names":["AssetType","SsrManifest","static","config","pathNormalize","root","buildDir","manifestName","assetsManifest","viteAliases","basename","renderBuiltUrl","routesAssets","constructor","this","getParams","getVite","resolve","alias","PathNormalize","params","instance","getOutDir","path","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","loadAssetsManifest","manifestFile","getRoutesTreeIds","routes","index","forEach","route","routeIndex","routeId","String","filter","Boolean","join","import","getAppPath","children","Object","assign","sortAssets","assets","sort","a","b","weight","Number","isNested","getRouteAssets","manifest","module","css","file","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","url","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","values","writeFileSync","stringify","getAssets","getAssetsDev","routeIds","map","id","flat","getDevModules","pathId","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","async","vite","visited","Set","visit","has","add","test","transformRequest","Promise","all","importedModules","getModuleAssets","skipModules","clientImportedModules","size","subModule","transformResult","includes","code","match","groups","style","content","console","warn","chalk","yellowBright","script","image","font","getEarlyHints","headers","Headers","append","injectAssets","routerContext","html","matches","htmlAssets","isModulePreload","header","replace"],"mappings":"yIA4BA,IAAKA,GAAL,SAAKA,GACHA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,KAAA,MACD,CALD,CAAKA,IAAAA,EAAS,CAAA,IA4Bd,MAAMC,EAIMC,gBAAsC,KAK7BC,OAKAC,cAKAC,KAKAC,SAKAC,aAAe,gBAKfC,eAAiB,uBAKjBC,YAKAC,SAKAC,eAKTC,aAAgD,KAK1DC,YACEV,GACAG,SAAEA,EAAQG,YAAEA,EAAWC,SAAEA,EAAQC,eAAEA,GAAuC,IAE1EG,KAAKX,OAASA,EACdW,KAAKT,KAAOF,EAAOY,YAAYV,KAC/BS,KAAKR,SAAWA,EAChBQ,KAAKL,YAAcA,GAAeN,EAAOa,WAAWb,QAAQc,QAAQC,MACpEJ,KAAKV,cAAgB,IAAIe,EAAchB,EAAQM,GAC/CK,KAAKJ,SAAWA,EAChBI,KAAKH,eAAiBA,CACxB,CAKOT,WAAWC,EAAsBiB,EAA6B,IAKnE,OAJ6B,OAAzBnB,EAAYoB,WACdpB,EAAYoB,SAAW,IAAIpB,EAAYE,EAAQiB,IAG1CnB,EAAYoB,QACrB,CAKUC,YACR,OAAOC,EAAKN,QAAQH,KAAKT,KAAMS,KAAKR,UAAY,GAClD,CAKUkB,wBACR,MAAO,GAAGV,KAAKQ,sBAAsBR,KAAKN,gBAC5C,CAKUiB,qBACR,MAAMC,EAAoBH,EAAKN,QAAQH,KAAKT,KAAM,GAAGS,KAAKR,UAAY,mBAChEqB,EAAoB,GAAGD,KAAqBZ,KAAKP,eAEvD,IAAKqB,EAAGC,WAAWF,GACjB,MAAO,CAAA,EAGT,MAAMG,EAASC,KAAKC,MAClBJ,EAAGK,aAAaN,EAAmB,CAAEO,SAAU,WAUjD,OAPAN,EAAGO,OAAOR,GAGuC,IAA7CC,EAAGQ,YAAYV,GAAmBW,QACpCT,EAAGO,OAAOT,EAAmB,CAAEY,WAAW,IAGrCR,CACT,CAKUS,qBACR,GAA0B,OAAtBzB,KAAKF,aACP,OAAOE,KAAKF,aAGd,MAAM4B,EAAe1B,KAAKU,wBAE1B,OAAKI,EAAGC,WAAWW,IAInB1B,KAAKF,aAAemB,KAAKC,MAAMJ,EAAGK,aAAaO,EAAc,CAAEN,SAAU,WAKlEpB,KAAKF,cARH,CAAA,CASX,CAKU6B,iBACRC,EACAC,GAEA,MAAMb,EAA6C,CAAA,EAcnD,OAZAY,EAAOE,SAAQ,CAACC,EAAOC,KACrB,MAAMC,EAAU,CAACJ,EAAOK,OAAOF,IAAaG,OAAOC,SAASC,KAAK,KAE7DN,EAAMO,SACRtB,EAAOiB,GAAWjC,KAAKV,cAAciD,WAAWR,EAAMO,SAGpDP,EAAMS,SAASjB,OAAS,GAC1BkB,OAAOC,OAAO1B,EAAQhB,KAAK2B,iBAAiBI,EAAMS,SAAUP,GAC9D,IAGKjB,CACT,CAKU2B,WAAWC,GACnB,OAAOA,EAAOC,MAAK,CAACC,EAAGC,IACrBD,EAAEE,SAAWD,EAAEC,OAASC,OAAOH,EAAEI,UAAYD,OAAOF,EAAEG,UAAYJ,EAAEE,OAASD,EAAEC,QAEnF,CAKUG,eACRC,EACAC,EACAH,GAAW,GAEX,MAEMN,EAFa,IAAKS,GAAQT,QAAU,MAASS,GAAQC,KAAO,GAAKD,GAAQE,MAErDC,QACxB,CAACC,EAAKC,KACJ,GAAIA,EAAO,CACT,MAAMC,EAAO3D,KAAK4D,aAAaF,GACzBG,EAAUR,EAAOQ,SAAWR,EAAOE,OAASG,EAGlD,GAAIC,EAAM,CACR,MAAMG,EAAWrD,EAAKsD,MAAMC,UAAU,GAAGhE,KAAKJ,YAAY8D,KACpDO,EAAmBjE,KAAKH,iBAAiBiE,EAAU,CACvDH,KAAM,QACNO,KAAK,EACLC,OAAQ,GACRC,SAAUN,EAASO,MAAM,KAAKC,IAAG,IAAKC,gBAGxCd,EAAIC,GAAS,CACXc,IAAiC,iBAArBP,EAAgCA,EAAmBH,EAC/Dd,OAAQa,EAAU,IAAM7D,KAAKyE,eAAef,GAC5CC,OACAT,WACAwB,WAAYb,EAEhB,CACF,CAEA,OAAOJ,CAAG,GAEZ,CAAA,GAcF,OAVIJ,GAAQsB,SAASpD,QACnB8B,EAAOsB,QAAQ7C,SAAS8C,IACtB,MAAMC,EAAezB,EAASwB,GAE1BC,GACFpC,OAAOC,OAAOE,EAAQ5C,KAAKmD,eAAeC,EAAUyB,GAAc,GACpE,IAIGjC,CACT,CAKOkC,sBACL,MAAM1B,EAAWpD,KAAKW,qBAChBoE,EAAgB,IAAIC,EAAYhF,KAAKX,OAAQW,KAAKL,aAClDsF,EAAcjF,KAAK2B,iBAAiBoD,EAAc7D,SAElDgE,EAAYlF,KAAKV,cAAc6F,mBAC/BnE,EAAmC,CAAA,EAGzCyB,OAAO2C,QAAQH,GAAanD,SAAQ,EAAEG,EAASoD,MAC7C,MAAMC,EAAeJ,EAAUK,MAAMC,QAGLC,IAAvBrC,EAFU,GAAGiC,IAAYG,OAK5BE,EAAYtC,EADA,GAAGiC,IAAYC,GAAgB,MAGjDtE,EAAOiB,GAAWjC,KAAK2C,WAAWF,OAAOkD,OAAO3F,KAAKmD,eAAeC,EAAUsC,IAAY,IAG5F5E,EAAG8E,cAAc5F,KAAKU,wBAAyBO,KAAK4E,UAAU7E,EAAQ,KAAM,GAAI,CAC9EI,SAAU,SAEd,CAKU0E,UAAUlE,GAClB,GAAI5B,KAAKX,OAAOa,UACd,OAAOF,KAAK+F,aAAanE,GAG3B,MAAMoE,EAAWpE,GAAQqE,KAAI,EAAGlE,WAAYA,EAAMmE,KAAI/D,OAAOC,UAAY,GAEzE,IAAK4D,EAASzE,OACZ,MAAO,GAGT,MAAMzB,EAAeE,KAAKyB,qBAE1B,OAAOzB,KAAK2C,WACVqD,EACGC,KAAKhE,GAAYnC,EAAamC,KAC9BkE,OACAhE,OAAOC,SAEd,CAKUgE,cAAcxE,GACtB,MAAMoE,EACHpE,GACGqE,KAAI,EAAGlE,WAAY/B,KAAKV,cAAciD,WAAYR,GAAuBsE,QAAQ,KAClFlE,OAAOC,UAAyB,GAE/B8C,EAAYlF,KAAKV,cAAc6F,mBAC/BmB,EAAetG,KAAKX,OAAOkH,kBAC3BC,EAAU,CACdF,GAAcG,YAAc,YAC5BH,GAAcI,YAAc,aAC5BT,KAAK1C,GAAS9C,EAAKN,QAAQH,KAAKT,KAAMgE,KAClCoD,EAAwB,GAa9B,MAXA,IAAIH,KAAYR,GAAUlE,SAAS8E,IACjC,IAAK,MAAMC,KAAO3B,EAAW,CAC3B,MAAM7B,EAASrD,KAAKX,OAAOa,WAAW4G,YAAYC,cAAc,GAAGH,IAAWC,KAE9E,GAAIxD,EAAQ,CACVsD,EAAQK,KAAK3D,GACb,KACF,CACF,KAGKsD,CACT,CAKOM,uBAAuBrF,GAC5B,MAAMsF,EAAOlH,KAAKX,OAAOa,UAEzB,IAAKgH,EACH,OAGF,MAAMC,EAAU,IAAIC,IAKdC,EAAQJ,MAAO5D,IACf8D,EAAQG,IAAIjE,EAAOmB,OAIvB2C,EAAQI,IAAIlE,EAAOmB,KAEfnB,EAAOE,MAAQ,mDAAmDiE,KAAKnE,EAAOE,aAC1E2D,EAAKO,iBAAiBpE,EAAOmB,WAG/BkD,QAAQC,IAAI,IAAItE,EAAOuE,iBAAiB3B,IAAIoB,IAAO,QAGrDK,QAAQC,IAAI3H,KAAKoG,cAAcxE,GAAQqE,IAAIoB,GACnD,CAKUtB,aAAanE,GACrB,MAAMgB,EAASH,OAAOC,OACpB,CAAA,KACG1C,KAAKoG,cAAcxE,GAAQqE,KAAK5C,GAAWrD,KAAK6H,gBAAgBxE,MAGrE,OAAOZ,OAAOkD,OAAO/C,EACvB,CAKUiF,gBAAgBxE,EAAqByE,EAA2B,IAAIV,KAC5E,MAAMzC,EAAUtB,GAAQuE,iBAAmBvE,GAAQ0E,sBAEnD,IAAKpD,GAASqD,MAAQF,EAAYR,IAAIjE,EAAQE,MAC5C,MAAO,CAAA,EAGT,IAAIX,EAAkB,CAAA,EAsCtB,OApCAkF,EAAYP,IAAIlE,EAAQE,MAExBoB,EAAQ7C,SAASmG,IACf,MAAM1E,KAAEA,EAAI2E,gBAAEA,GAAoBD,EAC5BpB,EAAMtD,GAAMc,MAAM,KAAKC,OAE7B,GACEf,GACAsD,GACA,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,SAAU,OAAQ,WAAWsB,SAAStB,GAC9E,CAEA,MAAMuB,EAAOF,GAAiBE,KAAKC,MAAM,mCAAmCC,QAAQhF,IAEpF,GAAI8E,EACF,IACExF,EAAOW,GAAQ,CACbI,KAAMzE,EAAUqJ,MAChB/D,IAAKjB,EACLP,OAAQhD,KAAKyE,eAAelB,GAC5BiF,QAAUvH,KAAKC,MAAM,cAAckH,OAAgCG,MACnErF,SAAUd,QAAQ0F,EAAYE,MAC9BtD,WAAW,EAEf,CAAE,MACA+D,QAAQC,KAAKC,EAAMC,aAAa,0BAA2BrF,GAC7D,CAEJ,MACEX,EAAS,IACJA,KACA5C,KAAK6H,gBAAgBI,EAAWH,GAEvC,IAGKlF,CACT,CAKU6B,eAAef,GAGvB,OAFa1D,KAAK4D,aAAaF,IAG7B,KAAKxE,EAAUqJ,MACb,OAAO,EAET,KAAKrJ,EAAU2J,OACb,OAAO,EAET,QACE,OAAO,EAEb,CAKUjF,aAAaF,GACrB,MAAMmD,EAAMnD,EAAMW,MAAM,KAAKC,IAAG,IAAKC,cAErC,OAAQsC,GACN,IAAK,MACL,IAAK,OACH,OAAO3H,EAAUqJ,MAEnB,IAAK,KACH,OAAOrJ,EAAU2J,OAEnB,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,MACH,OAAO3J,EAAU4J,MAEnB,IAAK,MACL,IAAK,MACL,IAAK,OACL,IAAK,QACH,OAAO5J,EAAU6J,KAEnB,QACE,OAAO,KAEb,CAKOC,cAAcpG,GACnB,MAAMqG,EAAU,IAAIC,QAUpB,OARAtG,EAAOd,SAAQ,EAAG6B,OAAMa,UACjBb,GAAS,CAAC,QAAS,UAAUwE,SAASxE,IAI3CsF,EAAQE,OAAO,OAAQ,IAAI3E,uBAAyBb,IAAO,IAGtDsF,CACT,CAKOG,cAAaC,cAAEA,EAAaC,KAAEA,IACnC,MAAM1G,EAAS5C,KAAK8F,UAAUuD,GAAeE,SACvCC,EAAa5G,EAChBqD,KAAI,EAAGtC,OAAMa,MAAKE,YAAW8D,UAAU,OACtC,OAAQ7E,GACN,KAAKzE,EAAUqJ,MACb,OAAOvI,KAAKX,OAAOa,UACf,4BAA4BsE,MAAQgE,YACpC,gCAAgChE,MAEtC,KAAKtF,EAAU2J,OACb,OAAOnE,EACH1E,KAAKX,OAAOoK,gBAEV,2DAA2DjF,MAC3D,KACF,gDAAgDA,gBAGxD,OAAO,IAAI,IAEZrC,OAAOC,SAIV,OAFAkH,EAAKI,OAASJ,EAAKI,OAAOC,QAAQ,UAAW,GAAGH,EAAWnH,KAAK,gBAEzDrC,KAAKgJ,cAAcpG,EAC5B"}
1
+ {"version":3,"file":"ssr-manifest.js","sources":["../../src/services/ssr-manifest.ts"],"sourcesContent":[null],"names":["AssetType","SsrManifest","static","config","pathNormalize","root","buildDir","manifestName","assetsManifest","viteAliases","basename","renderBuiltUrl","routesAssets","constructor","this","getParams","getVite","resolve","alias","PathNormalize","get","params","instance","getOutDir","path","getAssetsManifestFile","loadClientManifest","clientManifestDir","clientSsrManifest","fs","existsSync","result","JSON","parse","readFileSync","encoding","rmSync","readdirSync","length","recursive","loadAssetsManifest","manifestFile","getRoutesTreeIds","routes","index","forEach","route","routeIndex","routeId","String","filter","Boolean","join","import","getAppPath","children","Object","assign","sortAssets","assets","sort","a","b","weight","Number","isNested","getRouteAssets","manifest","module","css","file","reduce","res","asset","type","getAssetType","isEntry","filename","posix","normalize","modifiedFilename","ssr","hostId","hostType","split","at","toLowerCase","url","getAssetWeight","isPreload","imports","nestedAsset","nestedModule","buildRoutesManifest","routesService","ParseRoutes","routesPaths","postfixes","getImportPostfix","entries","routePath","routePostfix","find","postfix","undefined","routeMeta","values","writeFileSync","stringify","getAssets","getAssetsDev","routeIds","map","id","flat","getDevModules","pathId","pluginConfig","getPluginConfig","rootIds","clientFile","serverFile","modules","moduleId","ext","moduleGraph","getModuleById","push","prepareDevAssets","vite","visited","Set","visit","async","has","add","test","transformRequest","Promise","all","importedModules","getModuleAssets","skipModules","clientImportedModules","size","subModule","transformResult","includes","code","match","groups","style","content","console","warn","chalk","yellowBright","script","image","font","getEarlyHints","headers","Headers","append","injectAssets","routerContext","html","matches","htmlAssets","isModulePreload","header","replace"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- FROM node:22.21.0-alpine
1
+ FROM node:22.23.2-alpine
2
2
 
3
3
  LABEL org.opencontainers.image.title="vite-ssr-boost"
4
4
  LABEL org.opencontainers.image.description="Container to run pre-built 'vite-ssr-boost' applications"