mirror of
https://github.com/langgenius/dify.git
synced 2026-04-15 09:57:03 +08:00
Co-authored-by: Sami Rusani <sr@samirusani> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import type { Schema, ValidationError, ValidatorResult } from 'jsonschema'
|
|
import { Validator } from 'jsonschema'
|
|
import draft07Schema from './draft-07.json'
|
|
|
|
const validator = new Validator()
|
|
|
|
type Draft07ValidationResult = Pick<ValidatorResult, 'valid' | 'errors'>
|
|
|
|
export const draft07Validator = (schema: any): Draft07ValidationResult => {
|
|
try {
|
|
return validator.validate(schema, draft07Schema as unknown as Schema)
|
|
}
|
|
catch {
|
|
// The jsonschema library may throw URL errors in browser environments
|
|
// when resolving schema $id URIs. Return empty errors since structural
|
|
// validation is handled separately by preValidateSchema (#34841).
|
|
return { valid: true, errors: [] as ValidationError[] }
|
|
}
|
|
}
|
|
|
|
export const forbidBooleanProperties = (schema: any, path: string[] = []): string[] => {
|
|
let errors: string[] = []
|
|
|
|
if (schema && typeof schema === 'object' && schema.properties) {
|
|
for (const [key, val] of Object.entries(schema.properties)) {
|
|
if (typeof val === 'boolean') {
|
|
errors.push(
|
|
`Error: Property '${[...path, key].join('.')}' must not be a boolean schema`,
|
|
)
|
|
}
|
|
else if (typeof val === 'object') {
|
|
errors = errors.concat(forbidBooleanProperties(val, [...path, key]))
|
|
}
|
|
}
|
|
}
|
|
return errors
|
|
}
|