| // `Symbol.prototype.description` getter | 
| // https://tc39.es/ecma262/#sec-symbol.prototype.description | 
| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var DESCRIPTORS = require('../internals/descriptors'); | 
| var globalThis = require('../internals/global-this'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var hasOwn = require('../internals/has-own-property'); | 
| var isCallable = require('../internals/is-callable'); | 
| var isPrototypeOf = require('../internals/object-is-prototype-of'); | 
| var toString = require('../internals/to-string'); | 
| var defineBuiltInAccessor = require('../internals/define-built-in-accessor'); | 
| var copyConstructorProperties = require('../internals/copy-constructor-properties'); | 
|   | 
| var NativeSymbol = globalThis.Symbol; | 
| var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; | 
|   | 
| if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) || | 
|   // Safari 12 bug | 
|   NativeSymbol().description !== undefined | 
| )) { | 
|   var EmptyStringDescriptionStore = {}; | 
|   // wrap Symbol constructor for correct work with undefined description | 
|   var SymbolWrapper = function Symbol() { | 
|     var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]); | 
|     var result = isPrototypeOf(SymbolPrototype, this) | 
|       // eslint-disable-next-line sonarjs/inconsistent-function-call -- ok | 
|       ? new NativeSymbol(description) | 
|       // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' | 
|       : description === undefined ? NativeSymbol() : NativeSymbol(description); | 
|     if (description === '') EmptyStringDescriptionStore[result] = true; | 
|     return result; | 
|   }; | 
|   | 
|   copyConstructorProperties(SymbolWrapper, NativeSymbol); | 
|   SymbolWrapper.prototype = SymbolPrototype; | 
|   SymbolPrototype.constructor = SymbolWrapper; | 
|   | 
|   var NATIVE_SYMBOL = String(NativeSymbol('description detection')) === 'Symbol(description detection)'; | 
|   var thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); | 
|   var symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); | 
|   var regexp = /^Symbol\((.*)\)[^)]+$/; | 
|   var replace = uncurryThis(''.replace); | 
|   var stringSlice = uncurryThis(''.slice); | 
|   | 
|   defineBuiltInAccessor(SymbolPrototype, 'description', { | 
|     configurable: true, | 
|     get: function description() { | 
|       var symbol = thisSymbolValue(this); | 
|       if (hasOwn(EmptyStringDescriptionStore, symbol)) return ''; | 
|       var string = symbolDescriptiveString(symbol); | 
|       var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1'); | 
|       return desc === '' ? undefined : desc; | 
|     } | 
|   }); | 
|   | 
|   $({ global: true, constructor: true, forced: true }, { | 
|     Symbol: SymbolWrapper | 
|   }); | 
| } |