built-lib.e2e.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { existsSync } from 'node:fs'
  2. import { join } from 'node:path'
  3. import { fileURLToPath } from 'node:url'
  4. import { execa } from 'execa'
  5. import { describe, expect, it } from 'vitest'
  6. const packageDirectory = fileURLToPath(new URL('..', import.meta.url))
  7. const built = [
  8. 'lib/index.js',
  9. 'lib/worker.js',
  10. 'node_modules/@deepseek-ai/schemastery/lib/index.mjs',
  11. ].every(file => existsSync(join(packageDirectory, file)))
  12. describe.skipIf(!built)('experimental Inspector built artifact', () => {
  13. it('starts its sibling Worker and evaluates the Host through plain Node', async () => {
  14. const script = `
  15. const { startInspector } = await import('@deepseek-ai/dsh-experimental-inspector')
  16. const { default: WebSocket } = await import('ws')
  17. globalThis.__builtInspectorProbe = 42
  18. const inspector = await startInspector({ port: 0, captureFetch: false })
  19. const socket = new WebSocket(inspector.endpoint.webSocketDebuggerUrl)
  20. await new Promise((resolve, reject) => {
  21. socket.once('open', resolve)
  22. socket.once('error', reject)
  23. })
  24. const response = new Promise((resolve, reject) => {
  25. const timer = setTimeout(() => reject(new Error('CDP response timeout')), 5000)
  26. socket.on('message', data => {
  27. const message = JSON.parse(Buffer.from(data).toString('utf8'))
  28. if (message.id !== 1) return
  29. clearTimeout(timer)
  30. resolve(message)
  31. })
  32. })
  33. socket.send(JSON.stringify({
  34. id: 1,
  35. method: 'Runtime.evaluate',
  36. params: { expression: 'globalThis.__builtInspectorProbe', returnByValue: true },
  37. }))
  38. const message = await response
  39. socket.close()
  40. await inspector.close()
  41. console.log(JSON.stringify(message.result.result))
  42. `
  43. const result = await execa(process.execPath, ['--input-type=module', '-e', script], {
  44. cwd: packageDirectory,
  45. stdin: 'ignore',
  46. timeout: 20_000,
  47. killSignal: 'SIGKILL',
  48. reject: false,
  49. })
  50. expect(result.exitCode, `stderr:\n${result.stderr}`).toBe(0)
  51. expect(JSON.parse(result.stdout.trim()) as unknown).toEqual({ type: 'number', value: 42, description: '42' })
  52. })
  53. })