You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							51 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							51 lines
						
					
					
						
							1.2 KiB
						
					
					
				| 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: KeywordErrorDefinition = {
 | |
|   message: "property name must be valid",
 | |
|   params: ({params}) => _`{propertyName: ${params.propertyName}}`,
 | |
| }
 | |
| 
 | |
| const def: CodeKeywordDefinition = {
 | |
|   keyword: "propertyNames",
 | |
|   type: "object",
 | |
|   schemaType: ["object", "boolean"],
 | |
|   error,
 | |
|   code(cxt: KeywordCxt) {
 | |
|     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
 |