From 40662957b1f8be13d435b235c11f229bff3ccf7b Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Fri, 2 Jun 2023 19:30:40 +0200 Subject: [PATCH] bootstrap: simplify initialization of source map handlers - Move the initialization of process.setSourceMapsEnabled and the maybeCacheGeneratedSourceMap callback to bootstrap/node.js so they are included in the snapshot. - Simplify the handling of --enable-source-maps by explicitly calling setSourceMapsEnabled() during pre-execution. PR-URL: https://github.com/nodejs/node/pull/48304 Reviewed-By: Yagiz Nizipli Reviewed-By: Mohammed Keyvanzadeh Reviewed-By: James M Snell Reviewed-By: Chengzhong Wu --- lib/internal/bootstrap/node.js | 16 +++++++++++++++ .../bootstrap/switches/is_main_thread.js | 2 -- lib/internal/process/pre_execution.js | 9 ++++----- lib/internal/source_map/source_map_cache.js | 20 ++++++++----------- 4 files changed, 28 insertions(+), 19 deletions(-) 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, };