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