(nuxt: Nuxt, ssrServer: ViteDevServer, clientServer: ViteDevServer, invalidates: Set<string>, collectInvalidatedSsrModules: () => void, config: ViteNodeServerOptions)
| 340 | } |
| 341 | |
| 342 | function createViteNodeSocketServer (nuxt: Nuxt, ssrServer: ViteDevServer, clientServer: ViteDevServer, invalidates: Set<string>, collectInvalidatedSsrModules: () => void, config: ViteNodeServerOptions) { |
| 343 | const server = net.createServer((socket) => { |
| 344 | const INITIAL_BUFFER_SIZE = 64 * 1024 // 64kB |
| 345 | const MAX_BUFFER_SIZE = 1024 * 1024 * 1024 // 1GB |
| 346 | |
| 347 | let buffer = Buffer.alloc(INITIAL_BUFFER_SIZE) |
| 348 | let writeOffset = 0 |
| 349 | let readOffset = 0 |
| 350 | |
| 351 | // Optimize socket settings for performance |
| 352 | socket.setNoDelay(true) |
| 353 | socket.setKeepAlive(true, 0) |
| 354 | |
| 355 | async function processMessage (request: ViteNodeRequest) { |
| 356 | try { |
| 357 | switch (request.type) { |
| 358 | case 'manifest': { |
| 359 | const manifestData = getManifest(nuxt, ssrServer, resolveClientEntry(clientServer.config)) |
| 360 | sendResponse<typeof request.type>(socket, request.id, manifestData) |
| 361 | return |
| 362 | } |
| 363 | case 'invalidates': { |
| 364 | collectInvalidatedSsrModules() |
| 365 | const responsePayload = Array.from(invalidates) |
| 366 | invalidates.clear() |
| 367 | sendResponse<typeof request.type>(socket, request.id, responsePayload) |
| 368 | return |
| 369 | } |
| 370 | case 'resolve': { |
| 371 | const { id: resolveId, importer } = request.payload |
| 372 | if (!resolveId) { |
| 373 | throw { status: 400, message: 'Missing id for resolve' } satisfies ErrorPartial |
| 374 | } |
| 375 | const ssrNode = nuxt.options.experimental.viteEnvironmentApi |
| 376 | ? ssrServer.environments.ssr.pluginContainer |
| 377 | : getNode(ssrServer) |
| 378 | const resolvedResult = await ssrNode.resolveId(resolveId, importer).catch(() => null) |
| 379 | sendResponse<typeof request.type>(socket, request.id, resolvedResult) |
| 380 | return |
| 381 | } |
| 382 | case 'module': { |
| 383 | if (request.payload.moduleId === '/') { |
| 384 | throw { status: 400, message: 'Invalid moduleId' } satisfies ErrorPartial |
| 385 | } |
| 386 | const ssrNode = nuxt.options.experimental.viteEnvironmentApi |
| 387 | ? ssrServer.environments.ssr |
| 388 | : getNode(ssrServer) |
| 389 | const response = await ssrNode.fetchModule(request.payload.moduleId) |
| 390 | .catch(async (err) => { |
| 391 | const errorData: Record<string, any> = { |
| 392 | code: 'VITE_ERROR', |
| 393 | id: request.payload.moduleId, |
| 394 | stack: err.stack || '', |
| 395 | message: err.message || '', |
| 396 | } |
| 397 | if (err.frame) { errorData.frame = err.frame } |
| 398 | |
| 399 | if (!errorData.frame && err.code === 'PARSE_ERROR') { |
no test coverage detected
searching dependent graphs…