0.7.0 • Published 5 years ago

transform-json-types v0.7.0

Weekly downloads
105
License
MIT
Repository
github
Last release
5 years ago

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>

API

transform(json, options)

json : String | JSON

You can pass a parsed JSON or a stringified JSON.

Options

OptionDefaultDescription
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📖

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

0.7.0

5 years ago

0.6.0

5 years ago

0.5.2

6 years ago

0.5.1

6 years ago

0.5.0

6 years ago

0.4.1

6 years ago

0.4.0

6 years ago

0.3.0

6 years ago

0.2.10

7 years ago

0.2.9

7 years ago

0.2.8

7 years ago

0.2.7

7 years ago

0.2.6

7 years ago

0.2.5

7 years ago

0.2.4

7 years ago

0.2.3

7 years ago

0.2.2

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago