| '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; | 
| }; |