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.
		
		
		
		
		
			
		
			
				
					38 lines
				
				1007 B
			
		
		
			
		
	
	
					38 lines
				
				1007 B
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const validate = require('./configValidator') | ||
|  | const deepClone = require('rfdc')({ circles: true, proto: false }) | ||
|  | const { FST_ERR_INIT_OPTS_INVALID } = require('./errors') | ||
|  | 
 | ||
|  | function validateInitialConfig (options) { | ||
|  |   const opts = deepClone(options) | ||
|  | 
 | ||
|  |   if (!validate(opts)) { | ||
|  |     const error = new FST_ERR_INIT_OPTS_INVALID(JSON.stringify(validate.errors.map(e => e.message))) | ||
|  |     error.errors = validate.errors | ||
|  |     throw error | ||
|  |   } | ||
|  | 
 | ||
|  |   return deepFreezeObject(opts) | ||
|  | } | ||
|  | 
 | ||
|  | function deepFreezeObject (object) { | ||
|  |   const properties = Object.getOwnPropertyNames(object) | ||
|  | 
 | ||
|  |   for (const name of properties) { | ||
|  |     const value = object[name] | ||
|  | 
 | ||
|  |     if (ArrayBuffer.isView(value) && !(value instanceof DataView)) { | ||
|  |       continue | ||
|  |     } | ||
|  | 
 | ||
|  |     object[name] = value && typeof value === 'object' ? deepFreezeObject(value) : value | ||
|  |   } | ||
|  | 
 | ||
|  |   return Object.freeze(object) | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = validateInitialConfig | ||
|  | module.exports.defaultInitOptions = validate.defaultInitOptions | ||
|  | module.exports.utils = { deepFreezeObject } |