kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
pull/715/head
rodzic
da9188c49f
commit
ae5f96e4ff
|
@ -0,0 +1,47 @@
|
|||
import { HttpError } from '@agentic/platform-core'
|
||||
import { Validator } from '@cfworker/json-schema'
|
||||
import plur from 'plur'
|
||||
|
||||
export function validateJsonSchemaObject<
|
||||
T extends Record<string, unknown> = Record<string, unknown>
|
||||
>({
|
||||
schema,
|
||||
data,
|
||||
errorMessage
|
||||
}: {
|
||||
schema: any
|
||||
data: unknown
|
||||
errorMessage?: string
|
||||
}): T {
|
||||
// Special-case check for required fields to give better error messages
|
||||
if (Array.isArray(schema.required)) {
|
||||
const missingRequiredFields: string[] = schema.required.filter(
|
||||
(field: string) => (data as T)[field] === undefined
|
||||
)
|
||||
|
||||
if (missingRequiredFields.length > 0) {
|
||||
throw new HttpError({
|
||||
statusCode: 400,
|
||||
message: `${errorMessage ? errorMessage + ': ' : ''}Missing required ${plur('field', missingRequiredFields.length)}: ${missingRequiredFields.map((field) => `"${field}"`).join(', ')}`
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const validator = new Validator(schema)
|
||||
|
||||
const result = validator.validate(data)
|
||||
if (result.valid) {
|
||||
return data as T
|
||||
}
|
||||
|
||||
const finalErrorMessage = `${
|
||||
errorMessage ? errorMessage + ': ' : ''
|
||||
}${result.errors
|
||||
.map(({ keyword, error }) => `keyword "${keyword}" error ${error}`)
|
||||
.join(' ')}`
|
||||
|
||||
throw new HttpError({
|
||||
statusCode: 400,
|
||||
message: finalErrorMessage
|
||||
})
|
||||
}
|
Ładowanie…
Reference in New Issue