@naturalcycles/json-schema-lib

JSON schema to/from TypeScript parser/generator

Usage no npm install needed!

<script type="module">
  import naturalcyclesJsonSchemaLib from 'https://cdn.skypack.dev/@naturalcycles/json-schema-lib';
</script>

README

@naturalcycles/json-schema-lib

JSON schema to/from TypeScript parser/generator

npm code style: prettier

Allows to generate JSON Schema from a set of Typescript files with Interfaces (also Types and Enums).

Also, to generate Typescript files from JSON schemas (reverse).

Status: experimental! Everything is subject to change!

Example

Install json-schema-lib as your devDependency:

yarn add -D @naturacycles/json-schema-lib

Define a jsonSchemaGenerator.cfg.js in the root of you project:

module.exports = {
  paths: ['src/types/*.ts'],
  outputDir: 'resources/schemas',
}

Config says to scan all *.ts files in src/types, parse them, generate JSON schemas, write them into resources/schemas folder.

Similar projects

Develop

Typescript AST debugging: https://ts-ast-viewer.com/

Supported

  • Schemas from:
    • Interfaces
    • Types
    • Enums
    • Classes
  • string, number, boolean
  • Literal types, e.g someString, 15, true
  • null type
  • object, array
  • tuple
  • enum (string and number values)
  • optional/required properties
  • Union types (|), Intersections (&), extends
  • jsdoc @validationType (e.g. integer)
  • Type references, e.g. p: Person (where Person is defined elsewhere, can be in another file)
  • Parsing a list of files (not necessary for all types to be in 1 file)
  • Partial, Required
  • Record<A, B>
  • Indexed properties ({ [name: string]: string })
  • StringMap (aka Dictionary)
  • jsdoc tags:
    • validationType to override type, e.g. @validationType integer
    • General: deprecated, readOnly, writeOnly, default
    • String: pattern, format, minLength, maxLength
    • Number: multipleOf, minimum, exclusiveMinimum, maximum, exclusiveMaximum
    • Object: additionalProperties, minProperties, maxProperties
    • Array: minItems, maxItems, uniqueItems
    • Schema composition: if, then, else, dependencies, dependentRequired, dependentSchemas

Currently NOT supported

  • Omit, Pick
  • Generic interfaces, e.g. interface MyType<T> { current: T, future: T }
  • typeof
  • keyof
  • Conditional types