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.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							56 lines
						
					
					
						
							1.6 KiB
						
					
					
				| import type {CodeKeywordDefinition, SchemaObject} from "../../types"
 | |
| import type {KeywordCxt} from "../../compile/validate"
 | |
| import {alwaysValidSchema, Type} from "../../compile/util"
 | |
| import {not, Name} from "../../compile/codegen"
 | |
| import {checkMetadata} from "./metadata"
 | |
| import {checkNullableObject} from "./nullable"
 | |
| import {typeError, _JTDTypeError} from "./error"
 | |
| 
 | |
| export type JTDValuesError = _JTDTypeError<"values", "object", SchemaObject>
 | |
| 
 | |
| const def: CodeKeywordDefinition = {
 | |
|   keyword: "values",
 | |
|   schemaType: "object",
 | |
|   error: typeError("object"),
 | |
|   code(cxt: KeywordCxt) {
 | |
|     checkMetadata(cxt)
 | |
|     const {gen, data, schema, it} = cxt
 | |
|     if (alwaysValidSchema(it, schema)) return
 | |
|     const [valid, cond] = checkNullableObject(cxt, data)
 | |
|     gen.if(cond)
 | |
|     gen.assign(valid, validateMap())
 | |
|     gen.elseIf(not(valid))
 | |
|     cxt.error()
 | |
|     gen.endIf()
 | |
|     cxt.ok(valid)
 | |
| 
 | |
|     function validateMap(): Name | boolean {
 | |
|       const _valid = gen.name("valid")
 | |
|       if (it.allErrors) {
 | |
|         const validMap = gen.let("valid", true)
 | |
|         validateValues(() => gen.assign(validMap, false))
 | |
|         return validMap
 | |
|       }
 | |
|       gen.var(_valid, true)
 | |
|       validateValues(() => gen.break())
 | |
|       return _valid
 | |
| 
 | |
|       function validateValues(notValid: () => void): void {
 | |
|         gen.forIn("key", data, (key) => {
 | |
|           cxt.subschema(
 | |
|             {
 | |
|               keyword: "values",
 | |
|               dataProp: key,
 | |
|               dataPropType: Type.Str,
 | |
|             },
 | |
|             _valid
 | |
|           )
 | |
|           gen.if(not(_valid), notValid)
 | |
|         })
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| }
 | |
| 
 | |
| export default def
 |