Rely entirely on sourceType for module vs script differentiation. (#7417)
This commit is contained in:
parent
bf8b25289b
commit
ddd40bf5c7
@ -214,6 +214,7 @@ describe("api", function() {
|
|||||||
|
|
||||||
function execTest(passPerPreset) {
|
function execTest(passPerPreset) {
|
||||||
return babel.transform("type Foo = number; let x = (y): Foo => y;", {
|
return babel.transform("type Foo = number; let x = (y): Foo => y;", {
|
||||||
|
sourceType: "script",
|
||||||
passPerPreset: passPerPreset,
|
passPerPreset: passPerPreset,
|
||||||
presets: [
|
presets: [
|
||||||
// First preset with our plugin, "before"
|
// First preset with our plugin, "before"
|
||||||
|
|||||||
@ -209,7 +209,7 @@ export default class ImportInjector {
|
|||||||
// to a variable.
|
// to a variable.
|
||||||
let name = nameHint || importName;
|
let name = nameHint || importName;
|
||||||
|
|
||||||
const isMod = isModule(this._programPath, true);
|
const isMod = isModule(this._programPath);
|
||||||
const isModuleForNode = isMod && importingInterop === "node";
|
const isModuleForNode = isMod && importingInterop === "node";
|
||||||
const isModuleForBabel = isMod && importingInterop === "babel";
|
const isModuleForBabel = isMod && importingInterop === "babel";
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* A small utility to check if a file qualifies as a module, based on a few
|
* A small utility to check if a file qualifies as a module.
|
||||||
* possible conditions.
|
|
||||||
*/
|
*/
|
||||||
export default function isModule(
|
export default function isModule(path: NodePath) {
|
||||||
path: NodePath,
|
|
||||||
requireUnambiguous: boolean = false,
|
|
||||||
) {
|
|
||||||
const { sourceType } = path.node;
|
const { sourceType } = path.node;
|
||||||
if (sourceType !== "module" && sourceType !== "script") {
|
if (sourceType !== "module" && sourceType !== "script") {
|
||||||
throw path.buildCodeFrameError(
|
throw path.buildCodeFrameError(
|
||||||
@ -13,19 +9,5 @@ export default function isModule(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const filename = path.hub.file.opts.filename;
|
return path.node.sourceType === "module";
|
||||||
if (/\.mjs$/.test(filename)) {
|
|
||||||
requireUnambiguous = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
path.node.sourceType === "module" &&
|
|
||||||
(!requireUnambiguous || isUnambiguousModule(path))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This approach is not ideal. It is here to preserve compatibility for now,
|
|
||||||
// but really this should just return true or be deleted.
|
|
||||||
function isUnambiguousModule(path) {
|
|
||||||
return path.get("body").some(p => p.isModuleDeclaration());
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -330,6 +330,7 @@ function run(task) {
|
|||||||
const newOpts = merge(
|
const newOpts = merge(
|
||||||
{
|
{
|
||||||
filename: self.loc,
|
filename: self.loc,
|
||||||
|
sourceType: "unambiguous",
|
||||||
},
|
},
|
||||||
opts,
|
opts,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true,
|
"moduleIds": true,
|
||||||
"moduleId": "my custom module name"
|
"moduleId": "my custom module name"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true
|
"moduleIds": true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true,
|
"moduleIds": true,
|
||||||
"moduleId": "my custom module name",
|
"moduleId": "my custom module name",
|
||||||
"plugins": [
|
"plugins": [
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true,
|
"moduleIds": true,
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"external-helpers",
|
"external-helpers",
|
||||||
|
|||||||
@ -98,9 +98,7 @@ export default function(api, options) {
|
|||||||
visitor: {
|
visitor: {
|
||||||
Program: {
|
Program: {
|
||||||
exit(path) {
|
exit(path) {
|
||||||
// For now this requires unambiguous rather that just sourceType
|
if (!isModule(path)) return;
|
||||||
// because Babel currently parses all files as sourceType:module.
|
|
||||||
if (!isModule(path, true /* requireUnambiguous */)) return;
|
|
||||||
|
|
||||||
// Rename the bindings auto-injected into the scope so there is no
|
// Rename the bindings auto-injected into the scope so there is no
|
||||||
// risk of conflict between the bindings.
|
// risk of conflict between the bindings.
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true,
|
"moduleIds": true,
|
||||||
"moduleId": "my custom module name",
|
"moduleId": "my custom module name",
|
||||||
"plugins": [
|
"plugins": [
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleId": "MyLib",
|
"moduleId": "MyLib",
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"external-helpers",
|
"external-helpers",
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true,
|
"moduleIds": true,
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"external-helpers",
|
"external-helpers",
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true,
|
"moduleIds": true,
|
||||||
"moduleId": "my custom module name"
|
"moduleId": "my custom module name"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleId": "MyLib"
|
"moduleId": "MyLib"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"moduleIds": true
|
"moduleIds": true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ require("../babel-preset-env");
|
|||||||
describe("babel-preset-env-standalone", () => {
|
describe("babel-preset-env-standalone", () => {
|
||||||
it("works w/o targets", () => {
|
it("works w/o targets", () => {
|
||||||
const output = Babel.transform("const a = 1;", {
|
const output = Babel.transform("const a = 1;", {
|
||||||
|
sourceType: "script",
|
||||||
presets: ["env"],
|
presets: ["env"],
|
||||||
}).code;
|
}).code;
|
||||||
assert.equal(output, "var a = 1;");
|
assert.equal(output, "var a = 1;");
|
||||||
@ -14,6 +15,7 @@ describe("babel-preset-env-standalone", () => {
|
|||||||
|
|
||||||
it("doesn't transpile `const` with chrome 60", () => {
|
it("doesn't transpile `const` with chrome 60", () => {
|
||||||
const output = Babel.transform("const a = 1;", {
|
const output = Babel.transform("const a = 1;", {
|
||||||
|
sourceType: "script",
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
"env",
|
"env",
|
||||||
@ -30,6 +32,7 @@ describe("babel-preset-env-standalone", () => {
|
|||||||
|
|
||||||
it("transpiles `const` with chrome 60 and preset-es2015", () => {
|
it("transpiles `const` with chrome 60 and preset-es2015", () => {
|
||||||
const output = Babel.transform("const a = 1;", {
|
const output = Babel.transform("const a = 1;", {
|
||||||
|
sourceType: "script",
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
"env",
|
"env",
|
||||||
@ -47,6 +50,7 @@ describe("babel-preset-env-standalone", () => {
|
|||||||
|
|
||||||
it("uses transform-new-targets plugin", () => {
|
it("uses transform-new-targets plugin", () => {
|
||||||
const output = Babel.transform("function Foo() {new.target}", {
|
const output = Babel.transform("function Foo() {new.target}", {
|
||||||
|
sourceType: "script",
|
||||||
presets: ["env"],
|
presets: ["env"],
|
||||||
}).code;
|
}).code;
|
||||||
assert.equal(
|
assert.equal(
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"presets": [
|
"presets": [
|
||||||
["../../../../lib", {
|
["../../../../lib", {
|
||||||
"useBuiltIns": "usage"
|
"useBuiltIns": "usage"
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"sourceType": "module",
|
||||||
"presets": [
|
"presets": [
|
||||||
["../../../../lib", {
|
["../../../../lib", {
|
||||||
"shippedProposals": true,
|
"shippedProposals": true,
|
||||||
|
|||||||
@ -16,6 +16,7 @@ describe("@babel/standalone", () => {
|
|||||||
});
|
});
|
||||||
it("handles the es2015-loose preset", () => {
|
it("handles the es2015-loose preset", () => {
|
||||||
const output = Babel.transform("class A {}", {
|
const output = Babel.transform("class A {}", {
|
||||||
|
sourceType: "script",
|
||||||
presets: ["es2015-loose"],
|
presets: ["es2015-loose"],
|
||||||
}).code;
|
}).code;
|
||||||
assert.equal(output, "var A = function A() {};");
|
assert.equal(output, "var A = function A() {};");
|
||||||
@ -52,7 +53,7 @@ describe("@babel/standalone", () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
sourceType: "module",
|
sourceType: "script",
|
||||||
};
|
};
|
||||||
const output = Babel.transformFromAst(ast, "42", { presets: ["es2015"] })
|
const output = Babel.transformFromAst(ast, "42", { presets: ["es2015"] })
|
||||||
.code;
|
.code;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user