types-as-schema
v2.2.0
Published
Genetate json schema, protobuf file from typescript types.
Downloads
46
Readme
types-as-schema
Genetate json schema, protobuf file and swagger doc from typescript types.
install
yarn global add types-as-schema
usage
types-as-schema -p ./types-as-schema.config.ts
types-as-schema.config.ts
import type { Configuration } from "types-as-schema"
const config: Configuration = {
files: ['demo/types.ts'],
jsonSchemaOutputDirectory: 'demo/',
debugOutputPath: 'demo/debug.json',
protobufOutputPath: 'demo/cases.proto',
plugins: [
(typeDeclarations) => {
const content = `export const typeNames = [
${typeDeclarations.map(d => `'${d.name}',`).join('\n')}
]
`
return [
{
path: 'demo/custom.ts',
content,
},
]
},
],
}
export default config
demo/types.ts
/**
* @entry a.json
**/
interface A extends B {
a: string
}
interface B {
b: number
}
demo/a.json
{
"$ref": "#/definitions/A",
"definitions": {
"A": {
"type": "object",
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "number"
}
},
"required": [
"a",
"b"
],
"additionalProperties": false
}
}
}
demo/types.proto
syntax = "proto3";
message B {
double b = 1;
}
message A {
string a = 1;
double b = 2;
}
demo/debug.json
[
{
"kind": "object",
"name": "B",
"members": [
{
"name": "b",
"type": {
"kind": "number",
"type": "number",
"position": {
"file": "",
"line": 8,
"character": 5
}
}
}
],
"minProperties": 1,
"maxProperties": 1,
"position": {
"file": "",
"line": 7,
"character": 0
}
},
{
"kind": "object",
"name": "A",
"members": [
{
"name": "a",
"type": {
"kind": "string",
"position": {
"file": "",
"line": 4,
"character": 5
}
}
},
{
"name": "b",
"type": {
"kind": "number",
"type": "number",
"position": {
"file": "",
"line": 8,
"character": 5
}
}
}
],
"minProperties": 2,
"maxProperties": 2,
"entry": "a.json",
"position": {
"file": "",
"line": 3,
"character": 0
},
"comments": [
"/**\n * @entry a.json\n **/"
],
"jsDocs": [
{
"name": "entry",
"comment": "a.json"
}
]
}
]
demo/custom.ts
export const typeNames = [
'B',
'A',
]
options
parameters | description
--- | ---
-p
| configuration file
--json
| directory for generated json files
--protobuf
| generated protobuf file
--swagger
| generated swagger json file
--swagger-base
| swagger json file that generation based on
--typescript
| generated typescript file
--debug
| generated file with debug information in it
--watch
or -w
| watch mode
--loose
| do not force additionalProperties
--config
| generate file by the config file, can be multiple
--markdown
| generated markdown file
-h
or --help
| Print this message.
-v
or --version
| Print the version
API
import { generate } from 'types-as-schema'
await generate({
files: ['demo/types.ts'],
})