// @strict: true
// @declaration: true

// @filename: ast.ts
export enum SyntaxKind { Node0, Node1, Node2, Node3, Node4, Node5, Node6, Node7, Node8, Node9, Node10, Node11, Node12, Node13, Node14, Node15, Node16, Node17, Node18, Node19, Node20, Node21, Node22, Node23, Node24, Node25, Node26, Node27, Node28, Node29, Node30, Node31, Node32, Node33, Node34, Node35, Node36, Node37, Node38, Node39, Node40, Node41, Node42, Node43, Node44, Node45, Node46, Node47, Node48, Node49, Node50, Node51, Node52, Node53, Node54, Node55, Node56, Node57, Node58, Node59, Node60, Node61, Node62, Node63, Node64, Node65, Node66, Node67, Node68, Node69, Node70, Node71, Node72, Node73, Node74, Node75, Node76, Node77, Node78, Node79, Node80, Node81, Node82, Node83, Node84, Node85, Node86, Node87, Node88, Node89, Node90, Node91, Node92, Node93, Node94, Node95, Node96, Node97, Node98, Node99 }

export interface Node0 { kind: SyntaxKind.Node0; propNode0: number; }
export interface Node1 { kind: SyntaxKind.Node1; propNode1: number; }
export interface Node2 { kind: SyntaxKind.Node2; propNode2: number; }
export interface Node3 { kind: SyntaxKind.Node3; propNode3: number; }
export interface Node4 { kind: SyntaxKind.Node4; propNode4: number; }
export interface Node5 { kind: SyntaxKind.Node5; propNode5: number; }
export interface Node6 { kind: SyntaxKind.Node6; propNode6: number; }
export interface Node7 { kind: SyntaxKind.Node7; propNode7: number; }
export interface Node8 { kind: SyntaxKind.Node8; propNode8: number; }
export interface Node9 { kind: SyntaxKind.Node9; propNode9: number; }
export interface Node10 { kind: SyntaxKind.Node10; propNode10: number; }
export interface Node11 { kind: SyntaxKind.Node11; propNode11: number; }
export interface Node12 { kind: SyntaxKind.Node12; propNode12: number; }
export interface Node13 { kind: SyntaxKind.Node13; propNode13: number; }
export interface Node14 { kind: SyntaxKind.Node14; propNode14: number; }
export interface Node15 { kind: SyntaxKind.Node15; propNode15: number; }
export interface Node16 { kind: SyntaxKind.Node16; propNode16: number; }
export interface Node17 { kind: SyntaxKind.Node17; propNode17: number; }
export interface Node18 { kind: SyntaxKind.Node18; propNode18: number; }
export interface Node19 { kind: SyntaxKind.Node19; propNode19: number; }
export interface Node20 { kind: SyntaxKind.Node20; propNode20: number; }
export interface Node21 { kind: SyntaxKind.Node21; propNode21: number; }
export interface Node22 { kind: SyntaxKind.Node22; propNode22: number; }
export interface Node23 { kind: SyntaxKind.Node23; propNode23: number; }
export interface Node24 { kind: SyntaxKind.Node24; propNode24: number; }
export interface Node25 { kind: SyntaxKind.Node25; propNode25: number; }
export interface Node26 { kind: SyntaxKind.Node26; propNode26: number; }
export interface Node27 { kind: SyntaxKind.Node27; propNode27: number; }
export interface Node28 { kind: SyntaxKind.Node28; propNode28: number; }
export interface Node29 { kind: SyntaxKind.Node29; propNode29: number; }
export interface Node30 { kind: SyntaxKind.Node30; propNode30: number; }
export interface Node31 { kind: SyntaxKind.Node31; propNode31: number; }
export interface Node32 { kind: SyntaxKind.Node32; propNode32: number; }
export interface Node33 { kind: SyntaxKind.Node33; propNode33: number; }
export interface Node34 { kind: SyntaxKind.Node34; propNode34: number; }
export interface Node35 { kind: SyntaxKind.Node35; propNode35: number; }
export interface Node36 { kind: SyntaxKind.Node36; propNode36: number; }
export interface Node37 { kind: SyntaxKind.Node37; propNode37: number; }
export interface Node38 { kind: SyntaxKind.Node38; propNode38: number; }
export interface Node39 { kind: SyntaxKind.Node39; propNode39: number; }
export interface Node40 { kind: SyntaxKind.Node40; propNode40: number; }
export interface Node41 { kind: SyntaxKind.Node41; propNode41: number; }
export interface Node42 { kind: SyntaxKind.Node42; propNode42: number; }
export interface Node43 { kind: SyntaxKind.Node43; propNode43: number; }
export interface Node44 { kind: SyntaxKind.Node44; propNode44: number; }
export interface Node45 { kind: SyntaxKind.Node45; propNode45: number; }
export interface Node46 { kind: SyntaxKind.Node46; propNode46: number; }
export interface Node47 { kind: SyntaxKind.Node47; propNode47: number; }
export interface Node48 { kind: SyntaxKind.Node48; propNode48: number; }
export interface Node49 { kind: SyntaxKind.Node49; propNode49: number; }
export interface Node50 { kind: SyntaxKind.Node50; propNode50: number; }
export interface Node51 { kind: SyntaxKind.Node51; propNode51: number; }
export interface Node52 { kind: SyntaxKind.Node52; propNode52: number; }
export interface Node53 { kind: SyntaxKind.Node53; propNode53: number; }
export interface Node54 { kind: SyntaxKind.Node54; propNode54: number; }
export interface Node55 { kind: SyntaxKind.Node55; propNode55: number; }
export interface Node56 { kind: SyntaxKind.Node56; propNode56: number; }
export interface Node57 { kind: SyntaxKind.Node57; propNode57: number; }
export interface Node58 { kind: SyntaxKind.Node58; propNode58: number; }
export interface Node59 { kind: SyntaxKind.Node59; propNode59: number; }
export interface Node60 { kind: SyntaxKind.Node60; propNode60: number; }
export interface Node61 { kind: SyntaxKind.Node61; propNode61: number; }
export interface Node62 { kind: SyntaxKind.Node62; propNode62: number; }
export interface Node63 { kind: SyntaxKind.Node63; propNode63: number; }
export interface Node64 { kind: SyntaxKind.Node64; propNode64: number; }
export interface Node65 { kind: SyntaxKind.Node65; propNode65: number; }
export interface Node66 { kind: SyntaxKind.Node66; propNode66: number; }
export interface Node67 { kind: SyntaxKind.Node67; propNode67: number; }
export interface Node68 { kind: SyntaxKind.Node68; propNode68: number; }
export interface Node69 { kind: SyntaxKind.Node69; propNode69: number; }
export interface Node70 { kind: SyntaxKind.Node70; propNode70: number; }
export interface Node71 { kind: SyntaxKind.Node71; propNode71: number; }
export interface Node72 { kind: SyntaxKind.Node72; propNode72: number; }
export interface Node73 { kind: SyntaxKind.Node73; propNode73: number; }
export interface Node74 { kind: SyntaxKind.Node74; propNode74: number; }
export interface Node75 { kind: SyntaxKind.Node75; propNode75: number; }
export interface Node76 { kind: SyntaxKind.Node76; propNode76: number; }
export interface Node77 { kind: SyntaxKind.Node77; propNode77: number; }
export interface Node78 { kind: SyntaxKind.Node78; propNode78: number; }
export interface Node79 { kind: SyntaxKind.Node79; propNode79: number; }
export interface Node80 { kind: SyntaxKind.Node80; propNode80: number; }
export interface Node81 { kind: SyntaxKind.Node81; propNode81: number; }
export interface Node82 { kind: SyntaxKind.Node82; propNode82: number; }
export interface Node83 { kind: SyntaxKind.Node83; propNode83: number; }
export interface Node84 { kind: SyntaxKind.Node84; propNode84: number; }
export interface Node85 { kind: SyntaxKind.Node85; propNode85: number; }
export interface Node86 { kind: SyntaxKind.Node86; propNode86: number; }
export interface Node87 { kind: SyntaxKind.Node87; propNode87: number; }
export interface Node88 { kind: SyntaxKind.Node88; propNode88: number; }
export interface Node89 { kind: SyntaxKind.Node89; propNode89: number; }
export interface Node90 { kind: SyntaxKind.Node90; propNode90: number; }
export interface Node91 { kind: SyntaxKind.Node91; propNode91: number; }
export interface Node92 { kind: SyntaxKind.Node92; propNode92: number; }
export interface Node93 { kind: SyntaxKind.Node93; propNode93: number; }
export interface Node94 { kind: SyntaxKind.Node94; propNode94: number; }
export interface Node95 { kind: SyntaxKind.Node95; propNode95: number; }
export interface Node96 { kind: SyntaxKind.Node96; propNode96: number; }
export interface Node97 { kind: SyntaxKind.Node97; propNode97: number; }
export interface Node98 { kind: SyntaxKind.Node98; propNode98: number; }
export interface Node99 { kind: SyntaxKind.Node99; propNode99: number; }

