core

package
v0.12.0 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2026 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Overview

Plik: flow/core/resolver.go

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Analyze

func Analyze(resolver CapabilityResolver, expr Expr) error

Analyze runs polymorphic contract validation on the AST. It is a compile-time gate: any edge whose producer output cannot be coerced into the consumer input fails here, before Execute is ever reached.

The rule mirrors runtime Coerce exactly — nominal assignability first, then a JSON round-trip for the same struct-to-struct cases the runtime decoder handles. If a pipeline compiles here, it will not fail at runtime with "cannot coerce input into target".

func AtomNames

func AtomNames(e Expr) []string

func Build

func Build(
	ctx context.Context,
	resolver CapabilityResolver,
	modifiers *ModifierTable,
	e Expr,
	advisers ...AtomAdviseFunc,
) (action.AnyAction, error)

Build lowers an AST into a runnable action tree, resolving every capability through the supplied resolver.

The function is a thin dispatcher: every node implements its own Build method. Core never switches on concrete AST types.

func BuildEnv

func BuildEnv(input any) map[string]any

func ComposedPipe

func ComposedPipe(left, right action.AnyAction) action.AnyAction

ComposedPipe is the Flow adapter for Kernel's dynamic pipe composition. Flow owns the DSL/lowering decision; Kernel owns invocation, cancellation, error propagation, and lifecycle behavior.

func Decode

func Decode[T any](raw map[string]string) (T, error)

Decode mapuje string map na typowany struct opcji. To jest kontrakt, którego każdy zewnętrzny Bundle używa do odczytu swojego bloku @require.

Tagi:

flow:"key"      nazwa klucza w bloku @require
default:"..."   wartość gdy klucz nieobecny

Nieznane klucze są odrzucane — literówka w .nflow ma się wywalić głośno przy ładowaniu, nie cicho zdefaultować.

Obsługiwane typy pól: string, bool, int, int64, time.Duration, float64. Każdy inny to błąd projektowy Bundle.

func IndexTopLevel

func IndexTopLevel(s string, target byte) int

IndexTopLevel returns the index of the first occurrence of target in s at bracket depth zero, outside quoted strings. Returns -1 when absent. Companion to SplitTopLevel.

func ModifiersToMap

func ModifiersToMap(modifiers []string) map[string]any

ModifiersToMap parses a slice of raw modifier strings (e.g. "ext=txt", "by=rel_path", "tests") into a map of parameters for stream sources and operators.

func ParseBlockOptions

func ParseBlockOptions(lines []string, start int) (opts map[string]string, next int, err error)

ParseBlockOptions reads a `{ key: value, ... }` block via ReadBlock and parses each entry as a `key: value` pair. Returns nil for an empty block.

func ParseList

func ParseList(line string) []string

ParseList extracts the first bracketed list `[a, b, c]` from a line. Returns nil for `[]` or when no brackets are present.

func Preprocess

func Preprocess(ctx context.Context, dt *DirectiveTable, source, file string) (clean string, meta map[string]any, err error)

Preprocess executes directives from the dt table.

Cycle detection uses a call-stack, not a global set. This allows diamond dependencies (A → B → common, A → C → common) while still catching true cycles (A → B → A). The error message carries the exact include chain so the user sees which edge closes the loop.

func PreprocessDots

func PreprocessDots(src string) string

func ReadBlock

func ReadBlock(lines []string, start int) (body []string, next int, err error)

ReadBlock extracts the raw body of a `{ ... }` block starting at lines[start]. Handles all three shapes uniformly:

inline:      @x NAME { a: 1, b: 2 }
multi-line:  @x NAME {
               a: 1
               b: 2
             }
tail-brace:  @x NAME {
               a: 1
               b: 2 }

Returns one entry per top-level comma-separated element. Callers interpret entries: `key: value` for @config/@llm/@sandbox/@pool, `Field Type` for @schema.

Comments (`#`, `//`) and blank lines inside the block are dropped.

func Register

func Register(id string, factory BundleFactory)

Register rejestruje fabrykę bundla pod podanym ID.

func RegisterBoundary

func RegisterBoundary(spec BoundarySpec)

func RegisterBundle

func RegisterBundle(id string, factory BundleFactory)

RegisterBundle to alias do Register dla pełnej kompatybilności.

func RunAction

func RunAction() *action.BuiltAction[RunReq, RunRes]

