happy-dom 17.1.1 → 17.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/cjs/PropertySymbol.cjs +2 -1
  2. package/cjs/PropertySymbol.cjs.map +1 -1
  3. package/cjs/PropertySymbol.d.ts +1 -0
  4. package/cjs/PropertySymbol.d.ts.map +1 -1
  5. package/cjs/browser/utilities/BrowserFrameNavigator.cjs +2 -1
  6. package/cjs/browser/utilities/BrowserFrameNavigator.cjs.map +1 -1
  7. package/cjs/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  8. package/cjs/fetch/AbortController.cjs.map +1 -1
  9. package/cjs/fetch/AbortController.d.ts +1 -1
  10. package/cjs/fetch/AbortController.d.ts.map +1 -1
  11. package/cjs/fetch/AbortSignal.cjs +49 -15
  12. package/cjs/fetch/AbortSignal.cjs.map +1 -1
  13. package/cjs/fetch/AbortSignal.d.ts +28 -4
  14. package/cjs/fetch/AbortSignal.d.ts.map +1 -1
  15. package/cjs/fetch/Fetch.cjs +8 -5
  16. package/cjs/fetch/Fetch.cjs.map +1 -1
  17. package/cjs/fetch/Fetch.d.ts.map +1 -1
  18. package/cjs/fetch/SyncFetch.cjs +5 -2
  19. package/cjs/fetch/SyncFetch.cjs.map +1 -1
  20. package/cjs/fetch/SyncFetch.d.ts.map +1 -1
  21. package/lib/PropertySymbol.d.ts +1 -0
  22. package/lib/PropertySymbol.d.ts.map +1 -1
  23. package/lib/PropertySymbol.js +1 -0
  24. package/lib/PropertySymbol.js.map +1 -1
  25. package/lib/browser/utilities/BrowserFrameNavigator.d.ts.map +1 -1
  26. package/lib/browser/utilities/BrowserFrameNavigator.js +2 -1
  27. package/lib/browser/utilities/BrowserFrameNavigator.js.map +1 -1
  28. package/lib/fetch/AbortController.d.ts +1 -1
  29. package/lib/fetch/AbortController.d.ts.map +1 -1
  30. package/lib/fetch/AbortController.js.map +1 -1
  31. package/lib/fetch/AbortSignal.d.ts +28 -4
  32. package/lib/fetch/AbortSignal.d.ts.map +1 -1
  33. package/lib/fetch/AbortSignal.js +49 -15
  34. package/lib/fetch/AbortSignal.js.map +1 -1
  35. package/lib/fetch/Fetch.d.ts.map +1 -1
  36. package/lib/fetch/Fetch.js +8 -5
  37. package/lib/fetch/Fetch.js.map +1 -1
  38. package/lib/fetch/SyncFetch.d.ts.map +1 -1
  39. package/lib/fetch/SyncFetch.js +5 -2
  40. package/lib/fetch/SyncFetch.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/PropertySymbol.ts +1 -0
  43. package/src/browser/utilities/BrowserFrameNavigator.ts +8 -1
  44. package/src/fetch/AbortController.ts +1 -1
  45. package/src/fetch/AbortSignal.ts +61 -25
  46. package/src/fetch/Fetch.ts +10 -7
  47. package/src/fetch/SyncFetch.ts +6 -3
