@burgan-tech/vnext-schema
Version:
JSON Schema definitions for vNext vNext Workflow components validation
251 lines • 10.6 kB
JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://vnext.io/schemas/extension-definition.schema.json",
"title": "vNext Extension Definition",
"description": "Schema for vNext Extension Component Definition JSON files (sys-extensions flow)",
"type": "object",
"required": [
"key",
"version",
"domain",
"flow",
"flowVersion",
"tags",
"attributes"
],
"properties": {
"$schema": {
"type": "string",
"description": "JSON Schema reference",
"format": "uri"
},
"key": {
"type": "string",
"description": "Extension key identifier",
"pattern": "^[a-z0-9-]+$"
},
"version": {
"type": "string",
"description": "Version in Major.Minor.Patch format",
"pattern": "^\\d+\\.\\d+\\.\\d+$"
},
"domain": {
"type": "string",
"description": "Domain identifier",
"pattern": "^[a-z0-9-]+$"
},
"flow": {
"type": "string",
"description": "Flow identifier for extensions",
"const": "sys-extensions"
},
"flowVersion": {
"type": "string",
"description": "Flow version",
"pattern": "^\\d+\\.\\d+\\.\\d+$"
},
"tags": {
"type": "array",
"description": "Extension tags",
"items": {
"type": "string"
},
"minItems": 1
},
"_comment": {
"type": "string",
"description": "Comment about the extension"
},
"attributes": {
"type": "object",
"description": "Extension definition attributes",
"required": [
"type",
"scope",
"task"
],
"properties": {
"type": {
"type": "integer",
"description": "Extension type (ExtensionType enum value)",
"oneOf": [
{
"const": 1,
"description": "Global - Extension that will work while recording samples are rotating in all streams"
},
{
"const": 2,
"description": "GlobalAndRequested - Extension that will work on all streams and when requesting recording samples"
},
{
"const": 3,
"description": "DefinedFlows - Extension that will only work on the streams for which it is defined"
},
{
"const": 4,
"description": "DefinedFlowAndRequested - An extension that will only work on the streams it is defined for and when requested"
}
]
},
"scope": {
"type": "integer",
"description": "Extension scope (ExtensionScope enum value)",
"oneOf": [
{
"const": 1,
"description": "GetInstance - The extension works on {domain}/workflows/{workflow}/instances/{instance} endpoint"
},
{
"const": 2,
"description": "GetAllInstances - The extension works on {domain}/workflows/{workflow}/instances endpoint"
},
{
"const": 3,
"description": "Everywhere - The extension works on all get endpoints"
}
]
},
"task": {
"type": "object",
"description": "Extension execution task",
"required": [
"order",
"task",
"mapping"
],
"properties": {
"order": {
"type": "integer",
"description": "Task execution order",
"minimum": 1
},
"task": {
"description": "Task reference - can be either explicit reference or $ref",
"oneOf": [
{
"type": "object",
"description": "Explicit task reference",
"required": [
"key",
"domain",
"flow",
"version"
],
"properties": {
"key": {
"type": "string",
"description": "Task key"
},
"domain": {
"type": "string",
"description": "Task domain"
},
"flow": {
"type": "string",
"description": "Task workflow",
"const": "sys-tasks"
},
"version": {
"type": "string",
"description": "Task version"
}
},
"additionalProperties": false
},
{
"type": "object",
"description": "Task reference using ref",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"description": "Reference to task file"
}
},
"additionalProperties": false
}
]
},
"mapping": {
"type": "object",
"description": "Extension mapping code",
"properties": {
"type": {
"type": "string",
"enum": ["G", "L"],
"enumDescriptions": [
"Global",
"Local"
],
"default": "L",
"description": "Mapping type - Global or Local"
},
"location": {
"type": "string",
"description": "Code file location",
"pattern": "^\\./.*\\.csx$"
},
"code": {
"type": "string",
"description": "Mapping code content",
"minLength": 1
},
"encoding": {
"type": "string",
"description": "Code encoding format",
"enum": ["B64", "NAT"],
"default": "B64"
}
},
"additionalProperties": false,
"if": {
"properties": {
"type": {
"const": "G"
}
}
},
"then": {
"required": []
},
"else": {
"required": ["code"]
}
}
},
"additionalProperties": false
},
"labels": {
"type": "array",
"description": "Multi-language labels for extension",
"items": {
"type": "object",
"required": [
"label",
"language"
],
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"language": {
"type": "string",
"pattern": "^[a-z]{2}-[A-Z]{2}$",
"examples": [
"en-US",
"tr-TR",
"de-DE"
]
}
}
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}