Home / File/ server-worker-runner.invoke.spec.ts — vite Source File

server-worker-runner.invoke.spec.ts — vite Source File

Architecture documentation for server-worker-runner.invoke.spec.ts, a typescript file in the vite codebase. 6 imports, 0 dependents.

Entity Profile

Dependency Diagram

graph LR
  7f6f7505_2626_1c12_7217_33d6682b658c["server-worker-runner.invoke.spec.ts"]
  8377ae20_ffba_2f9c_bded_58742b7f1c3b["index.ts"]
  7f6f7505_2626_1c12_7217_33d6682b658c --> 8377ae20_ffba_2f9c_bded_58742b7f1c3b
  a423a1ed_f7d8_0eb5_9b8f_ddfa7fa8147e["index.ts"]
  7f6f7505_2626_1c12_7217_33d6682b658c --> a423a1ed_f7d8_0eb5_9b8f_ddfa7fa8147e
  19009191_26ac_2526_d048_41ac02638e55["createServer"]
  7f6f7505_2626_1c12_7217_33d6682b658c --> 19009191_26ac_2526_d048_41ac02638e55
  6dfa768a_efc1_54e5_b2de_25126290d891["node:worker_threads"]
  7f6f7505_2626_1c12_7217_33d6682b658c --> 6dfa768a_efc1_54e5_b2de_25126290d891
  a340ba46_b2b7_3048_3bb3_6907a74c8464["vitest"]
  7f6f7505_2626_1c12_7217_33d6682b658c --> a340ba46_b2b7_3048_3bb3_6907a74c8464
  30cf8c63_cbf8_e8bc_f0b6_84fb7d391fd1["birpc"]
  7f6f7505_2626_1c12_7217_33d6682b658c --> 30cf8c63_cbf8_e8bc_f0b6_84fb7d391fd1
  style 7f6f7505_2626_1c12_7217_33d6682b658c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { BroadcastChannel, Worker } from 'node:worker_threads'
import { afterAll, beforeAll, describe, expect, it } from 'vitest'
import type { BirpcReturn } from 'birpc'
import { createBirpc } from 'birpc'
import { DevEnvironment } from '../../..'
import { type ViteDevServer, createServer } from '../../../server'

describe('running module runner inside a worker and using the ModuleRunnerTransport#invoke API', () => {
  let worker: Worker
  let server: ViteDevServer
  let rpc: BirpcReturn<
    unknown,
    { invoke: (data: any) => Promise<{ result: any } | { error: any }> }
  >
  let handleInvoke: (data: any) => Promise<{ result: any } | { error: any }>

  beforeAll(async () => {
    worker = new Worker(
      new URL('./fixtures/worker.invoke.mjs', import.meta.url),
      {
        stdout: true,
      },
    )
    await new Promise<void>((resolve, reject) => {
      worker.on('message', () => resolve())
      worker.on('error', reject)
    })
    server = await createServer({
      root: import.meta.dirname,
      logLevel: 'error',
      server: {
        middlewareMode: true,
        watch: null,
        hmr: {
          port: 9610,
        },
      },
      environments: {
        worker: {
          dev: {
            createEnvironment: (name, config) => {
              return new DevEnvironment(name, config, {
                hot: false,
              })
            },
          },
        },
      },
    })
    handleInvoke = (data: any) => server.environments.ssr.hot.handleInvoke(data)
    rpc = createBirpc(
      {
        invoke: (data: any) => handleInvoke(data),
      },
      {
        post: (data) => worker.postMessage(data),
        on: (data) => worker.on('message', data),
      },
    )
  })

  afterAll(async () => {
    await Promise.allSettled([server.close(), worker.terminate()])
    rpc.$close()
  })

  async function run(id: string) {
    const channel = new BroadcastChannel('vite-worker:invoke')
    return new Promise<any>((resolve, reject) => {
      channel.onmessage = (event) => {
        try {
          resolve(event.data)
        } catch (e) {
          reject(e)
        }
      }
      channel.postMessage({ id })
    })
  }

  it('correctly runs ssr code', async () => {
    const output = await run('./fixtures/default-string.ts')
    expect(output).toStrictEqual({
      result: 'hello world',
    })
  })

  it('triggers an error', async () => {
    handleInvoke = async () => ({ error: new Error('This is an Invoke Error') })
    const output = await run('dummy')
    expect(output).not.toHaveProperty('result')
    expect(output.error).toContain('Error: This is an Invoke Error')
  })

  it('triggers an unknown error', async () => {
    handleInvoke = async () => ({ error: 'a string instead of an error' })
    const output = await run('dummy')
    expect(output).not.toHaveProperty('result')
    expect(output.error).toContain('Error: Unknown invoke error')
  })

  it('resolves builtin module without server round-trip', async () => {
    handleInvoke = (data: any) => server.environments.ssr.hot.handleInvoke(data)

    const output = await run('./fixtures/builtin-import.ts')
    expect(output).toHaveProperty('result')
    expect(output.result).toBe('baz.txt')
    expect(output.error).toBeUndefined()
  })
})

Domain

Dependencies

Frequently Asked Questions

What does server-worker-runner.invoke.spec.ts do?
server-worker-runner.invoke.spec.ts is a source file in the vite codebase, written in typescript. It belongs to the ViteCore domain.
What does server-worker-runner.invoke.spec.ts depend on?
server-worker-runner.invoke.spec.ts imports 6 module(s): birpc, createServer, index.ts, index.ts, node:worker_threads, vitest.
Where is server-worker-runner.invoke.spec.ts in the architecture?
server-worker-runner.invoke.spec.ts is located at packages/vite/src/node/ssr/runtime/__tests__/server-worker-runner.invoke.spec.ts (domain: ViteCore, directory: packages/vite/src/node/ssr/runtime/__tests__).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free