Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allowed hintedNames for namespaced imports, changed some other defaul… #6744

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/babel-helper-module-imports/src/import-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
88 changes: 46 additions & 42 deletions packages/babel-helper-module-imports/src/import-injector.js
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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}"`);
Expand All @@ -239,58 +240,64 @@ 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
// import def from ''; def
// 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(''));
// var def = interopRequireDefault(require('')).default; def
// 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") {
Expand All @@ -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
Expand All @@ -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);
}
}
}
Expand All @@ -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 '';
Expand All @@ -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);
}
}
}
Expand Down
Loading