{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "compilationOptions": {
      "type": "object",
      "properties": {
        "define": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "warningsAsErrors": {
          "type": "boolean",
          "default": false
        },
        "allowUnsafe": {
          "type": "boolean",
          "default": false
        },
        "emitEntryPoint": {
          "type": "boolean",
          "default": false
        },
        "optimize": {
          "type": "boolean",
          "default": false
        },
        "languageVersion": {
          "type": "string",
          "enum": [
            "csharp1",
            "csharp2",
            "csharp3",
            "csharp4",
            "csharp5",
            "csharp6",
            "experimental"
          ]
        },
        "keyFile": {
          "type": "string"
        },
        "delaySign": {
          "type": "boolean",
          "default": false
        },
        "strongName": {
          "type": "boolean",
          "default": false
        }
      }
    },
    "configType": {
      "type": "object",
      "properties": {
        "dependencies": {
          "$ref": "#/definitions/dependencies"
        },
        "compilationOptions": {
          "$ref": "#/definitions/compilationOptions"
        },
        "frameworkAssemblies": {
          "$ref": "#/definitions/dependencies"
        }
      }
    },
    "dependencies": {
      "type": "object",
      "additionalProperties": {
        "type": ["string", "object"],
        "properties": {
          "version": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "default": "default",
            "enum": ["default", "build"]
          },
          "target": {
            "type": "string",
            "description": "Restrict this dependency to matching only a Project or a Package",
            "enum": ["project", "package"]
          }
        }
      }
    },
    "script": {
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "description": "A command line script or scripts.\r\rAvailable variables:\r%project:Directory% - The project directory\r%project:Name% - The project name\r%project:Version% - The project version"
    }
  },
  "id": "https://json.schemastore.org/project-1.0.0-beta8.json",
  "properties": {
    "authors": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "packInclude": {
      "description": "Pairs of destination folders and glob patterns specifying additional files to include in the output NuGet package. (data type: JSON map). Example: { \"tools/\": \"tools/**/*.*\" }",
      "type": "object"
    },
    "publishExclude": {
      "description": "Glob pattern to specify files to exclude from publish output. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["obj/**/*.*", "bin/**/*.*", "**/.*/**"]
    },
    "compile": {
      "description": "Glob pattern to specify files to compile. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "**/*.cs"
    },
    "compileExclude": {
      "description": "Glob pattern to specify files to exclude from compilation. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "compileFiles": {
      "description": "Files to include in compilation (overrides 'compileExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "content": {
      "description": "Glob pattern to specify files to include as content. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "**/*"
    },
    "contentExclude": {
      "description": "Glob pattern to specify files to exclude from the content list. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "contentFiles": {
      "description": "Files to include as content (overrides 'contentExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "preprocess": {
      "description": "Glob pattern to specify files to use for preprocessing. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "compiler/preprocess/**/*.cs"
    },
    "preprocessExclude": {
      "description": "Glob pattern to specify files to exclude from use for preprocessing. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "preprocessFiles": {
      "description": "Files to include to use for preprocessing (overrides 'preprocessExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "resource": {
      "description": "Glob pattern to specify files to include as resources. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["compiler/resources/**/*", "**/*.resx"]
    },
    "resourceExclude": {
      "description": "Glob pattern to specify files to exclude from the resources list. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "resourceFiles": {
      "description": "Files to include as resources (overrides 'resourceExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "shared": {
      "description": "Glob pattern to specify files to share with dependent projects. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "compiler/shared/**/*.cs"
    },
    "sharedExclude": {
      "description": "Glob pattern to specify files to exclude from sharing with dependent projects. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "sharedFiles": {
      "description": "Files to include for sharing with dependent projects (overrides 'sharedExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "exclude": {
      "description": "Glob pattern to indicate files to exclude from other glob patterns, in addition to the default patterns specified in 'excludeBuiltIn'. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "excludeBuiltIn": {
      "description": "Default glob pattern to indicate files to exclude from other glob patterns. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["bin/**", "obj/**", "**/*.xproj"]
    },
    "commands": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "compilationOptions": {
      "$ref": "#/definitions/compilationOptions"
    },
    "configurations": {
      "type": "object",
      "description": "Configurations are named groups of compilation settings. There are two defaults built into the runtime: 'Debug' and 'Release'.",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "compilationOptions": {
            "$ref": "#/definitions/compilationOptions"
          }
        }
      }
    },
    "dependencies": {
      "$ref": "#/definitions/dependencies"
    },
    "copyright": {
      "description": "Copyright details for the package.",
      "type": "string"
    },
    "iconUrl": {
      "description": "A URL for the image to use as the icon for the package. This should be a 32x32-pixel .png file that has a transparent background.",
      "type": "string"
    },
    "licenseUrl": {
      "description": "A link to the license for the package.",
      "type": "string"
    },
    "requireLicenseAcceptance": {
      "description": "A Boolean value that specifies whether the client needs to ensure that the package license (described by licenseUrl) is accepted before the package is installed.",
      "type": "boolean",
      "default": false
    },
    "owners": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "projectUrl": {
      "description": "A URL for the home page of the package.",
      "type": "string"
    },
    "summary": {
      "description": "A short description of the package.",
      "type": "string"
    },
    "tags": {
      "description": "A space-delimited list of tags and keywords that describe the package.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "title": {
      "description": "The human-friendly title of the package",
      "type": "string"
    },
    "releaseNotes": {
      "description": "A description of the changes made in each release of the package.",
      "type": "string"
    },
    "language": {
      "description": "The locale ID for the package, such as en-us.",
      "type": "string"
    },
    "description": {
      "description": "The description of the project/package.",
      "type": "string"
    },
    "frameworks": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/configType"
      }
    },
    "namedResource": {
      "type": "object",
      "description": "Overrides the generated resource names with custom ones.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "repository": {
      "type": "object",
      "description": "Contains information about the repository where the project is stored.",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["git"],
          "default": "git"
        }
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "scripts": {
      "type": "object",
      "description": "Scripts to execute during the various stages.",
      "properties": {
        "prebuild": {
          "$ref": "#/definitions/script"
        },
        "postbuild": {
          "$ref": "#/definitions/script"
        },
        "prepack": {
          "$ref": "#/definitions/script"
        },
        "postpack": {
          "$ref": "#/definitions/script"
        },
        "prepublish": {
          "$ref": "#/definitions/script"
        },
        "postpublish": {
          "$ref": "#/definitions/script"
        },
        "prerestore": {
          "$ref": "#/definitions/script"
        },
        "postrestore": {
          "$ref": "#/definitions/script"
        },
        "prepare": {
          "$ref": "#/definitions/script"
        }
      }
    },
    "version": {
      "description": "The version of the project/package. Examples: 1.2.3, 1.2.3-beta, 1.2.3-*",
      "type": "string"
    },
    "webroot": {
      "description": "Specifies the web server root for the application. In Visual Studio when running IIS this folder will be used as the root of the application. Static files should be put in here.",
      "type": "string"
    }
  },
  "title": "JSON schema for DNX project.json files",
  "type": "object"
}