import { Draft, JSONError, JSONSchema } from '@squiz/json-schema-library'; import { CoreSchemaMetaSchema } from '../manifest/v1/v1'; export const customKeywordValidators: Record< string, (draft: Draft, schema: JSONSchema, value: unknown, pointer: string) => undefined | JSONError | JSONError[] > = { 'ui:metadata': (core, schema, value, pointer): JSONError[] | undefined => { const fieldValue = value as CoreSchemaMetaSchema; const uiMetadata = fieldValue['ui:metadata']; if (uiMetadata?.quickOption && fieldValue.type !== 'boolean') { if (!fieldValue.enum) { const error: JSONError = { name: 'uiMetadataError', code: 'uiMetadata-error', type: 'error', message: `ui:metadata property quickOption is only valid for boolean or enum based properties.`, data: { expected: 'enum', pointer: pointer, received: typeof value, value: value }, }; return [error]; } } if (uiMetadata?.enumWidget) { if (!fieldValue.enum) { const error: JSONError = { name: 'uiMetadataError', code: 'uiMetadata-error', type: 'error', message: `ui:metadata property enumWidget is only valid for enum based properties.`, data: { expected: 'enum', pointer: pointer, received: typeof value, value: value }, }; return [error]; } } if (uiMetadata?.collapsedByDefault) { if (fieldValue.type !== 'object') { const error: JSONError = { name: 'uiMetadataError', code: 'uiMetadata-error', type: 'error', message: `ui:metadata property collapsedByDefault is only valid for object properties.`, data: { expected: 'object', pointer: pointer, received: typeof value, value: value }, }; return [error]; } } return undefined; }, };