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.
26 lines
1.0 KiB
26 lines
1.0 KiB
var global = require('../internals/global'); |
|
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 = global.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 TypeError("Can't convert object to primitive value"); |
|
} |
|
if (pref === undefined) pref = 'number'; |
|
return ordinaryToPrimitive(input, pref); |
|
};
|
|
|