27 lines
		
	
	
		
			616 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			616 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| function mergeDescriptors(destination, source, overwrite = true) {
 | |
| 	if (!destination) {
 | |
| 		throw new TypeError('The `destination` argument is required.');
 | |
| 	}
 | |
| 
 | |
| 	if (!source) {
 | |
| 		throw new TypeError('The `source` argument is required.');
 | |
| 	}
 | |
| 
 | |
| 	for (const name of Object.getOwnPropertyNames(source)) {
 | |
| 		if (!overwrite && Object.hasOwn(destination, name)) {
 | |
| 			// Skip descriptor
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		// Copy descriptor
 | |
| 		const descriptor = Object.getOwnPropertyDescriptor(source, name);
 | |
| 		Object.defineProperty(destination, name, descriptor);
 | |
| 	}
 | |
| 
 | |
| 	return destination;
 | |
| }
 | |
| 
 | |
| module.exports = mergeDescriptors;
 |