Code Monkey home page Code Monkey logo

cuebootstrap's Introduction

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]

cuebootstrap's People

Contributors

sivukhin avatar andrewkostousov avatar

Stargazers

Mike Boda avatar Fabian Peters avatar Justen Stall avatar  avatar Jonathan Matthews avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.