From ef1991a08ef066e379442410e6220e213fe8dba2 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 19 Jun 2020 06:29:07 +0200 Subject: [PATCH 1/2] Fix accessing nested properties of namespaces --- src/ast/nodes/MemberExpression.ts | 18 +++++++++--------- .../_config.js | 8 ++++++++ .../helpers.js | 1 + .../nested-namespace-member-expression/main.js | 2 ++ 4 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 test/function/samples/nested-namespace-member-expression/_config.js create mode 100644 test/function/samples/nested-namespace-member-expression/helpers.js create mode 100644 test/function/samples/nested-namespace-member-expression/main.js diff --git a/src/ast/nodes/MemberExpression.ts b/src/ast/nodes/MemberExpression.ts index 90ae9d48ba4..7377394a3d6 100644 --- a/src/ast/nodes/MemberExpression.ts +++ b/src/ast/nodes/MemberExpression.ts @@ -93,16 +93,16 @@ export default class MemberExpression extends NodeBase implements DeoptimizableE const baseVariable = path && this.scope.findVariable(path[0].key); if (baseVariable && baseVariable.isNamespace) { const resolvedVariable = this.resolveNamespaceVariables(baseVariable, path!.slice(1)); - if (resolvedVariable) { - if (typeof resolvedVariable === 'string') { - this.replacement = resolvedVariable; - } else { - if (resolvedVariable instanceof ExternalVariable && resolvedVariable.module) { - resolvedVariable.module.suggestName(path![0].key); - } - this.variable = resolvedVariable; - this.scope.addNamespaceMemberAccess(getStringFromPath(path!), resolvedVariable); + if (!resolvedVariable) { + super.bind(); + } else if (typeof resolvedVariable === 'string') { + this.replacement = resolvedVariable; + } else { + if (resolvedVariable instanceof ExternalVariable && resolvedVariable.module) { + resolvedVariable.module.suggestName(path![0].key); } + this.variable = resolvedVariable; + this.scope.addNamespaceMemberAccess(getStringFromPath(path!), resolvedVariable); } } else { super.bind(); diff --git a/test/function/samples/nested-namespace-member-expression/_config.js b/test/function/samples/nested-namespace-member-expression/_config.js new file mode 100644 index 00000000000..73981a9fa63 --- /dev/null +++ b/test/function/samples/nested-namespace-member-expression/_config.js @@ -0,0 +1,8 @@ +const assert = require('assert'); + +module.exports = { + description: 'handles accessing members of namespaces correctly', + exports(exports) { + assert.strictEqual(exports, false); + } +}; diff --git a/test/function/samples/nested-namespace-member-expression/helpers.js b/test/function/samples/nested-namespace-member-expression/helpers.js new file mode 100644 index 00000000000..f13c1c469b1 --- /dev/null +++ b/test/function/samples/nested-namespace-member-expression/helpers.js @@ -0,0 +1 @@ +export var global = {Object: {}}; \ No newline at end of file diff --git a/test/function/samples/nested-namespace-member-expression/main.js b/test/function/samples/nested-namespace-member-expression/main.js new file mode 100644 index 00000000000..b380315d582 --- /dev/null +++ b/test/function/samples/nested-namespace-member-expression/main.js @@ -0,0 +1,2 @@ +import * as helpers from './helpers.js'; +export default helpers.global.Object === Object; From 2223a52c149092f5a095b922b007d2e8c66ec922 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 19 Jun 2020 06:40:07 +0200 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 9 +++++++++ test/cli/samples/watch/bundle-error/_config.js | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34c55812677..5f46a2a3184 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # rollup changelog +## 2.17.1 +*2020-06-19* + +### Bug Fixes +* Properly resolve accessing properties of namespace members again (#3643) + +### Pull Requests +* [#3643](https://github.com/rollup/rollup/pull/3643): Fix accessing nested properties of namespaces (@lukastaegert) + ## 2.17.0 *2020-06-17* diff --git a/test/cli/samples/watch/bundle-error/_config.js b/test/cli/samples/watch/bundle-error/_config.js index cf7762e84e9..00f02dc8932 100644 --- a/test/cli/samples/watch/bundle-error/_config.js +++ b/test/cli/samples/watch/bundle-error/_config.js @@ -11,11 +11,11 @@ module.exports = { fs.writeFileSync(mainFile, '<=>'); }, after() { - setTimeout(() => fs.unlinkSync(mainFile), 300); + setTimeout(() => fs.unlinkSync(mainFile), 100); }, abortOnStderr(data) { if (data.includes('Error: Unexpected token')) { - setTimeout(() => fs.writeFileSync(mainFile, 'export default 42;'), 300); + setTimeout(() => fs.writeFileSync(mainFile, 'export default 42;'), 500); return false; } if (data.includes('created _actual')) {