UNPKG

@benshi.ai/js-sdk

Version:

Benshi SDK

115 lines (87 loc) 2.99 kB
const fs = require('fs') const yaml = require('js-yaml'); const Ajv = require('ajv') var beautify = require("json-beautify"); const benshiYamlPath = './benshi_ingest_schema.yml' const ymlSchema = fs.readFileSync(benshiYamlPath, 'utf8') const ajv = new Ajv() const jsonSchema = yaml.load(ymlSchema) let standardJsonSchema = {} standardJsonSchema['properties'] = { ...jsonSchema['main_ingest_body'] } standardJsonSchema['required'] = [...standardJsonSchema['properties']['required']] delete standardJsonSchema['properties']['required'] standardJsonSchema['$defs'] = {} for (let [key, value] of Object.entries(jsonSchema.events)) { standardJsonSchema['$defs'][key] = { ...value, type: 'object', properties: value.props.properties, description: value.summary } delete standardJsonSchema['$defs'][key]['summary'] delete standardJsonSchema['$defs'][key]['props'] delete standardJsonSchema['$defs'][key]['block'] } for (let [key, value] of Object.entries(jsonSchema.data_types)) { standardJsonSchema['$defs'][key] = { ...value, type: 'object', } } const replaceType = (obj) => { for (let [key, value] of Object.entries(obj)) { if (key === 'type' && value === 'int') { obj[key] = 'integer' } if (key === 'type' && value === 'float') { obj[key] = 'number' } if (key === 'type' && value === 'hashMap') { obj[key] = 'object' } if (key === 'type' && value === 'string[]') { obj[key] = 'array' } // TODO: check internal contents of the array if (key === 'type' && value === 'itemObject[]') { obj[key] = 'array' } // TODO: check internal contents of the array if (key === 'type' && value === 'itemTypeObject[]') { obj[key] = 'array' } if (key === 'type' && value === 'itemObject') { delete obj[key] obj["$ref"] = "#/$defs/itemObject" } if (key === 'example') { obj['examples'] = [obj['example']] delete obj['example'] } if (key === 'summary') { obj['description'] = obj['summary'] delete obj['summary'] } if (typeof value === 'object') { replaceType(value) } } } replaceType(standardJsonSchema) standardJsonSchema.oneOf = standardJsonSchema.properties.type.enum .map(propKey => ( { "properties": { "type": { "const": propKey }, "props": { "type": "object", "$ref": `#/$defs/${propKey}` } } } )) delete standardJsonSchema.properties.type delete standardJsonSchema.properties.props fs.writeFileSync('standardized-schema.json', beautify(standardJsonSchema, null, 2, 100), { encoding: 'utf-8' })