You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
| import _ from 'lodash';
 | |
| 
 | |
| /**
 | |
|  * When IPC arguments are prepared for the cross-process send, they are JSON.stringified.
 | |
|  * We can't send ArrayBuffers or BigNumbers (what we get from proto library for dates).
 | |
|  * @param data - data to be cleaned
 | |
|  */
 | |
| export function cleanData(data: any): any {
 | |
|   const keys = Object.keys(data);
 | |
| 
 | |
|   // tslint:disable: one-variable-per-declaration
 | |
|   for (let index = 0, max = keys.length; index < max; index += 1) {
 | |
|     const key = keys[index];
 | |
|     const value = data[key];
 | |
| 
 | |
|     if (value === null || value === undefined) {
 | |
|       // eslint-disable-next-line no-continue
 | |
|       continue;
 | |
|     }
 | |
|     // eslint-disable no-param-reassign
 | |
| 
 | |
|     if (_.isFunction(value.toNumber)) {
 | |
|       // eslint-disable-next-line no-param-reassign
 | |
|       data[key] = value.toNumber();
 | |
|     } else if (_.isFunction(value)) {
 | |
|       // just skip a function which has not a toNumber function. We don't want to save a function to the db.
 | |
|       // an attachment comes with a toJson() function
 | |
|       // tslint:disable-next-line: no-dynamic-delete
 | |
|       delete data[key];
 | |
|     } else if (Array.isArray(value)) {
 | |
|       data[key] = value.map(cleanData);
 | |
|     } else if (_.isObject(value) && value instanceof File) {
 | |
|       data[key] = { name: value.name, path: value.path, size: value.size, type: value.type };
 | |
|     } else if (_.isObject(value) && value instanceof ArrayBuffer) {
 | |
|       window.log.error(
 | |
|         'Trying to save an ArrayBuffer to the db is most likely an error. This specific field should be removed before the cleanData call'
 | |
|       );
 | |
|       /// just skip it
 | |
|       continue;
 | |
|     } else if (_.isObject(value)) {
 | |
|       data[key] = cleanData(value);
 | |
|     } else if (_.isBoolean(value)) {
 | |
|       data[key] = value ? 1 : 0;
 | |
|     } else if (
 | |
|       typeof value !== 'string' &&
 | |
|       typeof value !== 'number' &&
 | |
|       typeof value !== 'boolean'
 | |
|     ) {
 | |
|       window?.log?.info(`cleanData: key ${key} had type ${typeof value}`);
 | |
|     }
 | |
|   }
 | |
|   return data;
 | |
| }
 |