{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/typewiz.json",
  "additionalProperties": false,
  "properties": {
    "common": {
      "type": "object",
      "properties": {
        "rootDir": {
          "type": "string",
          "description": "If given, all the file paths in the collected type info will be resolved relative to this directory."
        },
        "tsConfig": {
          "type": "string",
          "description": "Path to your project's tsconfig file. This is required for several other options like implicit this instrumentation and type inference using static analysis."
        }
      }
    },
    "instrument": {
      "type": "object",
      "properties": {
        "instrumentCallExpressions": {
          "type": "boolean",
          "description": "Try to find even more types by combining static analysis with the runtime analysis. TypeWiz will try to use TypeScript's inferred types when determining the type of a function argument.",
          "default": false
        },
        "instrumentImplicitThis": {
          "type": "boolean",
          "description": "Find type of this in non-class member functions. Requires common.tsConfig to be set",
          "default": false
        },
        "skipTwizDeclarations": {
          "type": "boolean",
          "description": "Don't add a declaration of $_$twiz to instrumented files.",
          "default": false
        }
      }
    },
    "applyTypes": {
      "type": "object",
      "properties": {
        "prefix": {
          "type": "string",
          "description": "A prefix that will be added in front of each type applied. You can use a javascript comment to mark the automatically added types. The prefix will be added after the colon character, just before the actual type."
        }
      }
    }
  },
  "title": "Typewiz configuration schema",
  "type": "object"
}
