d2ir

package
v0.0.0-...-f8d3efd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 20, 2025 License: MPL-2.0 Imports: 18 Imported by: 0

Documentation

Overview

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

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BoardIDA

func BoardIDA(n Node) (ida []d2ast.String)

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

func ExpandSubstitution

func ExpandSubstitution(m, resolved *Map, placeholder *Field)

func IDA

func IDA(n Node) (ida []d2ast.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 []d2ast.String)

RelIDA returns the path to n relative to p.

Types

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() d2ast.String

func (*Edge) ImportAST

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

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) SetImportAST

func (e *Edge) SetImportAST(node d2ast.Node)

func (*Edge) String

func (n *Edge) String() string

type EdgeID

type EdgeID struct {
	SrcPath  []d2ast.String `json:"src_path"`
	SrcArrow bool           `json:"src_arrow"`

	DstPath  []d2ast.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 d2ast.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) ImportAST

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

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) SetImportAST

func (f *Field) SetImportAST(node d2ast.Node)

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 Importable

type Importable interface {
	ImportAST() d2ast.Node
	SetImportAST(d2ast.Node)
}

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, []string, 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) FindBoardRoot

func (m *Map) FindBoardRoot(path []string) *Map

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 ...d2ast.String) *Field

func (*Map) ImportAST

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

func (*Map) InClass

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

func (*Map) IsClass

func (m *Map) IsClass() 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) SetImportAST

func (m *Map) SetImportAST(node d2ast.Node)

func (*Map) String

func (n *Map) String() string

type 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
}

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

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
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL