| 'use strict'; | 
| var call = require('../internals/function-call'); | 
| var isObject = require('../internals/is-object'); | 
| var isSymbol = require('../internals/is-symbol'); | 
| var getMethod = require('../internals/get-method'); | 
| var ordinaryToPrimitive = require('../internals/ordinary-to-primitive'); | 
| var wellKnownSymbol = require('../internals/well-known-symbol'); | 
|   | 
| var $TypeError = TypeError; | 
| var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); | 
|   | 
| // `ToPrimitive` abstract operation | 
| // https://tc39.es/ecma262/#sec-toprimitive | 
| module.exports = function (input, pref) { | 
|   if (!isObject(input) || isSymbol(input)) return input; | 
|   var exoticToPrim = getMethod(input, TO_PRIMITIVE); | 
|   var result; | 
|   if (exoticToPrim) { | 
|     if (pref === undefined) pref = 'default'; | 
|     result = call(exoticToPrim, input, pref); | 
|     if (!isObject(result) || isSymbol(result)) return result; | 
|     throw new $TypeError("Can't convert object to primitive value"); | 
|   } | 
|   if (pref === undefined) pref = 'number'; | 
|   return ordinaryToPrimitive(input, pref); | 
| }; |