Skip to content

v0.9.0

Choose a tag to compare

@LarsArtmann LarsArtmann released this 12 Jun 00:32

What's New

AnyDataMarshaler — render arbitrary data, not just TableData

New RenderAnyData() dispatch for rendering any Go value. JSON, YAML, and TOML register handlers automatically.

output.RenderAnyData(myStruct, output.FormatJSON, output.RenderOptions{})

All 16 formats now dispatch via RenderTableData()

D2, DOT, Mermaid, and PlantUML now register TableDataMarshaler via init(). Previously only 10 formats were registered.

Generic formatRegistry[T]

Thread-safe generic registry replaces 3 separate mutex+map patterns. Same formatRegistry[T] backs shape capabilities, table-data marshalers, and any-data marshalers.

AddRowChecked

err := data.AddRowChecked(row) // returns ErrColumnMismatch if column count differs from headers

NOM event constants

nom.EventWorkflowStarted  // instead of "workflow.started"
nom.EventActivityCompleted // instead of "activity.completed"

What's Changed

  • Added: RenderAnyData, RegisterAnyDataMarshaler, RegisteredAnyDataFormats, RegisteredTableDataFormats
  • Added: TableData.AddRowChecked() with column-count validation
  • Added: nom.Event* typed string constants
  • Added: D2, DOT, Mermaid, PlantUML register as TableDataMarshaler
  • Changed: Generic formatRegistry[T] replaces 3 mutex+map patterns
  • Changed: dt.Build() errors propagated instead of silently discarded
  • Changed: NOM timing cache async save errors now logged
  • Deprecated: delimited.MarshalTSV(data any) → use MarshalTSVFromTableData
  • Deprecated: graph.NewGraphNodeID/NewGraphNodeLabel → use output.NewBrandedID
  • Deprecated: nom.ParseActivityID/ParseWorkflowID → use direct type conversion

Full Changelog: v0.8.0...v0.9.0