diff --git a/packages/commonjs/src/transform-commonjs.js b/packages/commonjs/src/transform-commonjs.js index fd0fe0a9d..c530f38c2 100644 --- a/packages/commonjs/src/transform-commonjs.js +++ b/packages/commonjs/src/transform-commonjs.js @@ -292,6 +292,14 @@ export default async function transformCommonjs( case 'Identifier': { const { name } = node; if (!isReference(node, parent) || scope.contains(name)) return; + const isClassBodyPropertyKey = + parent.type === 'PropertyDefinition' && parent.key === node; + if (isClassBodyPropertyKey && parent.value) return; + const prependLeftToClassBodyPropertyKey = (value) => { + if (isClassBodyPropertyKey && !parent.value) { + magicString.prependLeft(node.start, value); + } + }; switch (name) { case 'require': uses.require = true; @@ -305,6 +313,7 @@ export default async function transformCommonjs( skippedNodes.add(parent.value); magicString.prependRight(node.start, 'require: '); } + prependLeftToClassBodyPropertyKey('require = '); replacedDynamicRequires.push(node); } return; @@ -316,10 +325,12 @@ export default async function transformCommonjs( case 'global': uses.global = true; if (!ignoreGlobal) { + prependLeftToClassBodyPropertyKey('global = '); replacedGlobal.push(node); } return; case 'define': + prependLeftToClassBodyPropertyKey('define = '); magicString.overwrite(node.start, node.end, 'undefined', { storeName: true }); diff --git a/packages/commonjs/test/fixtures/function/class-body-property-keys-are-special-keywords/_config.js b/packages/commonjs/test/fixtures/function/class-body-property-keys-are-special-keywords/_config.js new file mode 100644 index 000000000..bca2bd171 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/class-body-property-keys-are-special-keywords/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'preserve the class body property keys even if they are special keywords', +}; diff --git a/packages/commonjs/test/fixtures/function/class-body-property-keys-are-special-keywords/main.js b/packages/commonjs/test/fixtures/function/class-body-property-keys-are-special-keywords/main.js new file mode 100644 index 000000000..67ac52d62 --- /dev/null +++ b/packages/commonjs/test/fixtures/function/class-body-property-keys-are-special-keywords/main.js @@ -0,0 +1,7 @@ +class Rollup { + define; + require; + global; +} + +exports.Rollup = Rollup; diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index bffef3a99..f6259d9f6 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -241,6 +241,36 @@ Generated by [AVA](https://avajs.dev). `, } +## class-body-property-keys-are-special-keywords + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + Object.defineProperty(exports, '__esModule', { value: true });␊ + ␊ + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};␊ + ␊ + function commonjsRequire(path) {␊ + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');␊ + }␊ + ␊ + var main = {};␊ + ␊ + class Rollup {␊ + define = undefined;␊ + require = commonjsRequire;␊ + global = commonjsGlobal;␊ + }␊ + ␊ + var Rollup_1 = main.Rollup = Rollup;␊ + ␊ + exports.Rollup = Rollup_1;␊ + exports.default = main;␊ + `, + } + ## compiled-esm-default-is-module-exports-false > Snapshot 1 diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index 1d0e1a45e..7ea311e07 100644 Binary files a/packages/commonjs/test/snapshots/function.js.snap and b/packages/commonjs/test/snapshots/function.js.snap differ