Skip to content

⬅️ Back to Table of Contents

πŸ“„ ast-utils/helpers

πŸ“Š Analysis Summary

Metric Count
πŸ”§ Functions 5
πŸ“¦ Imports 3
πŸ“‘ Type Aliases 2

πŸ“š Table of Contents

πŸ› οΈ File Location:

πŸ“‚ packages/utils/src/ast-utils/helpers.ts

πŸ“¦ Imports

Name Source
AST_NODE_TYPES ../ts-estree
AST_TOKEN_TYPES ../ts-estree
TSESTree ../ts-estree

Functions

isNodeOfType(nodeType: NodeType): (node: TSESTree.Node | null | undefined) => node is Extract…

Parameters:

  • nodeType NodeType

Returns: (node: TSESTree.Node | null | undefined) => node is Extract<TSESTree.Node, { type: NodeType; }>

Code
<NodeType extends AST_NODE_TYPES>(nodeType: NodeType) =>
  (
    node: TSESTree.Node | null | undefined,
  ): node is Extract<TSESTree.Node, { type: NodeType }> =>
    node?.type === nodeType

isNodeOfTypes(nodeTypes: NodeTypes): (node: TSESTree.Node | null | undefined) => node is Extract…

Parameters:

  • nodeTypes NodeTypes

Returns: (node: TSESTree.Node | null | undefined) => node is Extract<TSESTree.Node, { type: NodeTypes[number]; }>

Code
<NodeTypes extends readonly AST_NODE_TYPES[]>(nodeTypes: NodeTypes) =>
  (
    node: TSESTree.Node | null | undefined,
  ): node is Extract<TSESTree.Node, { type: NodeTypes[number] }> =>
    !!node && nodeTypes.includes(node.type)

isNodeOfTypeWithConditions(nodeType: NodeType, conditions: Conditions): (( node: TSESTree.Node | null | undefined, ) => node is Con…

Parameters:

  • nodeType NodeType
  • conditions Conditions

Returns: (( node: TSESTree.Node | null | undefined, ) => node is Conditions & ExtractedNode)

Calls:

  • Object.entries
  • entries.every
Code
<
  NodeType extends AST_NODE_TYPES,
  ExtractedNode extends Extract<TSESTree.Node, { type: NodeType }>,
  Conditions extends Partial<ExtractedNode>,
>(
  nodeType: NodeType,
  conditions: Conditions,
): ((
  node: TSESTree.Node | null | undefined,
) => node is Conditions & ExtractedNode) => {
  const entries = Object.entries(conditions) as ObjectEntries<TSESTree.Node>;

  return (
    node: TSESTree.Node | null | undefined,
  ): node is Conditions & ExtractedNode =>
    node?.type === nodeType &&
    entries.every(([key, value]) => node[key as keyof TSESTree.Node] === value);
}

isTokenOfTypeWithConditions(tokenType: TokenType, conditions: Conditions): (( token: TSESTree.Token | null | undefined, ) => token is …

Parameters:

  • tokenType TokenType
  • conditions Conditions

Returns: (( token: TSESTree.Token | null | undefined, ) => token is Conditions & ExtractedToken)

Calls:

  • Object.entries
  • entries.every
Code
<
  TokenType extends AST_TOKEN_TYPES,
  // This is technically unsafe, but we find it useful to extract out the type
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
  ExtractedToken extends Extract<TSESTree.Token, { type: TokenType }>,
  Conditions extends Partial<{ type: TokenType } & TSESTree.Token>,
>(
  tokenType: TokenType,
  conditions: Conditions,
): ((
  token: TSESTree.Token | null | undefined,
) => token is Conditions & ExtractedToken) => {
  const entries = Object.entries(conditions) as ObjectEntries<TSESTree.Token>;

  return (
    token: TSESTree.Token | null | undefined,
  ): token is Conditions & ExtractedToken =>
    token?.type === tokenType &&
    entries.every(
      ([key, value]) => token[key as keyof TSESTree.Token] === value,
    );
}

isNotTokenOfTypeWithConditions(tokenType: TokenType, conditions: Conditions): (( token: TSESTree.Token | null | undefined, ) => token is …

Parameters:

  • tokenType TokenType
  • conditions Conditions

Returns: (( token: TSESTree.Token | null | undefined, ) => token is Exclude<TSESTree.Token, Conditions & ExtractedToken>)

Code
<
    TokenType extends AST_TOKEN_TYPES,
    ExtractedToken extends Extract<TSESTree.Token, { type: TokenType }>,
    Conditions extends Partial<ExtractedToken>,
  >(
    tokenType: TokenType,
    conditions: Conditions,
  ): ((
    token: TSESTree.Token | null | undefined,
  ) => token is Exclude<TSESTree.Token, Conditions & ExtractedToken>) =>
  (token): token is Exclude<TSESTree.Token, Conditions & ExtractedToken> =>
    !isTokenOfTypeWithConditions(tokenType, conditions)(token)

Type Aliases

ObjectEntry<BaseType>

type ObjectEntry<BaseType> = BaseType extends unknown
  ? [keyof BaseType, BaseType[keyof BaseType]]
  : never;

ObjectEntries<BaseType>

type ObjectEntries<BaseType> = ObjectEntry<BaseType>[];

Generated by Syntax Scribe