UNPKG

one-schema

Version:
62 lines (61 loc) 2.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateTypescriptInterface = void 0; var FV_TYPE_TO_TS_TYPE = { float64: 'number', int32: 'number', string: 'string', bool: 'boolean', }; function generateSubObjectInterfaceName(parentName, type, fieldName) { return parentName + "_" + type + "_" + fieldName; } function primitiveSchemaFieldToType(fv) { if (!FV_TYPE_TO_TS_TYPE.hasOwnProperty(fv.settings.type)) { throw new Error("Invalid primative type " + fv.settings.type + "!"); } return "" + FV_TYPE_TO_TS_TYPE[fv.settings.type]; } function getTypeForField(fv, keyName, interfaceName, interfaceArray, subNameGenerator) { if (fv.settings.type === 'object') { var internalType = subNameGenerator(interfaceName, 'sub', keyName); generateTypescriptInterfaceFull(fv, internalType, interfaceArray, subNameGenerator); return internalType; } if (fv.settings.type === 'array') { if (!fv.settings.arrayOf) { return 'any[]'; } return getTypeForField(fv.settings.arrayOf, keyName, interfaceName, interfaceArray, subNameGenerator) + "[]"; } if (Array.isArray(fv.settings.oneOf) && fv.settings.oneOf.length) { return "(" + fv.settings.oneOf.map(function (x) { return JSON.stringify(x); }).join(' | ') + ")"; } return primitiveSchemaFieldToType(fv); } function generateTypescriptInterfaceFull(fv, interfaceName, interfaceArray, subNameGenerator) { var subGen = typeof subNameGenerator === 'function' ? subNameGenerator : generateSubObjectInterfaceName; if (!fv || !fv.settings || fv.settings.type !== 'object' || !fv.settings.schema) { throw new Error('You can only convert one-schema schemas of type object to typescript!'); } var schemaObj = fv.settings.schema; var keys = Object.keys(schemaObj); var keysLen = keys.length; var typeFieldArray = []; for (var i = 0; i < keysLen; i++) { var field = schemaObj[keys[i]]; var fieldNamePrefix = JSON.stringify(keys[i]) + (field.settings.required ? '' : '?'); var fieldTSType = getTypeForField(field, keys[i], interfaceName, interfaceArray, subGen); var fullField = fieldNamePrefix + ": " + fieldTSType + ";"; typeFieldArray.push(fullField); } var interfaceInner = keysLen === 0 ? '' : (" " + typeFieldArray.join('\n ')); var fullStr = "interface " + interfaceName + " {\n" + interfaceInner + "\n}"; interfaceArray.push(fullStr); } function generateTypescriptInterface(fv, interfaceName, subNameGenerator) { var interfaceArray = []; generateTypescriptInterfaceFull(fv, interfaceName, interfaceArray, subNameGenerator); return interfaceArray.join('\n\n'); } exports.generateTypescriptInterface = generateTypescriptInterface;