...

Package d2ir

import "oss.terrastruct.com/d2/d2ir"
Overview
Index

Overview ▾

Package d2ir implements a tree data structure to keep track of the resolved value of D2 keys.

Index ▾

func BoardIDA(n Node) (ida []string)
func IDA(n Node) (ida []string)
func IsVar(n Node) bool
func OverlayEdge(be, oe *Edge)
func OverlayField(bf, of *Field)
func OverlayMap(base, overlay *Map)
func ParentShape(n Node) string
func RelIDA(p, n Node) (ida []string)
type Array
    func (a *Array) AST() d2ast.Node
    func (a *Array) Copy(newParent Node) Node
    func (a *Array) Equal(n2 Node) bool
    func (n *Array) LastPrimaryKey() *d2ast.Key
    func (n *Array) LastPrimaryRef() Reference
    func (n *Array) LastRef() Reference
    func (n *Array) Map() *Map
    func (n *Array) Parent() Node
    func (n *Array) Primary() *Scalar
    func (n *Array) String() string
type BoardKind
    func NodeBoardKind(n Node) BoardKind
type CompileOptions
type Composite
type Edge
    func ParentEdge(n Node) *Edge
    func (e *Edge) AST() d2ast.Node
    func (e *Edge) Copy(newParent Node) Node
    func (e *Edge) Equal(n2 Node) bool
    func (e *Edge) IDString() string
    func (e *Edge) LastPrimaryKey() *d2ast.Key
    func (e *Edge) LastPrimaryRef() Reference
    func (e *Edge) LastRef() Reference
    func (n *Edge) Map() *Map
    func (n *Edge) Parent() Node
    func (n *Edge) Primary() *Scalar
    func (n *Edge) String() string
type EdgeID
    func NewEdgeIDs(k *d2ast.Key) (eida []*EdgeID)
    func (eid *EdgeID) Copy() *EdgeID
    func (eid *EdgeID) Match(eid2 *EdgeID) bool
type EdgeReference
    func (er *EdgeReference) AST() d2ast.Node
    func (r *EdgeReference) Context() *RefContext
    func (r *EdgeReference) DueToGlob() bool
    func (r *EdgeReference) DueToLazyGlob() bool
    func (er *EdgeReference) Primary() bool
type Field
    func ParentField(n Node) *Field
    func (f *Field) AST() d2ast.Node
    func (f *Field) Copy(newParent Node) Node
    func (f *Field) Equal(n2 Node) bool
    func (f *Field) LastPrimaryKey() *d2ast.Key
    func (f *Field) LastPrimaryRef() Reference
    func (f *Field) LastRef() Reference
    func (n *Field) Map() *Map
    func (n *Field) Parent() Node
    func (n *Field) Primary() *Scalar
    func (f *Field) Root() bool
    func (n *Field) String() string
type FieldReference
    func (fr *FieldReference) AST() d2ast.Node
    func (r *FieldReference) Context() *RefContext
    func (r *FieldReference) DueToGlob() bool
    func (r *FieldReference) DueToLazyGlob() bool
    func (fr *FieldReference) EdgeDest() bool
    func (fr *FieldReference) InEdge() bool
    func (fr *FieldReference) KeyPathIndex() int
    func (fr *FieldReference) Primary() bool
type Map
    func Compile(ast *d2ast.Map, opts *CompileOptions) (*Map, error)
    func ParentMap(n Node) *Map
    func RootMap(m *Map) *Map
    func (m *Map) AST() d2ast.Node
    func (m *Map) Copy(newParent Node) Node
    func (m *Map) CopyBase(newParent Node) *Map
    func (m *Map) CreateEdge(eid *EdgeID, refctx *RefContext, c *compiler) ([]*Edge, error)
    func (m *Map) DeleteEdge(eid *EdgeID) *Edge
    func (m *Map) DeleteField(ida ...string) *Field
    func (m *Map) EdgeCountRecursive() int
    func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext, create bool, c *compiler) ([]*Field, error)
    func (m *Map) Equal(n2 Node) bool
    func (m *Map) FieldCountRecursive() int
    func (m *Map) GetClassMap(name string) *Map
    func (m *Map) GetEdges(eid *EdgeID, refctx *RefContext, c *compiler) []*Edge
    func (m *Map) GetField(ida ...string) *Field
    func (m *Map) InClass(key *d2ast.Key) bool
    func (m *Map) IsClass() bool
    func (m *Map) IsContainer() bool
    func (n *Map) LastPrimaryKey() *d2ast.Key
    func (n *Map) LastPrimaryRef() Reference
    func (n *Map) LastRef() Reference
    func (n *Map) Map() *Map
    func (n *Map) Parent() Node
    func (n *Map) Primary() *Scalar
    func (m *Map) Query(idStr string) (Node, error)
    func (m *Map) QueryAll(idStr string) (na []Node, _ error)
    func (m *Map) Root() bool
    func (n *Map) String() string