@@ -14,9 +14,9 @@ export default class AbortSignal extends EventTarget {
14
14
  protected declare static [PropertySymbol.window]: BrowserWindow;
15
15
  protected declare [PropertySymbol.window]: BrowserWindow;
16
16
 
17
- // Public properties
18
- public readonly aborted: boolean = false;
19
- public readonly reason: Error | null = null;
17
+ // Internal properties
18
+ public [PropertySymbol.aborted]: boolean = false;
19
+ public [PropertySymbol.reason]: any = undefined;
20
20
 
21
21
  // Events
22
22
  public onabort: ((this: AbortSignal, event: Event) => void) | null = null;
@@ -28,9 +28,7 @@ export default class AbortSignal extends EventTarget {
28
28
  super();
29
29
 
30
30
  if (!this[PropertySymbol.window]) {
31
- throw new TypeError(
32
- `Failed to construct '${this.constructor.name}': '${this.constructor.name}' was constructed outside a Window context.`
33
- );
31
+ throw new TypeError(`Failed to construct 'AbortSignal': Illegal constructor`);
34
32
  }
35
33
  }
36
34
 
@@ -41,22 +39,59 @@ export default class AbortSignal extends EventTarget {
41
39
  return 'AbortSignal';
42
40
  }
43
41
 
42
+ /**
43
+ * Returns true if the signal has been aborted.
44
+ *
45
+ * @returns True if the signal has been aborted.
46
+ */
47
+ public get aborted(): boolean {
48
+ return this[PropertySymbol.aborted];
49
+ }
50
+
51
+ /**
52
+ * Setter for aborted. Value will be ignored as the property is read-only.
53
+ *
54
+ * @param _value Aborted.
55
+ */
56
+ public set aborted(_value: boolean) {
57
+ // Do nothing
58
+ }
59
+
60
+ /**
61
+ * Returns the reason the signal was aborted.
62
+ *
63
+ * @returns Reason.
64
+ */
65
+ public get reason(): any {
66
+ return this[PropertySymbol.reason];
67
+ }
68
+
69
+ /**
70
+ * Setter for reason. Value will be ignored as the property is read-only.
71
+ *
72
+ * @param _value Reason.
73
+ */
74
+ public set reason(_value: any) {
75
+ // Do nothing
76
+ }
77
+
44
78
  /**
45
79
  * Aborts the signal.
46
80
  *
47
81
  * @param [reason] Reason.
48
82
  */
49
- public [PropertySymbol.abort](reason?: Error): void {
83
+ public [PropertySymbol.abort](reason?: any): void {
50
84
  if (this.aborted) {
51
85
  return;
52
86
  }
53
- (<Error>this.reason) =
54
- reason ||
55
- new this[PropertySymbol.window].DOMException(
56
- 'signal is aborted without reason',
57
- DOMExceptionNameEnum.abortError
58
- );
59
- (<boolean>this.aborted) = true;
87
+ this[PropertySymbol.reason] =
88
+ reason !== undefined
89
+ ? reason
90
+ : new this[PropertySymbol.window].DOMException(
91
+ 'signal is aborted without reason',
92
+ DOMExceptionNameEnum.abortError
93
+ );
94
+ this[PropertySymbol.aborted] = true;
60
95
  this.dispatchEvent(new Event('abort'));
61
96
  }
62
97
 
@@ -75,15 +110,16 @@ export default class AbortSignal extends EventTarget {
75
110
  * @param [reason] Reason.
76
111
  * @returns AbortSignal instance.
77
112
  */
78
- public static abort(reason?: Error): AbortSignal {
113
+ public static abort(reason?: any): AbortSignal {
79
114
  const signal = new this();
80
- (<Error>signal.reason) =
81
- reason ||
82
- new this[PropertySymbol.window].DOMException(
83
- 'signal is aborted without reason',
84
- DOMExceptionNameEnum.abortError
85
- );
86
- (<boolean>signal.aborted) = true;
115
+ signal[PropertySymbol.reason] =
116
+ reason !== undefined
117
+ ? reason
118
+ : new this[PropertySymbol.window].DOMException(
119
+ 'signal is aborted without reason',
120
+ DOMExceptionNameEnum.abortError
121
+ );
122
+ signal[PropertySymbol.aborted] = true;
87
123
  return signal;
88
124
  }
89
125
 
@@ -118,8 +154,8 @@ export default class AbortSignal extends EventTarget {
118
154
  */
119
155
  public static any(signals: AbortSignal[]): AbortSignal {
120
156
  for (const signal of signals) {
121
- if (signal.aborted) {
122
- return this.abort(signal.reason);
157
+ if (signal[PropertySymbol.aborted]) {
158
+ return this.abort(signal[PropertySymbol.reason]);
123
159
  }
124
160
  }
125
161
 
@@ -135,7 +171,7 @@ export default class AbortSignal extends EventTarget {
135
171
  for (const signal of signals) {
136
172
  const handler = (): void => {
137
173
  stopListening();
138
- anySignal[PropertySymbol.abort](signal.reason);
174
+ anySignal[PropertySymbol.abort](signal[PropertySymbol.reason]);
139
175
  };
140
176
  handlers.set(signal, handler);
141
177
  signal.addEventListener('abort', handler);
@@ -134,9 +134,12 @@ export default class Fetch {
134
134
 
135
135
  FetchRequestValidationUtility.validateSchema(this.request);
136
136
 
137
- if (this.request.signal.aborted) {
138
- throw new this.#window.DOMException(
139
- 'The operation was aborted.',
137
+ if (this.request.signal[PropertySymbol.aborted]) {
138
+ if (this.request.signal[PropertySymbol.reason] !== undefined) {
139
+ throw this.request.signal[PropertySymbol.reason];
140
+ }
141
+ throw new this[PropertySymbol.window].DOMException(
142
+ 'signal is aborted without reason',
140
143
  DOMExceptionNameEnum.abortError
141
144
  );
142
145
  }
@@ -947,8 +950,8 @@ export default class Fetch {
947
950
  headers.delete('cookie2');
948
951
  }
949
952
 
950
- if (this.request.signal.aborted) {
951
- this.abort();
953
+ if (this.request.signal[PropertySymbol.aborted]) {
954
+ this.abort(this.request.signal[PropertySymbol.reason]);
952
955
  return true;
953
956
  }
954
957
 
@@ -1006,7 +1009,7 @@ export default class Fetch {
1006
1009
  *
1007
1010
  * @param reason Reason.
1008
1011
  */
1009
- private abort(reason?: Error): void {
1012
+ private abort(reason?: any): void {
1010
1013
  const error = new this.#window.DOMException(
1011
1014
  'The operation was aborted.' + (reason ? ' ' + reason.toString() : ''),
1012
1015
  DOMExceptionNameEnum.abortError
@@ -1034,7 +1037,7 @@ export default class Fetch {
1034
1037
  }
1035
1038
 
1036
1039
  if (this.reject) {
1037
- this.reject(error);
1040
+ this.reject(reason !== undefined ? reason : error);
1038
1041
  }
1039
1042
  }
1040
1043
  }
@@ -113,9 +113,12 @@ export default class SyncFetch {
113
113
 
114
114
  FetchRequestValidationUtility.validateSchema(this.request);
115
115
 
116
- if (this.request.signal.aborted) {
117
- throw new this.#window.DOMException(
118
- 'The operation was aborted.',
116
+ if (this.request.signal[PropertySymbol.aborted]) {
117
+ if (this.request.signal[PropertySymbol.reason] !== undefined) {
118
+ throw this.request.signal[PropertySymbol.reason];
119
+ }
120
+ throw new this[PropertySymbol.window].DOMException(
121
+ 'signal is aborted without reason',
119
122
  DOMExceptionNameEnum.abortError
120
123
  );
121
124
  }