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.
		
		
		
		
		
			
		
			
				
					75 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					75 lines
				
				2.0 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.set = void 0; | ||
|  | 
 | ||
|  | var _flat = require("flat"); | ||
|  | 
 | ||
|  | var _constants = require("./constants"); | ||
|  | 
 | ||
|  | var _propertyKeyRegex = require("./property-key-regex"); | ||
|  | 
 | ||
|  | var _pathToParts = require("./path-to-parts"); | ||
|  | 
 | ||
|  | const isObject = value => { | ||
|  |   // Node environment
 | ||
|  |   if (typeof File === 'undefined') { | ||
|  |     return typeof value === 'object' && value !== null; | ||
|  |   } // Window environment
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   return typeof value === 'object' && !(value instanceof File) && value !== null; | ||
|  | }; | ||
|  | /** | ||
|  |  * @load ./set.doc.md | ||
|  |  * @memberof module:flat | ||
|  |  * @param {FlattenParams} params | ||
|  |  * @param {string} propertyPath | ||
|  |  * @param {any} [value]       if not give function will only try to remove old keys | ||
|  |  * @returns {FlattenParams} | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | const set = (params = {}, propertyPath, value) => { | ||
|  |   const regex = (0, _propertyKeyRegex.propertyKeyRegex)(propertyPath); // remove all existing keys
 | ||
|  | 
 | ||
|  |   const paramsCopy = Object.keys(params).filter(key => !key.match(regex)).reduce((memo, key) => { | ||
|  |     memo[key] = params[key]; | ||
|  |     return memo; | ||
|  |   }, {}); | ||
|  | 
 | ||
|  |   if (typeof value !== 'undefined') { | ||
|  |     if (isObject(value) && !(value instanceof Date)) { | ||
|  |       const flattened = (0, _flat.flatten)(value); | ||
|  | 
 | ||
|  |       if (Object.keys(flattened).length) { | ||
|  |         Object.keys(flattened).forEach(key => { | ||
|  |           paramsCopy[`${propertyPath}${_constants.DELIMITER}${key}`] = flattened[key]; | ||
|  |         }); | ||
|  |       } else if (Array.isArray(value)) { | ||
|  |         paramsCopy[propertyPath] = []; | ||
|  |       } else { | ||
|  |         paramsCopy[propertyPath] = {}; | ||
|  |       } | ||
|  |     } else { | ||
|  |       paramsCopy[propertyPath] = value; | ||
|  |     } // when user gave { "nested.value": "something" } and had "nested" set to `null`, then
 | ||
|  |     // nested should be removed
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     const parts = (0, _pathToParts.pathToParts)(propertyPath).slice(0, -1); | ||
|  | 
 | ||
|  |     if (parts.length) { | ||
|  |       return Object.keys(paramsCopy).filter(key => !parts.includes(key)).reduce((memo, key) => { | ||
|  |         memo[key] = paramsCopy[key]; | ||
|  |         return memo; | ||
|  |       }, {}); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return paramsCopy; | ||
|  | }; | ||
|  | 
 | ||
|  | exports.set = set; |