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.
		
		
		
		
		
			
		
			
				
					
					
						
							50 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							50 lines
						
					
					
						
							2.1 KiB
						
					
					
				// `Symbol.prototype.description` getter | 
						|
// https://tc39.github.io/ecma262/#sec-symbol.prototype.description | 
						|
'use strict'; | 
						|
var $ = require('../internals/export'); | 
						|
var DESCRIPTORS = require('../internals/descriptors'); | 
						|
var global = require('../internals/global'); | 
						|
var has = require('../internals/has'); | 
						|
var isObject = require('../internals/is-object'); | 
						|
var defineProperty = require('../internals/object-define-property').f; | 
						|
var copyConstructorProperties = require('../internals/copy-constructor-properties'); | 
						|
 | 
						|
var NativeSymbol = global.Symbol; | 
						|
 | 
						|
if (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('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 symbolToString = symbolPrototype.toString; | 
						|
  var native = String(NativeSymbol('test')) == 'Symbol(test)'; | 
						|
  var regexp = /^Symbol\((.*)\)[^)]+$/; | 
						|
  defineProperty(symbolPrototype, 'description', { | 
						|
    configurable: true, | 
						|
    get: function description() { | 
						|
      var symbol = isObject(this) ? this.valueOf() : this; | 
						|
      var string = symbolToString.call(symbol); | 
						|
      if (has(EmptyStringDescriptionStore, symbol)) return ''; | 
						|
      var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1'); | 
						|
      return desc === '' ? undefined : desc; | 
						|
    } | 
						|
  }); | 
						|
 | 
						|
  $({ global: true, forced: true }, { | 
						|
    Symbol: SymbolWrapper | 
						|
  }); | 
						|
}
 | 
						|
 |