type Node
    func ParentBoard(n Node) Node
type RefContext
    func (rc *RefContext) Copy() *RefContext
    func (rc *RefContext) EdgeIndex() int
    func (rc *RefContext) Equal(rc2 *RefContext) bool
type Reference
type Scalar
    func (s *Scalar) AST() d2ast.Node
    func (s *Scalar) Copy(newParent Node) Node
    func (s *Scalar) Equal(n2 Node) bool
    func (n *Scalar) LastPrimaryKey() *d2ast.Key
    func (n *Scalar) LastPrimaryRef() Reference
    func (n *Scalar) LastRef() Reference
    func (n *Scalar) Map() *Map
    func (n *Scalar) Parent() Node
    func (n *Scalar) Primary() *Scalar
    func (n *Scalar) String() string
type Value

Package files

compile.go d2ir.go import.go merge.go pattern.go query.go

func BoardIDA

func BoardIDA(n Node) (ida []string)

BoardIDA returns the absolute path to n from the nearest board root.

func IDA

func IDA(n Node) (ida []string)

IDA returns the absolute path to n.

func IsVar

func IsVar(n Node) bool

func OverlayEdge

func OverlayEdge(be, oe *Edge)

func OverlayField

func OverlayField(bf, of *Field)

func OverlayMap

func OverlayMap(base, overlay *Map)

func ParentShape

func ParentShape(n Node) string

func RelIDA

func RelIDA(p, n Node) (ida []string)

RelIDA returns the path to n relative to p.

type Array

type Array struct {
    Values []Value `json:"values"`
    // contains filtered or unexported fields
}

func (*Array) AST

func (a *Array) AST() d2ast.Node

func (*Array) Copy

func (a *Array) Copy(newParent Node) Node

func (*Array) Equal

func (a *Array) Equal(n2 Node) bool

func (*Array) LastPrimaryKey

func (n *Array) LastPrimaryKey() *d2ast.Key

func (*Array) LastPrimaryRef

func (n *Array) LastPrimaryRef() Reference

func (*Array) LastRef

func (n *Array) LastRef() Reference

func (*Array) Map

func (n *Array) Map() *Map

func (*Array) Parent

func (n *Array) Parent() Node

func (*Array) Primary

func (n *Array) Primary() *Scalar

func (*Array) String

func (n *Array) String() string

type BoardKind

type BoardKind string
const (
    BoardLayer    BoardKind = "layer"
    BoardScenario BoardKind = "scenario"
    BoardStep     BoardKind = "step"
)

func NodeBoardKind

func NodeBoardKind(n Node) BoardKind

NodeBoardKind reports whether n represents the root of a board. n should be *Field or *Map

type CompileOptions

type CompileOptions struct {
    UTF16Pos bool
    // Pass nil to disable imports.
    FS fs.FS
}

type Composite

type Composite interface {
    Node
    Value
    // contains filtered or unexported methods
}

type Edge

type Edge struct {
    ID *EdgeID `json:"edge_id"`

    Primary_ *Scalar `json:"primary,omitempty"`
    Map_     *Map    `json:"map,omitempty"`

    References []*EdgeReference `json:"references,omitempty"`
    // contains filtered or unexported fields
}

func ParentEdge

func ParentEdge(n Node) *Edge

func (*Edge) AST

func (e *Edge) AST() d2ast.Node

func (*Edge) Copy

func (e *Edge) Copy(newParent Node) Node

func (*Edge) Equal

func (e *Edge) Equal(n2 Node) bool

func (*Edge) IDString

func (e *Edge) IDString() string

func (*Edge) LastPrimaryKey

func (e *Edge) LastPrimaryKey() *d2ast.Key

func (*Edge) LastPrimaryRef

func (e *Edge) LastPrimaryRef() Reference

func (*Edge) LastRef

func (e *Edge) LastRef() Reference

func (*Edge) Map

func (n *Edge) Map() *Map

func (*Edge) Parent

func (n *Edge) Parent() Node

func (*Edge) Primary

func (n *Edge) Primary() *Scalar

func (*Edge) String

func (n *Edge) String() string

type EdgeID

