Documentation
¶
Overview ¶
Package yamlvalidator provides a flexible YAML validation library with support for type checking, custom validators, conditional logic, and detailed error reporting with source context.
Index ¶
- func FormatErrorWithSource(err ValidationError, lines []string) string
- func Ptr[T any](v T) *T
- func RenderLineWithCaret(line string, byteCol int) (string, int, int)
- func ValidateFieldSchema(schema *FieldSchema) error
- type ConditionalRule
- type DefinitionValidator
- type ErrorCollector
- type ErrorLevel
- type FieldSchema
- type JSONSchemaCompileOptions
- type JSONSchemaDraft
- type JSONSchemaFormat
- type JSONSchemaKeyword
- type JSONSchemaKeywordCompileFunc
- type JSONSchemaKeywordFunc
- type JSONSchemaKeywordIssue
- type JSONSchemaKeywordValidateFunc
- type JSONSchemaKeywordValidationContext
- func (ctx *JSONSchemaKeywordValidationContext) AddError(message string)
- func (ctx *JSONSchemaKeywordValidationContext) AddErrorAt(path []string, message string)
- func (ctx *JSONSchemaKeywordValidationContext) MarkItemEvaluated(index int)
- func (ctx *JSONSchemaKeywordValidationContext) MarkPropertyEvaluated(name string)
- type JSONSchemaLoadFunc
- type JSONSchemaVocabulary
- type KeyValidator
- type NodeType
- type UnknownKeyPolicy
- type ValidationContext
- type ValidationError
- type ValidationResult
- type Validator
- type ValueValidator
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FormatErrorWithSource ¶
func FormatErrorWithSource(err ValidationError, lines []string) string
FormatErrorWithSource formats an error with source context. Correctly handles tabs and Unicode.
func Ptr ¶
func Ptr[T any](v T) *T
Ptr returns a pointer to the value. Useful for setting Min/Max fields.
func RenderLineWithCaret ¶
RenderLineWithCaret is an exported wrapper useful for external tests and tools.
func ValidateFieldSchema ¶ added in v0.3.0
func ValidateFieldSchema(schema *FieldSchema) error
ValidateFieldSchema checks FieldSchema invariants, including nested schemas, invalid constraints, recursive schema graphs, and validator definitions.
Types ¶
type ConditionalRule ¶
type ConditionalRule struct {
// ConditionField is the field to check.
ConditionField string
// ConditionValue is the expected value (scalar comparison).
ConditionValue string
// ThenRequired lists fields that become required when condition is met.
ThenRequired []string
// ThenForbidden lists fields that are forbidden when condition is met.
ThenForbidden []string
}
ConditionalRule defines conditional validation logic. When ConditionField equals ConditionValue, additional requirements apply.
type DefinitionValidator ¶ added in v0.3.0
type DefinitionValidator interface {
ValidateDefinition() error
}
DefinitionValidator may be implemented by value/key validators that can validate their own configuration during FieldSchema compilation.
type ErrorCollector ¶
type ErrorCollector struct {
// contains filtered or unexported fields
}
ErrorCollector accumulates validation errors and warnings.
func NewErrorCollector ¶
func NewErrorCollector() *ErrorCollector
NewErrorCollector creates a new empty ErrorCollector.
func (*ErrorCollector) Add ¶
func (c *ErrorCollector) Add(err ValidationError)
Add adds a validation error to the collector.
func (*ErrorCollector) All ¶
func (c *ErrorCollector) All() []ValidationError
All returns all diagnostics in insertion order.
func (*ErrorCollector) Errors ¶
func (c *ErrorCollector) Errors() []ValidationError
Errors returns all errors.
func (*ErrorCollector) HasErrors ¶
func (c *ErrorCollector) HasErrors() bool
HasErrors returns true if there are any errors (not warnings).
func (*ErrorCollector) Warnings ¶
func (c *ErrorCollector) Warnings() []ValidationError
Warnings returns all warnings.
type ErrorLevel ¶
type ErrorLevel int
ErrorLevel defines the severity of a validation error.
const ( // LevelWarning indicates a non-critical issue (e.g., deprecated field, unknown key in permissive mode). LevelWarning ErrorLevel = iota // LevelError indicates a critical validation failure. LevelError )
func (ErrorLevel) String ¶
func (l ErrorLevel) String() string
type FieldSchema ¶
type FieldSchema struct {
// Type is the expected node type.
Type NodeType
// AllowedTypes accepts any of the listed node types. When non-empty it
// takes precedence over Type and is useful for schema unions.
AllowedTypes []NodeType
// Required indicates the field must be present.
Required bool
// Nullable allows null values even when Type is not TypeNull.
Nullable bool
// Deprecated contains a deprecation message (empty = not deprecated).
// Use "true" for a generic message.
Deprecated string
// Description is a human-readable field description.
Description string
// Default is the default value. If set and field is missing, a warning is emitted.
Default interface{}
// AllowedKeys defines known keys and their schemas.
// If nil, ALL keys are considered unknown.
// This does NOT mean "don't check" - it means "no known keys".
//
// For "any keys allowed, no validation":
// AllowedKeys: nil,
// AdditionalProperties: &FieldSchema{Type: TypeAny},
//
// For "don't touch this map at all":
// AllowedKeys: nil,
// AdditionalProperties: nil,
// UnknownKeyPolicy: UnknownKeyIgnore,
AllowedKeys map[string]*FieldSchema
// AdditionalProperties is the schema for keys not in AllowedKeys.
// If not nil: unknown keys are allowed and validated against this schema.
// If nil: unknown keys are handled by UnknownKeyPolicy.
AdditionalProperties *FieldSchema
// UnknownKeyPolicy determines handling of keys not in AllowedKeys
// when AdditionalProperties is nil.
UnknownKeyPolicy UnknownKeyPolicy
// KeyValidators validate key names (applied to ALL keys).
KeyValidators []KeyValidator
// ItemSchema is the schema for sequence items.
ItemSchema *FieldSchema
// MinItems is the minimum number of items (nil = no limit).
MinItems *int
// MaxItems is the maximum number of items (nil = no limit).
MaxItems *int
// Validators are custom value validators.
Validators []ValueValidator
// AnyOf requires at least one field group to be fully present.
// Example: [][]string{{"configFile"}, {"host", "port"}}
// Means: either configFile, OR both host AND port.
AnyOf [][]string
// ExactlyOneOf requires exactly one field from the list.
// Example: []string{"inline", "file", "url"}
// Means: exactly one of inline/file/url must be present.
ExactlyOneOf []string
// MutuallyExclusive allows at most one field from the list (zero is OK).
// Example: []string{"debug", "quiet"}
// Means: debug and quiet cannot both be present.
MutuallyExclusive []string
// Conditions define conditional validation rules.
Conditions []ConditionalRule
// OneOfSchemas requires exactly one child schema to validate successfully.
OneOfSchemas []*FieldSchema
// AnyOfSchemas requires at least one child schema to validate successfully.
AnyOfSchemas []*FieldSchema
// OneOfRequired requires exactly one field group to be fully present.
OneOfRequired [][]string
// ForbiddenTogether rejects groups whose fields are all present together.
ForbiddenTogether [][]string
// DependentRequired requires additional fields when a trigger field is present.
DependentRequired map[string][]string
}
FieldSchema defines the validation rules for a field.
func CompileJSONSchema ¶ added in v0.3.0
func CompileJSONSchema(data []byte) (*FieldSchema, error)
CompileJSONSchema compiles a JSON Schema using draft 2020-12 as the default dialect. Schemas declaring $schema are compiled using their declared dialect.
func CompileJSONSchemaWithOptions ¶ added in v0.3.0
func CompileJSONSchemaWithOptions(data []byte, opts JSONSchemaCompileOptions) (*FieldSchema, error)
CompileJSONSchemaWithOptions compiles a standards-compliant JSON Schema and returns a FieldSchema adapter that validates YAML through the JSON Schema engine while preserving YAML source positions in diagnostics.
type JSONSchemaCompileOptions ¶ added in v0.3.0
type JSONSchemaCompileOptions struct {
// SchemaURL is the retrieval URL of the root schema. It is used as the base
// URI for relative references when the schema does not establish another base
// with $id. The default is an in-memory HTTPS URL.
SchemaURL string
// DefaultDraft is used only when the schema does not contain $schema.
// The default is draft 2020-12.
DefaultDraft JSONSchemaDraft
// AssertFormat forces format to be an assertion even in dialects where it is
// annotation-only by default.
AssertFormat bool
// AssertContent enables contentEncoding/contentMediaType/contentSchema assertions.
AssertContent bool
// AssertVocabs requires vocabularies declared by a metaschema to be known.
AssertVocabs bool
// RegexpTimeout bounds one ECMAScript regexp match. Zero preserves the
// regexp engine's unlimited default. Use a positive duration for untrusted schemas.
RegexpTimeout time.Duration
// Formats registers first-class functional custom formats.
Formats []JSONSchemaFormat
// Keywords registers functional custom keywords in an internal vocabulary.
// They are activated for this compilation automatically.
Keywords []JSONSchemaKeyword
// Vocabularies registers named functional custom vocabularies. They are
// activated for this compilation automatically.
Vocabularies []JSONSchemaVocabulary
// Resources preloads external resources addressed by their retrieval URLs.
// This is the preferred way to compile a closed schema graph without I/O.
Resources map[string][]byte
// LoadURL loads unresolved external references. If nil, the underlying engine
// retains its default file:// loader; HTTP(S) loading is never enabled implicitly.
LoadURL JSONSchemaLoadFunc
// ConfigureCompiler is an advanced escape hatch exposing the underlying
// compiler before resources are added. It can register custom vocabularies,
// formats, content encodings/media types, or override other engine settings.
ConfigureCompiler func(*jsonschema.Compiler) error
// AdditionalPropertiesFalsePolicy optionally downgrades direct
// additionalProperties:false diagnostics. This is a presentation policy and
// intentionally does not rewrite JSON Schema combinator semantics.
AdditionalPropertiesFalsePolicy *UnknownKeyPolicy
}
JSONSchemaCompileOptions controls JSON Schema compilation and validation.
type JSONSchemaDraft ¶ added in v0.3.0
type JSONSchemaDraft string
JSONSchemaDraft selects the default JSON Schema dialect used when a schema does not declare $schema. An explicit $schema in the document takes precedence.
const ( JSONSchemaDraft4 JSONSchemaDraft = "draft-04" JSONSchemaDraft6 JSONSchemaDraft = "draft-06" JSONSchemaDraft7 JSONSchemaDraft = "draft-07" JSONSchemaDraft2019 JSONSchemaDraft = "2019-09" JSONSchemaDraft2020 JSONSchemaDraft = "2020-12" )
type JSONSchemaFormat ¶ added in v0.3.0
JSONSchemaFormat registers a custom JSON Schema format without exposing the underlying JSON Schema engine API.
type JSONSchemaKeyword ¶ added in v0.3.0
type JSONSchemaKeyword struct {
Name string
Validate JSONSchemaKeywordFunc
Compile JSONSchemaKeywordCompileFunc
}
JSONSchemaKeyword defines one custom JSON Schema keyword. Set exactly one of Validate or Compile.
type JSONSchemaKeywordCompileFunc ¶ added in v0.3.0
type JSONSchemaKeywordCompileFunc func( keywordValue any, ) (JSONSchemaKeywordValidateFunc, error)
JSONSchemaKeywordCompileFunc compiles a keyword value from the schema into a runtime validation function. It is useful for parsing/validating keyword configuration once instead of on every validation call.
type JSONSchemaKeywordFunc ¶ added in v0.3.0
type JSONSchemaKeywordFunc func( keywordValue any, instance any, ctx *JSONSchemaKeywordValidationContext, )
JSONSchemaKeywordFunc is the simple custom-keyword form. The schema keyword value and current JSON instance value are supplied on each validation call.
type JSONSchemaKeywordIssue ¶ added in v0.3.0
JSONSchemaKeywordIssue is a diagnostic produced by a custom JSON Schema keyword. Path is relative to the instance value to which the keyword applies.
type JSONSchemaKeywordValidateFunc ¶ added in v0.3.0
type JSONSchemaKeywordValidateFunc func( instance any, ctx *JSONSchemaKeywordValidationContext, )
JSONSchemaKeywordValidateFunc validates one JSON instance value.
type JSONSchemaKeywordValidationContext ¶ added in v0.3.0
type JSONSchemaKeywordValidationContext struct {
// contains filtered or unexported fields
}
JSONSchemaKeywordValidationContext collects custom keyword diagnostics and evaluation annotations during one keyword validation call.
func (*JSONSchemaKeywordValidationContext) AddError ¶ added in v0.3.0
func (ctx *JSONSchemaKeywordValidationContext) AddError(message string)
AddError reports an error for the current instance value.
func (*JSONSchemaKeywordValidationContext) AddErrorAt ¶ added in v0.3.0
func (ctx *JSONSchemaKeywordValidationContext) AddErrorAt(path []string, message string)
AddErrorAt reports an error at a path relative to the current instance value.
func (*JSONSchemaKeywordValidationContext) MarkItemEvaluated ¶ added in v0.3.0
func (ctx *JSONSchemaKeywordValidationContext) MarkItemEvaluated(index int)
MarkItemEvaluated marks an array item as evaluated for unevaluatedItems semantics.
func (*JSONSchemaKeywordValidationContext) MarkPropertyEvaluated ¶ added in v0.3.0
func (ctx *JSONSchemaKeywordValidationContext) MarkPropertyEvaluated(name string)
MarkPropertyEvaluated marks an object property as evaluated for unevaluatedProperties semantics.
type JSONSchemaLoadFunc ¶ added in v0.3.0
JSONSchemaLoadFunc loads an external JSON Schema resource by absolute URL. The returned bytes must contain a JSON document.
type JSONSchemaVocabulary ¶ added in v0.3.0
type JSONSchemaVocabulary struct {
URL string
Keywords []JSONSchemaKeyword
}
JSONSchemaVocabulary groups custom keywords under a vocabulary URL. Vocabularies registered through JSONSchemaCompileOptions are activated for that compilation. For declaration-only/advanced vocabulary semantics use ConfigureCompiler.
type KeyValidator ¶
type KeyValidator interface {
ValidateKey(key string, keyNode *yaml.Node, path string, ctx *ValidationContext)
}
KeyValidator validates key names in mappings.
type NodeType ¶
type NodeType int
NodeType represents the expected YAML node type.
const ( // TypeAny accepts any type. TypeAny NodeType = iota // TypeNull represents null/nil values. TypeNull // TypeString represents string values. TypeString // TypeInt represents integer values. TypeInt // TypeFloat represents floating-point values (also accepts int). TypeFloat // TypeBool represents boolean values. TypeBool // TypeMap represents mapping nodes. TypeMap // TypeSequence represents sequence/array nodes. TypeSequence )
type UnknownKeyPolicy ¶
type UnknownKeyPolicy int
UnknownKeyPolicy determines how unknown keys in maps are handled.
const ( // UnknownKeyInherit uses ctx.StrictKeys to decide: // StrictKeys=true -> error // StrictKeys=false -> warning UnknownKeyInherit UnknownKeyPolicy = iota // UnknownKeyError treats unknown keys as errors. UnknownKeyError // UnknownKeyWarn treats unknown keys as warnings. UnknownKeyWarn // UnknownKeyIgnore silently ignores unknown keys. UnknownKeyIgnore )
type ValidationContext ¶
type ValidationContext struct {
// StrictKeys determines the default behavior for unknown keys
// when UnknownKeyPolicy is UnknownKeyInherit:
// true -> unknown keys are errors
// false -> unknown keys are warnings
StrictKeys bool
// StopOnFirst stops validation after the first error.
StopOnFirst bool
// StrictTypes uses only YAML tags for type inference.
// When false, values are parsed to infer types (e.g., "123" -> int).
StrictTypes bool
// YAML11Booleans enables YAML 1.1 boolean literals (yes/no/on/off).
// By default, only YAML 1.2 booleans (true/false) are recognized.
YAML11Booleans bool
// MaxBytes rejects inputs larger than this many bytes. Zero means unlimited.
MaxBytes int
// MaxDocuments limits the number of YAML documents in a stream. Zero means unlimited.
MaxDocuments int
// MaxDepth limits YAML container/schema traversal depth. The root value has depth 1.
// Zero means unlimited.
MaxDepth int
// MaxDiagnostics stops validation after this many errors/warnings. Zero means unlimited.
MaxDiagnostics int
// SourceLines contains the original YAML lines for error formatting.
SourceLines []string
// contains filtered or unexported fields
}
ValidationContext holds configuration and state for a validation run.
func NewValidationContext ¶
func NewValidationContext() *ValidationContext
NewValidationContext creates a new ValidationContext with default settings.
func (*ValidationContext) AddError ¶
func (ctx *ValidationContext) AddError(err ValidationError)
AddError adds an error to the context's collector.
func (*ValidationContext) Collector ¶
func (ctx *ValidationContext) Collector() *ErrorCollector
Collector returns the error collector.
func (*ValidationContext) IsStopped ¶
func (ctx *ValidationContext) IsStopped() bool
IsStopped returns true if validation has been stopped.
type ValidationError ¶
type ValidationError struct {
Level ErrorLevel
Code string // Stable machine-readable diagnostic code when available.
SchemaPath string // Schema location that produced the diagnostic, when available.
Path string // Path to the problematic node, e.g., "spec.containers[0].image"
Line int // 1-based line number (0 if unknown)
Column int // 1-based column number (0 if unknown)
Message string
Got string // Actual value/type description
Expected string // Expected value/type description
}
ValidationError represents a single validation issue.
func (ValidationError) Error ¶
func (e ValidationError) Error() string
type ValidationResult ¶
type ValidationResult struct {
// Collector contains all errors and warnings.
Collector *ErrorCollector
// SourceLines contains the original YAML lines.
SourceLines []string
// Truncated reports that validation stopped because MaxDiagnostics was reached.
Truncated bool
}
ValidationResult contains the validation outcome and context for formatting.
func (*ValidationResult) FormatAll ¶
func (r *ValidationResult) FormatAll(sortByPos bool) string
FormatAll formats all errors with source context.
func (*ValidationResult) HasErrors ¶
func (r *ValidationResult) HasErrors() bool
HasErrors returns true if there are any errors.
func (*ValidationResult) SortByPosition ¶
func (r *ValidationResult) SortByPosition()
SortByPosition sorts errors by position in the file.
type Validator ¶
type Validator struct {
// contains filtered or unexported fields
}
Validator performs YAML validation against a schema.
func CompileFieldSchema ¶ added in v0.3.0
func CompileFieldSchema(schema *FieldSchema) (*Validator, error)
CompileFieldSchema validates a native FieldSchema before constructing a Validator. New code should prefer this over NewValidator when schemas are assembled dynamically or loaded from configuration.
func NewValidator ¶
func NewValidator(schema *FieldSchema) *Validator
NewValidator creates a new Validator with the given schema.
func (*Validator) InferTypeForPublic ¶
func (v *Validator) InferTypeForPublic(node *yaml.Node, ctx *ValidationContext) NodeType
InferTypeForPublic exposes internal type inference for external validators.
func (*Validator) ValidateBytes ¶
func (v *Validator) ValidateBytes(data []byte) *ValidationResult
ValidateBytes validates YAML data and returns the result. Supports multi-document YAML (separated by ---).
func (*Validator) ValidateWithOptions ¶
func (v *Validator) ValidateWithOptions(data []byte, opts ValidationContext) *ValidationResult
ValidateWithOptions validates YAML data with custom options.
type ValueValidator ¶
type ValueValidator interface {
Validate(node *yaml.Node, path string, ctx *ValidationContext)
}
ValueValidator validates a node's value.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
yamlvalidator
command
|
|
|
examples
|
|
|
advanced
command
|
|
|
basic
command
Example demonstrates how to use the yamlvalidator package to validate Kubernetes-like manifests with comprehensive schema definitions.
|
Example demonstrates how to use the yamlvalidator package to validate Kubernetes-like manifests with comprehensive schema definitions. |
|
internal
|
|
|
thirdparty/xnet/idna
Package idna implements IDNA2008 using the compatibility processing defined by UTS (Unicode Technical Standard) #46, which defines a standard to deal with the transition from IDNA2003.
|
Package idna implements IDNA2008 using the compatibility processing defined by UTS (Unicode Technical Standard) #46, which defines a standard to deal with the transition from IDNA2003. |
|
thirdparty/xtext/secure/bidirule
Package bidirule implements the Bidi Rule defined by RFC 5893.
|
Package bidirule implements the Bidi Rule defined by RFC 5893. |
|
thirdparty/xtext/transform
Package transform provides reader and writer wrappers that transform the bytes passing through as well as various transformations.
|
Package transform provides reader and writer wrappers that transform the bytes passing through as well as various transformations. |
|
thirdparty/xtext/unicode/bidi
Package bidi contains functionality for bidirectional text support.
|
Package bidi contains functionality for bidirectional text support. |
|
thirdparty/xtext/unicode/norm
Package norm contains types and functions for normalizing Unicode strings.
|
Package norm contains types and functions for normalizing Unicode strings. |
|
pkg
|
|