func SourceError

func SourceError(pos Position, format string, args ...any) error

func SplitTopLevel

func SplitTopLevel(s string, sep byte) []string

SplitTopLevel splits s on sep, respecting quoted strings (" ' `), balanced brackets, and backslash escapes. Returns the raw segments, not trimmed. Callers trim themselves.

func SuggestModifierFix

func SuggestModifierFix(target action.AnyAction, name string) string

SuggestModifierFix returns a human-readable explanation for why a modifier name cannot be applied to a given action, or empty when no better fix than "unknown modifier" is available.

The dominant real-world mistake: the author writes :file=... where the action takes @{ file: ... }. The check against the action's Req struct catches that before the runtime sees a modifier-table miss.

func TrimQuotes

func TrimQuotes(s string) string

TrimQuotes removes one matched pair of surrounding quotes (" ' `), or returns s unchanged.

func ValidateBundle

func ValidateBundle(b Bundle) error

func WithCompileConfig

func WithCompileConfig(ctx context.Context, cfg map[string]string, cliArgs []string) context.Context

func WithStrict

func WithStrict(ctx context.Context) context.Context

WithStrict returns ctx marked for strict validation.

Types

type AssertExpr

type AssertExpr struct {
	Condition string
	Message   string
}

AssertExpr: assert(condition, message).

func (*AssertExpr) Analyze

func (*AssertExpr) Build

func (*AssertExpr) Children

func (a *AssertExpr) Children() []Expr

func (*AssertExpr) Node

func (*AssertExpr) Node()

type Associativity

type Associativity uint8
const (
	Left Associativity = iota
	Right
)

type Atom

type Atom struct {
	Name      string
	Params    map[string]string
	Modifiers []string
	Args      map[string]*Value
	Prompt    string
	Targets   []string
	Excludes  []string
}

Atom is a single runtime action call.

func (*Atom) Analyze

func (*Atom) Analyze(CapabilityResolver) error

func (*Atom) Build

func (a *Atom) Build(ctx context.Context, bCtx *BuildContext) (action.AnyAction, error)

func (*Atom) Children

func (*Atom) Children() []Expr

func (*Atom) Node

func (*Atom) Node()

type AtomAdviseFunc

type AtomAdviseFunc func(atom *Atom, builder *action.Builder[any, any]) error

type AtomSpec

type AtomSpec struct {
	Name        string          `json:"name"`
	Description string          `json:"description,omitempty"`
	Tags        []string        `json:"tags,omitempty"`
	Scope       string          `json:"scope,omitempty"`
	ReqFields   []FieldSpec     `json:"req_fields,omitempty"`
	ResFields   []FieldSpec     `json:"res_fields,omitempty"`
	Example     json.RawMessage `json:"example,omitempty"`
}

type BoundarySpec

type BoundarySpec struct {
	Name        string
	Description string
	Consume     func(stream action.AnyStreamAction) *action.Builder[any, any]
}

BoundarySpec is a stream-to-unary adapter. It is the only place in a pipeline where iter.Seq2[T, error] becomes a single value.

func BoundaryByName

func BoundaryByName(name string) (BoundarySpec, bool)

func NamedBoundaries

func NamedBoundaries() []BoundarySpec

type BuildContext

type BuildContext struct {
	Resolver  CapabilityResolver
	Modifiers *ModifierTable
	Advisers  []AtomAdviseFunc
}

BuildContext carries every dependency a node needs to lower itself into a runnable action. It is deliberately a small value struct: the AST knows how to Build itself, core just provides the pieces.

type Bundle

type Bundle struct {
	ID           string
	Alias        string // Dynamiczny namespace nadpisywany przez @require (np. "as ft")
	Libraries    []action.Library
	Directives   []Directive
	Modifiers    []Modifier
	Operators    []Operator
	Primaries    []PrimaryExtension
	Materialize  Materializer
	OnPreprocess func(meta map[string]any) PreprocessContributions
	AtomAdvise   func(atom *Atom, builder *action.Builder[any, any]) error
	WrapPipeline func(meta map[string]any, inner action.AnyAction) (action.AnyAction, error)

	SelfTest func() []SelfTestSection
	Fixtures fs.FS
}

Bundle is one extension distribution.

func RegisteredBundles

func RegisteredBundles() []Bundle

RegisteredBundles zwraca wszystkie zarejestrowane bundly posortowane alfabetycznie.

func (Bundle) AllSelfTests

func (b Bundle) AllSelfTests() []SelfTestSection

type BundleFactory

type BundleFactory func(opts map[string]string) Bundle

func Lookup

func Lookup(id string) (BundleFactory, bool)

Lookup znajduje zarejestrowany bundle po dokładnym ID.

func LookupBundleForModule

func LookupBundleForModule(target string) (BundleFactory, bool)

LookupBundleForModule zapewnia wsteczną kompatybilność dla testów jednostkowych.

type CapabilityContract

type CapabilityContract struct {
	Name   string
	Input  TypeDescriptor
	Output TypeDescriptor
}

type CapabilityResolver

type CapabilityResolver interface {
	Action(name string) (action.AnyAction, bool)
	Stream(name string) (action.AnyStreamAction, bool)
	Operator(name string) (action.NamedOperator, bool)
	Mount(lib action.Library) error
	MountWithAlias(lib action.Library, alias string) error
}

CapabilityResolver odcina rdzeń kompilatora od twardej bazy akcji.

type Catalog

type Catalog struct {
	Atoms      []AtomSpec      `json:"atoms"`
	Sources    []SourceSpec    `json:"sources"`
	Operators  []OperatorSpec  `json:"operators"`
	Modifiers  []ModifierSpec  `json:"modifiers"`
	Directives []DirectiveSpec `json:"directives"`
}

Catalog is a machine-readable dump of the compiler surface: every atom, stream source, operator, modifier, and directive known to the resolver and tables. Consumed by `nflow catalog`, `nflow list`, `nflow show`, and the linter. Regenerated on every build — no manual maintenance.

func BuildCatalog

func BuildCatalog(
	resolver CapabilityResolver,
	mt *ModifierTable,
	dt *DirectiveTable,
	ot *OperatorTable,
) Catalog

BuildCatalog extracts the full compiler surface from the live resolver and tables. Atom fields come from TypedPayload when the atom is a *BuiltAction[Req, Res]; free-form actions show no fields.

type CompileAndRunReq

type CompileAndRunReq struct {
	Source  string
	Payload any
}

type CompileOption

type CompileOption func(*compileConfig)

func BundleConfig

func BundleConfig(bundles ...Bundle) []CompileOption

BundleConfig collects every extension point from a set of bundles into a single set of CompileOptions. Called once at startup.

func WithAtomAdvisors

func WithAtomAdvisors(fns ...AtomAdviseFunc) CompileOption

func WithConfigMap

func WithConfigMap(cfg map[string]string, cliArgs []string) CompileOption

WithConfigMap carries @config resolution context: the merged key→value map plus the raw CLI args for @flag. lookups.

func WithOnPreprocess

func WithOnPreprocess(fns ...OnPreprocessFunc) CompileOption

func WithPipelineWrappers

func WithPipelineWrappers(fns ...PipelineWrapFunc) CompileOption

type CompileReq

type CompileReq struct {
	Source             string
	Name               string
	Line               int
	InheritedPrimaries []PrimaryExtension
}

type CompileRes

type CompileRes struct {
	Program action.AnyAction
	Meta    map[string]any
	AST     Expr
}

type ConditionalExpr

type ConditionalExpr struct {
	Cond Expr
	Then Expr
	Else Expr
}

ConditionalExpr: cond ? then : else.

func (*ConditionalExpr) Analyze

func (*ConditionalExpr) Build

func (*ConditionalExpr) Children

func (c *ConditionalExpr) Children() []Expr

func (*ConditionalExpr) Node

func (*ConditionalExpr) Node()

type ContractProvider

type ContractProvider interface {
	Contract(name string) (CapabilityContract, bool)
}

type Directive

type Directive struct {
	Name    string
	Example string
	Handler func(context.Context, DirectiveReq) (DirectiveRes, error)
}

func (Directive) Action

type DirectiveReq

type DirectiveReq struct {
	Lines   []string
	Body    []string
	I       int
	Out     map[string]any
	File    string
	BaseDir string

	// Recurse runs the full preprocess on another .nflow file and
	// returns its cleaned body plus merged metadata. Used by @include
	// so directives in included files produce declarations in the
	// parent's Out map.
	Recurse func(absPath string) (clean string, meta map[string]any, err error)
}

type DirectiveRes

type DirectiveRes struct {
	Next int
}

type DirectiveSpec

type DirectiveSpec struct {
	Name    string `json:"name"`
	Example string `json:"example,omitempty"`
}

type DirectiveTable

type DirectiveTable struct {
	// contains filtered or unexported fields
}

func NewDirectiveTable

func NewDirectiveTable(ds ...Directive) *DirectiveTable

func (*DirectiveTable) Actions

func (t *DirectiveTable) Actions() []action.AnyAction

func (*DirectiveTable) All

func (t *DirectiveTable) All() []Directive

func (*DirectiveTable) ByName

type DynamicResolver

type DynamicResolver struct {
	// contains filtered or unexported fields
}

func NewDynamicResolver

func NewDynamicResolver(baseLibs ...action.Library) (*DynamicResolver, error)

func (*DynamicResolver) Action

func (r *DynamicResolver) Action(name string) (action.AnyAction, bool)

func (*DynamicResolver) ActionNames added in v0.11.0

func (r *DynamicResolver) ActionNames() []string

ActionNames returns every canonical and aliased action name in stable order.

func (*DynamicResolver) Actions added in v0.11.0

func (r *DynamicResolver) Actions() []action.AnyAction

Actions returns each mounted action once, keyed by its canonical metadata name.

func (*DynamicResolver) Contract

func (r *DynamicResolver) Contract(name string) (CapabilityContract, bool)

func (*DynamicResolver) Mount

func (r *DynamicResolver) Mount(lib action.Library) error

func (*DynamicResolver) MountWithAlias

func (r *DynamicResolver) MountWithAlias(lib action.Library, alias string) error

MountWithAlias montuje bibliotekę dodając podany prefiks (alias) do wszystkich jej akcji, strumieni, operatorów i zdefiniowanych aliasów.

func (*DynamicResolver) Operator

func (r *DynamicResolver) Operator(name string) (action.NamedOperator, bool)

func (*DynamicResolver) Operators added in v0.11.0

func (r *DynamicResolver) Operators() []action.NamedOperator

Operators returns mounted stream operators in stable order.

func (*DynamicResolver) Stream

func (r *DynamicResolver) Stream(name string) (action.AnyStreamAction, bool)

func (*DynamicResolver) Streams added in v0.11.0

func (r *DynamicResolver) Streams() []action.AnyStreamAction

Streams returns mounted stream sources in stable order.

type Expr

type Expr interface {
	Node()
	Children() []Expr
	Analyze(resolver CapabilityResolver) error
	Build(ctx context.Context, bCtx *BuildContext) (action.AnyAction, error)
}

Expr is the root of the AST. Every node knows how to report its children, how to validate its contract (Analyze), and how to lower itself into a runnable action (Build). Core never switches on concrete AST types.

type FallbackExpr

type FallbackExpr struct{ L, R Expr }

FallbackExpr: left || right.

func (*FallbackExpr) Analyze

func (f *FallbackExpr) Analyze(r CapabilityResolver) error

func (*FallbackExpr) Build

func (f *FallbackExpr) Build(ctx context.Context, bCtx *BuildContext) (action.AnyAction, error)

func (*FallbackExpr) Children

func (f *FallbackExpr) Children() []Expr

func (*FallbackExpr) Node

func (*FallbackExpr) Node()

type FieldSpec

type FieldSpec struct {
	Name     string `json:"name"`
	Type     string `json:"type"`
	Required bool   `json:"required,omitempty"`
	Usage    string `json:"usage,omitempty"`
}

type KeywordPrimary

type KeywordPrimary interface {
	PrimaryExtension
	Keyword() string
}

KeywordPrimary is the keyword-dispatch contract.

type Lexer

type Lexer struct {
	// contains filtered or unexported fields
}

func NewLexer

func NewLexer(src string) *Lexer

func (*Lexer) Next

func (l *Lexer) Next() Token

type LoopExpr

type LoopExpr struct {
	Body  Expr
	Until string
}

LoopExpr: loop(body) until(condition).

func (*LoopExpr) Analyze

func (l *LoopExpr) Analyze(r CapabilityResolver) error

func (*LoopExpr) Build

func (l *LoopExpr) Build(ctx context.Context, bCtx *BuildContext) (action.AnyAction, error)

func (*LoopExpr) Children

func (l *LoopExpr) Children() []Expr

func (*LoopExpr) Node

func (*LoopExpr) Node()

type MapEntry

type MapEntry struct {
	Key   string
	Value *Value
}

type MaterializeReq

type MaterializeReq struct {
	Ctx      context.Context
	Meta     map[string]any
	Resolver CapabilityResolver
	Compile  func(name, source string) (action.AnyAction, error)
	Alias    string
}

MaterializeReq przekazuje kontekst, metadane i kompilator do fazy materializacji.

type Materializer

type Materializer func(req MaterializeReq) error

Materializer zamienia deklaracje z meta na działające akcje w resolverze.

type Modifier

type Modifier struct {
	Name    string
	Example string
	Apply   func(b *action.Builder[any, any], raw string) error
}

Modifier is one `:name` or `:name=value` annotation on an atom.

Name is the identifier without the leading colon. Apply runs once per occurrence, in source order, on the atom's builder. The raw string is the DSL text after `=`, or "" for a flag. The parser has already stripped surrounding quotes and expanded adjacent tokens, so no modifier needs to worry about either.

func Duration

func Duration(name string, apply func(*action.Builder[any, any], time.Duration) *action.Builder[any, any]) Modifier

func Flag

func Flag(name string, apply func(*action.Builder[any, any]) *action.Builder[any, any]) Modifier

Flag handles modifiers that take no value (`:coalesce`, `:dedup`). Passing a value is rejected loudly — `:dedup=yes` in the DSL is a mistake the author should see, not silently accept.

func Float64

func Float64(name string, apply func(*action.Builder[any, any], float64) *action.Builder[any, any]) Modifier

func Int

func Int(name string, apply func(*action.Builder[any, any], int) *action.Builder[any, any]) Modifier

func Int32

func Int32(name string, apply func(*action.Builder[any, any], int32) *action.Builder[any, any]) Modifier

func Int64

func Int64(name string, apply func(*action.Builder[any, any], int64) *action.Builder[any, any]) Modifier

func String

func String(name string, apply func(*action.Builder[any, any], string) *action.Builder[any, any]) Modifier

func StringList

func StringList(name string, apply func(*action.Builder[any, any], []string) *action.Builder[any, any]) Modifier

type ModifierSpec

type ModifierSpec struct {
	Name    string `json:"name"`
	Example string `json:"example,omitempty"`
}

type ModifierTable

type ModifierTable struct {
	// contains filtered or unexported fields
}

ModifierTable indexes modifiers by name. Construction is eager: a duplicate name panics, so a bundle cannot silently shadow another.

func NewModifierTable

func NewModifierTable(modifiers ...Modifier) *ModifierTable

func (*ModifierTable) Actions

func (t *ModifierTable) Actions() []action.AnyAction

func (*ModifierTable) All

func (t *ModifierTable) All() []Modifier

func (*ModifierTable) ApplyAll

func (t *ModifierTable) ApplyAll(target action.AnyAction, raws []string) (action.AnyAction, error)

ApplyAll wraps target once, applies every modifier in source order, and builds once. Two allocations total: the Builder and the BuiltAction.

When a modifier name is unknown, the hint path checks whether the name matches a field of the action's request struct. That is the common DSL-author mistake — writing :file=... where the action takes @{ file: ... } — and it produces a fix-the-typo message instead of a bare "unknown modifier".

func (*ModifierTable) ByName

func (t *ModifierTable) ByName(name string) (Modifier, bool)

type OnPreprocessFunc

type OnPreprocessFunc func(meta map[string]any) PreprocessContributions

OnPreprocessFunc is the compile-time hook fired between Preprocess and Parse. BundleConfig wires it from Bundle.OnPreprocess.

type Operator

type Operator struct {
	Meta    OperatorMeta
	Handler func(context.Context, OperatorReq) (OperatorRes, error)
}

func (Operator) Action

type OperatorMeta

type OperatorMeta struct {
	Name          string
	Token         TokenType
	Precedence    int
	Associativity Associativity
	Description   string
	Example       string
}

type OperatorReq

type OperatorReq struct {
	Left  Expr
	Right Expr
	Meta  *OperatorMeta
}

type OperatorRes

type OperatorRes struct {
	Node Expr
}

type OperatorSpec

type OperatorSpec struct {
	Name        string `json:"name"`
	Token       string `json:"token,omitempty"`
	Description string `json:"description,omitempty"`
	Example     string `json:"example,omitempty"`
}

type OperatorTable

type OperatorTable struct {
	// contains filtered or unexported fields
}

func NewOperatorTable

func NewOperatorTable(ops ...Operator) *OperatorTable

func (*OperatorTable) Actions

func (t *OperatorTable) Actions() []action.AnyAction

func (*OperatorTable) All

func (t *OperatorTable) All() []OperatorMeta

func (*OperatorTable) ByName

func (*OperatorTable) ByToken

type ParallelExpr

type ParallelExpr struct{ Branches []Expr }

ParallelExpr: N branches executed concurrently.

func (*ParallelExpr) Analyze

func (p *ParallelExpr) Analyze(r CapabilityResolver) error

func (*ParallelExpr) Build

func (p *ParallelExpr) Build(ctx context.Context, bCtx *BuildContext) (action.AnyAction, error)

func (*ParallelExpr) Children

func (p *ParallelExpr) Children() []Expr

func (*ParallelExpr) Node

func (*ParallelExpr) Node()

type Parser

type Parser struct {
	// contains filtered or unexported fields
}

func NewParser

func NewParser(ctx context.Context, ops *OperatorTable, src string) *Parser

NewParser is the no-file convenience used in tests. Parse errors report only the line number.

func NewParserWithFile

func NewParserWithFile(
	ctx context.Context,
	ops *OperatorTable,
	primaries *PrimaryExtensionTable,
	src, file string,
) *Parser

NewParserWithFile carries the source path so parse errors are formatted as `file:line`, which terminals make clickable.

func NewParserWithFileOffset

func NewParserWithFileOffset(
	ctx context.Context,
	ops *OperatorTable,
	primaries *PrimaryExtensionTable,
	src, file string,
	lineBase int,
) *Parser

NewParserWithFileOffset additionally shifts reported line numbers by lineBase. Used when a fragment (e.g. a @pipeline body) is parsed in isolation but its errors must point at the parent file's lines.

func NewParserWithPrimaries

func NewParserWithPrimaries(
	ctx context.Context,
	ops *OperatorTable,
	primaries *PrimaryExtensionTable,
	src string,
) *Parser

NewParserWithPrimaries is kept for compatibility with callers that pass a primaries table explicitly.

func (*Parser) Advance

func (p *Parser) Advance()

Advance is an alias for Next, exported for external primary extensions.

func (*Parser) Cur

func (p *Parser) Cur() Token

Cur returns the token under the cursor.

func (*Parser) Current

func (p *Parser) Current() Token

Current is an alias for Cur, exported for external primary extensions.

func (*Parser) Fail

func (p *Parser) Fail(line int, format string, args ...any) error

Fail reports a parse error at the given line offset by lineBase. Exported so external primary extensions can format errors the same way the built-in parser does.

func (*Parser) File

func (p *Parser) File() string

File returns the source file path, or "".

func (*Parser) Next

func (p *Parser) Next()

Next advances the cursor by one token.

func (*Parser) Parse

func (p *Parser) Parse() (Expr, error)

func (*Parser) ParseExpr

func (p *Parser) ParseExpr(minPrec int) (Expr, error)

ParseExpr parses a sub-expression with the given minimum precedence. Exported so primary extensions can recurse without reimplementing the precedence-climbing loop.

func (*Parser) Src

func (p *Parser) Src() string

Src returns the source text under parse.

func (*Parser) SubParse

func (p *Parser) SubParse(src string) (Expr, error)

SubParse parses a fresh source fragment in this parser's context. The same operator table, primary table, and source-file metadata are reused. External primary extensions call it to re-enter the parser with substituted text.

type PipeExpr

type PipeExpr struct{ L, R Expr }

PipeExpr: left -> right.

func (*PipeExpr) Analyze

func (p *PipeExpr) Analyze(r CapabilityResolver) error

func (*PipeExpr) Build

func (p *PipeExpr) Build(ctx context.Context, bCtx *BuildContext) (action.AnyAction, error)

func (*PipeExpr) Children

func (p *PipeExpr) Children() []Expr

func (*PipeExpr) Node

func (*PipeExpr) Node()

type PipelineWrapFunc

type PipelineWrapFunc func(meta map[string]any, inner action.AnyAction) (action.AnyAction, error)

type Position

type Position struct {
	File string
	Line int
	Col  int
}

func (Position) String

func (p Position) String() string

type PreprocessContributions

type PreprocessContributions struct {
	Primaries   []PrimaryExtension
	CompileOpts []CompileOption
}

func PreprocessContributionsFromMeta

func PreprocessContributionsFromMeta(meta map[string]any, opts ...CompileOption) PreprocessContributions

type PrimaryExtension

type PrimaryExtension interface {
	Name() string
	Parse(p *Parser) (Expr, error)
}

PrimaryExtension przechwytuje jeden token-form i zamienia go w węzeł AST. W parsePrimary extensions mają pierwszeństwo przed built-inami.

Kontrakt jest celowo minimalny: rozszerzenie implementuje Name i Parse, oraz — w zależności od tego, czym rozszerza parser — jedno z:

TokenType() TokenType  — dispatch po tokenie (np. TokAtPrompt)
Keyword()   string     — dispatch po nazwie identu (np. "loop")

Rozszerzenie może implementować jedno, drugie, albo oba.

type PrimaryExtensionTable

type PrimaryExtensionTable struct {
	// contains filtered or unexported fields
}

func DefaultPrimaryExtensions

func DefaultPrimaryExtensions() *PrimaryExtensionTable

DefaultPrimaryExtensions zwraca PUSTĄ tabelę. Core nie zna żadnego konkretnego rozszerzenia.

func NewPrimaryExtensionTable

func NewPrimaryExtensionTable(exts ...PrimaryExtension) *PrimaryExtensionTable

func (*PrimaryExtensionTable) All

func (*PrimaryExtensionTable) ByKeyword

func (t *PrimaryExtensionTable) ByKeyword(kw string) (PrimaryExtension, bool)

func (*PrimaryExtensionTable) ByToken

type ProjectionExpr

type ProjectionExpr struct{ Raw string }

ProjectionExpr: raw content `{ ... }`.

func (*ProjectionExpr) Analyze

func (*ProjectionExpr) Build

func (*ProjectionExpr) Children

func (p *ProjectionExpr) Children() []Expr

func (*ProjectionExpr) Node

func (*ProjectionExpr) Node()

type RunReq

type RunReq struct {
	Program action.AnyAction
	Payload any
}

type RunRes

type RunRes struct {
	Output any
}

type SelfTestFeature

type SelfTestFeature struct {
	Name   string
	DSL    string
	Files  map[string]string
	Skip   string
	Source string
}

type SelfTestSection

type SelfTestSection struct {
	Name     string
	Features []SelfTestFeature
}

type SourceSpec

type SourceSpec struct {
	Name        string      `json:"name"`
	Description string      `json:"description,omitempty"`
	Tags        []string    `json:"tags,omitempty"`
	ReqFields   []FieldSpec `json:"req_fields,omitempty"`
}

SourceSpec describes a stream source (fs.walk, cov.items, ...). A source has a typed request but no typed item — the item type is a per-item element, not a whole response.

type Token

type Token struct {
	Type   TokenType
	Lit    string
	Line   int
	Offset int
}

type TokenPrimary

type TokenPrimary interface {
	PrimaryExtension
	TokenType() TokenType
}

TokenPrimary is the token-dispatch contract.

type TokenType

type TokenType uint8
const (
	TokEOF TokenType = iota
	TokIdent
	TokString
	TokNumber
	TokArrow
	TokPipe
	TokAmpersand
	TokOrOr
	TokLParen
	TokRParen
	TokLBrace
	TokRBrace
	TokColon
	TokEquals
	TokComma
	TokQuestion
	TokHash
	TokTilde
	TokAtBrace
	TokAtPrompt
)

func (TokenType) String

func (t TokenType) String() string

type TypeDescriptor

type TypeDescriptor struct {
	Type   reflect.Type
	Stream bool
}

type Value

type Value struct {
	Kind  ValueKind
	Str   string
	Num   float64
	Bool  bool
	Ref   string
	Map   []MapEntry
	Slice []*Value
}

func (*Value) IsWholeStateRef

func (v *Value) IsWholeStateRef() bool

type ValueKind

type ValueKind uint8
const (
	ValueString ValueKind = iota
	ValueNumber
	ValueBool
	ValueNull
	ValueRef
	ValueMap
	ValueSlice
)

Jump to

Keyboard shortcuts

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