From 4373398627c8dffec8ad16a6244bbca37b9bd87c Mon Sep 17 00:00:00 2001 From: Michael Bashurov Date: Sat, 27 Feb 2021 11:24:56 +0200 Subject: [PATCH 1/2] Allow nullish extends in interfaceish Otherwise code such as ```ts t.interfaceDeclaration( t.identifier('id'), undefined, undefined, t.objectTypeAnnotation([]) ) ``` Will fail when priting with ` TypeError: unknown: Cannot read property 'length' of null` Despite nullish values being allowed in `t.interfaceDeclaration` definitions --- packages/babel-generator/src/generators/flow.ts | 2 +- packages/babel-generator/test/index.js | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/babel-generator/src/generators/flow.ts b/packages/babel-generator/src/generators/flow.ts index c59b2518389f..9bb094698a0a 100644 --- a/packages/babel-generator/src/generators/flow.ts +++ b/packages/babel-generator/src/generators/flow.ts @@ -360,7 +360,7 @@ export function _interfaceish( ) { this.print(node.id, node); this.print(node.typeParameters, node); - if (node.extends.length) { + if (node.extends && node.extends.length) { this.space(); this.word("extends"); this.space(); diff --git a/packages/babel-generator/test/index.js b/packages/babel-generator/test/index.js index 0993e5c352b8..7dcf37f6112f 100644 --- a/packages/babel-generator/test/index.js +++ b/packages/babel-generator/test/index.js @@ -462,6 +462,17 @@ describe("programmatic generation", function () { }`); }); + it("flow interface with nullish extends", () => { + const interfaceDeclaration = t.interfaceDeclaration( + t.identifier("A"), + undefined, + undefined, + t.objectTypeAnnotation([]), + ); + const output = generate(interfaceDeclaration).code; + expect(output).toBe("interface A {}"); + }); + describe("directives", function () { it("preserves escapes", function () { const directive = t.directive( From 2676750ed8e54d8a1779c7dc972b37901c34ba7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20=E3=82=B5=E3=82=A4=E3=83=88=E3=83=BC=20=E4=B8=AD?= =?UTF-8?q?=E6=9D=91=20Bashurov?= Date: Sat, 27 Feb 2021 12:05:40 +0200 Subject: [PATCH 2/2] Update packages/babel-generator/src/generators/flow.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolò Ribaudo --- packages/babel-generator/src/generators/flow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-generator/src/generators/flow.ts b/packages/babel-generator/src/generators/flow.ts index 9bb094698a0a..133fec107f37 100644 --- a/packages/babel-generator/src/generators/flow.ts +++ b/packages/babel-generator/src/generators/flow.ts @@ -360,7 +360,7 @@ export function _interfaceish( ) { this.print(node.id, node); this.print(node.typeParameters, node); - if (node.extends && node.extends.length) { + if (node.extends?.length) { this.space(); this.word("extends"); this.space();