type EdgeID struct {
    SrcPath  []string `json:"src_path"`
    SrcArrow bool     `json:"src_arrow"`

    DstPath  []string `json:"dst_path"`
    DstArrow bool     `json:"dst_arrow"`

    // If nil, then any EdgeID with equal src/dst/arrows matches.
    Index *int `json:"index"`
    Glob  bool `json:"glob"`
}

func NewEdgeIDs

func NewEdgeIDs(k *d2ast.Key) (eida []*EdgeID)

func (*EdgeID) Copy

func (eid *EdgeID) Copy() *EdgeID

func (*EdgeID) Match

func (eid *EdgeID) Match(eid2 *EdgeID) bool

type EdgeReference

type EdgeReference struct {
    Context_       *RefContext `json:"context"`
    DueToGlob_     bool        `json:"due_to_glob"`
    DueToLazyGlob_ bool        `json:"due_to_lazy_glob"`
}

func (*EdgeReference) AST

func (er *EdgeReference) AST() d2ast.Node

func (*EdgeReference) Context

func (r *EdgeReference) Context() *RefContext

func (*EdgeReference) DueToGlob

func (r *EdgeReference) DueToGlob() bool

func (*EdgeReference) DueToLazyGlob

func (r *EdgeReference) DueToLazyGlob() bool

func (*EdgeReference) Primary

func (er *EdgeReference) Primary() bool

Primary returns true if the Value in Context.Key.Value corresponds to the *Edge represented by Context.Edge

type Field

type Field struct {
    Name string `json:"name"`

    // Primary_ to avoid clashing with Primary(). We need to keep it exported for
    // encoding/json to marshal it so cannot prefix _ instead.
    Primary_  *Scalar   `json:"primary,omitempty"`
    Composite Composite `json:"composite,omitempty"`

    References []*FieldReference `json:"references,omitempty"`
    // contains filtered or unexported fields
}

func ParentField

func ParentField(n Node) *Field

func (*Field) AST

func (f *Field) AST() d2ast.Node

func (*Field) Copy

func (f *Field) Copy(newParent Node) Node

func (*Field) Equal

func (f *Field) Equal(n2 Node) bool

func (*Field) LastPrimaryKey

func (f *Field) LastPrimaryKey() *d2ast.Key

func (*Field) LastPrimaryRef

func (f *Field) LastPrimaryRef() Reference

func (*Field) LastRef

func (f *Field) LastRef() Reference

func (*Field) Map

func (n *Field) Map() *Map

func (*Field) Parent

func (n *Field) Parent() Node

func (*Field) Primary

func (n *Field) Primary() *Scalar

func (*Field) Root

func (f *Field) Root() bool

func (*Field) String

func (n *Field) String() string

type FieldReference

type FieldReference struct {
    String  d2ast.String   `json:"string"`
    KeyPath *d2ast.KeyPath `json:"key_path"`

    Context_       *RefContext `json:"context"`
    DueToGlob_     bool        `json:"due_to_glob"`
    DueToLazyGlob_ bool        `json:"due_to_lazy_glob"`
}

func (*FieldReference) AST

func (fr *FieldReference) AST() d2ast.Node

func (*FieldReference) Context

func (r *FieldReference) Context() *RefContext

func (*FieldReference) DueToGlob

func (r *FieldReference) DueToGlob() bool

func (*FieldReference) DueToLazyGlob

func (r *FieldReference) DueToLazyGlob() bool

func (*FieldReference) EdgeDest

func (fr *FieldReference) EdgeDest() bool

func (*FieldReference) InEdge

func (fr *FieldReference) InEdge() bool

func (*FieldReference) KeyPathIndex

func (fr *FieldReference) KeyPathIndex() int

func (*FieldReference) Primary

func (fr *FieldReference) Primary() bool

Primary returns true if the Value in Context.Key.Value corresponds to the Field represented by String.

type Map

type Map struct {
    Fields []*Field `json:"fields"`
    Edges  []*Edge  `json:"edges"`
    // contains filtered or unexported fields
}

func Compile

func Compile(ast *d2ast.Map, opts *CompileOptions) (*Map, error)

func ParentMap

func ParentMap(n Node) *Map

func RootMap

func RootMap(m *Map) *Map

func (*Map) AST

func (m *Map) AST() d2ast.Node

func (*Map) Copy

func (m *Map) Copy(newParent Node) Node

func (*Map) CopyBase

func (m *Map) CopyBase(newParent Node) *Map

CopyBase copies the map m without layers/scenarios/steps.

func (*Map) CreateEdge

func (m *Map) CreateEdge(eid *EdgeID, refctx *RefContext, c *compiler) ([]*Edge, error)

