diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js index 1b491ea72380..9c0ef6b69b69 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js @@ -426,16 +426,25 @@ export default function () { } if (hasImports && Object.keys(nonHoistedExportNames).length) { - let hoistedExportsNode = t.identifier("undefined"); - for (const name in nonHoistedExportNames) { - hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression; - } + // avoid creating too long of export assignment to prevent stack overflow + const maxHoistedExportsNodeAssignmentLength = 100; + const nonHoistedExportNamesArr = Object.keys(nonHoistedExportNames); + + for (let currentExportsNodeAssignmentLength = 0; currentExportsNodeAssignmentLength < nonHoistedExportNamesArr.length; currentExportsNodeAssignmentLength += maxHoistedExportsNodeAssignmentLength ) { + const nonHoistedExportNamesChunk = nonHoistedExportNamesArr.slice(currentExportsNodeAssignmentLength, currentExportsNodeAssignmentLength + maxHoistedExportsNodeAssignmentLength); + + let hoistedExportsNode = t.identifier("undefined"); - const node = t.expressionStatement(hoistedExportsNode); - node._blockHoist = 3; + nonHoistedExportNamesChunk.forEach(function (name) { + hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression; + }); + + const node = t.expressionStatement(hoistedExportsNode); + node._blockHoist = 3; - topNodes.unshift(node); + topNodes.unshift(node); + } } // add __esModule declaration if this file has any exports diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-from-8/actual.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-from-8/actual.js new file mode 100644 index 000000000000..b42963fe70dc --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-from-8/actual.js @@ -0,0 +1,2 @@ +import { foo, foo1, foo2, foo3, foo4, foo5, foo6, foo7, foo8, foo9, foo10, foo11, foo12, foo13, foo14, foo15, foo16, foo17, foo18, foo19, foo20, foo21, foo22, foo23, foo24, foo25, foo26, foo27, foo28, foo29, foo30, foo31, foo32, foo33, foo34, foo35, foo36, foo37, foo38, foo39, foo40, foo41, foo42, foo43, foo44, foo45, foo46, foo47, foo48, foo49, foo50, foo51, foo52, foo53, foo54, foo55, foo56, foo57, foo58, foo59, foo60, foo61, foo62, foo63, foo64, foo65, foo66, foo67, foo68, foo69, foo70, foo71, foo72, foo73, foo74, foo75, foo76, foo77, foo78, foo79, foo80, foo81, foo82, foo83, foo84, foo85, foo86, foo87, foo88, foo89, foo90, foo91, foo92, foo93, foo94, foo95, foo96, foo97, foo98, foo99, foo100 } from "foo"; +export { foo, foo1, foo2, foo3, foo4, foo5, foo6, foo7, foo8, foo9, foo10, foo11, foo12, foo13, foo14, foo15, foo16, foo17, foo18, foo19, foo20, foo21, foo22, foo23, foo24, foo25, foo26, foo27, foo28, foo29, foo30, foo31, foo32, foo33, foo34, foo35, foo36, foo37, foo38, foo39, foo40, foo41, foo42, foo43, foo44, foo45, foo46, foo47, foo48, foo49, foo50, foo51, foo52, foo53, foo54, foo55, foo56, foo57, foo58, foo59, foo60, foo61, foo62, foo63, foo64, foo65, foo66, foo67, foo68, foo69, foo70, foo71, foo72, foo73, foo74, foo75, foo76, foo77, foo78, foo79, foo80, foo81, foo82, foo83, foo84, foo85, foo86, foo87, foo88, foo89, foo90, foo91, foo92, foo93, foo94, foo95, foo96, foo97, foo98, foo99, foo100 } \ No newline at end of file diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-from-8/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-from-8/expected.js new file mode 100644 index 000000000000..5f034e9682d2 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/interop/export-from-8/expected.js @@ -0,0 +1,111 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.foo100 = undefined; +exports.foo99 = exports.foo98 = exports.foo97 = exports.foo96 = exports.foo95 = exports.foo94 = exports.foo93 = exports.foo92 = exports.foo91 = exports.foo90 = exports.foo89 = exports.foo88 = exports.foo87 = exports.foo86 = exports.foo85 = exports.foo84 = exports.foo83 = exports.foo82 = exports.foo81 = exports.foo80 = exports.foo79 = exports.foo78 = exports.foo77 = exports.foo76 = exports.foo75 = exports.foo74 = exports.foo73 = exports.foo72 = exports.foo71 = exports.foo70 = exports.foo69 = exports.foo68 = exports.foo67 = exports.foo66 = exports.foo65 = exports.foo64 = exports.foo63 = exports.foo62 = exports.foo61 = exports.foo60 = exports.foo59 = exports.foo58 = exports.foo57 = exports.foo56 = exports.foo55 = exports.foo54 = exports.foo53 = exports.foo52 = exports.foo51 = exports.foo50 = exports.foo49 = exports.foo48 = exports.foo47 = exports.foo46 = exports.foo45 = exports.foo44 = exports.foo43 = exports.foo42 = exports.foo41 = exports.foo40 = exports.foo39 = exports.foo38 = exports.foo37 = exports.foo36 = exports.foo35 = exports.foo34 = exports.foo33 = exports.foo32 = exports.foo31 = exports.foo30 = exports.foo29 = exports.foo28 = exports.foo27 = exports.foo26 = exports.foo25 = exports.foo24 = exports.foo23 = exports.foo22 = exports.foo21 = exports.foo20 = exports.foo19 = exports.foo18 = exports.foo17 = exports.foo16 = exports.foo15 = exports.foo14 = exports.foo13 = exports.foo12 = exports.foo11 = exports.foo10 = exports.foo9 = exports.foo8 = exports.foo7 = exports.foo6 = exports.foo5 = exports.foo4 = exports.foo3 = exports.foo2 = exports.foo1 = exports.foo = undefined; + +var _foo = require("foo"); + +exports.foo = _foo.foo; +exports.foo1 = _foo.foo1; +exports.foo2 = _foo.foo2; +exports.foo3 = _foo.foo3; +exports.foo4 = _foo.foo4; +exports.foo5 = _foo.foo5; +exports.foo6 = _foo.foo6; +exports.foo7 = _foo.foo7; +exports.foo8 = _foo.foo8; +exports.foo9 = _foo.foo9; +exports.foo10 = _foo.foo10; +exports.foo11 = _foo.foo11; +exports.foo12 = _foo.foo12; +exports.foo13 = _foo.foo13; +exports.foo14 = _foo.foo14; +exports.foo15 = _foo.foo15; +exports.foo16 = _foo.foo16; +exports.foo17 = _foo.foo17; +exports.foo18 = _foo.foo18; +exports.foo19 = _foo.foo19; +exports.foo20 = _foo.foo20; +exports.foo21 = _foo.foo21; +exports.foo22 = _foo.foo22; +exports.foo23 = _foo.foo23; +exports.foo24 = _foo.foo24; +exports.foo25 = _foo.foo25; +exports.foo26 = _foo.foo26; +exports.foo27 = _foo.foo27; +exports.foo28 = _foo.foo28; +exports.foo29 = _foo.foo29; +exports.foo30 = _foo.foo30; +exports.foo31 = _foo.foo31; +exports.foo32 = _foo.foo32; +exports.foo33 = _foo.foo33; +exports.foo34 = _foo.foo34; +exports.foo35 = _foo.foo35; +exports.foo36 = _foo.foo36; +exports.foo37 = _foo.foo37; +exports.foo38 = _foo.foo38; +exports.foo39 = _foo.foo39; +exports.foo40 = _foo.foo40; +exports.foo41 = _foo.foo41; +exports.foo42 = _foo.foo42; +exports.foo43 = _foo.foo43; +exports.foo44 = _foo.foo44; +exports.foo45 = _foo.foo45; +exports.foo46 = _foo.foo46; +exports.foo47 = _foo.foo47; +exports.foo48 = _foo.foo48; +exports.foo49 = _foo.foo49; +exports.foo50 = _foo.foo50; +exports.foo51 = _foo.foo51; +exports.foo52 = _foo.foo52; +exports.foo53 = _foo.foo53; +exports.foo54 = _foo.foo54; +exports.foo55 = _foo.foo55; +exports.foo56 = _foo.foo56; +exports.foo57 = _foo.foo57; +exports.foo58 = _foo.foo58; +exports.foo59 = _foo.foo59; +exports.foo60 = _foo.foo60; +exports.foo61 = _foo.foo61; +exports.foo62 = _foo.foo62; +exports.foo63 = _foo.foo63; +exports.foo64 = _foo.foo64; +exports.foo65 = _foo.foo65; +exports.foo66 = _foo.foo66; +exports.foo67 = _foo.foo67; +exports.foo68 = _foo.foo68; +exports.foo69 = _foo.foo69; +exports.foo70 = _foo.foo70; +exports.foo71 = _foo.foo71; +exports.foo72 = _foo.foo72; +exports.foo73 = _foo.foo73; +exports.foo74 = _foo.foo74; +exports.foo75 = _foo.foo75; +exports.foo76 = _foo.foo76; +exports.foo77 = _foo.foo77; +exports.foo78 = _foo.foo78; +exports.foo79 = _foo.foo79; +exports.foo80 = _foo.foo80; +exports.foo81 = _foo.foo81; +exports.foo82 = _foo.foo82; +exports.foo83 = _foo.foo83; +exports.foo84 = _foo.foo84; +exports.foo85 = _foo.foo85; +exports.foo86 = _foo.foo86; +exports.foo87 = _foo.foo87; +exports.foo88 = _foo.foo88; +exports.foo89 = _foo.foo89; +exports.foo90 = _foo.foo90; +exports.foo91 = _foo.foo91; +exports.foo92 = _foo.foo92; +exports.foo93 = _foo.foo93; +exports.foo94 = _foo.foo94; +exports.foo95 = _foo.foo95; +exports.foo96 = _foo.foo96; +exports.foo97 = _foo.foo97; +exports.foo98 = _foo.foo98; +exports.foo99 = _foo.foo99; +exports.foo100 = _foo.foo100; \ No newline at end of file