0.1.1 • Published 4 years ago

@ts-schema-autogen/types v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

TypeScript Schema Automatic Generator

Read config files and generate json schema files

Development

System Requirements

  • Node.js ≥ 13.6.0
  • Package Manager: pnpm
  • Git

Scripts

Build

pnpm run build

Clean

pnpm run clean

Test

Test Everything
pnpm test
Test Everything Without Coverage
pnpm run test:no-coverage
Test Changed Files Only
pnpm test -- --onlyChanged
Update Jest Snapshot
pnpm test -- -u

Start Node.js REPL

This starts a Node.js REPL where you can import every module inside packages/ folder.

pnpm run repl

Installation

This program requires Node.js to run.

npm install --global @ts-schema-autogen/cli

Usages

The program will scan through directory tree from working directory and search for config files whose names end with .schema.autogen.{json,yaml} to perform actions.

Config File

A config file is a JSON or YAML file that satisfies the Config type or config.schema.json JSON schema.

Config files whose names end with either .schema.autogen.json or .schema.autogen.yaml will be scanned by ts-schema-autogen, others will be skipped.

A config file can inherit compilerOptions and schemaSettings from other config files via extends property.

If your editor support IntelliSense for JSON schemas (such as Visual Studio Code), it is recommended that you have $schema property set to https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json. Alternatively, you can use npm to install @ts-schema-autogen/schemas and set $schema property to ./node_modules/@ts-schema-autogen/schemas/config.schema.json.

Examples

Read 1 symbol from 1 TypeScript file and create 1 schema file

input.ts

export interface MyType {
  foo: 123
  bar: 456
}

.schema.autogen.json

{
  "$schema": "https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json",
  "instruction": {
    "compilerOptions": {
      "strictNullChecks": true,
      "strict": true,
      "target": "ES2018",
      "noEmit": true,
      "lib": ["ESNext"]
    },
    "schemaSettings": {
      "required": true
    },
    "input": "input.ts",
    "symbol": "MyType",
    "output": "output.json"
  }
}
Read 2 symbols from 2 TypeScript files and create 2 schema files

foo.ts

/// <reference path="./bar.ts" />
export interface Foo {
  readonly bar?: Bar
}

bar.ts

/// <reference path="./foo.ts" />
export interface Bar {
  readonly foo?: Foo
}

.schema.autogen.json

{
  "$schema": "https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json",
  "instruction": {
    "compilerOptions": {
      "strictNullChecks": true,
      "strict": true,
      "target": "ES2018",
      "noEmit": true,
      "lib": ["ESNext"]
    },
    "schemaSettings": {
      "required": true
    },
    "input": [
      "foo.ts",
      "bar.ts"
    ],
    "list": [
      {
        "symbol": "Foo",
        "output": "foo.schema.json"
      },
      {
        "symbol": "Bar",
        "output": "bar.schema.json"
      }
    ]
  }
}
If you have multiple config files, you may want to use extends to inherit compilerOptions and schemaSettings from a common source

settings.json

{
  "$schema": "https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json",
  "instruction": {
    "compilerOptions": {
      "strictNullChecks": true,
      "strict": true,
      "target": "ES2018",
      "noEmit": true,
      "lib": ["ESNext"]
    },
    "schemaSettings": {
      "required": true
    }
  }
}

foo.schema.autogen.json

{
  "$schema": "https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json",
  "extends": "settings.json",
  "instruction": {
    "input": "foo.ts",
    "symbol": "Foo",
    "output": "foo.schema.json"
  }
}

bar.schema.autogen.json

{
  "$schema": "https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json",
  "extends": "settings.json",
  "instruction": {
    "input": "bar.ts",
    "symbol": "Bar",
    "output": "bar.schema.json"
  }
}

CLI Commands

ts-schema-autogen <command>

Commands:
  ts-schema-autogen test      Check for out-of-date schema files
  ts-schema-autogen generate  Generate schema files
  ts-schema-autogen clean     Delete generated schema files

Options:
  --version  Show version number                                       [boolean]
  --pattern  Regular expression that matches basename of config files
                    [string] [default: "\.schema\.autogen(\.(json|yaml|yml))?$"]
  --ignored  Name of directories to be ignored
                                      [array] [default: [".git","node_modules"]]
  --help     Show help                                                 [boolean]

License

MIT © Hoàng Văn Khải