{
  "type": "object",
  "definitions": {
    "StaticObject": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "directory": {
          "type": "string",
          "minLength": 1
        },
        "staticOptions": {
          "type": "object"
        },
        "publicPath": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              },
              "minItems": 1
            }
          ]
        },
        "serveIndex": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "object"
            }
          ]
        },
        "watch": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "object"
            }
          ]
        }
      }
    },
    "StaticString": {
      "type": "string",
      "minLength": 1
    }
  },
  "properties": {
    "bonjour": {
      "type": "boolean"
    },
    "client": {
      "type": "object",
      "properties": {
        "host": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "port": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "logging": {
          "enum": ["none", "error", "warn", "info", "log", "verbose"]
        },
        "progress": {
          "type": "boolean"
        },
        "overlay": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "boolean"
                },
                "warnings": {
                  "type": "boolean"
                }
              }
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "compress": {
      "type": "boolean"
    },
    "dev": {
      "type": "object"
    },
    "firewall": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1
        }
      ]
    },
    "headers": {
      "type": "object"
    },
    "historyApiFallback": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "object"
        }
      ]
    },
    "host": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "hot": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "enum": ["only"]
        }
      ]
    },
    "http2": {
      "type": "boolean"
    },
    "https": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "passphrase": {
              "type": "string"
            },
            "requestCert": {
              "type": "boolean"
            },
            "ca": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "instanceof": "Buffer"
                }
              ]
            },
            "key": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "instanceof": "Buffer"
                }
              ]
            },
            "pfx": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "instanceof": "Buffer"
                }
              ]
            },
            "cert": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "instanceof": "Buffer"
                }
              ]
            }
          }
        }
      ]
    },
    "injectClient": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "instanceof": "Function"
        }
      ]
    },
    "injectHot": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "instanceof": "Function"
        }
      ]
    },
    "liveReload": {
      "type": "boolean"
    },
    "onAfterSetupMiddleware": {
      "instanceof": "Function"
    },
    "onBeforeSetupMiddleware": {
      "instanceof": "Function"
    },
    "onListening": {
      "instanceof": "Function"
    },
    "open": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "boolean"
        },
        {
          "type": "object"
        }
      ]
    },
    "openPage": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1
        }
      ]
    },
    "port": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "proxy": {
      "anyOf": [
        {
          "type": "object"
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "instanceof": "Function"
              }
            ]
          },
          "minItems": 1
        }
      ]
    },
    "public": {
      "type": "string"
    },
    "setupExitSignals": {
      "type": "boolean"
    },
    "static": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/StaticString"
        },
        {
          "$ref": "#/definitions/StaticObject"
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/StaticString"
              },
              {
                "$ref": "#/definitions/StaticObject"
              }
            ]
          },
          "minItems": 1
        }
      ]
    },
    "stdin": {
      "type": "boolean"
    },
    "transportMode": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "client": {
              "type": "string"
            },
            "server": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "instanceof": "Function"
                }
              ]
            }
          },
          "additionalProperties": false
        },
        {
          "enum": ["sockjs", "ws"]
        }
      ]
    },
    "useLocalIp": {
      "type": "boolean"
    }
  },
  "errorMessage": {
    "properties": {
      "bonjour": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverbonjour)",
      "client": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverclient)",
      "compress": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devservercompress)",
      "dev": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverdev-)",
      "firewall": "should be {Boolean|Array} (https://webpack.js.org/configuration/dev-server/#devserverfirewall)",
      "headers": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverheaders)",
      "historyApiFallback": "should be {Boolean|Object} (https://webpack.js.org/configuration/dev-server/#devserverhistoryapifallback)",
      "host": "should be {String|Null} (https://webpack.js.org/configuration/dev-server/#devserverhost)",
      "hot": "should be {Boolean|String} (https://webpack.js.org/configuration/dev-server/#devserverhot)",
      "http2": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverhttp2)",
      "https": "should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserverhttps)",
      "injectClient": "should be {Boolean|Function} (https://webpack.js.org/configuration/dev-server/#devserverinjectclient)",
      "injectHot": "should be {Boolean|Function} (https://webpack.js.org/configuration/dev-server/#devserverinjecthot)",
      "liveReload": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverlivereload)",
      "onAfterSetupMiddleware": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserverafter)",
      "onBeforeSetupMiddleware": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserverbefore)",
      "onListening": "should be {Function} (https://webpack.js.org/configuration/dev-server/#onlistening)",
      "open": "should be {String|Boolean|Object} (https://webpack.js.org/configuration/dev-server/#devserveropen)",
      "openPage": "should be {String|Array} (https://webpack.js.org/configuration/dev-server/#devserveropenpage)",
      "port": "should be {Number|String|Null} (https://webpack.js.org/configuration/dev-server/#devserverport)",
      "proxy": "should be {Object|Array} (https://webpack.js.org/configuration/dev-server/#devserverproxy)",
      "public": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverpublic)",
      "setupExitSignals": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserversetupexitsignals)",
      "static": "should be {Boolean|String|Object|Array} (https://webpack.js.org/configuration/dev-server/#devserverstatic)",
      "stdin": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverstdin)",
      "transportMode": "should be {String|Object} (https://webpack.js.org/configuration/dev-server/#devservertransportmode)",
      "useLocalIp": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserveruselocalip)"
    }
  },
  "additionalProperties": false
}
