{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "fileAssociation": {
      "required": ["extension", "progId"],
      "properties": {
        "contentType": {
          "description": "Content type of the file with this extension.",
          "type": "string"
        },
        "defaultProgramRegistrationPath": {
          "description": "The registry path to where this file association should be registered with default program.",
          "type": "string"
        },
        "extension": {
          "description": "The file extension.",
          "type": "string",
          "minLength": 1
        },
        "isIconOnly": {
          "description": "Indicates whether this file association is used for display icons only.",
          "type": "boolean"
        },
        "perceivedType": {
          "description": "Perceived type of the file with this extension.",
          "type": "string"
        },
        "progId": {
          "description": "The matching /progId/id that's associated with this file extension.",
          "type": "string",
          "minLength": 1
        }
      }
    },
    "urlAssociation": {
      "required": ["protocol", "progId", "defaultProgramRegistrationPath"],
      "properties": {
        "defaultProgramRegistrationPath": {
          "description": "The registry path to where this url association should be registered with default program.",
          "type": "string"
        },
        "displayName": {
          "description": "The name of the association.",
          "type": "string",
          "minLength": 1
        },
        "locId": {
          "description": "Id for localization purpose only.",
          "type": "string"
        },
        "progId": {
          "description": "The matching /progId/id that's associated with this protocol.",
          "type": "string",
          "minLength": 1
        },
        "protocol": {
          "description": "The URL protocol to associate.",
          "type": "string",
          "minLength": 1
        }
      }
    },
    "progIds": {
      "required": ["id"],
      "properties": {
        "allowSilentDefaultTakeOver": {
          "description": "Indicates whether silent default takeover is allowed.",
          "type": "boolean"
        },
        "alwaysShowExtension": {
          "description": "Indicates if extensions should always be shown in Windows Explorer.",
          "type": "boolean"
        },
        "appUserModelId": {
          "description": "App user model ID for taskbar and jump list grouping.",
          "type": "string"
        },
        "arguments": {
          "description": "Arguments to pass to the executable.",
          "type": "string",
          "default": ""
        },
        "clsid": {
          "description": "CLSID for the progId",
          "type": "string"
        },
        "dde": {
          "description": "Indicates whether application needs to support DDE.",
          "type": "boolean"
        },
        "ddeApplication": {
          "description": "DDE application name.",
          "type": "string"
        },
        "ddeTopic": {
          "description": "DDE topic name.",
          "type": "string"
        },
        "defaultIconPath": {
          "description": "Default icon resource DLL path.",
          "type": "string"
        },
        "defaultIconPosition": {
          "description": "Default icon position.",
          "type": "integer"
        },
        "displayName": {
          "description": "The name of progId.",
          "type": "string",
          "minLength": 1
        },
        "iconHandler": {
          "description": "Icon handler GUID.",
          "type": "string"
        },
        "id": {
          "description": "The unique identifier.",
          "type": "string",
          "minLength": 1
        },
        "locId": {
          "description": "Id for localization purpose only.",
          "type": "string"
        },
        "path": {
          "description": "The path to the executable.",
          "type": "string"
        }
      }
    }
  },
  "id": "https://json.schemastore.org/vsix-manifestinjection.json",
  "properties": {
    "fileAssociations": {
      "description": "A list of file associations (protocol handlers).",
      "type": "array",
      "items": {
        "$ref": "#/definitions/fileAssociation"
      }
    },
    "urlAssociations": {
      "description": "A list of URL associations (protocol handlers).",
      "type": "array",
      "items": {
        "$ref": "#/definitions/urlAssociation"
      }
    },
    "progIds": {
      "description": "A list of URL associations (protocol handlers).",
      "type": "array",
      "items": {
        "$ref": "#/definitions/progIds"
      }
    }
  },
  "title": "JSON schema for Visual Studio manifest extensions",
  "type": "object"
}
