| | |
| | | |
| | | var has = require('has'); |
| | | |
| | | var isMatchRecord = require('./isMatchRecord'); |
| | | |
| | | var predicates = { |
| | | // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type |
| | | 'Property Descriptor': function isPropertyDescriptor(Type, Desc) { |
| | | if (Type(Desc) !== 'Object') { |
| | | return false; |
| | | } |
| | | 'Property Descriptor': function isPropertyDescriptor(Desc) { |
| | | var allowed = { |
| | | '[[Configurable]]': true, |
| | | '[[Enumerable]]': true, |
| | |
| | | throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); |
| | | } |
| | | return true; |
| | | } |
| | | }, |
| | | // https://262.ecma-international.org/13.0/#sec-match-records |
| | | 'Match Record': isMatchRecord |
| | | }; |
| | | |
| | | module.exports = function assertRecord(Type, recordType, argumentName, value) { |
| | |
| | | if (typeof predicate !== 'function') { |
| | | throw new $SyntaxError('unknown record type: ' + recordType); |
| | | } |
| | | if (!predicate(Type, value)) { |
| | | if (Type(value) !== 'Object' || !predicate(value)) { |
| | | throw new $TypeError(argumentName + ' must be a ' + recordType); |
| | | } |
| | | }; |