73 lines
1.4 KiB
JavaScript
73 lines
1.4 KiB
JavaScript
|
const _ = require('lodash');
|
||
|
|
||
|
// JSON schema types
|
||
|
const ARRAY = 'array';
|
||
|
const BOOLEAN = 'boolean';
|
||
|
const OBJECT = 'object';
|
||
|
const STRING = 'string';
|
||
|
|
||
|
const BOOLEAN_SCHEMA = {
|
||
|
type: BOOLEAN
|
||
|
};
|
||
|
const STRING_SCHEMA = {
|
||
|
type: STRING
|
||
|
};
|
||
|
|
||
|
const TYPES = require('./types');
|
||
|
const TYPE_NAMES = _.values(TYPES);
|
||
|
|
||
|
module.exports = {
|
||
|
type: OBJECT,
|
||
|
additionalProperties: false,
|
||
|
properties: {
|
||
|
type: {
|
||
|
type: STRING,
|
||
|
enum: TYPE_NAMES
|
||
|
},
|
||
|
|
||
|
// field type
|
||
|
key: { '$ref': '#' },
|
||
|
value: { '$ref': '#' },
|
||
|
|
||
|
// function type
|
||
|
params: {
|
||
|
type: ARRAY,
|
||
|
items: { '$ref': '#' }
|
||
|
},
|
||
|
'new': { '$ref': '#' },
|
||
|
'this': { '$ref': '#' },
|
||
|
result: {'$ref': '#' },
|
||
|
|
||
|
// name expression
|
||
|
name: STRING_SCHEMA,
|
||
|
|
||
|
// record type
|
||
|
fields: {
|
||
|
type: ARRAY,
|
||
|
items: { '$ref': '#' }
|
||
|
},
|
||
|
|
||
|
// type application
|
||
|
expression: { '$ref': '#' },
|
||
|
applications: {
|
||
|
type: ARRAY,
|
||
|
minItems: 1,
|
||
|
maxItems: 2,
|
||
|
items: { '$ref': '#' }
|
||
|
},
|
||
|
|
||
|
// type union
|
||
|
elements: {
|
||
|
type: ARRAY,
|
||
|
minItems: 1,
|
||
|
items: { '$ref': '#' }
|
||
|
},
|
||
|
|
||
|
optional: BOOLEAN_SCHEMA,
|
||
|
nullable: BOOLEAN_SCHEMA,
|
||
|
repeatable: BOOLEAN_SCHEMA,
|
||
|
reservedWord: BOOLEAN_SCHEMA
|
||
|
},
|
||
|
required: ['type']
|
||
|
};
|