diff --git a/types/babel__traverse/babel__traverse-tests.ts b/types/babel__traverse/babel__traverse-tests.ts index e1f7258417b045..4e4ee1e477c6f3 100644 --- a/types/babel__traverse/babel__traverse-tests.ts +++ b/types/babel__traverse/babel__traverse-tests.ts @@ -359,3 +359,11 @@ const path: NodePath = ne if (path.isExportNamedDeclaration()) { path.type; // $ExpectType "ExportNamedDeclaration" } + +const nullPath: NodePath = new NodePath(null as any, {} as any); + +nullPath.type; // $ExpectType "Identifier" | undefined + +if (nullPath.hasNode()) { + nullPath.type; // $ExpectType "Identifier" +} diff --git a/types/babel__traverse/index.d.ts b/types/babel__traverse/index.d.ts index edead3f20e146f..128910e9605010 100644 --- a/types/babel__traverse/index.d.ts +++ b/types/babel__traverse/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for @babel/traverse 7.14 +// Type definitions for @babel/traverse 7.17 // Project: https://github.com/babel/babel/tree/main/packages/babel-traverse, https://babeljs.io // Definitions by: Troy Gerwien // Marvin Hagemeister @@ -140,7 +140,12 @@ export class Scope { crawl(): void; - push(opts: { id: t.LVal; init?: t.Expression | undefined; unique?: boolean | undefined; kind?: 'var' | 'let' | 'const' | undefined }): void; + push(opts: { + id: t.LVal; + init?: t.Expression | undefined; + unique?: boolean | undefined; + kind?: 'var' | 'let' | 'const' | undefined; + }): void; getProgramParent(): Scope; @@ -194,13 +199,11 @@ export class Binding { constantViolations: NodePath[]; } -export type Visitor = VisitNodeObject & - { - [Type in Node['type']]?: VisitNode>; - } & - { - [K in keyof t.Aliases]?: VisitNode; - }; +export type Visitor = VisitNodeObject & { + [Type in Node['type']]?: VisitNode>; +} & { + [K in keyof t.Aliases]?: VisitNode; +}; export type VisitNode = VisitNodeFunction | VisitNodeObject; @@ -254,6 +257,8 @@ export class NodePath { getData(key: string, def?: any): any; + hasNode(): this is NodePath>; + buildCodeFrameError(msg: string, Error?: new (msg: string) => TError): TError; traverse(visitor: Visitor, state: T): void; diff --git a/types/babel__traverse/ts4.1/babel__traverse-tests.ts b/types/babel__traverse/ts4.1/babel__traverse-tests.ts index dfa3bd20a82251..a9863caad2f6dd 100644 --- a/types/babel__traverse/ts4.1/babel__traverse-tests.ts +++ b/types/babel__traverse/ts4.1/babel__traverse-tests.ts @@ -349,3 +349,14 @@ const visitorWithInvalidDenylist: Visitor = { // $ExpectError denylist: ['SomeRandomType'], }; + +const nullPath: NodePath = new NodePath( + null as any, + {} as any, +); + +nullPath.type; // $ExpectType "Identifier" | undefined + +if (nullPath.hasNode()) { + nullPath.type; // $ExpectType "Identifier" +} diff --git a/types/babel__traverse/ts4.1/index.d.ts b/types/babel__traverse/ts4.1/index.d.ts index d26481deb19567..c7973c5b01bcd7 100644 --- a/types/babel__traverse/ts4.1/index.d.ts +++ b/types/babel__traverse/ts4.1/index.d.ts @@ -182,13 +182,11 @@ export class Binding { constantViolations: NodePath[]; } -export type Visitor = VisitNodeObject & - { - [Type in Node['type']]?: VisitNode>; - } & - { - [K in keyof t.Aliases]?: VisitNode; - }; +export type Visitor = VisitNodeObject & { + [Type in Node['type']]?: VisitNode>; +} & { + [K in keyof t.Aliases]?: VisitNode; +}; export type VisitNode = VisitNodeFunction | VisitNodeObject; @@ -242,6 +240,8 @@ export class NodePath { getData(key: string, def?: any): any; + hasNode(): this is NodePath>; + buildCodeFrameError(msg: string, Error?: new (msg: string) => TError): TError; traverse(visitor: Visitor, state: T): void;