From 7d6a04d2db26cf28b7492fd98dc96ce6f0534034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 21 Sep 2022 09:51:22 -0400 Subject: [PATCH] Disable import assertions after import module --- .../src/parse-error/standard-errors.ts | 1 + packages/babel-parser/src/parser/statement.ts | 5 ++ .../invalid-assertions/input.mjs | 1 + .../invalid-assertions/options.json | 4 ++ .../invalid-assertions/output.json | 61 +++++++++++++++++++ .../invalid-default-named-import/output.json | 2 +- .../invalid-flow-type-import-2/output.json | 2 +- .../invalid-named-import/output.json | 2 +- .../invalid-namespace-import/output.json | 2 +- .../invalid-ts-type-import-1/output.json | 2 +- 10 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/input.mjs create mode 100644 packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/options.json create mode 100644 packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/output.json diff --git a/packages/babel-parser/src/parse-error/standard-errors.ts b/packages/babel-parser/src/parse-error/standard-errors.ts index 8859b2d786f4..9b69912655f1 100644 --- a/packages/babel-parser/src/parse-error/standard-errors.ts +++ b/packages/babel-parser/src/parse-error/standard-errors.ts @@ -117,6 +117,7 @@ export default { ImportCallSpreadArgument: "`...` is not allowed in `import()`.", ImportJSONBindingNotDefault: "A JSON module can only be imported with `default`.", + ImportReflectionHasAssertion: "`import module x` cannot have assertions.", ImportReflectionNotBinding: 'Only `import module x from "./module"` is valid.', IncompatibleRegExpUVFlags: diff --git a/packages/babel-parser/src/parser/statement.ts b/packages/babel-parser/src/parser/statement.ts index 92fd34508a64..fd7dfbfa0626 100644 --- a/packages/babel-parser/src/parser/statement.ts +++ b/packages/babel-parser/src/parser/statement.ts @@ -2615,6 +2615,11 @@ export default abstract class StatementParser extends ExpressionParser { at: node.specifiers[0].loc.start, }); } + if (node.assertions?.length > 0) { + this.raise(Errors.ImportReflectionHasAssertion, { + at: node.specifiers[0].loc.start, + }); + } } } diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/input.mjs b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/input.mjs new file mode 100644 index 000000000000..3db160892a93 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/input.mjs @@ -0,0 +1 @@ +import module foo from "./module.json" assert { type: "json" } diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/options.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/options.json new file mode 100644 index 000000000000..343fca529107 --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["importReflection", "importAssertions"], + "sourceType": "module" +} diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/output.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/output.json new file mode 100644 index 000000000000..d659444d99bf --- /dev/null +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-assertions/output.json @@ -0,0 +1,61 @@ +{ + "type": "File", + "start":0,"end":62,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":62,"index":62}}, + "errors": [ + "SyntaxError: `import module x` cannot have assertions. (1:14)" + ], + "program": { + "type": "Program", + "start":0,"end":62,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":62,"index":62}}, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "ImportDeclaration", + "start":0,"end":62,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":62,"index":62}}, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "start":14,"end":17,"loc":{"start":{"line":1,"column":14,"index":14},"end":{"line":1,"column":17,"index":17}}, + "local": { + "type": "Identifier", + "start":14,"end":17,"loc":{"start":{"line":1,"column":14,"index":14},"end":{"line":1,"column":17,"index":17},"identifierName":"foo"}, + "name": "foo" + } + } + ], + "module": true, + "source": { + "type": "StringLiteral", + "start":23,"end":38,"loc":{"start":{"line":1,"column":23,"index":23},"end":{"line":1,"column":38,"index":38}}, + "extra": { + "rawValue": "./module.json", + "raw": "\"./module.json\"" + }, + "value": "./module.json" + }, + "assertions": [ + { + "type": "ImportAttribute", + "start":48,"end":60,"loc":{"start":{"line":1,"column":48,"index":48},"end":{"line":1,"column":60,"index":60}}, + "key": { + "type": "Identifier", + "start":48,"end":52,"loc":{"start":{"line":1,"column":48,"index":48},"end":{"line":1,"column":52,"index":52},"identifierName":"type"}, + "name": "type" + }, + "value": { + "type": "StringLiteral", + "start":54,"end":60,"loc":{"start":{"line":1,"column":54,"index":54},"end":{"line":1,"column":60,"index":60}}, + "extra": { + "rawValue": "json", + "raw": "\"json\"" + }, + "value": "json" + } + } + ] + } + ], + "directives": [] + } +} diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-default-named-import/output.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-default-named-import/output.json index c1de98aac655..b3e3b377cc37 100644 --- a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-default-named-import/output.json +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-default-named-import/output.json @@ -2,7 +2,7 @@ "type": "File", "start":0,"end":46,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":46,"index":46}}, "errors": [ - "SyntaxError: Only `import module x from \"./module\"` is supported. (1:14)" + "SyntaxError: Only `import module x from \"./module\"` is valid. (1:14)" ], "program": { "type": "Program", diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-flow-type-import-2/output.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-flow-type-import-2/output.json index fad5497c2906..0c260f33343d 100644 --- a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-flow-type-import-2/output.json +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-flow-type-import-2/output.json @@ -2,7 +2,7 @@ "type": "File", "start":0,"end":44,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":44,"index":44}}, "errors": [ - "SyntaxError: Only `import module x from \"./module\"` is supported. (1:19)" + "SyntaxError: Only `import module x from \"./module\"` is valid. (1:19)" ], "program": { "type": "Program", diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-named-import/output.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-named-import/output.json index a73ab093b583..3bf434fb3470 100644 --- a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-named-import/output.json +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-named-import/output.json @@ -2,7 +2,7 @@ "type": "File", "start":0,"end":43,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":43,"index":43}}, "errors": [ - "SyntaxError: Only `import module x from \"./module\"` is supported. (1:16)" + "SyntaxError: Only `import module x from \"./module\"` is valid. (1:16)" ], "program": { "type": "Program", diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-namespace-import/output.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-namespace-import/output.json index 548eb43121bb..26852d193fea 100644 --- a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-namespace-import/output.json +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-namespace-import/output.json @@ -2,7 +2,7 @@ "type": "File", "start":0,"end":44,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":44,"index":44}}, "errors": [ - "SyntaxError: Only `import module x from \"./module\"` is supported. (1:14)" + "SyntaxError: Only `import module x from \"./module\"` is valid. (1:14)" ], "program": { "type": "Program", diff --git a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-ts-type-import-1/output.json b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-ts-type-import-1/output.json index 59a9ae7bdfb7..a20a970323e1 100644 --- a/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-ts-type-import-1/output.json +++ b/packages/babel-parser/test/fixtures/experimental/import-reflection/invalid-ts-type-import-1/output.json @@ -2,7 +2,7 @@ "type": "File", "start":0,"end":44,"loc":{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":44,"index":44}}, "errors": [ - "SyntaxError: Only `import module x from \"./module\"` is supported. (1:19)" + "SyntaxError: Only `import module x from \"./module\"` is valid. (1:19)" ], "program": { "type": "Program",