You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.3 KiB

3 months ago
  1. 'use strict';
  2. var getBuiltIn = require('../internals/get-built-in');
  3. var createSetLike = function (size) {
  4. return {
  5. size: size,
  6. has: function () {
  7. return false;
  8. },
  9. keys: function () {
  10. return {
  11. next: function () {
  12. return { done: true };
  13. }
  14. };
  15. }
  16. };
  17. };
  18. var createSetLikeWithInfinitySize = function (size) {
  19. return {
  20. size: size,
  21. has: function () {
  22. return true;
  23. },
  24. keys: function () {
  25. throw new Error('e');
  26. }
  27. };
  28. };
  29. module.exports = function (name, callback) {
  30. var Set = getBuiltIn('Set');
  31. try {
  32. new Set()[name](createSetLike(0));
  33. try {
  34. // late spec change, early WebKit ~ Safari 17.0 beta implementation does not pass it
  35. // https://github.com/tc39/proposal-set-methods/pull/88
  36. new Set()[name](createSetLike(-1));
  37. return false;
  38. } catch (error2) {
  39. if (!callback) return true;
  40. // early V8 implementation bug
  41. // https://issues.chromium.org/issues/351332634
  42. try {
  43. new Set()[name](createSetLikeWithInfinitySize(-Infinity));
  44. return false;
  45. } catch (error) {
  46. var set = new Set();
  47. set.add(1);
  48. set.add(2);
  49. return callback(set[name](createSetLikeWithInfinitySize(Infinity)));
  50. }
  51. }
  52. } catch (error) {
  53. return false;
  54. }
  55. };