'use strict'; const common = require('../common'); const assert = require('assert'); const fixtures = require('../common/fixtures'); common.expectWarning({ Warning: [ ["Accessing non-existent property 'missingPropB' " + 'of module exports inside circular dependency'], ["Accessing non-existent property 'Symbol(someSymbol)' " + 'of module exports inside circular dependency'], ["Accessing non-existent property 'missingPropModuleExportsB' " + 'of module exports inside circular dependency'] ] }); const required = require(fixtures.path('cycles', 'warning-a.js')); assert.strictEqual(Object.getPrototypeOf(required), Object.prototype); const requiredWithModuleExportsOverridden = require(fixtures.path('cycles', 'warning-moduleexports-a.js')); assert.strictEqual(Object.getPrototypeOf(requiredWithModuleExportsOverridden), Object.prototype); // If module.exports is not a regular object, no warning should be emitted. const classExport = require(fixtures.path('cycles', 'warning-moduleexports-class-a.js')); assert.strictEqual(Object.getPrototypeOf(classExport).name, 'Parent'); // If module.exports.__esModule is set, no warning should be emitted. const esmTranspiledExport = require(fixtures.path('cycles', 'warning-esm-transpiled-a.js')); assert.strictEqual(esmTranspiledExport.__esModule, true); // If module.exports.__esModule is being accessed but is not present, e.g. // because only the one of the files is a transpiled ES module, no warning // should be emitted. const halfTranspiledExport = require(fixtures.path('cycles', 'warning-esm-half-transpiled-a.js')); assert.strictEqual(halfTranspiledExport.__esModule, undefined); // No circular check is done to prevent triggering proxy traps, if // module.exports is set to a proxy that contains a `getPrototypeOf` or // `setPrototypeOf` trap. require(fixtures.path('cycles', 'warning-skip-proxy-traps-a.js'));