ead71e4a91ef8580a2c0d759d0b1a452a9224ce931756e792ccf97c203656512d14b0df66705f8e4516aebaab1089a75638d396575847ef9d914a06f627567 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var isPropertyDescriptor = require('../helpers/records/property-descriptor');
  4. var DefineOwnProperty = require('../helpers/DefineOwnProperty');
  5. var FromPropertyDescriptor = require('./FromPropertyDescriptor');
  6. var IsDataDescriptor = require('./IsDataDescriptor');
  7. var isPropertyKey = require('../helpers/isPropertyKey');
  8. var SameValue = require('./SameValue');
  9. var ToPropertyDescriptor = require('./ToPropertyDescriptor');
  10. var isObject = require('../helpers/isObject');
  11. // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow
  12. module.exports = function DefinePropertyOrThrow(O, P, desc) {
  13. if (!isObject(O)) {
  14. throw new $TypeError('Assertion failed: Type(O) is not Object');
  15. }
  16. if (!isPropertyKey(P)) {
  17. throw new $TypeError('Assertion failed: P is not a Property Key');
  18. }
  19. var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc);
  20. if (!isPropertyDescriptor(Desc)) {
  21. throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
  22. }
  23. return DefineOwnProperty(
  24. IsDataDescriptor,
  25. SameValue,
  26. FromPropertyDescriptor,
  27. O,
  28. P,
  29. Desc
  30. );
  31. };