1// Flags: --expose-internals 2'use strict'; 3 4// This list must be computed before we require any modules to 5// to eliminate the noise. 6const actualModules = new Set(process.moduleLoadList.slice()); 7 8const common = require('../common'); 9const assert = require('assert'); 10 11const expectedModules = new Set([ 12 'Internal Binding async_wrap', 13 'Internal Binding buffer', 14 'Internal Binding builtins', 15 'Internal Binding config', 16 'Internal Binding constants', 17 'Internal Binding contextify', 18 'Internal Binding credentials', 19 'Internal Binding errors', 20 'Internal Binding fs', 21 'Internal Binding mksnapshot', 22 'Internal Binding messaging', 23 'Internal Binding module_wrap', 24 'Internal Binding options', 25 'Internal Binding performance', 26 'Internal Binding process_methods', 27 'Internal Binding string_decoder', 28 'Internal Binding symbols', 29 'Internal Binding task_queue', 30 'Internal Binding timers', 31 'Internal Binding trace_events', 32 'Internal Binding types', 33 'Internal Binding url', 34 'Internal Binding util', 35 'Internal Binding wasm_web_api', 36 'Internal Binding worker', 37 'NativeModule buffer', 38 'NativeModule events', 39 'NativeModule fs', 40 'NativeModule internal/assert', 41 'NativeModule internal/async_hooks', 42 'NativeModule internal/buffer', 43 'NativeModule internal/console/constructor', 44 'NativeModule internal/console/global', 45 'NativeModule internal/constants', 46 'NativeModule internal/dns/utils', 47 'NativeModule internal/errors', 48 'NativeModule internal/event_target', 49 'NativeModule internal/fixed_queue', 50 'NativeModule internal/fs/utils', 51 'NativeModule internal/linkedlist', 52 'NativeModule internal/modules/cjs/loader', 53 'NativeModule internal/modules/esm/utils', 54 'NativeModule internal/modules/helpers', 55 'NativeModule internal/modules/package_json_reader', 56 'NativeModule internal/modules/run_main', 57 'NativeModule internal/net', 58 'NativeModule internal/options', 59 'NativeModule internal/perf/utils', 60 'NativeModule internal/priority_queue', 61 'NativeModule internal/process/execution', 62 'NativeModule internal/process/per_thread', 63 'NativeModule internal/process/pre_execution', 64 'NativeModule internal/process/promises', 65 'NativeModule internal/process/signal', 66 'NativeModule internal/process/task_queues', 67 'NativeModule internal/process/warning', 68 'NativeModule internal/querystring', 69 'NativeModule internal/source_map/source_map_cache', 70 'NativeModule internal/timers', 71 'NativeModule internal/url', 72 'NativeModule internal/util', 73 'NativeModule internal/util/debuglog', 74 'NativeModule internal/util/inspect', 75 'NativeModule internal/util/types', 76 'NativeModule internal/validators', 77 'NativeModule internal/vm', 78 'NativeModule internal/vm/module', 79 'NativeModule internal/webidl', 80 'NativeModule internal/worker/js_transferable', 81 'Internal Binding blob', 82 'NativeModule async_hooks', 83 'NativeModule path', 84 'NativeModule querystring', 85 'NativeModule timers', 86 'NativeModule internal/v8/startup_snapshot', 87 'NativeModule util', 88]); 89 90if (common.isMainThread) { 91 [ 92 'NativeModule internal/idna', 93 'NativeModule url', 94 ].forEach(expectedModules.add.bind(expectedModules)); 95} else { 96 [ 97 'Internal Binding messaging', 98 'Internal Binding performance', 99 'Internal Binding symbols', 100 'Internal Binding worker', 101 'NativeModule internal/abort_controller', 102 'NativeModule internal/error_serdes', 103 'NativeModule internal/event_target', 104 'NativeModule internal/process/worker_thread_only', 105 'NativeModule internal/streams/add-abort-signal', 106 'NativeModule internal/streams/buffer_list', 107 'NativeModule internal/streams/compose', 108 'NativeModule internal/streams/destroy', 109 'NativeModule internal/streams/duplex', 110 'NativeModule internal/streams/end-of-stream', 111 'NativeModule internal/streams/from', 112 'NativeModule internal/streams/legacy', 113 'NativeModule internal/streams/operators', 114 'NativeModule internal/streams/passthrough', 115 'NativeModule internal/streams/pipeline', 116 'NativeModule internal/streams/readable', 117 'NativeModule internal/streams/state', 118 'NativeModule internal/streams/transform', 119 'NativeModule internal/streams/utils', 120 'NativeModule internal/streams/writable', 121 'NativeModule internal/worker', 122 'NativeModule internal/worker/io', 123 'NativeModule worker_threads', 124 'NativeModule stream', 125 'NativeModule stream/promises', 126 'NativeModule string_decoder', 127 'NativeModule util', 128 ].forEach(expectedModules.add.bind(expectedModules)); 129} 130 131if (common.isWindows) { 132 // On Windows fs needs SideEffectFreeRegExpPrototypeExec which uses vm. 133 expectedModules.add('NativeModule vm'); 134} 135 136if (common.hasIntl) { 137 expectedModules.add('Internal Binding icu'); 138} 139 140if (process.features.inspector) { 141 expectedModules.add('Internal Binding inspector'); 142 expectedModules.add('NativeModule internal/inspector_async_hook'); 143 expectedModules.add('NativeModule internal/util/inspector'); 144} 145 146const difference = (setA, setB) => { 147 return new Set([...setA].filter((x) => !setB.has(x))); 148}; 149const missingModules = difference(expectedModules, actualModules); 150const extraModules = difference(actualModules, expectedModules); 151const printSet = (s) => { return `${[...s].sort().join(',\n ')}\n`; }; 152 153assert.deepStrictEqual(actualModules, expectedModules, 154 (missingModules.size > 0 ? 155 'These modules were not loaded:\n ' + 156 printSet(missingModules) : '') + 157 (extraModules.size > 0 ? 158 'These modules were unexpectedly loaded:\n ' + 159 printSet(extraModules) : '')); 160