-
-
Notifications
You must be signed in to change notification settings - Fork 1k
/
inspector.ts
44 lines (34 loc) · 1.47 KB
/
inspector.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { createRequire } from 'node:module'
import type { ResolvedConfig } from '../types'
const __require = createRequire(import.meta.url)
let inspector: typeof import('node:inspector')
/**
* Enables debugging inside `worker_threads` and `child_process`.
* Should be called as early as possible when worker/process has been set up.
*/
export function setupInspect(config: ResolvedConfig) {
const isEnabled = config.inspect || config.inspectBrk
if (isEnabled) {
inspector = __require('node:inspector')
// Inspector may be open already if "isolate: false" is used
const isOpen = inspector.url() !== undefined
if (!isOpen) {
inspector.open()
if (config.inspectBrk) {
const session = new inspector.Session()
session.connect()
session.post('Debugger.enable')
inspector.waitForDebugger()
session.post('Debugger.pause')
}
}
}
// In watch mode the inspector can persist re-runs if isolation is disabled and a single worker is used
const isIsolatedSingleThread = config.pool === 'threads' && config.poolOptions?.threads?.isolate === false && config.poolOptions?.threads?.singleThread
const isIsolatedSingleFork = config.pool === 'forks' && config.poolOptions?.forks?.isolate === false && config.poolOptions?.forks?.singleFork
const keepOpen = config.watch && (isIsolatedSingleFork || isIsolatedSingleThread)
return function cleanup() {
if (isEnabled && !keepOpen && inspector)
inspector.close()
}
}