happy-dom 11.0.1 → 11.0.3

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.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

@@ -7,7 +7,7 @@ class AsyncTaskManager {
7
7
  constructor() {
8
8
  this.runningTasks = {};
9
9
  this.runningTimers = [];
10
- this.queue = [];
10
+ this.callbacks = [];
11
11
  }
12
12
  /**
13
13
  * Returns a promise that is fulfilled when async tasks are complete.
@@ -15,13 +15,10 @@ class AsyncTaskManager {
15
15
  *
16
16
  * @returns Promise.
17
17
  */
18
- async whenComplete() {
19
- return new Promise((resolve, reject) => {
20
- const timerID = global.setTimeout(() => {
21
- this.endTimer(timerID);
22
- }, 0);
23
- this.startTimer(timerID);
24
- this.queue.push({ resolve, reject });
18
+ whenComplete() {
19
+ return new Promise((resolve) => {
20
+ this.callbacks.push(resolve);
21
+ this.endTask(null);
25
22
  });
26
23
  }
27
24
  /**
@@ -29,27 +26,8 @@ class AsyncTaskManager {
29
26
  *
30
27
  * @param [error] Error.
31
28
  */
32
- cancelAll(error) {
33
- const runningTimers = this.runningTimers;
34
- const runningTasks = this.runningTasks;
35
- const promises = this.queue;
36
- this.runningTasks = {};
37
- this.runningTimers = [];
38
- this.queue = [];
39
- for (const timer of runningTimers) {
40
- global.clearTimeout(timer);
41
- }
42
- for (const key of Object.keys(runningTasks)) {
43
- runningTasks[key]();
44
- }
45
- for (const promise of promises) {
46
- if (error) {
47
- promise.reject(error);
48
- }
49
- else {
50
- promise.resolve();
51
- }
52
- }
29
+ cancelAll() {
30
+ this.endAll(true);
53
31
  }
54
32
  /**
55
33
  * Starts a timer.
@@ -70,7 +48,7 @@ class AsyncTaskManager {
70
48
  this.runningTimers.splice(index, 1);
71
49
  }
72
50
  if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
73
- this.cancelAll();
51
+ this.endAll();
74
52
  }
75
53
  }
76
54
  /**
@@ -92,9 +70,9 @@ class AsyncTaskManager {
92
70
  endTask(taskID) {
93
71
  if (this.runningTasks[taskID]) {
94
72
  delete this.runningTasks[taskID];
95
- if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
96
- this.cancelAll();
97
- }
73
+ }
74
+ if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
75
+ this.endAll();
98
76
  }
99
77
  }
100
78
  /**
@@ -114,6 +92,48 @@ class AsyncTaskManager {
114
92
  this.constructor.taskID++;
115
93
  return this.constructor.taskID;
116
94
  }
95
+ /**
96
+ * Ends all tasks.
97
+ *
98
+ * @param [canceled] Canceled.
99
+ */
100
+ endAll(canceled) {
101
+ const runningTimers = this.runningTimers;
102
+ const runningTasks = this.runningTasks;
103
+ this.runningTasks = {};
104
+ this.runningTimers = [];
105
+ for (const timer of runningTimers) {
106
+ global.clearTimeout(timer);
107
+ }
108
+ for (const key of Object.keys(runningTasks)) {
109
+ runningTasks[key]();
110
+ }
111
+ if (this.callbacks.length) {
112
+ if (canceled) {
113
+ const callbacks = this.callbacks;
114
+ this.callbacks = [];
115
+ for (const callback of callbacks) {
116
+ callback();
117
+ }
118
+ }
119
+ else {
120
+ const timerID = global.setTimeout(() => {
121
+ if (!Object.keys(this.runningTasks).length && this.runningTimers.length === 1) {
122
+ const callbacks = this.callbacks;
123
+ this.callbacks = [];
124
+ this.runningTimers = [];
125
+ for (const callback of callbacks) {
126
+ callback();
127
+ }
128
+ }
129
+ else {
130
+ this.endTimer(timerID);
131
+ }
132
+ });
133
+ this.startTimer(timerID);
134
+ }
135
+ }
136
+ }
117
137
  }
118
138
  AsyncTaskManager.taskID = 0;
119
139
  exports.default = AsyncTaskManager;
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncTaskManager.cjs","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AsyncTaskManager.cjs","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export default class AsyncTaskManager {
6
6
  private static taskID;
7
7
  private runningTasks;
8
8
  private runningTimers;
9
- private queue;
9
+ private callbacks;
10
10
  /**
11
11
  * Returns a promise that is fulfilled when async tasks are complete.
12
12
  * This method is not part of the HTML standard.
@@ -19,7 +19,7 @@ export default class AsyncTaskManager {
19
19
  *
20
20
  * @param [error] Error.
21
21
  */
22
- cancelAll(error?: Error): void;
22
+ cancelAll(): void;
23
23
  /**
24
24
  * Starts a timer.
25
25
  *
@@ -57,5 +57,11 @@ export default class AsyncTaskManager {
57
57
  * @returns Task ID.
58
58
  */
59
59
  private newTaskID;
60
+ /**
61
+ * Ends all tasks.
62
+ *
63
+ * @param [canceled] Canceled.
64
+ */
65
+ private endAll;
60
66
  }
61
67
  //# sourceMappingURL=AsyncTaskManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,KAAK,CAAiE;IAE9E;;;;;OAKG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAU1C;;;;OAIG;IACI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IA0BrC;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAU9C;;;;;OAKG;IACI,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM;IAMnD;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUpC;;;;OAIG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;CAIjB"}
1
+ {"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAAyB;IAE1C;;;;;OAKG;IACI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;;;OAIG;IACI,SAAS,IAAI,IAAI;IAIxB;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAU9C;;;;;OAKG;IACI,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM;IAMnD;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpC;;;;OAIG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,OAAO,CAAC,MAAM;CAuCd"}
@@ -6,7 +6,7 @@ export default class AsyncTaskManager {
6
6
  private static taskID;
7
7
  private runningTasks;
8
8
  private runningTimers;
9
- private queue;
9
+ private callbacks;
10
10
  /**
11
11
  * Returns a promise that is fulfilled when async tasks are complete.
12
12
  * This method is not part of the HTML standard.
@@ -19,7 +19,7 @@ export default class AsyncTaskManager {
19
19
  *
20
20
  * @param [error] Error.
21
21
  */
22
- cancelAll(error?: Error): void;
22
+ cancelAll(): void;
23
23
  /**
24
24
  * Starts a timer.
25
25
  *
@@ -57,5 +57,11 @@ export default class AsyncTaskManager {
57
57
  * @returns Task ID.
58
58
  */
59
59
  private newTaskID;
60
+ /**
61
+ * Ends all tasks.
62
+ *
63
+ * @param [canceled] Canceled.
64
+ */
65
+ private endAll;
60
66
  }
61
67
  //# sourceMappingURL=AsyncTaskManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,KAAK,CAAiE;IAE9E;;;;;OAKG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAU1C;;;;OAIG;IACI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IA0BrC;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAU9C;;;;;OAKG;IACI,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM;IAMnD;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUpC;;;;OAIG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;CAIjB"}
1
+ {"version":3,"file":"AsyncTaskManager.d.ts","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAAyB;IAE1C;;;;;OAKG;IACI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;;;OAIG;IACI,SAAS,IAAI,IAAI;IAIxB;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAIhD;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAU9C;;;;;OAKG;IACI,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM;IAMnD;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpC;;;;OAIG;IACI,YAAY,IAAI,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAKjB;;;;OAIG;IACH,OAAO,CAAC,MAAM;CAuCd"}
@@ -5,7 +5,7 @@ class AsyncTaskManager {
5
5
  constructor() {
6
6
  this.runningTasks = {};
7
7
  this.runningTimers = [];
8
- this.queue = [];
8
+ this.callbacks = [];
9
9
  }
10
10
  /**
11
11
  * Returns a promise that is fulfilled when async tasks are complete.
@@ -13,13 +13,10 @@ class AsyncTaskManager {
13
13
  *
14
14
  * @returns Promise.
15
15
  */
16
- async whenComplete() {
17
- return new Promise((resolve, reject) => {
18
- const timerID = global.setTimeout(() => {
19
- this.endTimer(timerID);
20
- }, 0);
21
- this.startTimer(timerID);
22
- this.queue.push({ resolve, reject });
16
+ whenComplete() {
17
+ return new Promise((resolve) => {
18
+ this.callbacks.push(resolve);
19
+ this.endTask(null);
23
20
  });
24
21
  }
25
22
  /**
@@ -27,27 +24,8 @@ class AsyncTaskManager {
27
24
  *
28
25
  * @param [error] Error.
29
26
  */
30
- cancelAll(error) {
31
- const runningTimers = this.runningTimers;
32
- const runningTasks = this.runningTasks;
33
- const promises = this.queue;
34
- this.runningTasks = {};
35
- this.runningTimers = [];
36
- this.queue = [];
37
- for (const timer of runningTimers) {
38
- global.clearTimeout(timer);
39
- }
40
- for (const key of Object.keys(runningTasks)) {
41
- runningTasks[key]();
42
- }
43
- for (const promise of promises) {
44
- if (error) {
45
- promise.reject(error);
46
- }
47
- else {
48
- promise.resolve();
49
- }
50
- }
27
+ cancelAll() {
28
+ this.endAll(true);
51
29
  }
52
30
  /**
53
31
  * Starts a timer.
@@ -68,7 +46,7 @@ class AsyncTaskManager {
68
46
  this.runningTimers.splice(index, 1);
69
47
  }
70
48
  if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
71
- this.cancelAll();
49
+ this.endAll();
72
50
  }
73
51
  }
74
52
  /**
@@ -90,9 +68,9 @@ class AsyncTaskManager {
90
68
  endTask(taskID) {
91
69
  if (this.runningTasks[taskID]) {
92
70
  delete this.runningTasks[taskID];
93
- if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
94
- this.cancelAll();
95
- }
71
+ }
72
+ if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
73
+ this.endAll();
96
74
  }
97
75
  }
98
76
  /**
@@ -112,6 +90,48 @@ class AsyncTaskManager {
112
90
  this.constructor.taskID++;
113
91
  return this.constructor.taskID;
114
92
  }
93
+ /**
94
+ * Ends all tasks.
95
+ *
96
+ * @param [canceled] Canceled.
97
+ */
98
+ endAll(canceled) {
99
+ const runningTimers = this.runningTimers;
100
+ const runningTasks = this.runningTasks;
101
+ this.runningTasks = {};
102
+ this.runningTimers = [];
103
+ for (const timer of runningTimers) {
104
+ global.clearTimeout(timer);
105
+ }
106
+ for (const key of Object.keys(runningTasks)) {
107
+ runningTasks[key]();
108
+ }
109
+ if (this.callbacks.length) {
110
+ if (canceled) {
111
+ const callbacks = this.callbacks;
112
+ this.callbacks = [];
113
+ for (const callback of callbacks) {
114
+ callback();
115
+ }
116
+ }
117
+ else {
118
+ const timerID = global.setTimeout(() => {
119
+ if (!Object.keys(this.runningTasks).length && this.runningTimers.length === 1) {
120
+ const callbacks = this.callbacks;
121
+ this.callbacks = [];
122
+ this.runningTimers = [];
123
+ for (const callback of callbacks) {
124
+ callback();
125
+ }
126
+ }
127
+ else {
128
+ this.endTimer(timerID);
129
+ }
130
+ });
131
+ this.startTimer(timerID);
132
+ }
133
+ }
134
+ }
115
135
  }
116
136
  AsyncTaskManager.taskID = 0;
117
137
  export default AsyncTaskManager;
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncTaskManager.js","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AsyncTaskManager.js","sourceRoot":"","sources":["../../src/async-task-manager/AsyncTaskManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-dom",
3
- "version": "11.0.1",
3
+ "version": "11.0.3",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/capricorn86/happy-dom",
6
6
  "repository": "https://github.com/capricorn86/happy-dom",
@@ -5,7 +5,7 @@ export default class AsyncTaskManager {
5
5
  private static taskID = 0;
6
6
  private runningTasks: { [k: string]: () => void } = {};
7
7
  private runningTimers: NodeJS.Timeout[] = [];
8
- private queue: { resolve: () => void; reject: (error: Error) => void }[] = [];
8
+ private callbacks: Array<() => void> = [];
9
9
 
10
10
  /**
11
11
  * Returns a promise that is fulfilled when async tasks are complete.
@@ -13,13 +13,10 @@ export default class AsyncTaskManager {
13
13
  *
14
14
  * @returns Promise.
15
15
  */
16
- public async whenComplete(): Promise<void> {
17
- return new Promise((resolve, reject) => {
18
- const timerID = global.setTimeout(() => {
19
- this.endTimer(timerID);
20
- }, 0);
21
- this.startTimer(timerID);
22
- this.queue.push({ resolve, reject });
16
+ public whenComplete(): Promise<void> {
17
+ return new Promise((resolve) => {
18
+ this.callbacks.push(resolve);
19
+ this.endTask(null);
23
20
  });
24
21
  }
25
22
 
@@ -28,30 +25,8 @@ export default class AsyncTaskManager {
28
25
  *
29
26
  * @param [error] Error.
30
27
  */
31
- public cancelAll(error?: Error): void {
32
- const runningTimers = this.runningTimers;
33
- const runningTasks = this.runningTasks;
34
- const promises = this.queue;
35
-
36
- this.runningTasks = {};
37
- this.runningTimers = [];
38
- this.queue = [];
39
-
40
- for (const timer of runningTimers) {
41
- global.clearTimeout(timer);
42
- }
43
-
44
- for (const key of Object.keys(runningTasks)) {
45
- runningTasks[key]();
46
- }
47
-
48
- for (const promise of promises) {
49
- if (error) {
50
- promise.reject(error);
51
- } else {
52
- promise.resolve();
53
- }
54
- }
28
+ public cancelAll(): void {
29
+ this.endAll(true);
55
30
  }
56
31
 
57
32
  /**
@@ -74,7 +49,7 @@ export default class AsyncTaskManager {
74
49
  this.runningTimers.splice(index, 1);
75
50
  }
76
51
  if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
77
- this.cancelAll();
52
+ this.endAll();
78
53
  }
79
54
  }
80
55
 
@@ -98,10 +73,9 @@ export default class AsyncTaskManager {
98
73
  public endTask(taskID: number): void {
99
74
  if (this.runningTasks[taskID]) {
100
75
  delete this.runningTasks[taskID];
101
-
102
- if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
103
- this.cancelAll();
104
- }
76
+ }
77
+ if (!Object.keys(this.runningTasks).length && !this.runningTimers.length) {
78
+ this.endAll();
105
79
  }
106
80
  }
107
81
 
@@ -123,4 +97,49 @@ export default class AsyncTaskManager {
123
97
  (<typeof AsyncTaskManager>this.constructor).taskID++;
124
98
  return (<typeof AsyncTaskManager>this.constructor).taskID;
125
99
  }
100
+
101
+ /**
102
+ * Ends all tasks.
103
+ *
104
+ * @param [canceled] Canceled.
105
+ */
106
+ private endAll(canceled?: boolean): void {
107
+ const runningTimers = this.runningTimers;
108
+ const runningTasks = this.runningTasks;
109
+
110
+ this.runningTasks = {};
111
+ this.runningTimers = [];
112
+
113
+ for (const timer of runningTimers) {
114
+ global.clearTimeout(timer);
115
+ }
116
+
117
+ for (const key of Object.keys(runningTasks)) {
118
+ runningTasks[key]();
119
+ }
120
+
121
+ if (this.callbacks.length) {
122
+ if (canceled) {
123
+ const callbacks = this.callbacks;
124
+ this.callbacks = [];
125
+ for (const callback of callbacks) {
126
+ callback();
127
+ }
128
+ } else {
129
+ const timerID = global.setTimeout(() => {
130
+ if (!Object.keys(this.runningTasks).length && this.runningTimers.length === 1) {
131
+ const callbacks = this.callbacks;
132
+ this.callbacks = [];
133
+ this.runningTimers = [];
134
+ for (const callback of callbacks) {
135
+ callback();
136
+ }
137
+ } else {
138
+ this.endTimer(timerID);
139
+ }
140
+ });
141
+ this.startTimer(timerID);
142
+ }
143
+ }
144
+ }
126
145
  }