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 }
							 |