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})`]
							 | 
						||
| 
								 | 
							
								}
							 |