Genetate json schema, protobuf file and swagger doc from typescript types.
yarn global add types-as-schema
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',
]
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 |
import { generate } from 'types-as-schema'
await generate({
files: ['demo/types.ts'],
})