From a2e6d8e96807b15908ef3640239b5421457807f7 Mon Sep 17 00:00:00 2001 From: Armano Date: Sat, 19 Jan 2019 13:48:05 -0800 Subject: [PATCH] Disallow usage of invalid keyword after export abstract statement in Typescript (#9336) --- packages/babel-parser/src/plugins/typescript.js | 7 ++++++- .../interface/export-abstract-interface/input.js | 3 +++ .../interface/export-abstract-interface/options.json | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/input.js create mode 100644 packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/options.json diff --git a/packages/babel-parser/src/plugins/typescript.js b/packages/babel-parser/src/plugins/typescript.js index c73bc6fe9d..2bc033aa58 100644 --- a/packages/babel-parser/src/plugins/typescript.js +++ b/packages/babel-parser/src/plugins/typescript.js @@ -1270,7 +1270,12 @@ export default (superClass: Class): Class => if (this.tsCheckLineTerminatorAndMatch(tt._class, next)) { const cls: N.ClassDeclaration = node; cls.abstract = true; - if (next) this.next(); + if (next) { + this.next(); + if (!this.match(tt._class)) { + this.unexpected(null, tt._class); + } + } return this.parseClass( cls, /* isStatement */ true, diff --git a/packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/input.js b/packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/input.js new file mode 100644 index 0000000000..0649b6e082 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/input.js @@ -0,0 +1,3 @@ +export abstract interface I { + +} diff --git a/packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/options.json b/packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/options.json new file mode 100644 index 0000000000..e94c315097 --- /dev/null +++ b/packages/babel-parser/test/fixtures/typescript/interface/export-abstract-interface/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Unexpected token, expected \"class\" (1:16)" +}