@multiplayer-app/otlp-core
Version:
Multiplayer otlp core
59 lines (48 loc) • 1.16 kB
text/typescript
import * as _toJsonSchema from 'to-json-schema'
// eslint-disable-next-line
// @ts-ignore
const toJsonSchema = _toJsonSchema?.default || _toJsonSchema
const defaultSchemifyOptions: _toJsonSchema.Options = {
strings: {
preProcessFnc: (value: string, defaultFnc: any) => {
if (value?.length >= 30) {
return defaultFnc('some_string')
}
return defaultFnc(value)
},
},
arrays: {
mode: 'first',
},
}
export default (
payload: string | object | undefined,
stringify = true,
options: _toJsonSchema.Options = defaultSchemifyOptions,
): any => {
if (!payload) {
return ''
}
let payloadJson: any
if (typeof payload === 'string') {
try {
payloadJson = JSON.parse(payload)
} catch {
return payload
}
} else if (typeof payload === 'object') {
payloadJson = payload
} else {
return payload
}
try {
const schema = toJsonSchema(payloadJson, options)
if (stringify) {
return JSON.stringify(schema)
}
return schema
} catch (err) {
// error can happen when array has items like ['test', 'asd', '1'], type for '1' is null
return ''
}
}