{
  "$id": "https://json.schemastore.org/jsdoc-1.0.0.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "plugins": {
      "type": "array",
      "title": "Configuring plugins",
      "description": "Enables plugins for JSDoc",
      "default": [],
      "examples": [["plugins/markdown", "plugins/summarize"]]
    },
    "recurseDepth": {
      "type": "integer",
      "title": "Specifying recursion depth",
      "default": 10,
      "$comment": "Is used only if `jsdoc` command is invoked with `-r` flag",
      "description": "Controls recursion depth for source files and tutorials"
    },
    "source": {
      "type": "object",
      "title": "Specifying input files",
      "description": "Determines the set of input files",
      "properties": {
        "include": {
          "examples": [
            ["myProject/a.js", "myProject/lib", "myProject/_private"]
          ],
          "type": "array",
          "title": "Input files paths",
          "description": "An array of paths to input files",
          "$comment": "`-r` flag for `jsdoc` command will recurse in subdirectories of paths listed"
        },
        "exclude": {
          "examples": [["myProject/lib/ignore.js"]],
          "type": "array",
          "title": "Input files exclusion paths",
          "description": "An array of paths to exclude from input",
          "$comment": "With JSDoc ^3.3.0 may include subdirectories of include"
        },
        "includePattern": {
          "type": "string",
          "title": "Inclusion RegExp",
          "default": ".+\\.js(doc|x)?$",
          "$comment": "By default, .js, .jsx, .jsdoc files are included",
          "description": "Forces input filenames to match regular expression"
        },
        "excludePattern": {
          "type": "string",
          "title": "Exclusion RegExp",
          "default": "(^|\\/|\\\\)_",
          "$comment": "By default, underscored files and folders are excluded",
          "description": "Forces input filenames to match regular expression"
        }
      },
      "additionalProperties": false
    },
    "sourceType": {
      "type": "string",
      "enum": ["module", "script"],
      "default": "module",
      "title": "Specifying source type",
      "description": "Determines how input files are parsed"
    },
    "opts": {
      "$comment": "The command line options take precedence over config file",
      "type": "object",
      "title": "Incorporating CLI options",
      "description": "Determines flags that `jsdoc` command will be invoked with",
      "additionalProperties": false,
      "properties": {
        "access": {
          "$comment": "Equivalent to `-a` flag",
          "default": "all",
          "description": "Only display symbols with the given `access` property",
          "enum": ["all", "private", "protected", "public", "undefined"],
          "title": "Symbol access",
          "type": "string"
        },
        "debug": {
          "$comment": "Equivalent to `--debug` flag",
          "description": "Log information that can help debug issues in JSDoc itself",
          "title": "Log debug info",
          "type": "boolean"
        },
        "destination": {
          "$comment": "Equivalent to `-d` flag",
          "default": "./out/",
          "description": "The path to the output folder for the generated documentation",
          "title": "Output folder",
          "type": "string"
        },
        "encoding": {
          "$comment": "Equivalent to `-e` flag",
          "default": "utf8",
          "description": "Assume this encoding when reading all source files",
          "title": "Input files encoding",
          "type": "string"
        },
        "package": {
          "$comment": "Equivalent to `-p` flag",
          "description": "The `package.json` file that contains the project name, version, and other details",
          "title": "Package",
          "type": "string"
        },
        "pedantic": {
          "default": false,
          "description": "Treat errors as fatal errors, and treat warnings as errors",
          "title": "Pedantic",
          "type": "boolean"
        },
        "readme": {
          "$comment": "Equivalent to `-R` flag",
          "description": "The README.md file to include in the generated documentation",
          "title": "README.md",
          "type": "string"
        },
        "recurse": {
          "$comment": "Equivalent to `-r` flag",
          "default": false,
          "description": "Recurses to subdirectories when searching input files",
          "title": "Recurse to subdirectories",
          "type": "boolean"
        },
        "template": {
          "$comment": "Equivalent to `-t` flag",
          "default": "templates/default",
          "description": "The path to the template to use for generating output",
          "title": "Output template",
          "type": "string"
        },
        "test": {
          "$comment": "Equivalent to `-T` flag. Won't work if installed via NPM",
          "default": false,
          "description": "Run JSDoc's test suite, and print the results to the console",
          "title": "Run tests",
          "type": "boolean"
        },
        "tutorials": {
          "$comment": "Equivalent to `-u` flag",
          "description": "Directory in which JSDoc should search for tutorials",
          "examples": ["path/to/tutorials", "./docs/tutorials"],
          "title": "Tutorials path",
          "type": "string"
        }
      }
    },
    "tags": {
      "additionalProperties": false,
      "description": "Controls allowed JSDoc tags and their interpretation",
      "properties": {
        "allowUnknownTags": {
          "$comment": "If set to `false`, emits a warning. If set to an array, whitelists tags",
          "default": true,
          "description": "Determines how to handle unrecognized tags",
          "items": {
            "title": "JSDoc tag",
            "type": "string"
          },
          "title": "Unknown tags",
          "type": ["boolean", "array"],
          "uniqueItems": true
        },
        "dictionaries": {
          "description": "Controls which tags JSDoc recognizes and how they are interpreted",
          "items": {
            "$comment": "^3.3.0 two dictionaries: JSDoc and Closure Compiler",
            "default": ["jsdoc", "closure"],
            "enum": ["jsdoc", "closure"],
            "title": "Dictionary",
            "type": "string"
          },
          "title": "JSDoc dictionaries",
          "type": "array"
        }
      },
      "title": "Configuring tags and tag dictionaries",
      "type": "object"
    },
    "templates": {
      "description": "Affects the appearance and content of generated documentation",
      "properties": {
        "cleverLinks": {
          "$comment": "If `true`, text of @link tag that is a URL will be rendered in normal font, else in monospace",
          "default": false,
          "description": "Controls @link tag text rendering",
          "title": "@link URL",
          "type": "boolean"
        },
        "default": {
          "properties": {
            "includeDate": {
              "$comment": "^3.3.0 can be set to `false` to omit current date",
              "default": true,
              "description": "Controls if current date is displayed in the footer of documentation",
              "title": "Showing the current date",
              "type": "boolean"
            },
            "layoutFile": {
              "$comment": "^3.4.0 can be set to custom layout file",
              "default": "layout.tmpl",
              "description": "Path to layout file to use for documentation template",
              "title": "Overriding layout file",
              "type": "string"
            },
            "outputSourceFiles": {
              "$comment": "^3.3.0 can be set to `false` to remove links to source files",
              "default": true,
              "description": "Disables pretty-printed source files",
              "title": "Generating pretty-printed source files",
              "type": "boolean"
            },
            "staticFiles": {
              "additionalProperties": false,
              "properties": {
                "exclude": {
                  "description": "An array of paths that should not be copied to the output directory",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "excludePattern": {
                  "description": "A regular expression indicating which files to skip",
                  "type": "string"
                },
                "include": {
                  "description": "An array of paths whose contents should be copied to the output directory",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "includePattern": {
                  "description": "A regular expression indicating which files to copy",
                  "type": "string"
                }
              },
              "title": "Copying static files",
              "type": "object"
            },
            "useLongnameInNav": {
              "$comment": "^3.4.0 can be set to `true` to use longhands",
              "default": false,
              "description": "Controls if shortened or longhand version of a symbol will be shown in documentation",
              "title": "Showing longnames",
              "type": "boolean"
            }
          }
        },
        "monospaceLinks": {
          "$comment": "If `true`, all link text of inline @link tag will be rendered in monospace font",
          "default": false,
          "description": "Controls @link tag text rendering",
          "title": "@link text",
          "type": "boolean"
        }
      },
      "title": "Configuring templates",
      "type": "object"
    }
  },
  "title": "JSON Schema for JSDoc configuration files",
  "type": "object"
}
