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.
		
		
		
		
		
			
		
			
				
					22 lines
				
				649 B
			
		
		
			
		
	
	
					22 lines
				
				649 B
			| 
											3 years ago
										 | import type {KeywordCxt} from "../../compile/validate" | ||
|  | import {_, not, nil, Code, Name} from "../../compile/codegen" | ||
|  | 
 | ||
|  | export function checkNullable( | ||
|  |   {gen, data, parentSchema}: KeywordCxt, | ||
|  |   cond: Code = nil | ||
|  | ): [Name, Code] { | ||
|  |   const valid = gen.name("valid") | ||
|  |   if (parentSchema.nullable) { | ||
|  |     gen.let(valid, _`${data} === null`) | ||
|  |     cond = not(valid) | ||
|  |   } else { | ||
|  |     gen.let(valid, false) | ||
|  |   } | ||
|  |   return [valid, cond] | ||
|  | } | ||
|  | 
 | ||
|  | export function checkNullableObject(cxt: KeywordCxt, cond: Code): [Name, Code] { | ||
|  |   const [valid, cond_] = checkNullable(cxt, cond) | ||
|  |   return [valid, _`${cond_} && typeof ${cxt.data} == "object" && !Array.isArray(${cxt.data})`] | ||
|  | } |