From bd251f236b8c2a8116d9abb8e992cd1b2519998e Mon Sep 17 00:00:00 2001 From: guybedford Date: Fri, 11 Nov 2016 17:30:58 +0200 Subject: [PATCH 1/2] include test for number specifiers --- .../test/fixtures/systemjs/imports-numbered/actual.js | 2 ++ .../test/fixtures/systemjs/imports-numbered/expected.js | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/actual.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/actual.js new file mode 100644 index 0000000000..fa6a368c45 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/actual.js @@ -0,0 +1,2 @@ +import "2"; +import "1"; diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js new file mode 100644 index 0000000000..51b4b21623 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js @@ -0,0 +1,8 @@ +System.register(["2", "1"], function (_export, _context) { + "use strict"; + + return { + setters: [function (_2) {}, function (_1) {}], + execute: function () {} + }; +}); From 76702a3a57780aa29afa49f1d43e4a9f7de3e052 Mon Sep 17 00:00:00 2001 From: guybedford Date: Fri, 11 Nov 2016 17:46:37 +0200 Subject: [PATCH 2/2] use ordered modules array over object properties --- .../src/index.js | 24 ++++++++++++------- .../systemjs/imports-numbered/expected.js | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js index ac8a8e2889..a542343bed 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js @@ -84,7 +84,7 @@ export default function ({ types: t }) { let contextIdent = state.contextIdent; let exportNames = Object.create(null); - let modules = Object.create(null); + let modules = []; let beforeBody = []; let setters = []; @@ -98,8 +98,16 @@ export default function ({ types: t }) { } function pushModule(source, key, specifiers) { - let _modules = modules[source] = modules[source] || { imports: [], exports: [] }; - _modules[key] = _modules[key].concat(specifiers); + let module; + modules.forEach(function (m) { + if (m.key === source) { + module = m; + } + }); + if (!module) { + modules.push(module = { key: source, imports: [], exports: [] }); + } + module[key] = module[key].concat(specifiers); } function buildExportCall(name, val) { @@ -205,11 +213,9 @@ export default function ({ types: t }) { } } - for (let source in modules) { - let specifiers = modules[source]; - + modules.forEach(function (specifiers) { let setterBody = []; - let target = path.scope.generateUidIdentifier(source); + let target = path.scope.generateUidIdentifier(specifiers.key); for (let specifier of specifiers.imports) { if (t.isImportNamespaceSpecifier(specifier)) { @@ -249,9 +255,9 @@ export default function ({ types: t }) { setterBody.push(t.expressionStatement(t.callExpression(exportIdent, [exportObjRef]))); } - sources.push(t.stringLiteral(source)); + sources.push(t.stringLiteral(specifiers.key)); setters.push(t.functionExpression(null, [target], t.blockStatement(setterBody))); - } + }); let moduleName = this.getModuleName(); diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js index 51b4b21623..c622c621b6 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-numbered/expected.js @@ -2,7 +2,7 @@ System.register(["2", "1"], function (_export, _context) { "use strict"; return { - setters: [function (_2) {}, function (_1) {}], + setters: [function (_) {}, function (_2) {}], execute: function () {} }; });