ts-graphviz
    Preparing search index...

    Module @ts-graphviz/ast - v3.0.5Beta

    Main CodeQL License: MIT All Contributors

    OpenSSF Best Practices OpenSSF Scorecard Tidelift

    npm version node version deno version npm

    @ts-graphviz/ast

    This package contains the module for processing the DOT language at the Abstract Syntax Tree (AST) level for the ts-graphviz library.

    🔗

    GitHub npm Reference Ask DeepWiki

    Sponsor OpenCollective

    format: Biome test: Vitest build: Vite


    It is part of the ts-graphviz library, which is split into modular packages to improve maintainability, flexibility, and ease of use.

    This package is a foundational component of the ts-graphviz library that enables low-level manipulation of DOT language structures. It provides a parser that converts DOT language strings into AST nodes and a stringifier that converts AST nodes back to DOT language.

    The AST package provides several key functions:

    • parse(input: string, options?): Parses a DOT language string into an AST structure
    • stringify(ast: ASTNode): Converts an AST structure to a DOT language string
    • fromModel(model): Converts a Graph Model to an AST structure
    • toModel(ast): Converts an AST structure to a Graph Model
    import { parse } from "@ts-graphviz/ast";

    const dotString = "digraph G { A -> B; }";
    const ast = parse(dotString);
    console.log(ast);
    // Output: A DotASTNode representing the DOT structure

    The parse function accepts an optional second argument for configuration:

    import { parse } from "@ts-graphviz/ast";

    // Parse with custom security limits
    const ast = parse(dotString, {
    startRule: 'Dot', // Specify the starting rule (default: 'Dot')
    maxHtmlNestingDepth: 200, // Maximum HTML nesting depth (default: 100)
    maxEdgeChainDepth: 2000, // Maximum edge chain depth (default: 1000)
    maxInputSize: 20971520, // Maximum input size in bytes (default: 10MB)
    maxASTNodes: 200000 // Maximum AST nodes (default: 100,000)
    });

    Available Options:

    Option Default Description
    startRule 'Dot' Starting grammar rule for parsing
    maxHtmlNestingDepth 100 Maximum depth of nested HTML-like structures
    maxEdgeChainDepth 1000 Maximum depth of chained edges (e.g., a -> b -> c -> ...)
    maxInputSize 10485760 (10MB) Maximum input size in bytes
    maxASTNodes 100000 Maximum number of AST nodes to create

    Security Note:

    These limits protect against denial-of-service attacks:

    • maxHtmlNestingDepth: Prevents stack overflow from deeply nested HTML-like structures

      • Normal use cases: typically <10 levels
      • HTML-like labels are GraphViz DOT syntax, not browser HTML
    • maxEdgeChainDepth: Prevents stack overflow from deeply chained edges

      • Example dangerous input: a -> b -> c -> ... -> z (1000+ nodes)
    • maxInputSize: Prevents memory exhaustion from extremely large files

      • Default 10MB is sufficient for most legitimate graphs
      • Can be increased for known large graphs or disabled with 0 (not recommended for untrusted input)
    • maxASTNodes: Prevents memory exhaustion from inputs with excessive elements

      • Each DOT element creates multiple AST nodes
      • Example: A single node statement (node1;) creates ~2-3 AST nodes
      • Can be disabled with 0 (not recommended for untrusted input)

    Important: When processing untrusted DOT files (e.g., user uploads), keep these limits enabled with conservative values appropriate for your environment. For additional validation of untrusted content, see the validation guide in @ts-graphviz/adapter documentation.

    import { parse, stringify } from "@ts-graphviz/ast";

    const dotString = "digraph G { A -> B; }";
    const ast = parse(dotString);
    // Modify the AST if needed
    const outputDotString = stringify(ast);
    console.log(outputDotString);
    // Output: "digraph G { A -> B; }"

    The package provides a specialized error class for handling syntax errors during parsing.

    When a parsing error occurs, the parser throws a DotSyntaxError with detailed information about the issue, which helps in debugging DOT language syntax problems.

    Thanks goes to these wonderful people (emoji key):

    Yuki Yamazaki
    Yuki Yamazaki

    💻 ⚠️ 📖 🤔
    LaySent
    LaySent

    🐛 ⚠️
    elasticdotventures
    elasticdotventures

    📖
    Christian Murphy
    Christian Murphy

    💻 🤔 📖
    Artem
    Artem

    🐛
    fredericohpandolfo
    fredericohpandolfo

    🐛
    diegoquinteiro
    diegoquinteiro

    🐛
    robross0606
    robross0606

    🤔
    Blake Regalia
    Blake Regalia

    🐛
    bigbug
    bigbug

    💬
    mrwk
    mrwk

    💬
    svdvonde
    svdvonde

    💬
    Adam
    Adam

    💬
    Trevor Scheer
    Trevor Scheer

    ️️️️♿️
    Prem Pillai
    Prem Pillai

    🐛
    nagasawaryoya
    nagasawaryoya

    💻 ⚠️
    YukiSasaki
    YukiSasaki

    💻 ⚠️
    Madd0g
    Madd0g

    🐛
    j4k0xb
    j4k0xb

    🐛
    HKrogstie
    HKrogstie

    🐛
    Nils K
    Nils K

    🐛
    hao2013
    hao2013

    🚧 👀
    Walter Rafelsberger
    Walter Rafelsberger

    💬
    grsjst
    grsjst

    🐛
    Steve
    Steve

    🐛

    This project follows the all-contributors specification. Contributions of any kind welcome!

    See CHANGELOG.md for more details.

    This software is released under the MIT License, see LICENSE.

    AST

    ASTBaseNode
    ASTBaseParentNode
    ASTCommonPropaties
    AttributeASTNode
    AttributeASTPropaties
    AttributeListASTNode
    AttributeListASTPropaties
    CommentASTNode
    CommentASTPropaties
    DotASTNode
    DotASTPropaties
    EdgeASTNode
    EdgeASTPropaties
    FilePosition
    FileRange
    GraphASTNode
    GraphASTPropaties
    LiteralASTNode
    LiteralASTPropaties
    NodeASTNode
    NodeASTPropaties
    NodeRefASTNode
    NodeRefASTPropaties
    NodeRefGroupASTNode
    NodeRefGroupASTPropaties
    SubgraphASTNode
    SubgraphASTPropaties
    ASTChildNode
    ASTNode
    ASTToModel
    ClusterStatementASTNode
    CommentKind
    EdgeTargetASTNode
    ModelOf
    ModelToAST
    StatementASTNode

    Convert AST to DOT

    Printer
    PrintContext
    PrintOptions
    PrintPlugin
    EndOfLine
    IndentStyle
    stringify

    Convert AST to Model

    ToModelConverter
    ConvertToModelContext
    ConvertToModelOptions
    ConvertToModelPlugin
    ToModelConvertableASTNode
    toModel

    Convert DOT to AST

    DotSyntaxError
    CommonParseOptions
    ParseOptions
    Rule
    parse

    Convert Model to AST

    FromModelConverter
    ConvertFromModelContext
    ConvertFromModelOptions
    ConvertFromModelPlugin
    fromModel

    Create AST

    ASTNodeCountExceededError
    Builder
    ASTBuilder
    BuilderOptions
    CreateElement
    createElement