func (*Map) DeleteEdge

func (m *Map) DeleteEdge(eid *EdgeID) *Edge

func (*Map) DeleteField

func (m *Map) DeleteField(ida ...string) *Field

func (*Map) EdgeCountRecursive

func (m *Map) EdgeCountRecursive() int

func (*Map) EnsureField

func (m *Map) EnsureField(kp *d2ast.KeyPath, refctx *RefContext, create bool, c *compiler) ([]*Field, error)

EnsureField is a bit of a misnomer. It's more of a Query/Ensure combination function at this point.

func (*Map) Equal

func (m *Map) Equal(n2 Node) bool

func (*Map) FieldCountRecursive

func (m *Map) FieldCountRecursive() int

func (*Map) GetClassMap

func (m *Map) GetClassMap(name string) *Map

func (*Map) GetEdges

func (m *Map) GetEdges(eid *EdgeID, refctx *RefContext, c *compiler) []*Edge

func (*Map) GetField

func (m *Map) GetField(ida ...string) *Field

func (*Map) InClass

func (m *Map) InClass(key *d2ast.Key) bool

func (*Map) IsClass

func (m *Map) IsClass() bool

func (*Map) IsContainer

func (m *Map) IsContainer() bool

func (*Map) LastPrimaryKey

func (n *Map) LastPrimaryKey() *d2ast.Key

func (*Map) LastPrimaryRef

func (n *Map) LastPrimaryRef() Reference

func (*Map) LastRef

func (n *Map) LastRef() Reference

func (*Map) Map

func (n *Map) Map() *Map

func (*Map) Parent

func (n *Map) Parent() Node

func (*Map) Primary

func (n *Map) Primary() *Scalar

func (*Map) Query

func (m *Map) Query(idStr string) (Node, error)

Query is only for tests and debugging.

func (*Map) QueryAll

func (m *Map) QueryAll(idStr string) (na []Node, _ error)

QueryAll is only for tests and debugging.

func (*Map) Root

func (m *Map) Root() bool

Root reports whether the Map is the root of the D2 tree.

func (*Map) String

func (n *Map) String() string

type Node

Most errors returned by a node should be created with d2parser.Errorf to indicate the offending AST node.

type Node interface {
    Copy(newParent Node) Node
    Parent() Node
    Primary() *Scalar
    Map() *Map
    Equal(n2 Node) bool

    AST() d2ast.Node
    fmt.Stringer

    LastRef() Reference
    LastPrimaryRef() Reference
    LastPrimaryKey() *d2ast.Key
    // contains filtered or unexported methods
}

func ParentBoard

func ParentBoard(n Node) Node

type RefContext

type RefContext struct {
    Edge     *d2ast.Edge `json:"edge"`
    Key      *d2ast.Key  `json:"key"`
    Scope    *d2ast.Map  `json:"-"`
    ScopeMap *Map        `json:"-"`
    ScopeAST *d2ast.Map  `json:"-"`
}

func (*RefContext) Copy

func (rc *RefContext) Copy() *RefContext

func (*RefContext) EdgeIndex

func (rc *RefContext) EdgeIndex() int

func (*RefContext) Equal

func (rc *RefContext) Equal(rc2 *RefContext) bool

type Reference

type Reference interface {

    // Most specific AST node for the reference.
    AST() d2ast.Node
    Primary() bool
    Context() *RefContext
    // Result of a glob in Context or from above.
    DueToGlob() bool
    DueToLazyGlob() bool
    // contains filtered or unexported methods
}

type Scalar

type Scalar struct {
    Value d2ast.Scalar `json:"value"`
    // contains filtered or unexported fields
}

func (*Scalar) AST

func (s *Scalar) AST() d2ast.Node

func (*Scalar) Copy

func (s *Scalar) Copy(newParent Node) Node

func (*Scalar) Equal

func (s *Scalar) Equal(n2 Node) bool

func (*Scalar) LastPrimaryKey

func (n *Scalar) LastPrimaryKey() *d2ast.Key

func (*Scalar) LastPrimaryRef

func (n *Scalar) LastPrimaryRef() Reference

func (*Scalar) LastRef

func (n *Scalar) LastRef() Reference

func (*Scalar) Map

func (n *Scalar) Map() *Map

func (*Scalar) Parent

func (n *Scalar) Parent() Node

func (*Scalar) Primary

func (n *Scalar) Primary() *Scalar

func (*Scalar) String

func (n *Scalar) String() string

type Value

type Value interface {
    Node
    // contains filtered or unexported methods
}