From 1ef7e0f48e38dc1da25a58e1f6ab19f34c149308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Thu, 23 Nov 2017 21:01:47 +0100 Subject: [PATCH] Allowed hintedNames for namespaced imports, changed some other defaults for more readable ones (#6744) --- .../src/import-builder.js | 2 +- .../src/import-injector.js | 88 +++++++------ .../babel-helper-module-imports/test/index.js | 121 ++++++++++-------- 3 files changed, 113 insertions(+), 98 deletions(-) diff --git a/packages/babel-helper-module-imports/src/import-builder.js b/packages/babel-helper-module-imports/src/import-builder.js index 5f540f4372..fd2b040b1f 100644 --- a/packages/babel-helper-module-imports/src/import-builder.js +++ b/packages/babel-helper-module-imports/src/import-builder.js @@ -43,7 +43,7 @@ export default class ImportBuilder { return this; } - namespace(name) { + namespace(name = "namespace") { name = this._scope.generateUidIdentifier(name); const statement = this._statements[this._statements.length - 1]; diff --git a/packages/babel-helper-module-imports/src/import-injector.js b/packages/babel-helper-module-imports/src/import-injector.js index 51040a827a..33b46a12cb 100644 --- a/packages/babel-helper-module-imports/src/import-injector.js +++ b/packages/babel-helper-module-imports/src/import-injector.js @@ -197,17 +197,18 @@ export default class ImportInjector { importingInterop, ensureLiveReference, ensureNoContext, - - // Provide a hint for generateUidIdentifier for the local variable name - // to use for the import, if the code will generate a simple assignment - // to a variable. - nameHint = importName, + nameHint, // Not meant for public usage. Allows code that absolutely must control // ordering to set a specific hoist value on the import nodes. blockHoist, } = opts; + // Provide a hint for generateUidIdentifier for the local variable name + // to use for the import, if the code will generate a simple assignment + // to a variable. + let name = nameHint || importName; + const isMod = isModule(this._programPath, true); const isModuleForNode = isMod && importingInterop === "node"; const isModuleForBabel = isMod && importingInterop === "babel"; @@ -228,9 +229,9 @@ export default class ImportInjector { // import { named } from ''; named builder.import(); if (isNamespace) { - builder.namespace("namespace"); + builder.namespace(nameHint || importedSource); } else if (isDefault || isNamed) { - builder.named(nameHint, importName); + builder.named(name, importName); } } else if (importedType !== "commonjs") { throw new Error(`Unexpected interopType "${importedType}"`); @@ -239,29 +240,31 @@ export default class ImportInjector { // import _tmp from ''; var namespace = interopRequireWildcard(_tmp); namespace // import _tmp from ''; var def = interopRequireDefault(_tmp).default; def // import _tmp from ''; _tmp.named + name = name !== "default" ? name : importedSource; + const es6Default = `${importedSource}$es6Default`; builder.import(); if (isNamespace) { builder - .default("es6Default") - .var(nameHint || "namespace") + .default(es6Default) + .var(name || importedSource) .wildcardInterop(); } else if (isDefault) { if (ensureLiveReference) { builder - .default("es6Default") - .var("namespace") + .default(es6Default) + .var(name || importedSource) .defaultInterop() .read("default"); } else { builder - .default("es6Default") - .var(nameHint) + .default(es6Default) + .var(name) .defaultInterop() .prop(importName); } } else if (isNamed) { - builder.default("es6Default").read(importName); + builder.default(es6Default).read(importName); } } else if (isModuleForBabel) { // import * as namespace from ''; namespace @@ -269,9 +272,9 @@ export default class ImportInjector { // import { named } from ''; named builder.import(); if (isNamespace) { - builder.namespace("namespace"); + builder.namespace(name || importedSource); } else if (isDefault || isNamed) { - builder.named(nameHint, importName); + builder.named(name, importName); } } else { // var namespace = interopRequireWildcard(require('')); @@ -279,18 +282,22 @@ export default class ImportInjector { // var named = require('').named; named builder.require(); if (isNamespace) { - builder.var("namespace").wildcardInterop(); + builder.var(name || importedSource).wildcardInterop(); } else if ((isDefault || isNamed) && ensureLiveReference) { - builder.var("namespace").read(importName); - - if (isDefault) builder.defaultInterop(); + if (isDefault) { + name = name !== "default" ? name : importedSource; + builder.var(name).read(importName); + builder.defaultInterop(); + } else { + builder.var(importedSource).read(importName); + } } else if (isDefault) { builder - .var(nameHint) + .var(name) .defaultInterop() .prop(importName); } else if (isNamed) { - builder.var(nameHint).prop(importName); + builder.var(name).prop(importName); } } } else if (importedInterop === "compiled") { @@ -301,9 +308,9 @@ export default class ImportInjector { builder.import(); if (isNamespace) { - builder.default("namespace"); + builder.default(name || importedSource); } else if (isDefault || isNamed) { - builder.default("namespace").read(importName); + builder.default(importedSource).read(name); } } else if (isModuleForBabel) { // import * as namespace from ''; namespace @@ -314,24 +321,23 @@ export default class ImportInjector { builder.import(); if (isNamespace) { - builder.namespace("namespace"); + builder.namespace(name || importedSource); } else if (isDefault || isNamed) { - builder.named(nameHint, importName); + builder.named(name, importName); } } else { // var namespace = require(''); namespace // var namespace = require(''); namespace.default // var namespace = require(''); namespace.named // var named = require('').named; - builder.require(); if (isNamespace) { - builder.var("namespace"); + builder.var(name || importedSource); } else if (isDefault || isNamed) { if (ensureLiveReference) { - builder.var("namespace").read(importName); + builder.var(importedSource).read(name); } else { - builder.prop(importName).var(nameHint); + builder.prop(importName).var(name); } } } @@ -344,14 +350,13 @@ export default class ImportInjector { // import namespace from ''; namespace // import def from ''; def; // import namespace from ''; namespace.named - builder.import(); if (isNamespace) { - builder.default("namespace"); + builder.default(name || importedSource); } else if (isDefault) { - builder.default(nameHint); + builder.default(name); } else if (isNamed) { - builder.default("namespace").read(importName); + builder.default(importedSource).read(name); } } else if (isModuleForBabel) { // import namespace from ''; @@ -363,28 +368,27 @@ export default class ImportInjector { builder.import(); if (isNamespace) { - builder.default("namespace"); + builder.default(name || importedSource); } else if (isDefault) { - builder.default(nameHint); + builder.default(name); } else if (isNamed) { - builder.named(nameHint, importName); + builder.named(name, importName); } } else { // var namespace = require(''); namespace // var def = require(''); def // var namespace = require(''); namespace.named // var named = require('').named; - builder.require(); if (isNamespace) { - builder.var("namespace"); + builder.var(name || importedSource); } else if (isDefault) { - builder.var(nameHint); + builder.var(name); } else if (isNamed) { if (ensureLiveReference) { - builder.var("namespace").read(importName); + builder.var(importedSource).read(name); } else { - builder.var(nameHint).prop(importName); + builder.var(name).prop(importName); } } } diff --git a/packages/babel-helper-module-imports/test/index.js b/packages/babel-helper-module-imports/test/index.js index 63db550839..534d5d509a 100644 --- a/packages/babel-helper-module-imports/test/index.js +++ b/packages/babel-helper-module-imports/test/index.js @@ -55,8 +55,19 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedType }, addNamespace(), ` - import * as _namespace from "source"; - _namespace; + import * as _source from "source"; + _source; + `, + ); + }); + + it("should import with a name hint", () => { + testModule( + { importingInterop, importedType }, + addNamespace({ nameHint: "hintedName" }), + ` + import * as _hintedName from "source"; + _hintedName; `, ); }); @@ -70,8 +81,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedType }, addNamespace(), ` - import * as _namespace from "source"; - _namespace; + import * as _source from "source"; + _source; `, ); }); @@ -99,8 +110,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamespace(), ` - import _namespace from "source"; - _namespace; + import _source from "source"; + _source; `, ); }); @@ -114,8 +125,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamespace(), ` - import _namespace from "source"; - _namespace; + import _source from "source"; + _source; `, ); }); @@ -127,8 +138,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop }, addNamespace(), ` - var _namespace = require("source"); - _namespace; + var _source = require("source"); + _source; `, ); }); @@ -146,8 +157,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamespace(), ` - import _namespace from "source"; - _namespace; + import _source from "source"; + _source; `, ); }); @@ -161,8 +172,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamespace(), ` - import * as _namespace from "source"; - _namespace; + import * as _source from "source"; + _source; `, ); }); @@ -174,8 +185,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop }, addNamespace(), ` - var _namespace = require("source"); - _namespace; + var _source = require("source"); + _source; `, ); }); @@ -193,9 +204,9 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamespace(), ` - import _es6Default from "source"; - var _namespace = babelHelpers.interopRequireWildcard(_es6Default); - _namespace; + import _source$es6Default from "source"; + var _source = babelHelpers.interopRequireWildcard(_source$es6Default); + _source; `, ); }); @@ -209,8 +220,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamespace(), ` - import * as _namespace from "source"; - _namespace; + import * as _source from "source"; + _source; `, ); }); @@ -222,8 +233,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop }, addNamespace(), ` - var _namespace = babelHelpers.interopRequireWildcard(require("source")); - _namespace; + var _source = babelHelpers.interopRequireWildcard(require("source")); + _source; `, ); }); @@ -402,8 +413,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addDefault(), ` - import _namespace from "source"; - _namespace.default; + import _source from "source"; + _source.default; `, ); }); @@ -413,8 +424,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop, ensureNoContext: true }, addDefault(), ` - import _namespace from "source"; - 0, _namespace.default; + import _source from "source"; + 0, _source.default; `, ); }); @@ -474,8 +485,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop, ensureLiveReference: true }, addDefault(), ` - var _namespace = require("source"); - _namespace.default; + var _source = require("source"); + _source.default; `, ); }); @@ -493,9 +504,9 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addDefault(), ` - import _es6Default from "source"; - var _default = babelHelpers.interopRequireDefault(_es6Default).default; - _default; + import _source$es6Default from "source"; + var _source = babelHelpers.interopRequireDefault(_source$es6Default).default; + _source; `, ); }); @@ -505,8 +516,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addDefault({ nameHint: "hintedName" }), ` - import _es6Default from "source"; - var _hintedName = babelHelpers.interopRequireDefault(_es6Default).default; + import _source$es6Default from "source"; + var _hintedName = babelHelpers.interopRequireDefault(_source$es6Default).default; _hintedName; `, ); @@ -517,9 +528,9 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop, ensureLiveReference: true }, addDefault(), ` - import _es6Default from "source"; - var _namespace = babelHelpers.interopRequireDefault(_es6Default); - _namespace.default; + import _source$es6Default from "source"; + var _source = babelHelpers.interopRequireDefault(_source$es6Default); + _source.default; `, ); }); @@ -579,8 +590,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop, ensureLiveReference: true }, addDefault(), ` - var _namespace = babelHelpers.interopRequireDefault(require("source")); - _namespace.default; + var _source = babelHelpers.interopRequireDefault(require("source")); + _source.default; `, ); }); @@ -668,8 +679,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamed(), ` - import _namespace from "source"; - _namespace.read; + import _source from "source"; + _source.read; `, ); }); @@ -679,8 +690,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop, ensureNoContext: true }, addNamed(), ` - import _namespace from "source"; - 0, _namespace.read; + import _source from "source"; + 0, _source.read; `, ); }); @@ -740,8 +751,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop, ensureLiveReference: true }, addNamed(), ` - var _namespace = require("source"); - _namespace.read; + var _source = require("source"); + _source.read; `, ); }); @@ -759,8 +770,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamed(), ` - import _namespace from "source"; - _namespace.read; + import _source from "source"; + _source.read; `, ); }); @@ -770,8 +781,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop, ensureNoContext: true }, addNamed(), ` - import _namespace from "source"; - 0, _namespace.read; + import _source from "source"; + 0, _source.read; `, ); }); @@ -831,8 +842,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop, ensureLiveReference: true }, addNamed(), ` - var _namespace = require("source"); - _namespace.read; + var _source = require("source"); + _source.read; `, ); }); @@ -850,8 +861,8 @@ describe("@babel/helper-module-imports", () => { { importingInterop, importedInterop }, addNamed(), ` - import _es6Default from "source"; - _es6Default.read; + import _source$es6Default from "source"; + _source$es6Default.read; `, ); }); @@ -911,8 +922,8 @@ describe("@babel/helper-module-imports", () => { { importedInterop, ensureLiveReference: true }, addNamed(), ` - var _namespace = require("source"); - _namespace.read; + var _source = require("source"); + _source.read; `, ); });