0.7.0 • Published 5 years ago
transform-json-types v0.7.0
transform-json-types
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
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
- Fork and clone the repo.
- Create a new branch.
- Create features or fix bugs.
- Write test to improve stability.
- 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