| 1234567891011121314151617181920212223242526272829303132333435363738394041 | 
							- 'use strict';
 
- var $gOPD = require('gopd');
 
- var $TypeError = require('es-errors/type');
 
- var every = require('../helpers/every');
 
- var OwnPropertyKeys = require('own-keys');
 
- var IsDataDescriptor = require('./IsDataDescriptor');
 
- var IsExtensible = require('./IsExtensible');
 
- var ToPropertyDescriptor = require('./ToPropertyDescriptor');
 
- var isObject = require('../helpers/isObject');
 
- // https://262.ecma-international.org/6.0/#sec-testintegritylevel
 
- module.exports = function TestIntegrityLevel(O, level) {
 
- 	if (!isObject(O)) {
 
- 		throw new $TypeError('Assertion failed: Type(O) is not Object');
 
- 	}
 
- 	if (level !== 'sealed' && level !== 'frozen') {
 
- 		throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
 
- 	}
 
- 	var status = IsExtensible(O);
 
- 	if (status || !$gOPD) {
 
- 		return false;
 
- 	}
 
- 	var theKeys = OwnPropertyKeys(O);
 
- 	return theKeys.length === 0 || every(theKeys, function (k) {
 
- 		var currentDesc = $gOPD(O, k);
 
- 		if (typeof currentDesc !== 'undefined') {
 
- 			if (currentDesc.configurable) {
 
- 				return false;
 
- 			}
 
- 			if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
 
- 				return false;
 
- 			}
 
- 		}
 
- 		return true;
 
- 	});
 
- };
 
 
  |