diff --git a/hook.js b/hook.js index aa22356..79a2e5b 100644 --- a/hook.js +++ b/hook.js @@ -303,7 +303,8 @@ import { register } from '${iitmURL}' ${imports.join('\n')} const namespaces = [${namespaces.join(', ')}] -const _ = {} +// Mimic a Module object (https://tc39.es/ecma262/#sec-module-namespace-objects). +const _ = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }) const set = {} const primary = namespaces.shift() diff --git a/test/hook/module-toStringTag.mjs b/test/hook/module-toStringTag.mjs new file mode 100644 index 0000000..639835b --- /dev/null +++ b/test/hook/module-toStringTag.mjs @@ -0,0 +1,25 @@ +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2.0 License. +// +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2021 Datadog, Inc. + +import Hook from '../../index.js' +import { foo as fooMjs } from '../fixtures/something.mjs' +import { foo as fooJs } from '../fixtures/something.js' +import { strictEqual, deepStrictEqual } from 'assert' + +let hookedExports + +Hook((exports, name) => { + hookedExports = exports; +}) + +fooMjs +fooJs + +strictEqual(hookedExports[Symbol.toStringTag], 'Module') +deepStrictEqual(Object.getOwnPropertyDescriptor(hookedExports, Symbol.toStringTag), { + value: 'Module', + enumerable: false, + writable: false, + configurable: false +})