diff --git a/hook.js b/hook.js index 3639fbf..c4bb178 100644 --- a/hook.js +++ b/hook.js @@ -128,6 +128,9 @@ ${exportNames.map((n) => ` let $${n} = namespace.${n} export { $${n} as ${n} } set.${n} = (v) => { + if ('${n}' !== 'default' && namespace.default['${n}']) { + namespace.default['${n}'] = v + } $${n} = v return true } diff --git a/test/fixtures/cjs-exports.js b/test/fixtures/cjs-exports.js new file mode 100644 index 0000000..71638d7 --- /dev/null +++ b/test/fixtures/cjs-exports.js @@ -0,0 +1,7 @@ +'use strict' + +exports.add = function add(a, b) { + return a + b +} + +exports.name = 'foo' diff --git a/test/hook/static-import-aliased.mjs b/test/hook/static-import-aliased.mjs new file mode 100644 index 0000000..10577c2 --- /dev/null +++ b/test/hook/static-import-aliased.mjs @@ -0,0 +1,24 @@ +// The purpose of this test is to prove that CJS modules: +// 1. Hooks apply to the added `default` export. +// 2. Hooks apply to the "named" exports. + +import Hook from '../../index.js' +import { strictEqual } from 'assert' +import * as something from '../fixtures/cjs-exports.js' + +Hook((exports, name) => { + if (/cjs-exports\.js$/.test(name) === false) return + const add = exports.add + exports.add = function wrappedAdd(a, b) { + return 'wrapped: ' + add(a, b) + } + + const namedName = exports.name + exports.name = `${namedName}-hooked` +}) + +strictEqual(something.default.add(2, 2), 'wrapped: 4') +strictEqual(something.add(2, 2), 'wrapped: 4') + +strictEqual(something.default.name, 'foo-hooked') +strictEqual(something.name, 'foo-hooked')