{
  "$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
        },
        "useOssSigning": {
          "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-rc1.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"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "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"
    }
  },
  "title": "JSON schema for DNX project.json files",
  "type": "object"
}
