blob: 888115301b380f029dbf6810228ab93decfa5073 [file] [log] [blame]
{
"$schema": "http://json-schema.org/schema",
"definitions": {
"simple_support_statement": {
"type": "object",
"properties": {
"version_added": {
"description": "A string (indicating which browser version added this feature), or the value false (indicating the feature is not supported).",
"anyOf": [
{
"type": "string",
"pattern": "^(≤?(\\d+)(\\.\\d+)*|preview)$"
},
{
"const": false
}
],
"tsType": "VersionValue"
},
"version_removed": {
"description": "A string, indicating which browser version removed this feature.",
"type": "string",
"pattern": "^(≤?(\\d+)(\\.\\d+)*|preview)$",
"tsType": "string"
},
"version_last": {
"description": "A string, indicating the last browser version that supported this feature. This is automatically generated.",
"type": "string",
"pattern": "^(≤?(\\d+)(\\.\\d+)*|preview)$",
"tsType": "string"
},
"prefix": {
"type": "string",
"description": "A prefix to add to the sub-feature name (defaults to empty string). If applicable, leading and trailing '-' must be included."
},
"alternative_name": {
"type": "string",
"description": "An alternative name for the feature, for cases where a feature is implemented under an entirely different name and not just prefixed."
},
"flags": {
"type": "array",
"description": "An optional array of objects describing flags that must be configured for this browser to support this feature.",
"minItems": 1,
"items": {
"$ref": "#/definitions/flag_statement"
},
"tsType": "[FlagStatement, ...FlagStatement[]]"
},
"impl_url": {
"anyOf": [
{
"$ref": "#/definitions/impl_url_value"
},
{
"type": "array",
"minItems": 2,
"items": {
"$ref": "#/definitions/impl_url_value"
}
}
],
"description": "An optional changeset/commit URL for the revision which implemented the feature in the source code, or the URL to the bug tracking the implementation, for the associated browser.",
"tsType": "string | [string, string, ...string[]]",
"errorMessage": {
"pattern": "impl_url must be a link to a browser commit or bug URL. URLs must be in shortened form (ex. bugs.chromium.org -> crbug.com). Note: `npm run fix` may resolve these issues."
}
},
"partial_implementation": {
"const": true,
"description": "A boolean value indicating whether or not the implementation of the sub-feature deviates from the specification in a way that may cause compatibility problems. It defaults to false (no interoperability problems expected). If set to true, it is recommended that you add a note explaining how it diverges from the standard (such as that it implements an old version of the standard, for example)."
},
"notes": {
"description": "A string or array of strings containing additional information.",
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"minItems": 2,
"items": {
"type": "string"
}
}
],
"tsType": "string | [string, string, ...string[]]"
}
},
"required": ["version_added"],
"dependencies": {
"partial_implementation": {
"if": {
"properties": { "partial_implementation": { "const": true } }
},
"then": { "required": ["notes"] }
}
},
"additionalProperties": false
},
"flag_statement": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "An enum that indicates the flag type.",
"enum": ["preference", "runtime_flag"]
},
"name": {
"type": "string",
"description": "A string giving the name of the flag or preference that must be configured."
},
"value_to_set": {
"type": "string",
"description": "A string giving the value which the specified flag must be set to for this feature to work."
}
},
"additionalProperties": false,
"required": ["type", "name"]
},
"support_statement": {
"anyOf": [
{ "$ref": "#/definitions/simple_support_statement" },
{
"type": "array",
"minItems": 2,
"items": {
"$ref": "#/definitions/simple_support_statement"
}
},
{ "const": "mirror" }
],
"tsType": "SimpleSupportStatement | [SimpleSupportStatement, SimpleSupportStatement, ...SimpleSupportStatement[]]"
},
"status_block": {
"type": "object",
"properties": {
"experimental": {
"type": "boolean",
"deprecated": true,
"description": "(This property is deprecated. Prefer using more well-defined stability calculations, such as Baseline, instead.) A boolean value. Usually, this value is true for single-implementer features and false for multiple-implementer features or single-implementer features that are not expected to change."
},
"standard_track": {
"type": "boolean",
"description": "A boolean value indicating whether the feature is part of an active specification or specification process."
},
"deprecated": {
"type": "boolean",
"description": "A boolean value that indicates whether the feature is no longer recommended. It might be removed in the future or might only be kept for compatibility purposes. Avoid using this functionality."
}
},
"required": ["experimental", "standard_track", "deprecated"],
"additionalProperties": false
},
"support_block": {
"type": "object",
"propertyNames": {
"enum": [
"bun",
"chrome",
"chrome_android",
"deno",
"edge",
"firefox",
"firefox_android",
"ie",
"nodejs",
"oculus",
"opera",
"opera_android",
"safari",
"safari_ios",
"samsunginternet_android",
"webview_android",
"webview_ios"
]
},
"additionalProperties": {
"$ref": "#/definitions/support_statement"
},
"tsType": "Partial<Record<BrowserName, SupportStatement>>"
},
"spec_url_value": {
"type": "string",
"format": "uri",
"pattern": "(^https://[^#]+#.+)|(^https://github.com/WebAssembly/.+)|(^https://registry.khronos.org/webgl/extensions/[^/]+/)"
},
"impl_url_value": {
"type": "string",
"format": "uri",
"pattern": "^https://(trac.webkit.org/changeset/|hg.mozilla.org/mozilla-central/rev/|crrev.com/|bugzil.la/|crbug.com/|webkit.org/b/|github.com/GoogleChromeLabs/chromium-bidi/issues/)"
},
"compat_statement": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "A string containing a human-readable description of the feature."
},
"mdn_url": {
"type": "string",
"format": "uri",
"pattern": "^https://developer\\.mozilla\\.org/docs/",
"description": "A URL that points to an MDN reference page documenting the feature. The URL should be language-agnostic."
},
"spec_url": {
"anyOf": [
{
"$ref": "#/definitions/spec_url_value"
},
{
"type": "array",
"minItems": 2,
"items": {
"$ref": "#/definitions/spec_url_value"
}
}
],
"description": "An optional URL or array of URLs, each of which is for a specific part of a specification in which this feature is defined. Each URL must contain a fragment identifier.",
"tsType": "string | [string, string, ...string[]]"
},
"tags": {
"description": "An optional array of strings allowing to assign tags to the feature.",
"type": "array",
"minItems": 1,
"tsType": "[string, ...string[]]"
},
"source_file": {
"type": "string",
"description": "The path to the file that defines this feature in browser-compat-data, relative to the repository root. Useful for guiding potential contributors towards the correct file to edit. This is automatically generated at build time and should never manually be specified."
},
"support": {
"$ref": "#/definitions/support_block",
"description": "The data for the support of each browser, containing a `support_statement` object for each browser identifier with information about versions, prefixes, or alternate names, as well as notes."
},
"status": {
"$ref": "#/definitions/status_block",
"description": "An object containing information about the stability of the feature."
}
},
"required": ["support"],
"additionalProperties": false
},
"identifier": {
"type": "object",
"properties": {
"__compat": {
"type": "object",
"$ref": "#/definitions/compat_statement",
"required": ["status"],
"description": "A feature is described by an identifier containing the `__compat` property.\n\nIn other words, identifiers without `__compat` aren't necessarily features, but help to nest the features properly.\n\nWhen an identifier has a `__compat` block, it represents its basic support, indicating that a minimal implementation of a functionality is included.\n\nWhat it represents exactly depends of the evolution of the feature over time, both in terms of specifications and of browser support.",
"tsType": "CompatStatement"
}
},
"patternProperties": {
"^(?!__compat)[a-zA-Z_0-9-$@]*$": { "$ref": "#/definitions/identifier" }
},
"additionalProperties": false,
"errorMessage": {
"additionalProperties": "Feature names can only contain alphanumerical characters or the following symbols: _-$@"
},
"tsType": "{[key: string]: Identifier} & {__compat?: CompatStatement};"
},
"webextensions_identifier": {
"type": "object",
"properties": {
"__compat": { "$ref": "#/definitions/compat_statement" }
},
"patternProperties": {
"^(?!__compat)[a-zA-Z_0-9-$@]*$": {
"$ref": "#/definitions/webextensions_identifier",
"tsType": "Identifier"
}
},
"additionalProperties": false,
"errorMessage": {
"additionalProperties": "Feature names can only contain alphanumerical characters or the following symbols: _-$@"
},
"tsType": "{[key: string]: Identifier} & {__compat?: CompatStatement}"
}
},
"title": "CompatDataFile",
"type": "object",
"patternProperties": {
"^(?!__compat)(?!webextensions)[a-zA-Z_0-9-$@]*$": {
"$ref": "#/definitions/identifier"
},
"^webextensions*$": {
"$ref": "#/definitions/webextensions_identifier",
"tsType": "Identifier"
},
"^__compat$": {
"$ref": "#/definitions/compat_statement"
}
},
"additionalProperties": false,
"errorMessage": {
"additionalProperties": "Feature names can only contain alphanumerical characters or the following symbols: _-$@"
},
"maxProperties": 1,
"minProperties": 1
}