@benshi.ai/js-sdk
Version:
Benshi SDK
115 lines (87 loc) • 2.99 kB
JavaScript
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' })