text: // `Symbol.prototype.description` getter
  // https://tc39.es/ecma262/#sec-symbol.prototype.description
  'use strict';
  var $ = require('../internals/export');
  var DESCRIPTORS = require('../internals/descriptors');
  var global = require('../internals/global');
  var uncurryThis = require('../internals/function-uncurry-this');
  var hasOwn = require('../internals/has-own-property');
  var isCallable = require('../internals/is-callable');
  var defineProperty = require('../internals/object-define-property').f;
  var copyConstructorProperties = require('../internals/copy-constructor-properties');
  
  var NativeSymbol = global.Symbol;
  
  if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in NativeSymbol.prototype) ||
    // 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 : String(arguments[0]);
      var result = this instanceof SymbolWrapper
        ? 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);
    var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;
    symbolPrototype.constructor = SymbolWrapper;
  
    var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
    var symbolToString = uncurryThis(symbolPrototype.toString);
    var symbolValueOf = uncurryThis(symbolPrototype.valueOf);
    var regexp = /^Symbol\((.*)\)[^)]+$/;
    var replace = uncurryThis(''.replace);
    var slice = uncurryThis(''.slice);
  
    defineProperty(symbolPrototype, 'description', {
      configurable: true,
      get: function description() {
        var symbol = symbolValueOf(this);
        var string = symbolToString(symbol);
        if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';
        var desc = NATIVE_SYMBOL ? slice(string, 7, -1) : replace(string, regexp, '$1');
        return desc === '' ? undefined : desc;
      }
    });
  
    $({ global: true, forced: true }, {
      Symbol: SymbolWrapper
    });
  }
  