From dc3a5c82f59e8caabe646f9f677a45d1194e6e8c Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 1 Nov 2021 17:37:19 +0100 Subject: [PATCH 1/2] Add test --- .../test/integration/js-import-member/foo.js | 6 ++++++ .../test/integration/js-import-member/index.js | 3 +++ packages/core/integration-tests/test/javascript.js | 8 ++++++++ 3 files changed, 17 insertions(+) create mode 100644 packages/core/integration-tests/test/integration/js-import-member/foo.js create mode 100644 packages/core/integration-tests/test/integration/js-import-member/index.js diff --git a/packages/core/integration-tests/test/integration/js-import-member/foo.js b/packages/core/integration-tests/test/integration/js-import-member/foo.js new file mode 100644 index 00000000000..0daccdb4710 --- /dev/null +++ b/packages/core/integration-tests/test/integration/js-import-member/foo.js @@ -0,0 +1,6 @@ +export const foo = { + a: "b", + bar: "bar" +}; + +export const bar = "a"; diff --git a/packages/core/integration-tests/test/integration/js-import-member/index.js b/packages/core/integration-tests/test/integration/js-import-member/index.js new file mode 100644 index 00000000000..eac4408e131 --- /dev/null +++ b/packages/core/integration-tests/test/integration/js-import-member/index.js @@ -0,0 +1,3 @@ +import { foo, bar } from "./foo.js"; + +export default [bar, foo[bar], foo.bar]; diff --git a/packages/core/integration-tests/test/javascript.js b/packages/core/integration-tests/test/javascript.js index c7d764ceb42..5ed13c7b3e1 100644 --- a/packages/core/integration-tests/test/javascript.js +++ b/packages/core/integration-tests/test/javascript.js @@ -4982,6 +4982,14 @@ describe('javascript', function () { assert.deepEqual(res.default, 123); }); + it('should replace imported values in member expressions', async function () { + let b = await bundle( + path.join(__dirname, 'integration/js-import-member/index.js'), + ); + let res = await run(b); + assert.deepEqual(res.default, ['a', 'b', 'bar']); + }); + it('should not freeze live default imports', async function () { let b = await bundle( path.join(__dirname, 'integration/js-import-default-live/index.js'), From b686a3051f5a31a9bc76ece4402b98d338124c78 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 1 Nov 2021 17:37:24 +0100 Subject: [PATCH 2/2] Fix --- packages/transformers/js/core/src/utils.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/transformers/js/core/src/utils.rs b/packages/transformers/js/core/src/utils.rs index 3f6372a5684..c2ec6dac2ae 100644 --- a/packages/transformers/js/core/src/utils.rs +++ b/packages/transformers/js/core/src/utils.rs @@ -317,11 +317,10 @@ macro_rules! fold_member_expr_skip_prop { &mut self, mut node: swc_ecmascript::ast::MemberExpr, ) -> swc_ecmascript::ast::MemberExpr { - node.obj = node.obj.fold_children_with(self); + node.obj = node.obj.fold_with(self); - // To ensure that fold_expr doesn't replace `require` in non-computed member expressions if node.computed { - node.prop = node.prop.fold_children_with(self); + node.prop = node.prop.fold_with(self); } node