| // Flags: --experimental-require-module |
| 'use strict'; |
| |
| require('../common'); |
| const assert = require('assert'); |
| const { isModuleNamespaceObject } = require('util/types'); |
| |
| // If only "require" exports are defined, return "require" exports. |
| { |
| const mod = require('../fixtures/es-modules/exports-require-only/load.cjs'); |
| assert.deepStrictEqual({ ...mod }, { type: 'cjs' }); |
| assert(!isModuleNamespaceObject(mod)); |
| } |
| |
| // If only "import" exports are defined, throw ERR_PACKAGE_PATH_NOT_EXPORTED |
| // instead of falling back to it, because the request comes from require(). |
| assert.throws(() => { |
| require('../fixtures/es-modules/exports-import-only/load.cjs'); |
| }, { |
| code: 'ERR_PACKAGE_PATH_NOT_EXPORTED' |
| }); |
| |
| // If both are defined, "require" is used. |
| { |
| const mod = require('../fixtures/es-modules/exports-both/load.cjs'); |
| assert.deepStrictEqual({ ...mod }, { type: 'cjs' }); |
| assert(!isModuleNamespaceObject(mod)); |
| } |
| |
| // If "import" and "default" are defined, "default" is used. |
| { |
| const mod = require('../fixtures/es-modules/exports-import-default/load.cjs'); |
| assert.deepStrictEqual({ ...mod }, { type: 'cjs' }); |
| assert(!isModuleNamespaceObject(mod)); |
| } |