index.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. 'use strict';
  2. var hasToStringTag = require('has-tostringtag/shams')();
  3. var callBound = require('call-bound');
  4. var $toString = callBound('Object.prototype.toString');
  5. /** @type {import('.')} */
  6. var isStandardArguments = function isArguments(value) {
  7. if (
  8. hasToStringTag
  9. && value
  10. && typeof value === 'object'
  11. && Symbol.toStringTag in value
  12. ) {
  13. return false;
  14. }
  15. return $toString(value) === '[object Arguments]';
  16. };
  17. /** @type {import('.')} */
  18. var isLegacyArguments = function isArguments(value) {
  19. if (isStandardArguments(value)) {
  20. return true;
  21. }
  22. return value !== null
  23. && typeof value === 'object'
  24. && 'length' in value
  25. && typeof value.length === 'number'
  26. && value.length >= 0
  27. && $toString(value) !== '[object Array]'
  28. && 'callee' in value
  29. && $toString(value.callee) === '[object Function]';
  30. };
  31. var supportsStandardArguments = (function () {
  32. return isStandardArguments(arguments);
  33. }());
  34. // @ts-expect-error TODO make this not error
  35. isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
  36. /** @type {import('.')} */
  37. module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;