{
  "additionalProperties": false,
  "definitions": {
    "common.arrayOfStringOrStringArrayValues": {
      "items": {
        "anyOf": [
          {
            "minLength": 1,
            "type": "string"
          },
          {
            "items": {
              "minLength": 1,
              "type": "string"
            },
            "type": "array"
          }
        ]
      },
      "type": "array"
    },
    "common.arrayOfStringValues": {
      "items": {
        "minLength": 1,
        "type": "string"
      },
      "type": "array"
    },
    "common.nonEmptyArrayOfUniqueStringValues": {
      "items": {
        "minLength": 1,
        "type": "string"
      },
      "minItems": 1,
      "type": "array",
      "uniqueItems": true
    },
    "entry": {
      "description": "The entry point(s) of the compilation.",
      "oneOf": [
        {
          "minProperties": 1,
          "additionalProperties": {
            "oneOf": [
              {
                "description": "The string is resolved to a module which is loaded upon startup.",
                "minLength": 1,
                "type": "string"
              },
              {
                "description": "All modules are loaded upon startup. The last one is exported.",
                "$ref": "#/definitions/common.nonEmptyArrayOfUniqueStringValues"
              }
            ]
          },
          "description": "Multiple entry bundles are created. The key is the chunk name. The value can be a string or an array.",
          "type": "object"
        },
        {
          "description": "The string is resolved to a module which is loaded upon startup.",
          "minLength": 1,
          "type": "string"
        },
        {
          "allOf": [
            {
              "$ref": "#/definitions/common.nonEmptyArrayOfUniqueStringValues"
            }
          ],
          "description": "All modules are loaded upon startup. The last one is exported."
        },
        {
          "description": "function returning an entry object or a promise.",
          "instanceof": "Function"
        }
      ]
    },
    "externals": {
      "anyOf": [
        {
          "description": "An exact matched dependency becomes external. The same string is used as external dependency.",
          "type": "string"
        },
        {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object"
              },
              {
                "type": "boolean"
              }
            ]
          },
          "description": "If an dependency matches exactly a property of the object, the property value is used as dependency.",
          "type": "object"
        },
        {
          "description": "`function(context, request, callback(err, result))` The function is called on each dependency.",
          "instanceof": "Function"
        },
        {
          "description": "Every matched dependency becomes external.",
          "instanceof": "RegExp"
        },
        {
          "items": {
            "$ref": "#/definitions/externals"
          },
          "type": "array"
        }
      ],
      "description": "Specify dependencies that shouldn't be resolved by webpack, but should become dependencies of the resulting bundle. The kind of the dependency depends on `output.libraryTarget`."
    },
    "module": {
      "additionalProperties": false,
      "description": "Options affecting the normal modules (`NormalModuleFactory`).",
      "properties": {
        "exprContextCritical": {
          "type": "boolean"
        },
        "exprContextRecursive": {
          "type": "boolean"
        },
        "exprContextRegExp": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "instanceof": "RegExp"
            }
          ]
        },
        "exprContextRequest": {
          "type": "string"
        },
        "loaders": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-rules"
            }
          ],
          "description": "An array of automatically applied loaders."
        },
        "noParse": {
          "description": "Don't parse files matching. It's matched against the full resolved request.",
          "anyOf": [
            {
              "items": {
                "instanceof": "RegExp"
              },
              "minItems": 1,
              "type": "array"
            },
            {
              "instanceof": "RegExp"
            },
            {
              "instanceof": "Function"
            },
            {
              "items": {
                "type": "string",
                "absolutePath": true
              },
              "minItems": 1,
              "type": "array"
            },
            {
              "type": "string",
              "absolutePath": true
            }
          ]
        },
        "rules": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-rules"
            }
          ],
          "description": "An array of rules applied for modules."
        },
        "unknownContextCritical": {
          "type": "boolean"
        },
        "unknownContextRecursive": {
          "type": "boolean"
        },
        "unknownContextRegExp": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "instanceof": "RegExp"
            }
          ]
        },
        "unknownContextRequest": {
          "type": "string"
        },
        "unsafeCache": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "instanceof": "Function"
            }
          ]
        },
        "wrappedContextCritical": {
          "type": "boolean"
        },
        "wrappedContextRecursive": {
          "type": "boolean"
        },
        "wrappedContextRegExp": {
          "instanceof": "RegExp"
        },
        "strictExportPresence": {
          "type": "boolean"
        },
        "strictThisContextOnImports": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "output": {
      "additionalProperties": false,
      "description": "Options affecting the output of the compilation. `output` options tell webpack how to write the compiled files to disk.",
      "properties": {
        "auxiliaryComment": {
          "description": "Add a comment in the UMD wrapper.",
          "anyOf": [
            {
              "description": "Append the same comment above each import style.",
              "type": "string"
            },
            {
              "additionalProperties": false,
              "description": "Set explicit comments for `commonjs`, `commonjs2`, `amd`, and `root`.",
              "properties": {
                "amd": {
                  "type": "string"
                },
                "commonjs": {
                  "type": "string"
                },
                "commonjs2": {
                  "type": "string"
                },
                "root": {
                  "type": "string"
                }
              },
              "type": "object"
            }
          ]
        },
        "chunkFilename": {
          "description": "The filename of non-entry chunks as relative path inside the `output.path` directory.",
          "type": "string",
          "absolutePath": false
        },
        "crossOriginLoading": {
          "description": "This option enables cross-origin loading of chunks.",
          "enum": [
            false,
            "anonymous",
            "use-credentials"
          ]
        },
        "chunkLoadTimeout": {
          "description": "Number of milliseconds before chunk request expires",
          "type": "number"
        },
        "devtoolFallbackModuleFilenameTemplate": {
          "description": "Similar to `output.devtoolModuleFilenameTemplate`, but used in the case of duplicate module identifiers.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "instanceof": "Function"
            }
          ]
        },
        "devtoolLineToLine": {
          "description": "Enable line to line mapped mode for all/specified modules. Line to line mapped mode uses a simple SourceMap where each line of the generated source is mapped to the same line of the original source. It’s a performance optimization. Only use it if your performance need to be better and you are sure that input lines match which generated lines.",
          "anyOf": [
            {
              "description": "`true` enables it for all modules (not recommended)",
              "type": "boolean"
            },
            {
              "description": "An object similar to `module.loaders` enables it for specific files.",
              "properties": {
                "exclude": {
                  "type": "string"
                },
                "include": {
                  "type": "string"
                },
                "test": {
                  "type": "string"
                }
              },
              "type": "object"
            }
          ]
        },
        "devtoolModuleFilenameTemplate": {
          "description": "Filename template string of function for the sources array in a generated SourceMap.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "instanceof": "Function"
            }
          ]
        },
        "filename": {
          "description": "Specifies the name of each output file on disk. You must **not** specify an absolute path here! The `output.path` option determines the location on disk the files are written to, filename is used solely for naming the individual files.",
          "type": "string",
          "absolutePath": false
        },
        "hashDigest": {
          "minLength": 1,
          "type": "string"
        },
        "hashDigestLength": {
          "minimum": 1,
          "type": "number"
        },
        "hashFunction": {
          "minLength": 1,
          "type": "string"
        },
        "hashSalt": {
          "minLength": 1,
          "type": "string"
        },
        "hotUpdateChunkFilename": {
          "description": "The filename of the Hot Update Chunks. They are inside the output.path directory.",
          "type": "string",
          "absolutePath": false
        },
        "hotUpdateFunction": {
          "description": "The JSONP function used by webpack for async loading of hot update chunks.",
          "type": "string"
        },
        "hotUpdateMainFilename": {
          "description": "The filename of the Hot Update Main File. It is inside the `output.path` directory.",
          "type": "string",
          "absolutePath": false
        },
        "jsonpFunction": {
          "description": "The JSONP function used by webpack for async loading of chunks.",
          "type": "string"
        },
        "library": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "object",
              "properties": {
                "root": { "type": "string" },
                "amd": { "type": "string" },
                "commonjs": { "type": "string" }
              }
            }
          ],
          "description": "If set, export the bundle as library. `output.library` is the name."
        },
        "libraryTarget": {
          "enum": [
            "var",
            "assign",
            "this",
            "window",
            "global",
            "commonjs",
            "commonjs2",
            "commonjs-module",
            "amd",
            "umd",
            "umd2",
            "jsonp"
          ]
        },
        "libraryExport": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/common.arrayOfStringValues"
            }
          ]
        },
        "path": {
          "description": "The output directory as **absolute path** (required).",
          "type": "string",
          "absolutePath": true
        },
        "pathinfo": {
          "description": "Include comments with information about the modules.",
          "type": "boolean"
        },
        "publicPath": {
          "description": "The `publicPath` specifies the public URL address of the output files when referenced in a browser.",
          "type": "string"
        },
        "sourceMapFilename": {
          "description": "The filename of the SourceMaps for the JavaScript files. They are inside the `output.path` directory.",
          "type": "string",
          "absolutePath": false
        },
        "sourcePrefix": {
          "description": "Prefixes every line of the source in the bundle with this string.",
          "type": "string"
        },
        "strictModuleExceptionHandling": {
          "description": "Handles exceptions in module loading correctly at a performance cost.",
          "type": "boolean"
        },
        "umdNamedDefine": {
          "description": "If `output.libraryTarget` is set to umd and `output.library` is set, setting this to true will name the AMD module.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "resolve": {
      "additionalProperties": false,
      "properties": {
        "alias": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "items": {
                "additionalProperties": false,
                "properties": {
                  "alias": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "onlyModule": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "type": "array"
            }
          ]
        },
        "aliasFields": {
          "$ref": "#/definitions/common.arrayOfStringOrStringArrayValues"
        },
        "cachePredicate": {
          "instanceof": "Function"
        },
        "cacheWithContext": {
          "type": "boolean"
        },
        "descriptionFiles": {
          "$ref": "#/definitions/common.arrayOfStringValues"
        },
        "enforceExtension": {
          "type": "boolean"
        },
        "enforceModuleExtension": {
          "type": "boolean"
        },
        "extensions": {
          "$ref": "#/definitions/common.arrayOfStringValues"
        },
        "fileSystem": {},
        "mainFields": {
          "$ref": "#/definitions/common.arrayOfStringOrStringArrayValues"
        },
        "mainFiles": {
          "$ref": "#/definitions/common.arrayOfStringValues"
        },
        "moduleExtensions": {
          "$ref": "#/definitions/common.arrayOfStringValues"
        },
        "modules": {
          "$ref": "#/definitions/common.arrayOfStringValues"
        },
        "plugins": {
          "type": "array"
        },
        "resolver": {},
        "symlinks": {
          "type": "boolean"
        },
        "unsafeCache": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ]
        },
        "useSyncFileSystemCalls": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ruleSet-condition": {
      "anyOf": [
        {
          "instanceof": "RegExp"
        },
        {
          "minLength": 1,
          "type": "string"
        },
        {
          "instanceof": "Function"
        },
        {
          "$ref": "#/definitions/ruleSet-conditions"
        },
        {
          "additionalProperties": false,
          "properties": {
            "and": {
              "$ref": "#/definitions/ruleSet-conditions"
            },
            "exclude": {
              "$ref": "#/definitions/ruleSet-condition"
            },
            "include": {
              "$ref": "#/definitions/ruleSet-condition"
            },
            "not": {
              "$ref": "#/definitions/ruleSet-conditions"
            },
            "or": {
              "$ref": "#/definitions/ruleSet-conditions"
            },
            "test": {
              "$ref": "#/definitions/ruleSet-condition"
            }
          },
          "type": "object"
        }
      ]
    },
    "ruleSet-conditions": {
      "items": {
        "$ref": "#/definitions/ruleSet-condition"
      },
      "type": "array"
    },
    "ruleSet-loader": {
      "minLength": 1,
      "type": "string"
    },
    "ruleSet-query": {
      "anyOf": [
        {
          "type": "object"
        },
        {
          "type": "string"
        }
      ]
    },
    "ruleSet-rule": {
      "additionalProperties": false,
      "properties": {
        "enforce": {
          "enum": [
            "pre",
            "post"
          ]
        },
        "exclude": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-condition"
            },
            {
              "absolutePath": true
            }
          ]
        },
        "include": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-condition"
            },
            {
              "absolutePath": true
            }
          ]
        },
        "issuer": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-condition"
            },
            {
              "absolutePath": true
            }
          ]
        },
        "loader": {
          "anyOf": [
            {
              "$ref": "#/definitions/ruleSet-loader"
            },
            {
              "$ref": "#/definitions/ruleSet-use"
            }
          ]
        },
        "loaders": {
          "$ref": "#/definitions/ruleSet-use"
        },
        "oneOf": {
          "$ref": "#/definitions/ruleSet-rules"
        },
        "options": {
          "$ref": "#/definitions/ruleSet-query"
        },
        "parser": {
          "additionalProperties": true,
          "type": "object"
        },
        "query": {
          "$ref": "#/definitions/ruleSet-query"
        },
        "resource": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-condition"
            },
            {
              "absolutePath": true
            }
          ]
        },
        "resourceQuery": {
          "$ref": "#/definitions/ruleSet-condition"
        },
        "compiler": {
          "$ref": "#/definitions/ruleSet-condition"
        },
        "rules": {
          "$ref": "#/definitions/ruleSet-rules"
        },
        "test": {
          "allOf": [
            {
              "$ref": "#/definitions/ruleSet-condition"
            },
            {
              "absolutePath": true
            }
          ]
        },
        "use": {
          "$ref": "#/definitions/ruleSet-use"
        }
      },
      "type": "object"
    },
    "ruleSet-rules": {
      "items": {
        "$ref": "#/definitions/ruleSet-rule"
      },
      "type": "array"
    },
    "ruleSet-use": {
      "anyOf": [
        {
          "$ref": "#/definitions/ruleSet-use-item"
        },
        {
          "instanceof": "Function"
        },
        {
          "items": {
            "$ref": "#/definitions/ruleSet-use-item"
          },
          "type": "array"
        }
      ]
    },
    "ruleSet-use-item": {
      "anyOf": [
        {
          "$ref": "#/definitions/ruleSet-loader"
        },
        {
          "instanceof": "Function"
        },
        {
          "additionalProperties": false,
          "properties": {
            "loader": {
              "$ref": "#/definitions/ruleSet-loader"
            },
            "options": {
              "$ref": "#/definitions/ruleSet-query"
            },
            "query": {
              "$ref": "#/definitions/ruleSet-query"
            }
          },
          "type": "object"
        }
      ]
    },
    "filter-item-types": {
      "anyOf": [
        {
          "instanceof": "RegExp"
        },
        {
          "type": "string"
        },
        {
          "instanceof": "Function"
        }
      ]
    },
    "filter-types": {
      "anyOf": [
        {
          "$ref": "#/definitions/filter-item-types"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/filter-item-types"
          }
        }
      ]
    }
  },
  "properties": {
    "amd": {
      "description": "Set the value of `require.amd` and `define.amd`."
    },
    "bail": {
      "description": "Report the first error as a hard error instead of tolerating it.",
      "type": "boolean"
    },
    "cache": {
      "description": "Cache generated modules and chunks to improve performance for multiple incremental builds.",
      "anyOf": [
        {
          "description": "You can pass `false` to disable it.",
          "type": "boolean"
        },
        {
          "description": "You can pass an object to enable it and let webpack use the passed object as cache. This way you can share the cache object between multiple compiler calls.",
          "type": "object"
        }
      ]
    },
    "context": {
      "description": "The base directory (absolute path!) for resolving the `entry` option. If `output.pathinfo` is set, the included pathinfo is shortened to this directory.",
      "type": "string",
      "absolutePath": true
    },
    "dependencies": {
      "description": "References to other configurations to depend on.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "devServer": {
      "type": "object"
    },
    "devtool": {
      "description": "A developer tool to enhance debugging.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "enum": [
            false
          ]
        }
      ]
    },
    "entry": {
      "$ref": "#/definitions/entry"
    },
    "externals": {
      "$ref": "#/definitions/externals"
    },
    "loader": {
      "description": "Custom values available in the loader context.",
      "type": "object"
    },
    "module": {
      "$ref": "#/definitions/module"
    },
    "name": {
      "description": "Name of the configuration. Used when loading multiple configurations.",
      "type": "string"
    },
    "node": {
      "description": "Include polyfills or mocks for various node stuff.",
      "anyOf": [
        {
          "enum": [
            false
          ]
        },
        {
          "additionalProperties": {
            "enum": [
              false,
              true,
              "mock",
              "empty"
            ]
          },
          "properties": {
            "Buffer": {
              "enum": [
                false,
                true,
                "mock"
              ]
            },
            "__dirname": {
              "enum": [
                false,
                true,
                "mock"
              ]
            },
            "__filename": {
              "enum": [
                false,
                true,
                "mock"
              ]
            },
            "console": {
              "enum": [
                false,
                true,
                "mock"
              ]
            },
            "global": {
              "type": "boolean"
            },
            "process": {
              "enum": [
                false,
                true,
                "mock"
              ]
            }
          },
          "type": "object"
        }
      ]
    },
    "output": {
      "$ref": "#/definitions/output"
    },
    "parallelism": {
      "description": "The number of parallel processed modules in the compilation.",
      "minimum": 1,
      "type": "number"
    },
    "performance": {
      "description": "Configuration for web performance recommendations.",
      "anyOf": [
        {
          "enum": [
            false
          ]
        },
        {
          "additionalProperties": false,
          "properties": {
            "assetFilter": {
              "description": "Filter function to select assets that are checked",
              "instanceof": "Function"
            },
            "hints": {
              "description": "Sets the format of the hints: warnings, errors or nothing at all",
              "enum": [
                false,
                "warning",
                "error"
              ]
            },
            "maxEntrypointSize": {
              "description": "Total size of an entry point (in bytes)",
              "type": "number"
            },
            "maxAssetSize": {
              "description": "Filesize limit (in bytes) when exceeded, that webpack will provide performance hints",
              "type": "number"
            }
          },
          "type": "object"
        }
      ]
    },
    "plugins": {
      "description": "Add additional plugins to the compiler.",
      "type": "array"
    },
    "profile": {
      "description": "Capture timing information for each module.",
      "type": "boolean"
    },
    "recordsInputPath": {
      "description": "Store compiler state to a json file.",
      "type": "string",
      "absolutePath": true
    },
    "recordsOutputPath": {
      "description": "Load compiler state from a json file.",
      "type": "string",
      "absolutePath": true
    },
    "recordsPath": {
      "description": "Store/Load compiler state from/to a json file. This will result in persistent ids of modules and chunks. An absolute path is expected. `recordsPath` is used for `recordsInputPath` and `recordsOutputPath` if they left undefined.",
      "type": "string",
      "absolutePath": true
    },
    "resolve": {
      "$ref": "#/definitions/resolve"
    },
    "resolveLoader": {
      "$ref": "#/definitions/resolve"
    },
    "stats": {
      "description": "Used by the webpack CLI program to pass stats options.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "context": {
              "type": "string",
              "description": "context directory for request shortening",
              "absolutePath": true
            },
            "hash": {
              "type": "boolean",
              "description": "add the hash of the compilation"
            },
            "version": {
              "type": "boolean",
              "description": "add webpack version information"
            },
            "timings": {
              "type": "boolean",
              "description": "add timing information"
            },
            "assets": {
              "type": "boolean",
              "description": "add assets information"
            },
            "chunks": {
              "type": "boolean",
              "description": "add chunk information"
            },
            "chunkModules": {
              "type": "boolean",
              "description": "add built modules information to chunk information"
            },
            "modules": {
              "type": "boolean",
              "description": "add built modules information"
            },
            "children": {
              "type": "boolean",
              "description": "add children information"
            },
            "cached": {
              "type": "boolean",
              "description": "add also information about cached (not built) modules"
            },
            "reasons": {
              "type": "boolean",
              "description": "add information about the reasons why modules are included"
            },
            "source": {
              "type": "boolean",
              "description": "add the source code of modules"
            },
            "warningsFilter": {
              "description": "Suppress warnings that match the specified filters. Filters can be Strings, RegExps or Functions",
              "$ref": "#/definitions/filter-types"
            },
            "excludeAssets": {
              "description": "Suppress assets that match the specified filters. Filters can be Strings, RegExps or Functions",
              "$ref": "#/definitions/filter-types"
            },
            "excludeModules": {
              "description": "Suppress modules that match the specified filters. Filters can be Strings, RegExps or Functions",
              "$ref": "#/definitions/filter-types"
            },
            "exclude": {
              "description": "Please use excludeModules instead.",
              "$ref": "#/definitions/filter-types"
            },
            "errorDetails": {
              "type": "boolean",
              "description": "add details to errors (like resolving log)"
            },
            "chunkOrigins": {
              "type": "boolean",
              "description": "add the origins of chunks and chunk merging info"
            },
            "modulesSort": {
              "type": "string",
              "description": "sort the modules by that field"
            },
            "moduleTrace": {
              "type": "boolean",
              "description": "add dependencies and origin of warnings/errors"
            },
            "chunksSort": {
              "type": "string",
              "description": "sort the chunks by that field"
            },
            "assetsSort": {
              "type": "string",
              "description": "sort the assets by that field"
            },
            "providedExports": {
              "type": "boolean",
              "description": "show exports provided by modules"
            },
            "usedExports": {
              "type": "boolean",
              "description": "show exports used by modules"
            },
            "optimizationBailout": {
              "type": "boolean",
              "description": "show reasons why optimization bailed out for modules"
            }
          }
        },
        {
          "type": "boolean"
        },
        {
          "enum": [
            "none",
            "errors-only",
            "minimal",
            "normal",
            "detailed",
            "verbose"
          ]
        }
      ]
    },
    "target": {
      "anyOf": [
        {
          "enum": [
            "web",
            "webworker",
            "node",
            "async-node",
            "node-webkit",
            "atom",
            "electron",
            "electron-main",
            "electron-renderer"
          ]
        },
        {
          "instanceof": "Function"
        }
      ]
    },
    "watch": {
      "description": "Enter watch mode, which rebuilds on file change.",
      "type": "boolean"
    },
    "watchOptions": {
      "properties": {
        "aggregateTimeout": {
          "description": "Delay the rebuilt after the first change. Value is a time in ms.",
          "type": "number"
        },
        "poll": {
          "anyOf": [
            {
              "description": "`true`: use polling.",
              "type": "boolean"
            },
            {
              "description": "`number`: use polling with specified interval.",
              "type": "number"
            }
          ]
        }
      },
      "type": "object"
    }
  },
  "required": [
    "entry"
  ],
  "type": "object"
}
