2.2.0 • Published 1 year ago

types-as-schema v2.2.0

Weekly downloads
27
License
MIT
Repository
github
Last release
1 year ago

types-as-schema

Dependency Status devDependency Status Build Status: Windows Github CI npm version Downloads type-coverage

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

parametersdescription
-pconfiguration file
--jsondirectory for generated json files
--protobufgenerated protobuf file
--swaggergenerated swagger json file
--swagger-baseswagger json file that generation based on
--typescriptgenerated typescript file
--debuggenerated file with debug information in it
--watch or -wwatch mode
--loosedo not force additionalProperties
--configgenerate file by the config file, can be multiple
--markdowngenerated markdown file
-h or --helpPrint this message.
-v or --versionPrint the version

API

import { generate } from 'types-as-schema'

await generate({
  files: ['demo/types.ts'],
})
2.2.0

1 year ago

2.1.4

2 years ago

2.1.3

2 years ago

1.44.0

2 years ago

2.0.0

2 years ago

1.48.0

2 years ago

1.48.1

2 years ago

1.51.0

2 years ago

1.41.1

2 years ago

1.41.0

2 years ago

1.45.0

2 years ago

1.49.0

2 years ago

1.42.0

2 years ago

1.46.0

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.1.0

2 years ago

1.43.1

2 years ago

1.43.0

2 years ago

1.47.1

2 years ago

1.47.0

2 years ago

1.47.3

2 years ago

1.47.2

2 years ago

1.50.1

2 years ago

1.50.0

2 years ago

1.40.2

2 years ago

1.40.1

2 years ago

1.39.1

3 years ago

1.39.2

3 years ago

1.39.0

3 years ago

1.40.0

3 years ago

1.38.0

3 years ago

1.37.1

4 years ago

1.37.0

4 years ago

1.36.2

4 years ago

1.36.1

4 years ago

1.36.0

4 years ago

1.35.1

4 years ago

1.35.0

4 years ago

1.34.4

4 years ago

1.34.3

4 years ago

1.34.2

4 years ago

1.34.1

4 years ago

1.34.0

4 years ago

1.33.1

4 years ago

1.33.0

4 years ago

1.32.1

4 years ago

1.32.0

4 years ago

1.31.3

4 years ago

1.31.2

4 years ago

1.31.1

4 years ago

1.31.0

4 years ago

1.30.0

4 years ago

1.29.2

4 years ago

1.29.1

5 years ago

1.29.0

5 years ago

1.28.2

5 years ago

1.28.1

5 years ago

1.28.0

5 years ago

1.27.0

5 years ago

1.26.0

5 years ago

1.25.0

5 years ago

1.24.0

5 years ago

1.23.1

5 years ago

1.23.0

5 years ago

1.22.1

5 years ago

1.22.0

5 years ago

1.21.7

5 years ago

1.21.6

5 years ago

1.21.5

5 years ago

1.21.4

5 years ago

1.21.3

5 years ago

1.21.2

6 years ago

1.21.1

6 years ago

1.21.0

6 years ago

1.20.0

6 years ago

1.19.2

6 years ago

1.19.1

6 years ago

1.19.0

6 years ago

1.18.4

6 years ago

1.18.3

6 years ago

1.18.2

6 years ago

1.18.1

6 years ago

1.18.0

6 years ago

1.17.0

6 years ago

1.16.0

6 years ago

1.15.0

6 years ago

1.14.1

6 years ago

1.14.0

6 years ago

1.13.0

6 years ago

1.12.2

6 years ago

1.12.1

6 years ago

1.12.0

6 years ago

1.11.3

6 years ago

1.11.2

6 years ago

1.11.1

6 years ago

1.11.0

6 years ago

1.10.2

6 years ago

1.10.1

6 years ago

1.10.0

6 years ago

1.9.0

6 years ago

1.8.1

6 years ago

1.8.0

6 years ago

1.7.1

6 years ago

1.7.0

6 years ago

1.6.0

7 years ago

1.5.0

7 years ago

1.4.0

7 years ago

1.3.0

7 years ago

1.2.1

7 years ago

1.2.0

7 years ago

1.1.0

7 years ago

1.0.0

7 years ago