thema
thema copied to clipboard
A CUE-based framework for portable, evolvable schema
Currently, running `thema` outside of either the thema repo itself, or outside of a `cue.mod` module context that does not have the `github.com/grafana/thema` codebase within its `cue.mod/pkg` dir, will result...
This introduces generics in the base thema package, allowing the pairing of a Go type with a `Schema` (`TypedSchema`) and its corresponding `Instance` (`TypedInstance`). Building on these generics, we replace...
For Thema's versioning rules to be meaningfully enforceable, we have to retain the basic rule that lineages are self-contained structures - no external references. However, it is clear that there...
In #45, we added a basic error reprocessing layer that leveraged the knowledge we have about the schemainstance relationship to make validation errors messages clearer and contextualized for Thema. Similar...
For anyone not terribly interested in learning about the details of CUE and just wanting Thema to be a schema framework (our core target use case), validation error output is...
It's essential that we communicate clearly about what the invariants of Thema are. They are the truly unique value proposition of the system, and they're referred to all over the...
As i was working on a larger design doc encompassing Thema, it occurred to me that a good way of describing [a main intended usage pattern for Thema's versioning system](https://github.com/grafana/thema/blob/main/docs/go-usage.md)...
In the formatters introduced in e.g. in #56 and #59, there are a number of calls to `cue.Value.Eval()`. IIRC, i used these originally as a quick hack to eliminate printed...
Thema's versioning system has two digits, e.g. `v0.0` - what people coming from semver would be naturally inclined to call a "major version" and a "minor version." i resisted this...
Thema's kernels are an ideal place to use generics: Make a kernel with type `T`; take `[]byte` in, spit `T` out. I haven't played enough with generics yet to have...