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.
		
		
		
		
		
			
		
			
				
					
					
						
							44 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							44 lines
						
					
					
						
							1.3 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var GetIntrinsic = require('get-intrinsic'); | 
						|
 | 
						|
var has = require('has'); | 
						|
 | 
						|
var $TypeError = GetIntrinsic('%TypeError%'); | 
						|
 | 
						|
var getSymbolDescription = require('get-symbol-description'); | 
						|
 | 
						|
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); | 
						|
var IsExtensible = require('./IsExtensible'); | 
						|
var Type = require('./Type'); | 
						|
 | 
						|
// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname | 
						|
 | 
						|
module.exports = function SetFunctionName(F, name) { | 
						|
	if (typeof F !== 'function') { | 
						|
		throw new $TypeError('Assertion failed: `F` must be a function'); | 
						|
	} | 
						|
	if (!IsExtensible(F) || has(F, 'name')) { | 
						|
		throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); | 
						|
	} | 
						|
	var nameType = Type(name); | 
						|
	if (nameType !== 'Symbol' && nameType !== 'String') { | 
						|
		throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); | 
						|
	} | 
						|
	if (nameType === 'Symbol') { | 
						|
		var description = getSymbolDescription(name); | 
						|
		// eslint-disable-next-line no-param-reassign | 
						|
		name = typeof description === 'undefined' ? '' : '[' + description + ']'; | 
						|
	} | 
						|
	if (arguments.length > 2) { | 
						|
		var prefix = arguments[2]; | 
						|
		// eslint-disable-next-line no-param-reassign | 
						|
		name = prefix + ' ' + name; | 
						|
	} | 
						|
	return DefinePropertyOrThrow(F, 'name', { | 
						|
		'[[Value]]': name, | 
						|
		'[[Writable]]': false, | 
						|
		'[[Enumerable]]': false, | 
						|
		'[[Configurable]]': true | 
						|
	}); | 
						|
};
 | 
						|
 |