export type Node = Node0 | Node1 | Node2 | Node3 | Node4 | Node5 | Node6 | Node7 | Node8 | Node9 | Node10 | Node11 | Node12 | Node13 | Node14 | Node15 | Node16 | Node17 | Node18 | Node19 | Node20 | Node21 | Node22 | Node23 | Node24 | Node25 | Node26 | Node27 | Node28 | Node29 | Node30 | Node31 | Node32 | Node33 | Node34 | Node35 | Node36 | Node37 | Node38 | Node39 | Node40 | Node41 | Node42 | Node43 | Node44 | Node45 | Node46 | Node47 | Node48 | Node49 | Node50 | Node51 | Node52 | Node53 | Node54 | Node55 | Node56 | Node57 | Node58 | Node59 | Node60 | Node61 | Node62 | Node63 | Node64 | Node65 | Node66 | Node67 | Node68 | Node69 | Node70 | Node71 | Node72 | Node73 | Node74 | Node75 | Node76 | Node77 | Node78 | Node79 | Node80 | Node81 | Node82 | Node83 | Node84 | Node85 | Node86 | Node87 | Node88 | Node89 | Node90 | Node91 | Node92 | Node93 | Node94 | Node95 | Node96 | Node97 | Node98 | Node99;

// @filename: index.ts
import * as ast from "./ast";

export const isNodeOfType =
  <NodeType extends ast.SyntaxKind>(nodeType: NodeType) =>
  (
    node: ast.Node | null | undefined,
  ): node is Extract<ast.Node, { kind: NodeType }> =>
    node?.kind === nodeType;

