codecombat/app/schemas/metaschema.coffee
2014-07-01 12:23:22 +08:00

132 lines
3.4 KiB
CoffeeScript

# The JSON Schema Core/Validation Meta-Schema, but with titles and descriptions added to make it easier to edit in Treema, and in CoffeeScript
module.exports =
id: 'metaschema'
displayProperty: 'title'
$schema: 'http://json-schema.org/draft-04/schema#'
title: 'Schema'
description: 'Core schema meta-schema'
definitions:
schemaArray:
type: 'array'
minItems: 1
items: {$ref: '#'}
title: 'Array of Schemas'
'default': [{}]
positiveInteger:
type: 'integer'
minimum: 0
title: 'Positive Integer'
positiveIntegerDefault0:
allOf: [{$ref: '#/definitions/positiveInteger'}, {'default': 0}]
simpleTypes:
title: 'Single Type'
'enum': ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string']
stringArray:
type: 'array'
items: {type: 'string'}
minItems: 1
uniqueItems: true
title: 'String Array'
'default': ['']
type: 'object'
properties:
id:
type: 'string'
format: 'uri'
$schema:
type: 'string'
format: 'uri'
'default': 'http://json-schema.org/draft-04/schema#'
title:
type: 'string'
description:
type: 'string'
'default': {}
multipleOf:
type: 'number'
minimum: 0
exclusiveMinimum: true
maximum:
type: 'number'
exclusiveMaximum:
type: 'boolean'
'default': false
minimum:
type: 'number'
exclusiveMinimum:
type: 'boolean'
'default': false
maxLength: {$ref: '#/definitions/positiveInteger'}
minLength: {$ref: '#/definitions/positiveIntegerDefault0'}
pattern:
type: 'string'
format: 'regex'
additionalItems:
anyOf: [
{type: 'boolean', 'default': false}
{$ref: '#'}
]
items:
anyOf: [
{$ref: '#'}
{$ref: '#/definitions/schemaArray'}
]
'default': {}
maxItems: {$ref: '#/definitions/positiveInteger'}
minItems: {$ref: '#/definitions/positiveIntegerDefault0'}
uniqueItems:
type: 'boolean'
'default': false
maxProperties: {$ref: '#/definitions/positiveInteger'}
minProperties: {$ref: '#/definitions/positiveIntegerDefault0'}
required: {$ref: '#/definitions/stringArray'}
additionalProperties:
anyOf: [
{type: 'boolean', 'default': true}
{$ref: '#'}
]
'default': {}
definitions:
type: 'object'
additionalProperties: {$ref: '#'}
'default': {}
properties:
type: 'object'
additionalProperties: {$ref: '#'}
'default': {}
patternProperties:
type: 'object'
additionalProperties: {$ref: '#'}
'default': {}
dependencies:
type: 'object'
additionalProperties:
anyOf: [
{$ref: '#'}
{$ref: '#/definitions/stringArray'}
]
'enum':
type: 'array'
minItems: 1
uniqueItems: true
'default': ['']
type:
anyOf: [
{$ref: '#/definitions/simpleTypes'}
{
type: 'array'
items: {$ref: '#/definitions/simpleTypes'}
minItems: 1
uniqueItems: true
title: 'Array of Types'
'default': ['string']
}]
allOf: {$ref: '#/definitions/schemaArray'}
anyOf: {$ref: '#/definitions/schemaArray'}
oneOf: {$ref: '#/definitions/schemaArray'}
not: {$ref: '#'}
dependencies:
exclusiveMaximum: ['maximum']
exclusiveMinimum: ['minimum']
'default': {}