'use strict';
|
|
const internals = {};
|
|
|
exports = module.exports = {
|
array: Array.prototype,
|
buffer: Buffer && Buffer.prototype, // $lab:coverage:ignore$
|
date: Date.prototype,
|
error: Error.prototype,
|
generic: Object.prototype,
|
map: Map.prototype,
|
promise: Promise.prototype,
|
regex: RegExp.prototype,
|
set: Set.prototype,
|
weakMap: WeakMap.prototype,
|
weakSet: WeakSet.prototype
|
};
|
|
|
internals.typeMap = new Map([
|
['[object Error]', exports.error],
|
['[object Map]', exports.map],
|
['[object Promise]', exports.promise],
|
['[object Set]', exports.set],
|
['[object WeakMap]', exports.weakMap],
|
['[object WeakSet]', exports.weakSet]
|
]);
|
|
|
exports.getInternalProto = function (obj) {
|
|
if (Array.isArray(obj)) {
|
return exports.array;
|
}
|
|
if (Buffer && obj instanceof Buffer) { // $lab:coverage:ignore$
|
return exports.buffer;
|
}
|
|
if (obj instanceof Date) {
|
return exports.date;
|
}
|
|
if (obj instanceof RegExp) {
|
return exports.regex;
|
}
|
|
if (obj instanceof Error) {
|
return exports.error;
|
}
|
|
const objName = Object.prototype.toString.call(obj);
|
return internals.typeMap.get(objName) || exports.generic;
|
};
|