From 5dd7f438c9e6b128ac897aede12013e9d25337c2 Mon Sep 17 00:00:00 2001 From: Kiko Estrada Date: Sun, 24 May 2020 13:57:34 -0700 Subject: [PATCH] Enable `import.meta` by default in `@babel/parser` (#11406) --- .../babel-parser/src/parser/expression.js | 4 - packages/babel-parser/src/parser/location.js | 1 - .../import-meta/output.json | 2 +- .../direct-calls-only/output.json | 1 - .../import-meta/error-in-script}/input.js | 0 .../import-meta/error-in-script/options.json | 1 - .../import-meta/error-in-script/output.json | 0 .../import-meta/no-other-prop-names/input.js | 0 .../no-other-prop-names/options.json | 3 + .../no-other-prop-names/output.json | 0 .../import-meta/not-assignable/input.js | 0 .../import-meta/not-assignable/options.json | 3 + .../import-meta/not-assignable/output.json | 0 .../import-meta/valid-in-module/input.js | 0 .../import-meta/valid-in-module/options.json | 3 + .../import-meta/valid-in-module/output.json | 0 .../_no-plugin/import-meta/options.json | 5 - .../import-meta/error-in-script/input.js | 1 - .../no-other-prop-names/options.json | 4 - .../import-meta/not-assignable/options.json | 4 - .../import-meta/valid-in-module/options.json | 4 - .../without-dynamic-import/input.js | 5 - .../without-dynamic-import/options.json | 4 - .../without-dynamic-import/output.json | 167 ------------------ .../import-meta/without-plugin/input.js | 1 - .../import-meta/without-plugin/options.json | 4 - 26 files changed, 10 insertions(+), 207 deletions(-) rename packages/babel-parser/test/fixtures/{experimental/_no-plugin/import-meta => es2020/import-meta/error-in-script}/input.js (100%) rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/error-in-script/options.json (50%) rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/error-in-script/output.json (100%) rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/no-other-prop-names/input.js (100%) create mode 100644 packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/options.json rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/no-other-prop-names/output.json (100%) rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/not-assignable/input.js (100%) create mode 100644 packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/options.json rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/not-assignable/output.json (100%) rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/valid-in-module/input.js (100%) create mode 100644 packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/options.json rename packages/babel-parser/test/fixtures/{experimental => es2020}/import-meta/valid-in-module/output.json (100%) delete mode 100644 packages/babel-parser/test/fixtures/experimental/_no-plugin/import-meta/options.json delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/input.js delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/options.json delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/options.json delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/options.json delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/input.js delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/options.json delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/output.json delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/input.js delete mode 100644 packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/options.json diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 13f6c947d29a..b813574ede3d 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -1227,8 +1227,6 @@ export default class ExpressionParser extends LValParser { this.expect(tt.dot); if (this.isContextual("meta")) { - this.expectPlugin("importMeta"); - if (!this.inModule) { this.raiseWithData( id.start, @@ -1237,8 +1235,6 @@ export default class ExpressionParser extends LValParser { ); } this.sawUnambiguousESM = true; - } else if (!this.hasPlugin("importMeta")) { - this.raise(id.start, Errors.ImportCallArityLtOne); } return this.parseMetaProperty(node, id, "meta"); diff --git a/packages/babel-parser/src/parser/location.js b/packages/babel-parser/src/parser/location.js index 035bbc7d0452..e2760f1691fa 100644 --- a/packages/babel-parser/src/parser/location.js +++ b/packages/babel-parser/src/parser/location.js @@ -68,7 +68,6 @@ export const Errors = Object.freeze({ ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments", ImportCallArity: "import() requires exactly one argument", - ImportCallArityLtOne: "Dynamic imports require a parameter: import('a.js')", ImportCallNotNewExpression: "Cannot use new with import(...)", ImportCallSpreadArgument: "... is not allowed in import()", ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: "module"'`, diff --git a/packages/babel-parser/test/fixtures/core/sourcetype-unambiguous/import-meta/output.json b/packages/babel-parser/test/fixtures/core/sourcetype-unambiguous/import-meta/output.json index 6b9a913d2dd1..62a3a5610722 100644 --- a/packages/babel-parser/test/fixtures/core/sourcetype-unambiguous/import-meta/output.json +++ b/packages/babel-parser/test/fixtures/core/sourcetype-unambiguous/import-meta/output.json @@ -49,4 +49,4 @@ ], "directives": [] } -} \ No newline at end of file +} diff --git a/packages/babel-parser/test/fixtures/es2020/dynamic-import/direct-calls-only/output.json b/packages/babel-parser/test/fixtures/es2020/dynamic-import/direct-calls-only/output.json index c091e5986ab8..2a5318f72b14 100644 --- a/packages/babel-parser/test/fixtures/es2020/dynamic-import/direct-calls-only/output.json +++ b/packages/babel-parser/test/fixtures/es2020/dynamic-import/direct-calls-only/output.json @@ -2,7 +2,6 @@ "type": "File", "start":0,"end":49,"loc":{"start":{"line":1,"column":0},"end":{"line":3,"column":1}}, "errors": [ - "SyntaxError: Dynamic imports require a parameter: import('a.js') (2:9)", "SyntaxError: The only valid meta property for import is import.meta (2:16)" ], "program": { diff --git a/packages/babel-parser/test/fixtures/experimental/_no-plugin/import-meta/input.js b/packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/_no-plugin/import-meta/input.js rename to packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/input.js diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/options.json b/packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/options.json similarity index 50% rename from packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/options.json rename to packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/options.json index 7442e09e1f56..b412ffe6712f 100644 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/options.json +++ b/packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/options.json @@ -1,4 +1,3 @@ { - "plugins": ["importMeta"], "sourceType": "script" } diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/output.json b/packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/output.json rename to packages/babel-parser/test/fixtures/es2020/import-meta/error-in-script/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/input.js b/packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/input.js rename to packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/input.js diff --git a/packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/options.json b/packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/options.json new file mode 100644 index 000000000000..2104ca43283f --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/options.json @@ -0,0 +1,3 @@ +{ + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/output.json b/packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/output.json rename to packages/babel-parser/test/fixtures/es2020/import-meta/no-other-prop-names/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/input.js b/packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/input.js rename to packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/input.js diff --git a/packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/options.json b/packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/options.json new file mode 100644 index 000000000000..2104ca43283f --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/options.json @@ -0,0 +1,3 @@ +{ + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/output.json b/packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/output.json rename to packages/babel-parser/test/fixtures/es2020/import-meta/not-assignable/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/input.js b/packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/input.js rename to packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/input.js diff --git a/packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/options.json b/packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/options.json new file mode 100644 index 000000000000..2104ca43283f --- /dev/null +++ b/packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/options.json @@ -0,0 +1,3 @@ +{ + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/output.json b/packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/output.json rename to packages/babel-parser/test/fixtures/es2020/import-meta/valid-in-module/output.json diff --git a/packages/babel-parser/test/fixtures/experimental/_no-plugin/import-meta/options.json b/packages/babel-parser/test/fixtures/experimental/_no-plugin/import-meta/options.json deleted file mode 100644 index 48ce55a15d05..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/_no-plugin/import-meta/options.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "throws": "This experimental syntax requires enabling the parser plugin: 'importMeta' (1:17)", - "sourceType": "module", - "plugins": [] -} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/input.js b/packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/input.js deleted file mode 100644 index e1cfc5468ef4..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/error-in-script/input.js +++ /dev/null @@ -1 +0,0 @@ -const x = import.meta; diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/options.json b/packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/options.json deleted file mode 100644 index a6638b6528c1..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/no-other-prop-names/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "sourceType": "module", - "plugins": ["importMeta"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/options.json b/packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/options.json deleted file mode 100644 index a6638b6528c1..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/not-assignable/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "sourceType": "module", - "plugins": ["importMeta"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/options.json b/packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/options.json deleted file mode 100644 index a6638b6528c1..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/valid-in-module/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "sourceType": "module", - "plugins": ["importMeta"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/input.js b/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/input.js deleted file mode 100644 index fd4422fc6f84..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/input.js +++ /dev/null @@ -1,5 +0,0 @@ -const x = import.meta; -const url = import.meta.url; -import.meta; -import.meta.url; -import.meta.couldBeMutable = true; diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/options.json b/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/options.json deleted file mode 100644 index a6638b6528c1..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "sourceType": "module", - "plugins": ["importMeta"] -} diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/output.json b/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/output.json deleted file mode 100644 index f7c0f728ad82..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/without-dynamic-import/output.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "type": "File", - "start":0,"end":116,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":34}}, - "program": { - "type": "Program", - "start":0,"end":116,"loc":{"start":{"line":1,"column":0},"end":{"line":5,"column":34}}, - "sourceType": "module", - "interpreter": null, - "body": [ - { - "type": "VariableDeclaration", - "start":0,"end":22,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}}, - "declarations": [ - { - "type": "VariableDeclarator", - "start":6,"end":21,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":21}}, - "id": { - "type": "Identifier", - "start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"x"}, - "name": "x" - }, - "init": { - "type": "MetaProperty", - "start":10,"end":21,"loc":{"start":{"line":1,"column":10},"end":{"line":1,"column":21}}, - "meta": { - "type": "Identifier", - "start":10,"end":16,"loc":{"start":{"line":1,"column":10},"end":{"line":1,"column":16},"identifierName":"import"}, - "name": "import" - }, - "property": { - "type": "Identifier", - "start":17,"end":21,"loc":{"start":{"line":1,"column":17},"end":{"line":1,"column":21},"identifierName":"meta"}, - "name": "meta" - } - } - } - ], - "kind": "const" - }, - { - "type": "VariableDeclaration", - "start":23,"end":51,"loc":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}}, - "declarations": [ - { - "type": "VariableDeclarator", - "start":29,"end":50,"loc":{"start":{"line":2,"column":6},"end":{"line":2,"column":27}}, - "id": { - "type": "Identifier", - "start":29,"end":32,"loc":{"start":{"line":2,"column":6},"end":{"line":2,"column":9},"identifierName":"url"}, - "name": "url" - }, - "init": { - "type": "MemberExpression", - "start":35,"end":50,"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":27}}, - "object": { - "type": "MetaProperty", - "start":35,"end":46,"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":23}}, - "meta": { - "type": "Identifier", - "start":35,"end":41,"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":18},"identifierName":"import"}, - "name": "import" - }, - "property": { - "type": "Identifier", - "start":42,"end":46,"loc":{"start":{"line":2,"column":19},"end":{"line":2,"column":23},"identifierName":"meta"}, - "name": "meta" - } - }, - "property": { - "type": "Identifier", - "start":47,"end":50,"loc":{"start":{"line":2,"column":24},"end":{"line":2,"column":27},"identifierName":"url"}, - "name": "url" - }, - "computed": false - } - } - ], - "kind": "const" - }, - { - "type": "ExpressionStatement", - "start":52,"end":64,"loc":{"start":{"line":3,"column":0},"end":{"line":3,"column":12}}, - "expression": { - "type": "MetaProperty", - "start":52,"end":63,"loc":{"start":{"line":3,"column":0},"end":{"line":3,"column":11}}, - "meta": { - "type": "Identifier", - "start":52,"end":58,"loc":{"start":{"line":3,"column":0},"end":{"line":3,"column":6},"identifierName":"import"}, - "name": "import" - }, - "property": { - "type": "Identifier", - "start":59,"end":63,"loc":{"start":{"line":3,"column":7},"end":{"line":3,"column":11},"identifierName":"meta"}, - "name": "meta" - } - } - }, - { - "type": "ExpressionStatement", - "start":65,"end":81,"loc":{"start":{"line":4,"column":0},"end":{"line":4,"column":16}}, - "expression": { - "type": "MemberExpression", - "start":65,"end":80,"loc":{"start":{"line":4,"column":0},"end":{"line":4,"column":15}}, - "object": { - "type": "MetaProperty", - "start":65,"end":76,"loc":{"start":{"line":4,"column":0},"end":{"line":4,"column":11}}, - "meta": { - "type": "Identifier", - "start":65,"end":71,"loc":{"start":{"line":4,"column":0},"end":{"line":4,"column":6},"identifierName":"import"}, - "name": "import" - }, - "property": { - "type": "Identifier", - "start":72,"end":76,"loc":{"start":{"line":4,"column":7},"end":{"line":4,"column":11},"identifierName":"meta"}, - "name": "meta" - } - }, - "property": { - "type": "Identifier", - "start":77,"end":80,"loc":{"start":{"line":4,"column":12},"end":{"line":4,"column":15},"identifierName":"url"}, - "name": "url" - }, - "computed": false - } - }, - { - "type": "ExpressionStatement", - "start":82,"end":116,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":34}}, - "expression": { - "type": "AssignmentExpression", - "start":82,"end":115,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":33}}, - "operator": "=", - "left": { - "type": "MemberExpression", - "start":82,"end":108,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":26}}, - "object": { - "type": "MetaProperty", - "start":82,"end":93,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":11}}, - "meta": { - "type": "Identifier", - "start":82,"end":88,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":6},"identifierName":"import"}, - "name": "import" - }, - "property": { - "type": "Identifier", - "start":89,"end":93,"loc":{"start":{"line":5,"column":7},"end":{"line":5,"column":11},"identifierName":"meta"}, - "name": "meta" - } - }, - "property": { - "type": "Identifier", - "start":94,"end":108,"loc":{"start":{"line":5,"column":12},"end":{"line":5,"column":26},"identifierName":"couldBeMutable"}, - "name": "couldBeMutable" - }, - "computed": false - }, - "right": { - "type": "BooleanLiteral", - "start":111,"end":115,"loc":{"start":{"line":5,"column":29},"end":{"line":5,"column":33}}, - "value": true - } - } - } - ], - "directives": [] - } -} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/input.js b/packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/input.js deleted file mode 100644 index e664dc3fd538..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/input.js +++ /dev/null @@ -1 +0,0 @@ -import.meta; \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/options.json b/packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/options.json deleted file mode 100644 index 5956ed25f3dd..000000000000 --- a/packages/babel-parser/test/fixtures/experimental/import-meta/without-plugin/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "throws": "This experimental syntax requires enabling the parser plugin: 'importMeta' (1:7)", - "plugins": [] -}