Skip to content

sivukhin/cuebootstrap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cue-bootstrap

Simple CLI tool which allows you transform set of JSON objects into the CUE definition

Install it locally with command go install github.com/sivukhin/cuebootstrap/cmd/cuebootstrap@latest

Example

If you have two json files:

  • a.json
{
  "Zero": 0,
  "NumberString": 42,
  "List": [1, 2, 3],
  "Object": {"Key": "cue", "Value": "awesome"}
}
  • b.json
{
  "Zero": 0,
  "NumberString": "string",
  "List": [42],
  "Object": {"Key": "json"}
}

You can create cue definition which will unify all JSON values with cue-bootstrap tool:

$> ./cue-bootstrap -inputs '*.json'
{
	Zero: number | *0
	List: [...number]
	NumberString: number | string
	Object: {
		Key:    string
		Value?: string | *"awesome"
	}
} 

You can also provide skeleton shape of the final schema with CUE definition.

For example, if you have the following JSON array

[{"type":"insert","id":"1","value":"json"},{"type":"delete","id":"2"},{"type":"insert","id":"1","value":"cue","timeout":1000}]

You can guide cueboostrap into how you want your final schema looks like:

#item: type: string @discriminative()
#array: [...#item] @root()

Note, that you need to mark root schema definition with @root() tag. Also, you can mark string fields with @discriminative() tag in order to split schemas into multiple independent schemas based on the string value.

Finally, you will get following nice-looking schema

#item: {
    #insert: {
        id:       string
        value:    string
        timeout?: number
    }
    #delete: {
        id: string
    }
    type: "insert" | "delete"
    if type == "insert" {
        #insert
    }
    if type == "delete" {
        #delete
    }
}
#array: [...#item]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published