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.
		
		
		
		
		
			
		
			
				
					29 lines
				
				661 B
			
		
		
			
		
	
	
					29 lines
				
				661 B
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | const StrictModeError = require('../../error/strict'); | ||
|  | 
 | ||
|  | module.exports = function handleImmutable(schematype, strict, obj, key, fullPath, ctx) { | ||
|  |   if (schematype == null || !schematype.options || !schematype.options.immutable) { | ||
|  |     return false; | ||
|  |   } | ||
|  |   let immutable = schematype.options.immutable; | ||
|  | 
 | ||
|  |   if (typeof immutable === 'function') { | ||
|  |     immutable = immutable.call(ctx, ctx); | ||
|  |   } | ||
|  |   if (!immutable) { | ||
|  |     return false; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (strict === false) { | ||
|  |     return false; | ||
|  |   } | ||
|  |   if (strict === 'throw') { | ||
|  |     throw new StrictModeError(null, | ||
|  |       `Field ${fullPath} is immutable and strict = 'throw'`); | ||
|  |   } | ||
|  | 
 | ||
|  |   delete obj[key]; | ||
|  |   return true; | ||
|  | }; |