import type { CodeKeywordDefinition , ErrorObject , KeywordErrorDefinition , AnySchema , } from "../../types" ; import type { KeywordCxt } from "../../compile/validate" ; import { _ , not } from "../../compile/codegen" ; import { alwaysValidSchema } from "../../compile/util" ; export type PropertyNamesError = ErrorObject < "propertyNames" , { propertyName : string ; } , AnySchema > ; const error = { message : "property name must be valid" , params : ( { params } ) => _ `{propertyName: ${ params . propertyName }}` , } ; const def = { keyword : "propertyNames" , type : "object" , schemaType : [ "object" , "boolean" ] , error , code ( cxt ) { const { gen , schema , data , it } = cxt ; if ( alwaysValidSchema ( it , schema ) ) return ; const valid = gen . name ( "valid" ) ; gen . forIn ( "key" , data , ( key ) => { cxt . setParams ( { propertyName : key } ) ; cxt . subschema ( { keyword : "propertyNames" , data : key , dataTypes : [ "string" ] , propertyName : key , compositeRule : true , } , valid ) ; gen . if ( not ( valid ) , ( ) => { cxt . error ( true ) ; if ( ! it . allErrors ) gen . break ( ) ; } ) ; } ) ; cxt . ok ( valid ) ; } , } ; export default def ;