{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/task-json/latest.json",
  "x-lintel": {
    "source": "https://www.schemastore.org/task.json",
    "sourceSha256": "128ae7f1545c901fc857959cf288c08363c2a4d12badb0fbcd89f69c9719cf9e",
    "fileMatch": [
      "task.json",
      "tasks.json"
    ],
    "parsers": [
      "json"
    ]
  },
  "type": "object",
  "properties": {
    "args": {
      "description": "The arguments passed to the command. Can be omitted.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "command": {
      "description": "The command to be executed. Can be an external program or a shell\ncommand.",
      "type": "string"
    },
    "isBackground": {
      "description": "Specifies whether a global command is a background task.",
      "type": "boolean"
    },
    "linux": {
      "$ref": "#/$defs/BaseTaskConfiguration",
      "description": "Linux specific task configuration"
    },
    "options": {
      "$ref": "#/$defs/CommandOptions",
      "description": "The command options used when the command is executed. Can be omitted."
    },
    "osx": {
      "$ref": "#/$defs/BaseTaskConfiguration",
      "description": "macOS specific task configuration"
    },
    "presentation": {
      "$ref": "#/$defs/PresentationOptions",
      "description": "The presentation options."
    },
    "problemMatcher": {
      "anyOf": [
        {
          "$ref": "#/$defs/ProblemMatcher"
        },
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/ProblemMatcher"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "string"
        }
      ],
      "description": "The problem matcher to be used if a global command is executed (e.g. no tasks\nare defined). A tasks.json file can either contain a global problemMatcher\nproperty or a tasks property but not both."
    },
    "tasks": {
      "description": "The configuration of the available tasks. A tasks.json file can either\ncontain a global problemMatcher property or a tasks property but not both.",
      "items": {
        "$ref": "#/$defs/TaskDescription"
      },
      "type": "array"
    },
    "type": {
      "description": "The type of a custom task. Tasks of type \"shell\" are executed\ninside a shell (e.g. bash, cmd, powershell, ...)",
      "enum": [
        "process",
        "shell",
        "npm"
      ],
      "type": "string"
    },
    "version": {
      "description": "The configuration's version number",
      "enum": [
        "2.0.0"
      ],
      "type": "string"
    },
    "windows": {
      "$ref": "#/$defs/BaseTaskConfiguration",
      "description": "Windows specific task configuration"
    }
  },
  "$comment": "Generated with typescript-json-schema on March 24, 2023 from https://code.visualstudio.com/docs/editor/tasks-appendix",
  "$defs": {
    "BackgroundMatcher": {
      "description": "A description to track the start and end of a background task.",
      "properties": {
        "activeOnStart": {
          "description": "If set to true the watcher is in active mode when the task\nstarts. This is equals of issuing a line that matches the\nbeginPattern.",
          "type": "boolean"
        },
        "beginsPattern": {
          "description": "If matched in the output the start of a background task is signaled.",
          "type": "string"
        },
        "endsPattern": {
          "description": "If matched in the output the end of a background task is signaled.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "BaseTaskConfiguration": {
      "properties": {
        "args": {
          "description": "The arguments passed to the command. Can be omitted.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "command": {
          "description": "The command to be executed. Can be an external program or a shell\ncommand.",
          "type": "string"
        },
        "isBackground": {
          "description": "Specifies whether a global command is a background task.",
          "type": "boolean"
        },
        "options": {
          "$ref": "#/$defs/CommandOptions",
          "description": "The command options used when the command is executed. Can be omitted."
        },
        "presentation": {
          "$ref": "#/$defs/PresentationOptions",
          "description": "The presentation options."
        },
        "problemMatcher": {
          "anyOf": [
            {
              "$ref": "#/$defs/ProblemMatcher"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ProblemMatcher"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The problem matcher to be used if a global command is executed (e.g. no tasks\nare defined). A tasks.json file can either contain a global problemMatcher\nproperty or a tasks property but not both."
        },
        "tasks": {
          "description": "The configuration of the available tasks. A tasks.json file can either\ncontain a global problemMatcher property or a tasks property but not both.",
          "items": {
            "$ref": "#/$defs/TaskDescription"
          },
          "type": "array"
        },
        "type": {
          "description": "The type of a custom task. Tasks of type \"shell\" are executed\ninside a shell (e.g. bash, cmd, powershell, ...)",
          "enum": [
            "process",
            "shell",
            "npm"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "CommandOptions": {
      "description": "Options to be passed to the external program or shell",
      "properties": {
        "cwd": {
          "description": "The current working directory of the executed program or shell.\nIf omitted the current workspace's root is used.",
          "type": "string"
        },
        "env": {
          "type": "object",
          "description": "The environment of the executed program or shell. If omitted\nthe parent process' environment is used.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "shell": {
          "description": "Configuration of the shell when task type is `shell`",
          "properties": {
            "args": {
              "description": "The arguments to be passed to the shell executable to run in command mode\n(e.g ['-c'] for bash or ['/S', '/C'] for cmd.exe).",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "executable": {
              "description": "The shell to use.",
              "type": "string"
            }
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "PresentationOptions": {
      "properties": {
        "clear": {
          "description": "Controls whether the terminal is cleared before this task is run.\nDefaults to `false`.",
          "type": "boolean"
        },
        "echo": {
          "description": "Controls whether the command associated with the task is echoed\nin the user interface. Defaults to `true`.",
          "type": "boolean"
        },
        "focus": {
          "description": "Controls whether the panel showing the task output is taking focus.\nDefaults to `false`.",
          "type": "boolean"
        },
        "group": {
          "description": "Controls whether the task is executed in a specific terminal\ngroup using split panes. Tasks in the same group (specified by a string value)\nwill use split terminals to present instead of a new terminal panel.",
          "type": "string"
        },
        "panel": {
          "description": "Controls if the task panel is used for this task only (dedicated),\nshared between tasks (shared) or if a new panel is created on\nevery task execution (new). Defaults to `shared`.",
          "enum": [
            "dedicated",
            "new",
            "shared"
          ],
          "type": "string"
        },
        "reveal": {
          "description": "Controls whether the task output is reveal in the user interface.\nDefaults to `always`.",
          "enum": [
            "always",
            "never",
            "silent"
          ],
          "type": "string"
        },
        "showReuseMessage": {
          "description": "Controls whether to show the `Terminal will be reused by tasks,\npress any key to close it` message.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ProblemMatcher": {
      "description": "A description of a problem matcher that detects problems\nin build output.",
      "properties": {
        "background": {
          "$ref": "#/$defs/BackgroundMatcher",
          "description": "Additional information used to detect when a background task (like a watching task in Gulp)\nis active."
        },
        "base": {
          "description": "The name of a base problem matcher to use. If specified the\nbase problem matcher will be used as a template and properties\nspecified here will replace properties of the base problem\nmatcher",
          "type": "string"
        },
        "fileLocation": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "Defines how filename reported in a problem pattern\nshould be read. Valid values are:\n - \"absolute\": the filename is always treated absolute.\n - \"relative\": the filename is always treated relative to\n   the current working directory. This is the default.\n - [\"relative\", \"path value\"]: the filename is always\n   treated relative to the given path value.\n - \"autodetect\": the filename is treated relative to\n   the current workspace directory, and if the file\n   does not exist, it is treated as absolute.\n - [\"autodetect\", \"path value\"]: the filename is treated\n   relative to the given path value, and if it does not\n   exist, it is treated as absolute."
        },
        "owner": {
          "description": "The owner of the produced VS Code problem. This is typically\nthe identifier of a VS Code language service if the problems are\nto be merged with the one produced by the language service\nor 'external'. Defaults to 'external' if omitted.",
          "type": "string"
        },
        "pattern": {
          "anyOf": [
            {
              "$ref": "#/$defs/ProblemPattern"
            },
            {
              "items": {
                "$ref": "#/$defs/ProblemPattern"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The name of a predefined problem pattern, the inline definition\nof a problem pattern or an array of problem patterns to match\nproblems spread over multiple lines."
        },
        "severity": {
          "description": "The severity of the VS Code problem produced by this problem matcher.\n\nValid values are:\n  \"error\": to produce errors.\n  \"warning\": to produce warnings.\n  \"info\": to produce infos.\n\nThe value is used if a pattern doesn't specify a severity match group.\nDefaults to \"error\" if omitted.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ProblemPattern": {
      "properties": {
        "code": {
          "description": "The match group index of the problem's code.\n\nDefaults to undefined. No code is captured.",
          "type": "number"
        },
        "column": {
          "description": "The match group index of the problem's column in the source file.",
          "type": "number"
        },
        "endColumn": {
          "description": "The match group index of the problem's end column in the source file.\n\nDefaults to undefined. No end column is captured.",
          "type": "number"
        },
        "endLine": {
          "description": "The match group index of the problem's end line in the source file.\n\nDefaults to undefined. No end line is captured.",
          "type": "number"
        },
        "file": {
          "description": "The match group index of the filename.",
          "type": "number"
        },
        "kind": {
          "description": "Whether the pattern matches a problem for the whole file or for a location\ninside a file.\n\nDefaults to \"location\".",
          "enum": [
            "file",
            "location"
          ],
          "type": "string"
        },
        "line": {
          "description": "The match group index of the problem's line in the source file.\nCan only be omitted if location is specified.",
          "type": "number"
        },
        "location": {
          "description": "The match group index of the problem's location. Valid location\npatterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn).\nIf omitted the line and column properties are used.",
          "type": "number"
        },
        "loop": {
          "description": "Specifies if the last pattern in a multi line problem matcher should\nloop as long as it does match a line consequently. Only valid on the\nlast problem pattern in a multi line problem matcher.",
          "type": "boolean"
        },
        "message": {
          "description": "The match group index of the message. Defaults to 0.",
          "type": "number"
        },
        "regexp": {
          "description": "The regular expression to find a problem in the console output of an\nexecuted task.",
          "type": "string"
        },
        "severity": {
          "description": "The match group index of the problem's severity.\n\nDefaults to undefined. In this case the problem matcher's severity\nis used.",
          "type": "number"
        }
      },
      "type": "object"
    },
    "RunOptions": {
      "description": "A description to when and how run a task.",
      "properties": {
        "reevaluateOnRerun": {
          "description": "Controls how variables are evaluated when a task is executed through\nthe Rerun Last Task command.\nThe default is `true`, meaning that variables will be re-evaluated when\na task is rerun. When set to `false`, the resolved variable values from\nthe previous run of the task will be used.",
          "type": "boolean"
        },
        "runOn": {
          "description": "Specifies when a task is run.\n\nValid values are:\n  \"default\": The task will only be run when executed through the Run Task command.\n  \"folderOpen\": The task will be run when the containing folder is opened.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TaskDescription": {
      "description": "The description of a task.",
      "properties": {
        "args": {
          "description": "Additional arguments passed to the command. Should be used if type\nis \"process\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "command": {
          "description": "The command to execute. If the type is \"shell\" it should be the full\ncommand line including any additional arguments passed to the command.",
          "type": "string"
        },
        "group": {
          "anyOf": [
            {
              "properties": {
                "isDefault": {
                  "type": "boolean"
                },
                "kind": {
                  "enum": [
                    "build",
                    "test"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            {
              "enum": [
                "build",
                "test"
              ],
              "type": "string"
            }
          ],
          "description": "Defines the group to which this task belongs. Also supports to mark\na task as the default task in a group."
        },
        "isBackground": {
          "description": "Whether the executed command is kept alive and runs in the background.",
          "type": "boolean"
        },
        "label": {
          "description": "The task's name",
          "type": "string"
        },
        "presentation": {
          "$ref": "#/$defs/PresentationOptions",
          "description": "The presentation options."
        },
        "problemMatcher": {
          "anyOf": [
            {
              "$ref": "#/$defs/ProblemMatcher"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ProblemMatcher"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The problem matcher(s) to use to capture problems in the tasks\noutput."
        },
        "runOptions": {
          "$ref": "#/$defs/RunOptions",
          "description": "Defines when and how a task is run."
        },
        "type": {
          "description": "The type of a custom task. Tasks of type \"shell\" are executed\ninside a shell (e.g. bash, cmd, powershell, ...)",
          "enum": [
            "process",
            "shell",
            "npm"
          ],
          "type": "string"
        }
      },
      "type": "object"
    }
  }
}
