Documentation ¶
Index ¶
- Variables
- func AddReferences(resource modconfig.HclResource, block *hcl.Block, runCtx *RunContext) hcl.Diagnostics
- func ContextFunctions(workspaceDir string) map[string]function.Function
- func DecodeConnection(block *hcl.Block) (*modconfig.Connection, hcl.Diagnostics)
- func DecodeOptions(block *hcl.Block) (options.Options, hcl.Diagnostics)
- func DecodeWorkspaceProfile(block *hcl.Block, parseContext ParseContext) (*modconfig.WorkspaceProfile, *decodeResult)
- func GetMetadataForParsedResource(resourceName string, srcRange hcl.Range, fileData map[string][]byte, ...) (*modconfig.ResourceMetadata, error)
- func LoadFileData(paths ...string) (map[string][]byte, hcl.Diagnostics)
- func ModfileExists(modPath string) bool
- func ParseHclFiles(fileData map[string][]byte) (hcl.Body, hcl.Diagnostics)
- func ParseMod(modPath string, fileData map[string][]byte, ...) (*modconfig.Mod, error)
- func ParseModDefinition(modPath string) (*modconfig.Mod, error)
- func ParseModResourceNames(fileData map[string][]byte) (*modconfig.WorkspaceResources, error)
- func ParsePreparedStatementInvocation(arg string) (string, *modconfig.QueryArgs, error)
- func VariableValueMap(variables map[string]*modconfig.Variable) map[string]cty.Value
- type InstalledMod
- type ParseContext
- func (r *ParseContext) AddDependencies(block *hcl.Block, name string, ...) hcl.Diagnostics
- func (r *ParseContext) BlocksToDecode() (hcl.Blocks, error)
- func (r *ParseContext) ClearDependencies()
- func (r *ParseContext) EvalComplete() bool
- func (r *ParseContext) FormatDependencies() string
- func (r *ParseContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
- func (r *ParseContext) ShouldIncludeBlock(block *hcl.Block) bool
- type ParseModFlag
- type ReferenceTypeValueMap
- type RunContext
- func (r *RunContext) AddDependencies(block *hcl.Block, name string, ...) hcl.Diagnostics
- func (r *RunContext) AddInputVariables(inputVariables *modconfig.ModVariableMap)
- func (r *RunContext) AddLoadedDependentMods(mods modconfig.ModMap)
- func (r *RunContext) AddMod(mod *modconfig.Mod) hcl.Diagnostics
- func (r *RunContext) AddResource(resource modconfig.HclResource) hcl.Diagnostics
- func (r *RunContext) CreatePseudoResources() bool
- func (r *RunContext) DetermineBlockName(block *hcl.Block) string
- func (r *RunContext) EnsureWorkspaceLock(mod *modconfig.Mod) error
- func (r *RunContext) GetCachedBlockName(block *hcl.Block) (string, bool)
- func (r *RunContext) GetCachedBlockShortName(block *hcl.Block) (string, bool)
- func (r *RunContext) GetDecodedResourceForBlock(block *hcl.Block) (modconfig.HclResource, bool)
- func (r *RunContext) GetMod(modShortName string) *modconfig.Mod
- func (r *RunContext) GetResourceMaps() *modconfig.ResourceMaps
- func (r *RunContext) IsTopLevelBlock(block *hcl.Block) bool
- func (r *RunContext) PeekParent() string
- func (r *RunContext) PopParent() string
- func (r *RunContext) PushParent(parent modconfig.ModTreeItem)
- func (r *RunContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
- func (r *RunContext) SetVariablesForDependencyMod(mod *modconfig.Mod, ...)
- func (r *RunContext) ShouldCreateDefaultMod() bool
Constants ¶
This section is empty.
Variables ¶
var BenchmarkBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{Name: "children"},
{Name: "description"},
{Name: "documentation"},
{Name: "tags"},
{Name: "title"},
{Name: "width"},
{Name: "base"},
{Name: "type"},
{Name: "display"},
},
}
var ConfigBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{}, Blocks: []hcl.BlockHeaderSchema{ { Type: "connection", LabelNames: []string{"name"}, }, { Type: "options", LabelNames: []string{"type"}, }, }, }
var ConnectionBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ { Name: "plugin", Required: true, }, { Name: "type", }, { Name: "connections", }, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "options", LabelNames: []string{"type"}, }, }, }
var DashboardBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeInput, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeParam, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeContainer, }, { Type: modconfig.BlockTypeCard, }, { Type: modconfig.BlockTypeChart, }, { Type: modconfig.BlockTypeBenchmark, }, { Type: modconfig.BlockTypeControl, }, { Type: modconfig.BlockTypeFlow, }, { Type: modconfig.BlockTypeGraph, }, { Type: modconfig.BlockTypeHierarchy, }, { Type: modconfig.BlockTypeImage, }, { Type: modconfig.BlockTypeTable, }, { Type: modconfig.BlockTypeText, }, }, }
DashboardBlockSchema is used purely to validate dashboard child blocks
var DashboardContainerBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeInput, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeParam, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeContainer, }, { Type: modconfig.BlockTypeCard, }, { Type: modconfig.BlockTypeChart, }, { Type: modconfig.BlockTypeBenchmark, }, { Type: modconfig.BlockTypeControl, }, { Type: modconfig.BlockTypeFlow, }, { Type: modconfig.BlockTypeGraph, }, { Type: modconfig.BlockTypeHierarchy, }, { Type: modconfig.BlockTypeImage, }, { Type: modconfig.BlockTypeTable, }, { Type: modconfig.BlockTypeText, }, }, }
DashboardContainerBlockSchema contains the DashboardContainer attributes which cannot be automatically decoded
var EdgeAndNodeProviderBlockSchema = &hcl.BodySchema{
Blocks: []hcl.BlockHeaderSchema{
{
Type: "param",
},
{
Type: "category",
},
},
}
EdgeAndNodeProviderBlockSchema is used to validate child blocks
var EdgeAndNodeProviderSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "param", LabelNames: []string{"name"}, }, { Type: "category", LabelNames: []string{"name"}, }, }, }
EdgeAndNodeProviderSchema is used to decode graph/hierarchy/flow (EXCEPT categories)
var ModBlockSchema = &hcl.BodySchema{ Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeRequire, }, }, }
ModBlockSchema contains schema for the mod blocks which must be manually decoded
var ParamDefBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{Name: "description"},
{Name: "default"},
},
}
var QueryProviderBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ {Name: "args"}, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "param", LabelNames: []string{"name"}, }, }, }
QueryProviderBlockSchema schema for all blocks satisfying QueryProvider interface
var RequireBlockSchema = &hcl.BodySchema{ Blocks: []hcl.BlockHeaderSchema{ { Type: modconfig.BlockTypeMod, LabelNames: []string{"name"}, }, }, }
var RequireModBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{Name: "args"},
},
}
var VariableBlockSchema = &hcl.BodySchema{
Attributes: []hcl.AttributeSchema{
{
Name: "description",
},
{
Name: "default",
},
{
Name: "type",
},
{
Name: "sensitive",
},
},
Blocks: []hcl.BlockHeaderSchema{
{
Type: "validation",
},
},
}
var WorkspaceBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{}, Blocks: []hcl.BlockHeaderSchema{ { Type: string(modconfig.BlockTypeMod), LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeVariable, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeQuery, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeControl, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeBenchmark, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeDashboard, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeCard, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeChart, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeFlow, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeGraph, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeHierarchy, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeImage, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeInput, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeTable, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeText, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeNode, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeEdge, LabelNames: []string{"name"}, }, { Type: modconfig.BlockTypeLocals, }, { Type: modconfig.BlockTypeCategory, LabelNames: []string{"name"}, }, }, }
WorkspaceBlockSchema is the top level schema for all workspace resources
var WorkspaceProfileBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{ { Name: "base", }, }, Blocks: []hcl.BlockHeaderSchema{ { Type: "options", LabelNames: []string{"type"}, }, }, }
var WorkspaceProfileListBlockSchema = &hcl.BodySchema{ Attributes: []hcl.AttributeSchema{}, Blocks: []hcl.BlockHeaderSchema{ { Type: "workspace", LabelNames: []string{"name"}, }, }, }
Functions ¶
func AddReferences ¶
func AddReferences(resource modconfig.HclResource, block *hcl.Block, runCtx *RunContext) hcl.Diagnostics
AddReferences populates the 'References' resource field, used for the introspection tables
func ContextFunctions ¶
ContextFunctions returns the set of functions that should be used to when evaluating expressions
func DecodeConnection ¶
func DecodeConnection(block *hcl.Block) (*modconfig.Connection, hcl.Diagnostics)
func DecodeOptions ¶
DecodeOptions decodes an options block
func DecodeWorkspaceProfile ¶
func DecodeWorkspaceProfile(block *hcl.Block, parseContext ParseContext) (*modconfig.WorkspaceProfile, *decodeResult)
func LoadFileData ¶
LoadFileData builds a map of filepath to file data
func ModfileExists ¶
ModfileExists returns whether a mod file exists at the specified path
func ParseHclFiles ¶
ParseHclFiles parses hcl file data and returns the hcl body object
func ParseMod ¶
func ParseMod(modPath string, fileData map[string][]byte, pseudoResources []modconfig.MappableResource, runCtx *RunContext) (*modconfig.Mod, error)
ParseMod parses all source hcl files for the mod path and associated resources, and returns the mod object NOTE: the mod definition has already been parsed (or a default created) and is in opts.RunCtx.RootMod
func ParseModDefinition ¶
ParseModDefinition parses the modfile only it is expected the calling code will have verified the existence of the modfile by calling ModfileExists this is called before parsing the workspace to, for example, identify dependency mods
func ParseModResourceNames ¶
func ParseModResourceNames(fileData map[string][]byte) (*modconfig.WorkspaceResources, error)
ParseModResourceNames parses all source hcl files for the mod path and associated resources, and returns the resource names
func ParsePreparedStatementInvocation ¶
ParsePreparedStatementInvocation parses a query invocation and extracts the args (if any) supported formats are:
1) positional args query.my_prepared_statement('val1','val1')
2) named args query.my_prepared_statement(my_arg1 => 'test', my_arg2 => 'test2')
Types ¶
type ParseContext ¶ added in v0.17.0
type ParseContext struct { UnresolvedBlocks map[string]*unresolvedBlock FileData map[string][]byte // the eval context used to decode references in HCL EvalCtx *hcl.EvalContext RootEvalPath string // if set, only decode these blocks BlockTypes []string // if set, exclude these block types BlockTypeExclusions []string // contains filtered or unexported fields }
func NewParseContext ¶ added in v0.17.0
func NewParseContext(rootEvalPath string) ParseContext
func (*ParseContext) AddDependencies ¶ added in v0.17.0
func (r *ParseContext) AddDependencies(block *hcl.Block, name string, dependencies map[string]*modconfig.ResourceDependency) hcl.Diagnostics
func (*ParseContext) BlocksToDecode ¶ added in v0.17.0
func (r *ParseContext) BlocksToDecode() (hcl.Blocks, error)
func (*ParseContext) ClearDependencies ¶ added in v0.17.0
func (r *ParseContext) ClearDependencies()
func (*ParseContext) EvalComplete ¶ added in v0.17.0
func (r *ParseContext) EvalComplete() bool
EvalComplete returns whether all elements in the dependency tree fully evaluated
func (*ParseContext) FormatDependencies ¶ added in v0.17.0
func (r *ParseContext) FormatDependencies() string
func (*ParseContext) SetDecodeContent ¶ added in v0.17.0
func (r *ParseContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
func (*ParseContext) ShouldIncludeBlock ¶ added in v0.17.0
func (r *ParseContext) ShouldIncludeBlock(block *hcl.Block) bool
type ParseModFlag ¶
type ParseModFlag uint32
const ( CreateDefaultMod ParseModFlag = 1 << iota CreatePseudoResources )
type ReferenceTypeValueMap ¶
ReferenceTypeValueMap is the raw data used to build the evaluation context
When resolving hcl references like : - query.q1 - var.v1 - mod1.query.my_query.sql
ReferenceTypeValueMap is keyed by resource type, then by resource name
type RunContext ¶
type RunContext struct { ParseContext // the mod which is currently being parsed CurrentMod *modconfig.Mod // the workspace lock data WorkspaceLock *versionmap.WorkspaceLock Flags ParseModFlag ListOptions *filehelpers.ListOptions LoadedDependencyMods modconfig.ModMap // Variables is a map of the variables in the current mod // it is used to populate the variables property on the mod Variables map[string]*modconfig.Variable // DependencyVariables is a map of the variables in the dependency mods of the current mod // it is used to populate the variables property on the dependency DependencyVariables map[string]map[string]*modconfig.Variable ParentRunCtx *RunContext // contains filtered or unexported fields }
func NewRunContext ¶
func NewRunContext(workspaceLock *versionmap.WorkspaceLock, rootEvalPath string, flags ParseModFlag, listOptions *filehelpers.ListOptions) *RunContext
func (*RunContext) AddDependencies ¶
func (r *RunContext) AddDependencies(block *hcl.Block, name string, dependencies map[string]*modconfig.ResourceDependency) hcl.Diagnostics
AddDependencies :: the block could not be resolved as it has dependencies 1) store block as unresolved 2) add dependencies to our tree of dependencies
func (*RunContext) AddInputVariables ¶
func (r *RunContext) AddInputVariables(inputVariables *modconfig.ModVariableMap)
AddInputVariables adds variables to the run context. This function is called for the root run context after loading all input variables
func (*RunContext) AddLoadedDependentMods ¶
func (r *RunContext) AddLoadedDependentMods(mods modconfig.ModMap)
func (*RunContext) AddMod ¶
func (r *RunContext) AddMod(mod *modconfig.Mod) hcl.Diagnostics
AddMod is used to add a mod with any pseudo resources to the eval context - in practice this will be a shell mod with just pseudo resources - other resources will be added as they are parsed
func (*RunContext) AddResource ¶
func (r *RunContext) AddResource(resource modconfig.HclResource) hcl.Diagnostics
AddResource stores this resource as a variable to be added to the eval context. It alse
func (*RunContext) CreatePseudoResources ¶
func (r *RunContext) CreatePseudoResources() bool
CreatePseudoResources returns whether the flag is set to create pseudo resources
func (*RunContext) DetermineBlockName ¶
func (r *RunContext) DetermineBlockName(block *hcl.Block) string
func (*RunContext) EnsureWorkspaceLock ¶
func (r *RunContext) EnsureWorkspaceLock(mod *modconfig.Mod) error
func (*RunContext) GetCachedBlockName ¶
func (r *RunContext) GetCachedBlockName(block *hcl.Block) (string, bool)
func (*RunContext) GetCachedBlockShortName ¶
func (r *RunContext) GetCachedBlockShortName(block *hcl.Block) (string, bool)
func (*RunContext) GetDecodedResourceForBlock ¶
func (r *RunContext) GetDecodedResourceForBlock(block *hcl.Block) (modconfig.HclResource, bool)
func (*RunContext) GetResourceMaps ¶
func (r *RunContext) GetResourceMaps() *modconfig.ResourceMaps
func (*RunContext) IsTopLevelBlock ¶
func (r *RunContext) IsTopLevelBlock(block *hcl.Block) bool
func (*RunContext) PeekParent ¶
func (r *RunContext) PeekParent() string
func (*RunContext) PopParent ¶
func (r *RunContext) PopParent() string
func (*RunContext) PushParent ¶
func (r *RunContext) PushParent(parent modconfig.ModTreeItem)
func (*RunContext) SetDecodeContent ¶
func (r *RunContext) SetDecodeContent(content *hcl.BodyContent, fileData map[string][]byte)
func (*RunContext) SetVariablesForDependencyMod ¶
func (r *RunContext) SetVariablesForDependencyMod(mod *modconfig.Mod, dependencyVariablesMap map[string]map[string]*modconfig.Variable)
SetVariablesForDependencyMod adds variables to the run context. This function is called for dependent mod run context
func (*RunContext) ShouldCreateDefaultMod ¶
func (r *RunContext) ShouldCreateDefaultMod() bool
ShouldCreateDefaultMod returns whether the flag is set to create a default mod if no mod definition exists
Source Files ¶
- connection.go
- context_functions.go
- decode.go
- decode_args.go
- decode_children.go
- decode_mod.go
- decode_options.go
- decode_result.go
- hcl_blocks.go
- installed_mod.go
- metadata.go
- parse_context.go
- parser.go
- prepared_statement.go
- references.go
- run_context.go
- run_context_blocks.go
- schema.go
- unresolved_block.go
- workspace_profile.go