From a03552d24622e482d21561d83fe02d6bc94ce4fb Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Tue, 19 Mar 2019 06:11:44 +0800 Subject: [PATCH] process: handle --expose-internals during pre-execution Instead of relying on the value of the CLI option when executing bootstrap/loaders.js. PR-URL: https://github.com/nodejs/node/pull/26759 Reviewed-By: Anna Henningsen Reviewed-By: Ruben Bridgewater --- lib/internal/bootstrap/loaders.js | 21 ++++++++++++--------- lib/internal/bootstrap/pre_execution.js | 3 +++ src/node.cc | 3 --- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/internal/bootstrap/loaders.js b/lib/internal/bootstrap/loaders.js index d4f70f2270786b..d8dcd653920818 100644 --- a/lib/internal/bootstrap/loaders.js +++ b/lib/internal/bootstrap/loaders.js @@ -41,8 +41,7 @@ // This file is compiled as if it's wrapped in a function with arguments // passed by node::RunBootstrapping() -/* global process, getLinkedBinding, getInternalBinding */ -/* global exposeInternals, primordials */ +/* global process, getLinkedBinding, getInternalBinding, primordials */ const { Reflect, @@ -157,15 +156,19 @@ function NativeModule(id) { this.exportKeys = undefined; this.loaded = false; this.loading = false; - if (id === loaderId) { + this.canBeRequiredByUsers = !id.startsWith('internal/'); +} + +// To be called during pre-execution when --expose-internals is on. +// Enables the user-land module loader to access internal modules. +NativeModule.exposeInternals = function() { + for (const [id, mod] of NativeModule.map) { // Do not expose this to user land even with --expose-internals. - this.canBeRequiredByUsers = false; - } else if (id.startsWith('internal/')) { - this.canBeRequiredByUsers = exposeInternals; - } else { - this.canBeRequiredByUsers = true; + if (id !== loaderId) { + mod.canBeRequiredByUsers = true; + } } -} +}; const { moduleIds, diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 4c5fc2d6747339..f10397df79c870 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -146,6 +146,9 @@ function initializeReport() { function setupDebugEnv() { require('internal/util/debuglog').initializeDebugEnv(process.env.NODE_DEBUG); + if (getOptionValue('--expose-internals')) { + require('internal/bootstrap/loaders').NativeModule.exposeInternals(); + } } function setupSignalHandlers() { diff --git a/src/node.cc b/src/node.cc index f3784ec34c3301..ae4465aa2ae23e 100644 --- a/src/node.cc +++ b/src/node.cc @@ -296,8 +296,6 @@ MaybeLocal RunBootstrapping(Environment* env) { env->process_string(), FIXED_ONE_BYTE_STRING(isolate, "getLinkedBinding"), FIXED_ONE_BYTE_STRING(isolate, "getInternalBinding"), - // --expose-internals - FIXED_ONE_BYTE_STRING(isolate, "exposeInternals"), env->primordials_string()}; std::vector> loaders_args = { process, @@ -307,7 +305,6 @@ MaybeLocal RunBootstrapping(Environment* env) { env->NewFunctionTemplate(binding::GetInternalBinding) ->GetFunction(context) .ToLocalChecked(), - Boolean::New(isolate, env->options()->expose_internals), env->primordials()}; // Bootstrap internal loaders