| 
									
										
										
										
											2020-10-04 04:40:16 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | * XXX shoule we add these from object to Object? | 
					
						
							|  |  |  | * 		- .parent(..) | 
					
						
							|  |  |  | * 		- .parentProperty(..) | 
					
						
							|  |  |  | * 		- .parentCall(..) | 
					
						
							|  |  |  | * 		- .parentOf(..) | 
					
						
							|  |  |  | * 		- .childOf(..) | 
					
						
							|  |  |  | * 		- .related(..) | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2020-10-06 01:32:33 +03:00
										 |  |  | **********************************************/  /* c8 ignore next 2 */ | 
					
						
							| 
									
										
										
										
											2020-10-04 04:40:16 +03:00
										 |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require('object-run') | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | var object = require('ig-object') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-04 04:40:16 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-22 23:50:05 +03:00
										 |  |  | var ObjectMixin = | 
					
						
							|  |  |  | module.ObjectMixin = | 
					
						
							|  |  |  | object.Mixin('ObjectMixin', 'soft', { | 
					
						
							|  |  |  | 	// stuff from object.js...
 | 
					
						
							|  |  |  | 	deepKeys: object.deepKeys, | 
					
						
							| 
									
										
										
										
											2020-10-04 04:40:16 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-22 23:50:05 +03:00
										 |  |  | 	match: object.match, | 
					
						
							|  |  |  | 	matchPartial: object.matchPartial, | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | 	/* XXX not yet sure about these... | 
					
						
							|  |  |  | 	// XXX EXPERIMENTAL...
 | 
					
						
							| 
									
										
										
										
											2020-11-22 23:50:05 +03:00
										 |  |  | 	parent : object.parent, | 
					
						
							|  |  |  | 	parentProperty: object.parentProperty, | 
					
						
							|  |  |  | 	parentCall: object.parentCall, | 
					
						
							| 
									
										
										
										
											2020-10-06 03:09:44 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-22 23:50:05 +03:00
										 |  |  | 	parentOf: object.parentOf, | 
					
						
							|  |  |  | 	childOf: object.childOf, | 
					
						
							|  |  |  | 	related: object.related, | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | 	//*/
 | 
					
						
							| 
									
										
										
										
											2020-11-22 23:50:05 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Make a copy of an object...
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							|  |  |  | 	// This will:
 | 
					
						
							|  |  |  | 	// 	- create a new object linked to the same prototype chain as obj
 | 
					
						
							|  |  |  | 	// 	- copy obj own state
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							|  |  |  | 	// NOTE: this will copy prop values and not props...
 | 
					
						
							|  |  |  | 	copy: function(obj, constructor){ | 
					
						
							|  |  |  | 		return Object.assign( | 
					
						
							| 
									
										
										
										
											2020-10-09 23:20:00 +03:00
										 |  |  | 			constructor == null ? | 
					
						
							| 
									
										
										
										
											2020-11-22 23:50:05 +03:00
										 |  |  | 				Object.create(obj.__proto__) | 
					
						
							|  |  |  | 				: constructor(), | 
					
						
							|  |  |  | 			obj) }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Make a full key set copy of an object...
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							|  |  |  | 	// NOTE: this will copy prop values and not props...
 | 
					
						
							|  |  |  | 	// NOTE: this will not deep-copy the values...
 | 
					
						
							|  |  |  | 	flatCopy: function(obj, constructor){ | 
					
						
							|  |  |  | 		return Object.deepKeys(obj) | 
					
						
							|  |  |  | 			.reduce( | 
					
						
							|  |  |  | 				function(res, key){ | 
					
						
							|  |  |  | 					res[key] = obj[key]  | 
					
						
							|  |  |  | 					return res }, | 
					
						
							|  |  |  | 				constructor == null ? | 
					
						
							|  |  |  | 					{} | 
					
						
							|  |  |  | 					: constructor()) }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX for some reason neumric keys do not respect order...
 | 
					
						
							|  |  |  | 	// 		to reproduce:
 | 
					
						
							|  |  |  | 	// 			Object.keys({a:0, x:1, 10:2, 0:3, z:4, ' 1 ':5})
 | 
					
						
							|  |  |  | 	// 			// -> ["0", "10", "a", "x", "z", " 1 "]
 | 
					
						
							|  |  |  | 	// 		...this is the same across Chrome and Firefox...
 | 
					
						
							|  |  |  | 	sort: function(obj, keys){ | 
					
						
							|  |  |  | 		keys = (typeof(keys) == 'function' | 
					
						
							|  |  |  | 				|| keys === undefined) ?  | 
					
						
							|  |  |  | 			[...Object.keys(obj)].sort(keys) | 
					
						
							|  |  |  | 			: keys | 
					
						
							|  |  |  | 		new Set([...keys, ...Object.keys(obj)]) | 
					
						
							|  |  |  | 			.forEach(function(k){ | 
					
						
							|  |  |  | 				if(k in obj){ | 
					
						
							|  |  |  | 					var v = Object.getOwnPropertyDescriptor(obj, k) | 
					
						
							|  |  |  | 					delete obj[k] | 
					
						
							|  |  |  | 					Object.defineProperty(obj, k, v) } }) | 
					
						
							|  |  |  | 		return obj }, | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ObjectMixin(Object) | 
					
						
							| 
									
										
										
										
											2020-10-09 05:55:53 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-07 16:46:59 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-04 04:40:16 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |