@technobuddha/library
Version:
A large library of useful functions
53 lines (52 loc) • 1.94 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toPrimitive = void 0;
var isPrimitive_1 = __importDefault(require("../isPrimitive"));
var isNull_1 = __importDefault(require("lodash/isNull"));
var isUndefined_1 = __importDefault(require("lodash/isUndefined"));
/**
* Convert an object into its primitive (string, number, etc.) value
*
* @param input the object
* @param hint A "hint" as to what the type should be. "string", "number" or "default"
* @returns primitive value
*/
function toPrimitive(input, hint) {
if (hint === void 0) { hint = 'default'; }
var wrapper = input;
if (isPrimitive_1.default(input)) {
if (isNull_1.default(input) || isUndefined_1.default(input))
return input;
if (typeof (input) === 'string')
wrapper = String.prototype;
else if (typeof (input) === 'number')
wrapper = Number.prototype;
else if (typeof (input) === 'bigint')
wrapper = BigInt.prototype;
else if (typeof (input) === 'boolean')
wrapper = Boolean.prototype;
else
wrapper = Symbol.prototype;
}
if (Symbol.toPrimitive in wrapper) {
return wrapper[Symbol.toPrimitive].call(input, hint);
}
else if (hint === 'string') {
if ('toString' in wrapper)
return wrapper.toString.call(input);
else if ('valueOf' in wrapper)
return wrapper.valueOf.call(input);
}
else if ('valueOf' in wrapper) {
return wrapper.valueOf.call(input);
}
else if ('toString' in wrapper) {
return wrapper.toString.call(input);
}
throw new TypeError('Cannot convert object to a primitive value');
}
exports.toPrimitive = toPrimitive;
exports.default = toPrimitive;