diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 23b328b14487e4..95814a79ecea2a 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -49,6 +49,8 @@ function prepareMainThreadExecution(expandArgv1 = false) { initializeHeapSnapshotSignalHandlers(); + setupLateCodeInjector(); + // If the process is spawned with env NODE_CHANNEL_FD, it's probably // spawned by our child_process module, then initialize IPC. // This attaches some internal event listeners and creates: @@ -456,6 +458,33 @@ function loadPreloadModules() { } } +function lateCodeInjectorHandler() { + let resolvedAgent; + + try { + resolvedAgent = require.resolve(process.env.NODE_LATE_ATTACH_AGENT); + } catch (err) { + return err; // to somehow use err + } + + require(resolvedAgent).execute(function() { + delete require.cache[resolvedAgent]; + }); +} + +function setupLateCodeInjector() { + const signal = process.env.NODE_LATE_ATTACH_SIGNAL; + + if (!signal) + return; + + require('internal/validators').validateSignalName(signal); + + process.on(signal, () => { + lateCodeInjectorHandler(); + }); +} + module.exports = { patchProcessObject, setupCoverageHooks,