diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 41a833885f9491..c40c955ab29227 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -335,6 +335,22 @@ process.emitWarning = emitWarning; // Note: only after this point are the timers effective } +{ + const { + setSourceMapsEnabled, + maybeCacheGeneratedSourceMap, + } = require('internal/source_map/source_map_cache'); + const { + setMaybeCacheGeneratedSourceMap, + } = internalBinding('errors'); + + process.setSourceMapsEnabled = setSourceMapsEnabled; + // The C++ land calls back to maybeCacheGeneratedSourceMap() + // when code is generated by user with eval() or new Function() + // to cache the source maps from the evaluated code, if any. + setMaybeCacheGeneratedSourceMap(maybeCacheGeneratedSourceMap); +} + function setupProcessObject() { const EventEmitter = require('events'); const origProcProto = ObjectGetPrototypeOf(process); diff --git a/lib/internal/bootstrap/switches/is_main_thread.js b/lib/internal/bootstrap/switches/is_main_thread.js index 212a067e3a7058..2767ee12584e02 100644 --- a/lib/internal/bootstrap/switches/is_main_thread.js +++ b/lib/internal/bootstrap/switches/is_main_thread.js @@ -305,8 +305,6 @@ if (internalBinding('config').hasInspector) { internalBinding('wasm_web_api'); // Needed to detect whether it's on main thread. internalBinding('worker'); -// Needed to setup source maps. -require('internal/source_map/source_map_cache'); // Needed by most execution modes. require('internal/modules/run_main'); // Needed to refresh DNS configurations. diff --git a/lib/internal/process/pre_execution.js b/lib/internal/process/pre_execution.js index fc6d9ccf4f517b..678bd05164f99a 100644 --- a/lib/internal/process/pre_execution.js +++ b/lib/internal/process/pre_execution.js @@ -618,11 +618,10 @@ function initializeESMLoader(isLoaderWorker) { } function initializeSourceMapsHandlers() { - const { setSourceMapsEnabled, getSourceMapsEnabled } = - require('internal/source_map/source_map_cache'); - process.setSourceMapsEnabled = setSourceMapsEnabled; - // Initialize the environment flag of source maps. - getSourceMapsEnabled(); + const { + setSourceMapsEnabled, + } = require('internal/source_map/source_map_cache'); + setSourceMapsEnabled(getOptionValue('--enable-source-maps')); } function initializeFrozenIntrinsics() { diff --git a/lib/internal/source_map/source_map_cache.js b/lib/internal/source_map/source_map_cache.js index ee1f9c404e8b6f..ebe0288e436d90 100644 --- a/lib/internal/source_map/source_map_cache.js +++ b/lib/internal/source_map/source_map_cache.js @@ -15,10 +15,12 @@ const { Buffer } = require('buffer'); let debug = require('internal/util/debuglog').debuglog('source_map', (fn) => { debug = fn; }); -const { getOptionValue } = require('internal/options'); const { validateBoolean } = require('internal/validators'); -const { setMaybeCacheGeneratedSourceMap } = internalBinding('errors'); +const { + setSourceMapsEnabled: setSourceMapsNative, + setPrepareStackTraceCallback, +} = internalBinding('errors'); const { getLazy } = require('internal/util'); // Since the CJS module cache is mutable, which leads to memory leaks when @@ -41,22 +43,16 @@ const { fileURLToPath, pathToFileURL, URL } = require('internal/url'); let SourceMap; -let sourceMapsEnabled; +// This is configured with --enable-source-maps during pre-execution. +let sourceMapsEnabled = false; function getSourceMapsEnabled() { - if (sourceMapsEnabled === undefined) { - setSourceMapsEnabled(getOptionValue('--enable-source-maps')); - } return sourceMapsEnabled; } function setSourceMapsEnabled(val) { validateBoolean(val, 'val'); - const { - setSourceMapsEnabled, - setPrepareStackTraceCallback, - } = internalBinding('errors'); - setSourceMapsEnabled(val); + setSourceMapsNative(val); if (val) { const { prepareStackTrace, @@ -186,7 +182,6 @@ function maybeCacheGeneratedSourceMap(content) { debug(err); } } -setMaybeCacheGeneratedSourceMap(maybeCacheGeneratedSourceMap); function dataFromUrl(sourceURL, sourceMappingURL) { try { @@ -333,5 +328,6 @@ module.exports = { getSourceMapsEnabled, setSourceMapsEnabled, maybeCacheSourceMap, + maybeCacheGeneratedSourceMap, sourceMapCacheToObject, };