| 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'] |
| }; |