index.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. 'use strict';
  2. var GetIntrinsic = require('get-intrinsic');
  3. var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
  4. var hasToStringTag = require('has-tostringtag/shams')();
  5. var hasOwn = require('hasown');
  6. var $TypeError = require('es-errors/type');
  7. var toStringTag = hasToStringTag ? Symbol.toStringTag : null;
  8. /** @type {import('.')} */
  9. module.exports = function setToStringTag(object, value) {
  10. var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;
  11. var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;
  12. if (
  13. (typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')
  14. || (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')
  15. ) {
  16. throw new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');
  17. }
  18. if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {
  19. if ($defineProperty) {
  20. $defineProperty(object, toStringTag, {
  21. configurable: !nonConfigurable,
  22. enumerable: false,
  23. value: value,
  24. writable: false
  25. });
  26. } else {
  27. object[toStringTag] = value; // eslint-disable-line no-param-reassign
  28. }
  29. }
  30. };