Skip to content

Latest commit

 

History

History
157 lines (118 loc) · 5.61 KB

README.md

File metadata and controls

157 lines (118 loc) · 5.61 KB

transform-json-types All Contributors

An utility to generate Flow, TypeScript, Rust Serde Struct and Scala Case Class from JSON.

Note : It also detects optional properties for TS/Flow from a Collection.

Installation

npm install transform-json-types

The online REPL is available at

Basic Usage

import transform from "transform-json-types"

const json = `{
  "hello": "world"
}`

console.log(transform(json, {
  lang: "typescript"
}))

// interface RootJson {
//   hello: string
// }

console.log(transform(json, {
	lang: "rust-serde"
}))

// #[derive(Serialize, Deserialize)]
// struct RootInterface {
//   hello: String,
// }

Usage with sarcastic and Flow

//@flow
import is, { type AssertionType } from "sarcastic"

// Interface generated by "transform-json-types"
const PersonInterface = is.shape({
  name: is.string,
  age: is.number
});

// Use it like this:
type Person = AssertionType<typeof PersonInterface>
const assertPerson = (val: mixed): Person =>
  is(val, PersonInterface, "Person")
const person = assertPerson(JSON.parse('{"name":"Giulio","age":43}')))

Usage with io-ts and TypeScript

import * as t from "io-ts"

// Interface generated by "transform-json-types"
const PersonInterface = t.type({
  name: t.string,
  age: t.number
});

// Use it like this:
PersonInterface.decode(JSON.parse('{"name":"Giulio","age":43}')) // => Right({name: "Giulio", age: 43})
PersonInterface.decode(JSON.parse('{"name":"Giulio"}')) // => Left([...])
type Person = t.TypeOf<typeof Person>

Usage with runtypes and TypeScript

import * as rt from "runtypes"

// Interface generated by "transform-json-types"
const PersonInterface = rt.Record({
  name: rt.String,
  age: rt.Number
});

// Use it like this:
PersonInterface.check(JSON.parse('{"name":"Giulio","age":43}')) // => {name: "Giulio", age: 43}

API

transform(json, [options])

json : String | JSON

You can pass a parsed JSON or a stringified JSON.

Options

Option Default Description
lang 'flow' One of flow, typescript, scala, sarcastic, io-ts or rust-serde
rustCase 'camelCase' either snakeCase or camelCase

Inspirations

Majority of the inspiration was from xperiment's json2dts

Development

  1. Fork and clone the repo.
  2. Create a new branch.
  3. Create features or fix bugs.
  4. Write test to improve stability.
  5. Open a PR.

License

MIT @ Ritesh Kumar

Contributors

Thanks goes to these wonderful people (emoji key):


Ritesh Kumar

💻 📖 🤔

Florian Gilcher

💻

Pedro Casaubon

💻 🤔

stereobooster

💻

Will Fuqua

📖

Simen A. W. Olsen

💻

This project follows the all-contributors specification. Contributions of any kind welcome!