2.2.0 • Published 3 years ago

types-as-schema v2.2.0

Weekly downloads
27
License
MIT
Repository
github
Last release
3 years 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

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

1.44.0

3 years ago

2.0.0

3 years ago

1.48.0

3 years ago

1.48.1

3 years ago

1.51.0

3 years ago

1.41.1

4 years ago

1.41.0

4 years ago

1.45.0

3 years ago

1.49.0

3 years ago

1.42.0

4 years ago

1.46.0

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

1.43.1

4 years ago

1.43.0

4 years ago

1.47.1

3 years ago

1.47.0

3 years ago

1.47.3

3 years ago

1.47.2

3 years ago

1.50.1

3 years ago

1.50.0

3 years ago

1.40.2

4 years ago

1.40.1

4 years ago

1.39.1

4 years ago

1.39.2

4 years ago

1.39.0

4 years ago

1.40.0

4 years ago

1.38.0

5 years ago

1.37.1

5 years ago

1.37.0

5 years ago

1.36.2

5 years ago

1.36.1

5 years ago

1.36.0

5 years ago

1.35.1

5 years ago

1.35.0

5 years ago

1.34.4

5 years ago

1.34.3

5 years ago

1.34.2

5 years ago

1.34.1

5 years ago

1.34.0

5 years ago

1.33.1

5 years ago

1.33.0

5 years ago

1.32.1

5 years ago

1.32.0

5 years ago

1.31.3

5 years ago

1.31.2

5 years ago

1.31.1

5 years ago

1.31.0

5 years ago

1.30.0

5 years ago

1.29.2

5 years ago

1.29.1

6 years ago

1.29.0

6 years ago

1.28.2

6 years ago

1.28.1

6 years ago

1.28.0

6 years ago

1.27.0

7 years ago

1.26.0

7 years ago

1.25.0

7 years ago

1.24.0

7 years ago

1.23.1

7 years ago

1.23.0

7 years ago

1.22.1

7 years ago

1.22.0

7 years ago

1.21.7

7 years ago

1.21.6

7 years ago

1.21.5

7 years ago

1.21.4

7 years ago

1.21.3

7 years ago

1.21.2

7 years ago

1.21.1

7 years ago

1.21.0

7 years ago

1.20.0

7 years ago

1.19.2

7 years ago

1.19.1

7 years ago

1.19.0

7 years ago

1.18.4

7 years ago

1.18.3

7 years ago

1.18.2

7 years ago

1.18.1

7 years ago

1.18.0

7 years ago

1.17.0

7 years ago

1.16.0

7 years ago

1.15.0

7 years ago

1.14.1

7 years ago

1.14.0

7 years ago

1.13.0

7 years ago

1.12.2

7 years ago

1.12.1

7 years ago

1.12.0

7 years ago

1.11.3

7 years ago

1.11.2

7 years ago

1.11.1

7 years ago

1.11.0

7 years ago

1.10.2

7 years ago

1.10.1

7 years ago

1.10.0

7 years ago

1.9.0

7 years ago

1.8.1

7 years ago

1.8.0

7 years ago

1.7.1

7 years ago

1.7.0

7 years ago

1.6.0

8 years ago

1.5.0

8 years ago

1.4.0

8 years ago

1.3.0

8 years ago

1.2.1

8 years ago

1.2.0

8 years ago

1.1.0

8 years ago

1.0.0

8 years ago