index.cjs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. "use strict";
  2. var h = Object.defineProperty;
  3. var O = Object.getOwnPropertyDescriptor;
  4. var P = Object.getOwnPropertyNames;
  5. var K = Object.prototype.hasOwnProperty;
  6. var b = (t, e) => {
  7. for (var n in e)
  8. h(t, n, { get: e[n], enumerable: !0 });
  9. }, M = (t, e, n, s) => {
  10. if (e && typeof e == "object" || typeof e == "function")
  11. for (let r of P(e))
  12. !K.call(t, r) && r !== n && h(t, r, { get: () => e[r], enumerable: !(s = O(e, r)) || s.enumerable });
  13. return t;
  14. };
  15. var F = (t) => M(h({}, "__esModule", { value: !0 }), t);
  16. // src/index.ts
  17. var E = {};
  18. b(E, {
  19. restoreAll: () => C,
  20. spies: () => g,
  21. spy: () => A,
  22. spyOn: () => I
  23. });
  24. module.exports = F(E);
  25. // src/utils.ts
  26. function d(t, e) {
  27. if (!t)
  28. throw new Error(e);
  29. }
  30. function y(t, e) {
  31. return typeof e === t;
  32. }
  33. function S(t) {
  34. return t instanceof Promise;
  35. }
  36. function f(t, e, n) {
  37. Object.defineProperty(t, e, n);
  38. }
  39. // src/spy.ts
  40. var g = /* @__PURE__ */ new Set();
  41. function A(t) {
  42. d(y("function", t) || y("undefined", t), "cannot spy on a non-function value");
  43. let e = function(...s) {
  44. if (e.called = !0, e.callCount++, e.calls.push(s), e.next) {
  45. let [i, l] = e.next;
  46. if (e.results.push(e.next), e.next = null, i === "ok")
  47. return l;
  48. throw l;
  49. }
  50. let r, o = "ok";
  51. if (e.impl)
  52. try {
  53. r = e.impl.apply(this, s), o = "ok";
  54. } catch (i) {
  55. throw r = i, o = "error", e.results.push([o, i]), i;
  56. }
  57. let c = [o, r];
  58. if (S(r)) {
  59. let i = r.then((l) => c[1] = l).catch((l) => {
  60. throw c[0] = "error", c[1] = l, l;
  61. });
  62. Object.assign(i, r), r = i;
  63. }
  64. return e.results.push(c), r;
  65. };
  66. f(e, "_isMockFunction", { get: () => !0 }), f(e, "length", { value: t ? t.length : 0 }), f(e, "returns", {
  67. get() {
  68. return this.results.map(([, s]) => s);
  69. }
  70. }), f(e, "name", { value: t && t.name || "spy" });
  71. let n = () => {
  72. e.called = !1, e.callCount = 0, e.results = [], e.calls = [];
  73. };
  74. return n(), e.impl = t, e.reset = n, e.nextError = (s) => (e.next = ["error", s], e), e.nextResult = (s) => (e.next = ["ok", s], e), e;
  75. }
  76. // src/spyOn.ts
  77. var v = (t, e) => Object.getOwnPropertyDescriptor(t, e);
  78. function I(t, e, n) {
  79. d(!y("undefined", t), "spyOn could not find an object to spy upon"), d(y("object", t) || y("function", t), "cannot spyOn on a primitive value");
  80. let s = () => {
  81. if (typeof e != "object")
  82. return [e, "value"];
  83. if ("getter" in e && "setter" in e)
  84. throw new Error("cannot spy on both getter and setter");
  85. if ("getter" in e)
  86. return [e.getter, "get"];
  87. if ("setter" in e)
  88. return [e.setter, "set"];
  89. throw new Error("specify getter or setter to spy on");
  90. }, [r, o] = s(), c = v(t, r), i = Object.getPrototypeOf(t), l = i && v(i, r), a = c || l;
  91. d(a || r in t, `${String(r)} does not exist`);
  92. let R = !1;
  93. o === "value" && a && !a.value && a.get && (o = "get", R = !0, n = a.get());
  94. let u;
  95. a ? u = a[o] : o !== "value" ? u = () => t[r] : u = t[r], n || (n = u);
  96. let p = A(n), w = (T) => {
  97. let { value: G, ...m } = a || {
  98. configurable: !0,
  99. writable: !0
  100. };
  101. o !== "value" && delete m.writable, m[o] = T, f(t, r, m);
  102. }, k = () => w(u);
  103. return p.restore = k, p.getOriginal = () => R ? u() : u, p.willCall = (T) => (p.impl = T, p), w(R ? () => p : p), g.add(p), p;
  104. }
  105. // src/restoreAll.ts
  106. function C() {
  107. for (let t of g)
  108. t.restore();
  109. g.clear();
  110. }
  111. // Annotate the CommonJS export names for ESM import in node:
  112. 0 && (module.exports = {
  113. restoreAll,
  114. spies,
  115. spy,
  116. spyOn
  117. });