{
  "$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
        },
        "optimize": {
          "type": "boolean",
          "default": false
        },
        "languageVersion": {
          "type": "string",
          "enum": [
            "csharp1",
            "csharp2",
            "csharp3",
            "csharp4",
            "csharp5",
            "csharp6",
            "experimental"
          ]
        }
      }
    },
    "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"]
          }
        }
      }
    },
    "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-beta4.json",
  "properties": {
    "authors": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "publishExclude": {
      "description": "List of files to exclude from publish output (dnu publish).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "compile": {
      "description": "Glob pattern to specify additional code files that needs to be compiled. (data type: string or array with glob pattern(s)). Example: [ \"folder1/**/*.cs\", \"folder2/**/*.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "compileExclude": {
      "description": "Glob pattern to indicate code files that needs to be excluded from compilation. (data type: string or array with glob pattern(s)). Example: [ \"folder1/**/*.cs\", \"folder2/**/*.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "compileFiles": {
      "description": "Individual file paths relative to application root that needs to be included for compilation. (data type: string or array). Example: [ \"folder1/test1.cs\", \"folder2/test2.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "compileBuiltIn": {
      "description": "Glob pattern to indicate the default code files that are included for compilation. (data type: string or array with glob pattern(s)). Example: [ \"**/*.cs\", \"../folder2/**/*.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "**/*.cs"
    },
    "exclude": {
      "description": "Glob pattern to indicate the default files to be excluded from processing. (data type: string or array with glob pattern(s)).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "excludeBuiltIn": {
      "description": "Glob pattern to indicate all the additional files to be excluded from processing. (data type: string or array with glob pattern(s)).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["bin/**/*.*", "obj/**/*.*", "**/*.xproj"]
    },
    "preprocess": {
      "description": "Glob pattern to indicate all the code files to be pre-processed. (data type: string or array with glob pattern(s)).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["compiler/preprocess/**/*.cs"]
    },
    "preprocessExclude": {
      "description": "Glob pattern to indicate all the code files to be excluded from pre-processing. (data type: string or array with glob pattern(s)).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "preprocessFiles": {
      "description": "Glob pattern to indicate specific code files to be included for pre-processing. (data type: string or array).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "resource": {
      "description": "Glob pattern to indicate all the files that need to be compiled as resources. (data type: string or array with glob pattern(s))",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["compiler/resources/**/*", "**/*.resx"]
    },
    "resourceExclude": {
      "description": "Glob pattern to indicate files that need to be excluded from being compiled as resources. (data type: string or array with glob pattern(s))",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "resourceFiles": {
      "description": "Glob pattern to indicate individual files that need to be compiled as resources. (data type: string or array).",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "shared": {
      "description": "Glob pattern to specify the code files to share with dependent projects. Example: [ \"folder1/*.cs\", \"folder2/*.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "compiler/shared/**/*.cs"
    },
    "sharedExclude": {
      "description": "Glob pattern to specify the code files to be excluded from sharing with dependent projects. Example: [ \"folder1/*.cs\", \"folder2/*.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "sharedFiles": {
      "description": "Glob pattern to specify the individual code files to be shared with dependent projects. Example: [ \"folder1/shared1.cs\", \"folder2/shared2.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "content": {
      "description": "Glob pattern to specify the files to be considered as content on dnu publish. Example: [ \"folder1/**/*\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "**/*"
    },
    "contentExclude": {
      "description": "Glob pattern to specify the files to be excluded from being content on dnu publish. Example: [ \"folder1/*.cs\", \"folder2/*.cs\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "contentFiles": {
      "description": "Glob pattern to specify the individual files to be content files on dnu publish. Example: [ \"folder1/content.cs\", \"folder2/content2.img\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ""
    },
    "commands": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "compilationOptions": {
      "$ref": "#/definitions/compilationOptions"
    },
    "configurations": {
      "type": "object",
      "description": "Configurations are named groups of compilation settings. There are 2 defaults built into the runtime namely 'Debug' and 'Release'.",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "compilationOptions": {
            "$ref": "#/definitions/compilationOptions"
          }
        }
      }
    },
    "copyright": {
      "description": "Copyright details for the package",
      "type": "string"
    },
    "dependencies": {
      "$ref": "#/definitions/dependencies"
    },
    "description": {
      "description": "The description of the application",
      "type": "string"
    },
    "frameworks": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/configType"
      }
    },
    "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 that the package is under",
      "type": "string"
    },
    "owners": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "projectUrl": {
      "description": "A URL for the home page of the package",
      "type": "string"
    },
    "scripts": {
      "type": "object",
      "description": "Scripts to execute during the various stages.",
      "properties": {
        "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"
        }
      }
    },
    "summary": {
      "description": "A short description of the package",
      "type": "string"
    },
    "tags": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "title": {
      "description": "The human-friendly title of the package",
      "type": "string"
    },
    "version": {
      "description": "The version of the application. Example: 1.2.0.0",
      "type": "string"
    },
    "webroot": {
      "description": "Specifying the webroot property in the project.json file specifies the web server root (aka public folder). In visual studio, this folder will be used to root IIS. Static files should be put in here.",
      "type": "string"
    },
    "userSecretsId": {
      "description": "Specify a unique id to manage the development time user secrets of the application",
      "type": "string"
    }
  },
  "title": "JSON schema for ASP.NET project.json files",
  "type": "object"
}
