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