| 'use strict'; | |
| var define = require('define-data-property'); | |
| var hasDescriptors = require('has-property-descriptors')(); | |
| var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); | |
| var $TypeError = require('es-errors/type'); | |
| /** @type {import('.')} */ | |
| module.exports = function setFunctionName(fn, name) { | |
| if (typeof fn !== 'function') { | |
| throw new $TypeError('`fn` is not a function'); | |
| } | |
| var loose = arguments.length > 2 && !!arguments[2]; | |
| if (!loose || functionsHaveConfigurableNames) { | |
| if (hasDescriptors) { | |
| define(/** @type {Parameters<define>[0]} */ (fn), 'name', name, true, true); | |
| } else { | |
| define(/** @type {Parameters<define>[0]} */ (fn), 'name', name); | |
| } | |
| } | |
| return fn; | |
| }; |