xflow 0.1.1

XFlow implementation
Documentation
export default {
  '$schema': 'http://nosuchtype.com/xflow/v1/schema#',
  'id': '/',
  'type': 'object',
  'properties': {
    'id': {
      'id': 'id',
      'type': 'string',
      'minLength': 1
    },
    'name': {
      'id': 'name',
      'type': 'string',
      'minLength': 1
    },
    'version': {
      'id': 'version',
      'type': 'number',
      'minimum': 0
    },
    'requirements': {
      'id': 'requirements',
      'type': 'array',
      'minItems': 1,
      'uniqueItems': true,
      'additionalItems': true,
      'items': {
        'type': 'object',
        'properties': {
          'xtype': {
            'id': 'xtype',
            'type': 'string',
            'minLength': 1
          },
          'version': {
            'id': 'version',
            'type': 'integer',
            'minimum': 1,
            'default': 1
          }
        },
        'additionalProperties': false
      }
    },
    'variables': {
      'id': 'variables',
      'type': 'object',
      'properties': {
        'input': {
          'type': 'array',
          'minItems': 0,
          'uniqueItems': true,
          'additionalItems': true,
          'items': {
            'type' : 'object',
            'oneOf' : [
              { '$ref': '#/definitions/scopeVariable' }
            ]
          }
        },
        'output': {
          'type': 'array',
          'minItems': 0,
          'uniqueItems': true,
          'additionalItems': true,
          'items': {
            'type': 'object',
            'oneOf' : [
              { '$ref': '#/definitions/scopeVariableReference' }
            ]
          }
        },
        'local': {
          'id': 'local',
          'type': 'array',
          'minItems': 0,
          'uniqueItems': true,
          'additionalItems': true,
          'items': {
            'type': 'object',
            'oneOf' : [
              { '$ref': '#/definitions/scopeVariable' }
            ]
          }
        }
      },
      'additionalProperties': false,
      'required' : [
        'input',
        'output',
        'local'
      ]
    },
    'nodes': {
      'id': 'nodes',
      'type': 'array',
      'minItems': 2,
      'uniqueItems': true,
      'additionalItems': true,
      'items': {
        'type': 'object',
        'oneOf' : [
          { '$ref': '#/definitions/flowNode' }
        ]
      }
    },
    'edges': {
      'id': 'edges',
      'type': 'array',
      'minItems': 1,
      'uniqueItems': true,
      'additionalItems': true,
      'items': {
        'type': 'array',
        'oneOf' : [
          { '$ref': '#/definitions/flowEdge' }
        ]
      }
    },
    'branches': {
      'id': 'branches',
      'type': 'array',
      'minItems': 0,
      'uniqueItems': true,
      'additionalItems': true,
      'items': {
        'type': 'object',
        'oneOf' : [
          { '$ref': '#/definitions/flowBranch' }
        ]
      }
    }
  },
  'definitions' : {
    'scopeVariableReference' : {
      'properties' : {
        'name' : {
          'type': 'string',
          'minLength': 1
        },
        'vtype' : {
          'type': 'string',
          'minLength': 1,
          'default': 'string',
          'enum': [
            'boolean',
            'number',
            'string'
          ]
        }
      },
      'additionalProperties' : false,
      'required': [
        'name',
        'vtype'
      ]
    },
    'scopeVariable' : {
      'properties' : {
        'name' : {
          'type': 'string',
          'minLength': 1
        },
        'vtype' : {
          'type': 'string',
          'minLength': 1,
          'default': 'string',
          'enum': [
            'boolean',
            'number',
            'string'
          ]
        },
        'value' : {
          'type': 'string',
          'minLength': 0,
          'default': ''
        }
      },
      'additionalProperties' : false,
      'required': [
        'name',
        'vtype',
        'value'
      ]
    },
    'flowNode' : {
      'properties' : {
        'id' : {
          'type' : 'number'
        },
        'nodetype' : {
          'type' : 'string'
        },
        'action' : {
          'type' : 'string'
        },
        'label' : {
          'type' : 'string'
        },
        'parameters' : {
          'type' : 'object'
        }
      },
      'additionalProperties' : false,
      'required': [
        'id',
        'nodetype',
        'action',
        'label',
        'parameters'
      ]
    },
    'flowEdge' : {
      'properties' : {
        'type': 'array',
        'minItems': 2,
        'maxItems': 2,
        'uniqueItems': true,
        'additionalItems': false,
        'items': {
          'type': 'number'
        },
        'additionalProperties': false
      }
    },
    'flowBranch' : {
      'properties' : {
        'edge' : {
          'type': 'object',
          'oneOf' : [
            { '$ref': '#/definitions/flowEdge' }
          ]
        },
        'name' : {
          'type' : 'string'
        },
        'value' : {
          'type': 'object',
          'anyOf': [
            { 'type': 'boolean' },
            { 'type': 'string' },
            { 'type': 'number' }
          ]
        }
      },
      'additionalProperties' : false,
      'required': [
        'edge',
        'name',
        'value'
      ]
    }
  },
  'additionalProperties': false,
  'required': [
    'id',
    'name',
    'version',
    'requirements',
    'variables',
    'nodes',
    'edges',
    'branches'
  ]
};