| 'use strict'; | 
|   | 
| var GetIntrinsic = require('get-intrinsic'); | 
|   | 
| var $ObjectCreate = GetIntrinsic('%Object.create%', true); | 
| var $TypeError = GetIntrinsic('%TypeError%'); | 
| var $SyntaxError = GetIntrinsic('%SyntaxError%'); | 
|   | 
| var IsArray = require('./IsArray'); | 
| var Type = require('./Type'); | 
|   | 
| var forEach = require('../helpers/forEach'); | 
|   | 
| var SLOT = require('internal-slot'); | 
|   | 
| var hasProto = require('has-proto')(); | 
|   | 
| // https://ecma-international.org/ecma-262/6.0/#sec-objectcreate | 
|   | 
| module.exports = function ObjectCreate(proto, internalSlotsList) { | 
|     if (proto !== null && Type(proto) !== 'Object') { | 
|         throw new $TypeError('Assertion failed: `proto` must be null or an object'); | 
|     } | 
|     var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1 | 
|     if (arguments.length >= 2 && !IsArray(slots)) { | 
|         throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array'); | 
|     } | 
|   | 
|     var O; | 
|     if ($ObjectCreate) { | 
|         O = $ObjectCreate(proto); | 
|     } else if (hasProto) { | 
|         O = { __proto__: proto }; | 
|     } else { | 
|         if (proto === null) { | 
|             throw new $SyntaxError('native Object.create support is required to create null objects'); | 
|         } | 
|         var T = function T() {}; | 
|         T.prototype = proto; | 
|         O = new T(); | 
|     } | 
|   | 
|     if (slots.length > 0) { | 
|         forEach(slots, function (slot) { | 
|             SLOT.set(O, slot, void undefined); | 
|         }); | 
|     } | 
|   | 
|     return O; // step 6 | 
| }; |