happy-dom 2.50.0 → 2.52.0

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.

Files changed (113) hide show
  1. package/lib/async-task-manager/AsyncTaskManager.d.ts +65 -0
  2. package/lib/{window → async-task-manager}/AsyncTaskManager.js +52 -55
  3. package/lib/async-task-manager/AsyncTaskManager.js.map +1 -0
  4. package/lib/fetch/FetchHandler.d.ts +17 -0
  5. package/lib/fetch/FetchHandler.js +59 -0
  6. package/lib/fetch/FetchHandler.js.map +1 -0
  7. package/lib/fetch/Headers.d.ts +7 -0
  8. package/lib/fetch/Headers.js +53 -0
  9. package/lib/fetch/Headers.js.map +1 -0
  10. package/lib/fetch/IAbortSignal.d.ts +16 -0
  11. package/lib/fetch/IAbortSignal.js +4 -0
  12. package/lib/fetch/IAbortSignal.js.map +1 -0
  13. package/lib/fetch/IBody.d.ts +17 -0
  14. package/lib/{window/IFetchOptions.js → fetch/IBody.js} +1 -1
  15. package/lib/fetch/IBody.js.map +1 -0
  16. package/lib/fetch/IHeaders.d.ts +18 -0
  17. package/lib/fetch/IHeaders.js +3 -0
  18. package/lib/fetch/IHeaders.js.map +1 -0
  19. package/lib/fetch/IHeadersInit.d.ts +5 -0
  20. package/lib/fetch/IHeadersInit.js +3 -0
  21. package/lib/fetch/IHeadersInit.js.map +1 -0
  22. package/lib/fetch/IRequest.d.ts +18 -0
  23. package/lib/fetch/IRequest.js +3 -0
  24. package/lib/fetch/IRequest.js.map +1 -0
  25. package/lib/fetch/IRequestInit.d.ts +15 -0
  26. package/lib/fetch/IRequestInit.js +3 -0
  27. package/lib/fetch/IRequestInit.js.map +1 -0
  28. package/lib/fetch/IResponse.d.ts +20 -0
  29. package/lib/{window → fetch}/IResponse.js +0 -0
  30. package/lib/{window → fetch}/IResponse.js.map +1 -1
  31. package/lib/fetch/IResponseInit.d.ts +9 -0
  32. package/lib/fetch/IResponseInit.js +3 -0
  33. package/lib/fetch/IResponseInit.js.map +1 -0
  34. package/lib/fetch/Request.d.ts +69 -0
  35. package/lib/fetch/Request.js +179 -0
  36. package/lib/fetch/Request.js.map +1 -0
  37. package/lib/fetch/ResourceFetchHandler.d.ts +22 -0
  38. package/lib/fetch/{ResourceFetcher.js → ResourceFetchHandler.js} +19 -26
  39. package/lib/fetch/ResourceFetchHandler.js.map +1 -0
  40. package/lib/fetch/Response.d.ts +69 -0
  41. package/lib/fetch/Response.js +179 -0
  42. package/lib/fetch/Response.js.map +1 -0
  43. package/lib/file/Blob.d.ts +8 -1
  44. package/lib/file/Blob.js +48 -0
  45. package/lib/file/Blob.js.map +1 -1
  46. package/lib/file/IBlob.d.ts +10 -0
  47. package/lib/file/IBlob.js +3 -0
  48. package/lib/file/IBlob.js.map +1 -0
  49. package/lib/form-data/IFormData.d.ts +30 -0
  50. package/lib/form-data/IFormData.js +3 -0
  51. package/lib/form-data/IFormData.js.map +1 -0
  52. package/lib/index.d.ts +3 -5
  53. package/lib/index.js +3 -3
  54. package/lib/index.js.map +1 -1
  55. package/lib/nodes/document/Document.js +9 -0
  56. package/lib/nodes/document/Document.js.map +1 -1
  57. package/lib/nodes/html-link-element/HTMLLinkElement.js +3 -3
  58. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  59. package/lib/nodes/html-script-element/ScriptUtility.js +3 -9
  60. package/lib/nodes/html-script-element/ScriptUtility.js.map +1 -1
  61. package/lib/nodes/node/INode.d.ts +6 -0
  62. package/lib/nodes/node/Node.d.ts +6 -0
  63. package/lib/nodes/node/Node.js +6 -0
  64. package/lib/nodes/node/Node.js.map +1 -1
  65. package/lib/window/IWindow.d.ts +20 -16
  66. package/lib/window/Window.d.ts +45 -10
  67. package/lib/window/Window.js +72 -66
  68. package/lib/window/Window.js.map +1 -1
  69. package/package.json +3 -2
  70. package/src/async-task-manager/AsyncTaskManager.ts +128 -0
  71. package/src/fetch/FetchHandler.ts +54 -0
  72. package/src/fetch/Headers.ts +7 -0
  73. package/src/fetch/IAbortSignal.ts +34 -0
  74. package/src/fetch/IBody.ts +18 -0
  75. package/src/fetch/IHeaders.ts +18 -0
  76. package/src/fetch/IHeadersInit.ts +5 -0
  77. package/src/fetch/IRequest.ts +59 -0
  78. package/src/fetch/IRequestInit.ts +41 -0
  79. package/src/fetch/IResponse.ts +22 -0
  80. package/src/fetch/IResponseInit.ts +10 -0
  81. package/src/fetch/Request.ts +149 -0
  82. package/src/fetch/ResourceFetchHandler.ts +47 -0
  83. package/src/fetch/Response.ts +149 -0
  84. package/src/file/Blob.ts +12 -1
  85. package/src/file/IBlob.ts +10 -0
  86. package/src/form-data/IFormData.ts +33 -0
  87. package/src/index.ts +2 -6
  88. package/src/nodes/document/Document.ts +12 -0
  89. package/src/nodes/html-link-element/HTMLLinkElement.ts +3 -3
  90. package/src/nodes/html-script-element/ScriptUtility.ts +3 -9
  91. package/src/nodes/node/INode.ts +6 -0
  92. package/src/nodes/node/Node.ts +6 -0
  93. package/src/window/IWindow.ts +14 -16
  94. package/src/window/Window.ts +68 -67
  95. package/lib/fetch/ResourceFetcher.d.ts +0 -30
  96. package/lib/fetch/ResourceFetcher.js.map +0 -1
  97. package/lib/url-search-params/URLSearchParams.d.ts +0 -87
  98. package/lib/url-search-params/URLSearchParams.js +0 -196
  99. package/lib/url-search-params/URLSearchParams.js.map +0 -1
  100. package/lib/window/AsyncTaskManager.d.ts +0 -54
  101. package/lib/window/AsyncTaskManager.js.map +0 -1
  102. package/lib/window/AsyncTaskTypeEnum.d.ts +0 -5
  103. package/lib/window/AsyncTaskTypeEnum.js +0 -9
  104. package/lib/window/AsyncTaskTypeEnum.js.map +0 -1
  105. package/lib/window/IFetchOptions.d.ts +0 -13
  106. package/lib/window/IFetchOptions.js.map +0 -1
  107. package/lib/window/IResponse.d.ts +0 -32
  108. package/src/fetch/ResourceFetcher.ts +0 -55
  109. package/src/url-search-params/URLSearchParams.ts +0 -198
  110. package/src/window/AsyncTaskManager.ts +0 -127
  111. package/src/window/AsyncTaskTypeEnum.ts +0 -5
  112. package/src/window/IFetchOptions.ts +0 -11
  113. package/src/window/IResponse.ts +0 -34
@@ -60,13 +60,15 @@ import UIEvent from '../event/UIEvent';
60
60
  import ErrorEvent from '../event/events/ErrorEvent';
61
61
  import StorageEvent from '../event/events/StorageEvent';
62
62
  import Screen from '../screen/Screen';
63
- import AsyncTaskManager from './AsyncTaskManager';
64
- import IResponse from './IResponse';
63
+ import AsyncTaskManager from '../async-task-manager/AsyncTaskManager';
64
+ import IResponse from '../fetch/IResponse';
65
+ import IResponseInit from '../fetch/IResponseInit';
66
+ import IRequest from '../fetch/IRequest';
67
+ import IRequestInit from '../fetch/IRequestInit';
68
+ import IHeaders from '../fetch/IHeaders';
65
69
  import Storage from '../storage/Storage';
66
- import IFetchOptions from './IFetchOptions';
67
70
  import NodeFilter from '../tree-walker/NodeFilter';
68
71
  import Window from './Window';
69
- import URLSearchParams from '../url-search-params/URLSearchParams';
70
72
  import HTMLCollection from '../nodes/element/HTMLCollection';
71
73
  import NodeList from '../nodes/node/NodeList';
72
74
  import Selection from '../selection/Selection';
@@ -76,6 +78,7 @@ import MimeType from '../navigator/MimeType';
76
78
  import MimeTypeArray from '../navigator/MimeTypeArray';
77
79
  import Plugin from '../navigator/Plugin';
78
80
  import PluginArray from '../navigator/PluginArray';
81
+ import { URLSearchParams } from 'url';
79
82
 
80
83
  /**
81
84
  * Window.
@@ -141,7 +144,9 @@ export default interface IWindow extends IEventTarget {
141
144
  readonly Location: typeof Location;
142
145
  readonly CustomElementRegistry: typeof CustomElementRegistry;
143
146
  readonly Window: typeof Window;
144
- readonly Headers: typeof Map;
147
+ readonly Headers: { new (init?: string[][] | Record<string, string> | IHeaders): IHeaders };
148
+ readonly Request: { new (input: string | IRequest, init?: IRequestInit): IRequest };
149
+ readonly Response: { new (body?: unknown | null, init?: IResponseInit): IResponse };
145
150
  readonly XMLSerializer: typeof XMLSerializer;
146
151
  readonly ResizeObserver: typeof ResizeObserver;
147
152
  readonly CSSStyleSheet: typeof CSSStyleSheet;
@@ -221,7 +226,6 @@ export default interface IWindow extends IEventTarget {
221
226
  /**
222
227
  * Sets a timer which executes a function once the timer expires.
223
228
  *
224
- * @override
225
229
  * @param callback Function to be executed.
226
230
  * @param [delay=0] Delay in ms.
227
231
  * @returns Timeout ID.
@@ -231,7 +235,6 @@ export default interface IWindow extends IEventTarget {
231
235
  /**
232
236
  * Cancels a timeout previously established by calling setTimeout().
233
237
  *
234
- * @override
235
238
  * @param id ID of the timeout.
236
239
  */
237
240
  clearTimeout(id: NodeJS.Timeout): void;
@@ -239,7 +242,6 @@ export default interface IWindow extends IEventTarget {
239
242
  /**
240
243
  * Calls a function with a fixed time delay between each call.
241
244
  *
242
- * @override
243
245
  * @param callback Function to be executed.
244
246
  * @param [delay=0] Delay in ms.
245
247
  * @returns Interval ID.
@@ -249,7 +251,6 @@ export default interface IWindow extends IEventTarget {
249
251
  /**
250
252
  * Cancels a timed repeating action which was previously established by a call to setInterval().
251
253
  *
252
- * @override
253
254
  * @param id ID of the interval.
254
255
  */
255
256
  clearInterval(id: NodeJS.Timeout): void;
@@ -257,7 +258,6 @@ export default interface IWindow extends IEventTarget {
257
258
  /**
258
259
  * Mock animation frames with timeouts.
259
260
  *
260
- * @override
261
261
  * @param {Function} callback Callback.
262
262
  * @returns {NodeJS.Timeout} Timeout ID.
263
263
  */
@@ -266,18 +266,16 @@ export default interface IWindow extends IEventTarget {
266
266
  /**
267
267
  * Mock animation frames with timeouts.
268
268
  *
269
- * @override
270
269
  * @param {NodeJS.Timeout} id Timeout ID.
271
270
  */
272
271
  cancelAnimationFrame(id: NodeJS.Timeout): void;
273
272
 
274
273
  /**
275
- * Provides a global fetch() method that provides an easy, logical way to fetch resources asynchronously across the network.
274
+ * This method provides an easy, logical way to fetch resources asynchronously across the network.
276
275
  *
277
- * @override
278
- * @param url URL to resource.
279
- * @param [options] Options.
276
+ * @param url URL.
277
+ * @param [init] Init.
280
278
  * @returns Promise.
281
279
  */
282
- fetch(url: string, options?: IFetchOptions): Promise<IResponse>;
280
+ fetch(url: string, init?: IRequestInit): Promise<IResponse>;
283
281
  }
@@ -63,14 +63,15 @@ import UIEvent from '../event/UIEvent';
63
63
  import ErrorEvent from '../event/events/ErrorEvent';
64
64
  import StorageEvent from '../event/events/StorageEvent';
65
65
  import Screen from '../screen/Screen';
66
- import AsyncTaskManager from './AsyncTaskManager';
67
- import IResponse from './IResponse';
68
- import AsyncTaskTypeEnum from './AsyncTaskTypeEnum';
69
- import RelativeURL from '../location/RelativeURL';
66
+ import AsyncTaskManager from '../async-task-manager/AsyncTaskManager';
67
+ import IResponse from '../fetch/IResponse';
68
+ import IResponseInit from '../fetch/IResponseInit';
69
+ import IRequest from '../fetch/IRequest';
70
+ import IRequestInit from '../fetch/IRequestInit';
71
+ import IHeaders from '../fetch/IHeaders';
72
+ import IHeadersInit from '../fetch/IHeadersInit';
70
73
  import Storage from '../storage/Storage';
71
- import IFetchOptions from './IFetchOptions';
72
74
  import IWindow from './IWindow';
73
- import URLSearchParams from '../url-search-params/URLSearchParams';
74
75
  import HTMLCollection from '../nodes/element/HTMLCollection';
75
76
  import NodeList from '../nodes/node/NodeList';
76
77
  import MediaQueryList from '../match-media/MediaQueryList';
@@ -81,8 +82,8 @@ import MimeType from '../navigator/MimeType';
81
82
  import MimeTypeArray from '../navigator/MimeTypeArray';
82
83
  import Plugin from '../navigator/Plugin';
83
84
  import PluginArray from '../navigator/PluginArray';
84
-
85
- const FETCH_RESPONSE_TYPE_METHODS = ['blob', 'json', 'text'];
85
+ import FetchHandler from '../fetch/FetchHandler';
86
+ import { URLSearchParams } from 'url';
86
87
 
87
88
  /**
88
89
  * Handles the Window.
@@ -94,7 +95,7 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
94
95
  return await this.happyDOM.asyncTaskManager.whenComplete();
95
96
  },
96
97
  cancelAsync: (): void => {
97
- this.happyDOM.asyncTaskManager.cancelAllTasks();
98
+ this.happyDOM.asyncTaskManager.cancelAll();
98
99
  },
99
100
  asyncTaskManager: new AsyncTaskManager()
100
101
  };
@@ -152,7 +153,6 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
152
153
  public readonly Location = Location;
153
154
  public readonly CustomElementRegistry = CustomElementRegistry;
154
155
  public readonly Window = Window;
155
- public readonly Headers = Map;
156
156
  public readonly XMLSerializer = XMLSerializer;
157
157
  public readonly ResizeObserver = ResizeObserver;
158
158
  public readonly CSSStyleSheet = CSSStyleSheet;
@@ -200,7 +200,6 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
200
200
  public readonly performance = PerfHooks.performance;
201
201
 
202
202
  // Node.js Globals
203
- public Array = global ? global.Array : null;
204
203
  public ArrayBuffer = global ? global.ArrayBuffer : null;
205
204
  public Boolean = global ? global.Boolean : null;
206
205
  public Buffer = null;
@@ -262,6 +261,7 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
262
261
 
263
262
  // Private properties
264
263
  private _objectClass: typeof globalThis.Object = null;
264
+ private _arrayClass: typeof globalThis.Array = null;
265
265
  private _functionClass: typeof globalThis.Function = null;
266
266
 
267
267
  /**
@@ -315,6 +315,21 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
315
315
  return this._objectClass;
316
316
  }
317
317
 
318
+ /**
319
+ * Returns Array class.
320
+ *
321
+ * @returns Array class.
322
+ */
323
+ public get Array(): typeof globalThis.Array {
324
+ if (this._arrayClass) {
325
+ return this._arrayClass;
326
+ }
327
+ // When inside a VM global.Object is not the same as [].constructor
328
+ // We will therefore run the code inside the VM to get the real constructor
329
+ this._arrayClass = <typeof globalThis.Array>this.eval('[].constructor');
330
+ return this._arrayClass;
331
+ }
332
+
318
333
  /**
319
334
  * Returns Function class.
320
335
  *
@@ -339,6 +354,43 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
339
354
  return new CSS();
340
355
  }
341
356
 
357
+ /**
358
+ * Returns Headers class.
359
+ *
360
+ * @returns Headers.
361
+ */
362
+ public get Headers(): {
363
+ new (init?: IHeadersInit): IHeaders;
364
+ } {
365
+ return require('../fetch/Headers').default;
366
+ }
367
+
368
+ /**
369
+ * Returns Request class.
370
+ *
371
+ * @returns Request.
372
+ */
373
+ public get Request(): {
374
+ new (input: string | { href: string } | IRequest, init?: IRequestInit): IRequest;
375
+ } {
376
+ const Request = require('../fetch/Request').default;
377
+ Request._ownerDocument = Request._ownerDocument || this.document;
378
+ return Request;
379
+ }
380
+
381
+ /**
382
+ * Returns Response class.
383
+ *
384
+ * @returns Response.
385
+ */
386
+ public get Response(): {
387
+ new (body?: NodeJS.ReadableStream | null, init?: IResponseInit): IResponse;
388
+ } {
389
+ const Response = require('../fetch/Response').default;
390
+ Response._ownerDocument = Response._ownerDocument || this.document;
391
+ return Response;
392
+ }
393
+
342
394
  /**
343
395
  * Evaluates code.
344
396
  *
@@ -509,65 +561,14 @@ export default class Window extends EventTarget implements IWindow, NodeJS.Globa
509
561
  }
510
562
 
511
563
  /**
512
- * Provides a global fetch() method that provides an easy, logical way to fetch resources asynchronously across the network.
564
+ * This method provides an easy, logical way to fetch resources asynchronously across the network.
513
565
  *
514
566
  * @override
515
- * @param url URL to resource.
516
- * @param [options] Options.
567
+ * @param url URL.
568
+ * @param [init] Init.
517
569
  * @returns Promise.
518
570
  */
519
- public async fetch(url: string, options?: IFetchOptions): Promise<IResponse> {
520
- return new Promise((resolve, reject) => {
521
- let fetch = null;
522
-
523
- try {
524
- fetch = require('node-fetch');
525
- } catch (error) {
526
- throw new Error('Failed to perform fetch. "node-fetch" could not be loaded.');
527
- }
528
-
529
- this.happyDOM.asyncTaskManager.startTask(AsyncTaskTypeEnum.fetch);
530
-
531
- fetch(RelativeURL.getAbsoluteURL(this.location, url), options)
532
- .then((response) => {
533
- if (this.happyDOM.asyncTaskManager.getRunningCount(AsyncTaskTypeEnum.fetch) === 0) {
534
- reject(new Error('Failed to complete fetch request. Task was canceled.'));
535
- } else {
536
- for (const methodName of FETCH_RESPONSE_TYPE_METHODS) {
537
- const asyncMethod = response[methodName];
538
- response[methodName] = () => {
539
- return new Promise((resolve, reject) => {
540
- this.happyDOM.asyncTaskManager.startTask(AsyncTaskTypeEnum.fetch);
541
-
542
- asyncMethod
543
- .call(response)
544
- .then((response) => {
545
- if (
546
- this.happyDOM.asyncTaskManager.getRunningCount(AsyncTaskTypeEnum.fetch) ===
547
- 0
548
- ) {
549
- reject(new Error('Failed to complete fetch request. Task was canceled.'));
550
- } else {
551
- resolve(response);
552
- this.happyDOM.asyncTaskManager.endTask(AsyncTaskTypeEnum.fetch);
553
- }
554
- })
555
- .catch((error) => {
556
- reject(error);
557
- this.happyDOM.asyncTaskManager.endTask(AsyncTaskTypeEnum.fetch, error);
558
- });
559
- });
560
- };
561
- }
562
-
563
- resolve(response);
564
- this.happyDOM.asyncTaskManager.endTask(AsyncTaskTypeEnum.fetch);
565
- }
566
- })
567
- .catch((error) => {
568
- reject(error);
569
- this.happyDOM.asyncTaskManager.endTask(AsyncTaskTypeEnum.fetch, error);
570
- });
571
- });
571
+ public async fetch(url: string, init?: IRequestInit): Promise<IResponse> {
572
+ return await FetchHandler.fetch(this.document, url, init);
572
573
  }
573
574
  }
@@ -1,30 +0,0 @@
1
- import Window from '../window/Window';
2
- /**
3
- * Helper class for performing an asynchonous or synchrounous request to a resource.
4
- */
5
- export default class ResourceFetcher {
6
- /**
7
- * Returns resource data asynchonously.
8
- *
9
- * @param options Options.
10
- * @param options.window Location.
11
- * @param options.url URL.
12
- * @returns Response.
13
- */
14
- static fetch(options: {
15
- window: Window;
16
- url: string;
17
- }): Promise<string>;
18
- /**
19
- * Returns resource data synchonously.
20
- *
21
- * @param options Options.
22
- * @param options.window Location.
23
- * @param options.url URL.
24
- * @returns Response.
25
- */
26
- static fetchSync(options: {
27
- window: Window;
28
- url: string;
29
- }): string;
30
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResourceFetcher.js","sourceRoot":"","sources":["../../src/fetch/ResourceFetcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wEAAkD;AAElD,2EAAqD;AAErD;;GAEG;AACH;IAAA;IA+CA,CAAC;IA9CA;;;;;;;OAOG;IACiB,qBAAK,GAAzB,UAA0B,OAAwC;;;;;4BAChD,qBAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAA;;wBAAlD,QAAQ,GAAG,SAAuC;wBACxD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;4BACjB,MAAM,IAAI,sBAAY,CACrB,yCAAiC,OAAO,CAAC,GAAG,8BAAmB,QAAQ,CAAC,MAAM,CAAE,CAChF,CAAC;yBACF;wBACM,qBAAM,QAAQ,CAAC,IAAI,EAAE,EAAA;4BAA5B,sBAAO,SAAqB,EAAC;;;;KAC7B;IAED;;;;;;;OAOG;IACW,yBAAS,GAAvB,UAAwB,OAAwC;QAC/D,IAAM,GAAG,GAAG,qBAAW,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7E,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,IAAI;YACH,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE;YACf,MAAM,IAAI,sBAAY,CAAC,4DAA4D,CAAC,CAAC;SACrF;QAED,IAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAErC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;YACvB,MAAM,IAAI,sBAAY,CACrB,yCAAiC,GAAG,8BAAmB,QAAQ,CAAC,UAAU,CAAE,CAC5E,CAAC;SACF;QAED,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACF,sBAAC;AAAD,CAAC,AA/CD,IA+CC"}
@@ -1,87 +0,0 @@
1
- /**
2
- * URLSearchParams.
3
- *
4
- * Reference:
5
- * https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams.
6
- */
7
- export default class URLSearchParams {
8
- private _params;
9
- /**
10
- * Constructor.
11
- *
12
- * @param [params] Params string.
13
- */
14
- constructor(params?: string);
15
- /**
16
- * Appends a specified key/value pair as a new search parameter.
17
- *
18
- * @param name Name.
19
- * @param value Value.
20
- */
21
- append(name: string, value: string): void;
22
- /**
23
- * Deletes the given search parameter, and its associated value, from the list of all search parameters.
24
- *
25
- * @param name Name.
26
- */
27
- delete(name: string): void;
28
- /**
29
- * Returns an iterator.
30
- *
31
- * @returns Entries.
32
- */
33
- entries(): IterableIterator<[string, string]>;
34
- /**
35
- * For each.
36
- *
37
- * @param callback Callback.
38
- */
39
- forEach(callback: (value: any, key: any) => void): void;
40
- /**
41
- * Returns value.
42
- *
43
- * @param name Name.
44
- */
45
- get(name: string): string;
46
- /**
47
- * Returns all values associated with a name.
48
- *
49
- * @param name Name.
50
- * @returns Values.
51
- */
52
- getAll(name: string): string[];
53
- /**
54
- * Returns "true" if param exists.
55
- *
56
- * @param name Name.
57
- * @returns "true" if param exists.
58
- */
59
- has(name: string): boolean;
60
- /**
61
- * Returns an iterator.
62
- *
63
- * @returns Keys iterator.
64
- */
65
- keys(): IterableIterator<string>;
66
- /**
67
- * Sets the value associated with a given search parameter to the given value. If there are several values, the others are deleted.
68
- *
69
- * @param name Name.
70
- * @param value Value.
71
- */
72
- set(name: string, value: string): void;
73
- /**
74
- * Sorts all key/value pairs, if any, by their keys.
75
- */
76
- sort(): void;
77
- /**
78
- * Returns a string containing a query string suitable for use in a URL.
79
- */
80
- toString(): string;
81
- /**
82
- * Returns an iterator.
83
- *
84
- * @returns Values iterator.
85
- */
86
- values(): IterableIterator<string>;
87
- }
@@ -1,196 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * URLSearchParams.
5
- *
6
- * Reference:
7
- * https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams.
8
- */
9
- var URLSearchParams = /** @class */ (function () {
10
- /**
11
- * Constructor.
12
- *
13
- * @param [params] Params string.
14
- */
15
- function URLSearchParams(params) {
16
- this._params = [];
17
- if (params) {
18
- for (var _i = 0, _a = params.split('&'); _i < _a.length; _i++) {
19
- var entry = _a[_i];
20
- var _b = entry.split('='), name = _b[0], value = _b[1];
21
- if (name) {
22
- this._params.push([name, value]);
23
- }
24
- }
25
- }
26
- }
27
- /**
28
- * Appends a specified key/value pair as a new search parameter.
29
- *
30
- * @param name Name.
31
- * @param value Value.
32
- */
33
- URLSearchParams.prototype.append = function (name, value) {
34
- this._params.push([name, value]);
35
- };
36
- /**
37
- * Deletes the given search parameter, and its associated value, from the list of all search parameters.
38
- *
39
- * @param name Name.
40
- */
41
- URLSearchParams.prototype.delete = function (name) {
42
- for (var i = 0, max = this._params.length; i < max; i++) {
43
- if (this._params[i][0] === name) {
44
- this._params.splice(i, 1);
45
- i--;
46
- max--;
47
- }
48
- }
49
- };
50
- /**
51
- * Returns an iterator.
52
- *
53
- * @returns Entries.
54
- */
55
- URLSearchParams.prototype.entries = function () {
56
- var params = this._params;
57
- var Iterator = function Iterator() {
58
- var index = 0;
59
- this.next = function () {
60
- var value = params[index];
61
- var done = index >= params.length;
62
- index++;
63
- return { value: value, done: done };
64
- };
65
- this[Symbol.iterator] = function () { return new Iterator(); };
66
- };
67
- return new Iterator();
68
- };
69
- /**
70
- * For each.
71
- *
72
- * @param callback Callback.
73
- */
74
- URLSearchParams.prototype.forEach = function (callback) {
75
- for (var _i = 0, _a = this._params; _i < _a.length; _i++) {
76
- var param = _a[_i];
77
- callback(param[0], param[1]);
78
- }
79
- };
80
- /**
81
- * Returns value.
82
- *
83
- * @param name Name.
84
- */
85
- URLSearchParams.prototype.get = function (name) {
86
- for (var _i = 0, _a = this._params; _i < _a.length; _i++) {
87
- var param = _a[_i];
88
- if (param[0] === name) {
89
- return param[1];
90
- }
91
- }
92
- return undefined;
93
- };
94
- /**
95
- * Returns all values associated with a name.
96
- *
97
- * @param name Name.
98
- * @returns Values.
99
- */
100
- URLSearchParams.prototype.getAll = function (name) {
101
- var values = [];
102
- for (var _i = 0, _a = this._params; _i < _a.length; _i++) {
103
- var param = _a[_i];
104
- if (param[0] === name) {
105
- values.push(param[1]);
106
- }
107
- }
108
- return values;
109
- };
110
- /**
111
- * Returns "true" if param exists.
112
- *
113
- * @param name Name.
114
- * @returns "true" if param exists.
115
- */
116
- URLSearchParams.prototype.has = function (name) {
117
- for (var _i = 0, _a = this._params; _i < _a.length; _i++) {
118
- var param = _a[_i];
119
- if (param[0] === name) {
120
- return true;
121
- }
122
- }
123
- return false;
124
- };
125
- /**
126
- * Returns an iterator.
127
- *
128
- * @returns Keys iterator.
129
- */
130
- URLSearchParams.prototype.keys = function () {
131
- var params = this._params;
132
- var Iterator = function Iterator() {
133
- var index = 0;
134
- this.next = function () {
135
- var value = params[index] !== undefined ? params[index][0] : undefined;
136
- var done = index >= params.length;
137
- index++;
138
- return { value: value, done: done };
139
- };
140
- this[Symbol.iterator] = function () { return new Iterator(); };
141
- };
142
- return new Iterator();
143
- };
144
- /**
145
- * Sets the value associated with a given search parameter to the given value. If there are several values, the others are deleted.
146
- *
147
- * @param name Name.
148
- * @param value Value.
149
- */
150
- URLSearchParams.prototype.set = function (name, value) {
151
- this.delete(name);
152
- this.append(name, value);
153
- };
154
- /**
155
- * Sorts all key/value pairs, if any, by their keys.
156
- */
157
- URLSearchParams.prototype.sort = function () {
158
- this._params.sort(function (a, b) {
159
- if (a[0] < b[0]) {
160
- return -1;
161
- }
162
- else if (a[0] > b[0]) {
163
- return 1;
164
- }
165
- return 0;
166
- });
167
- };
168
- /**
169
- * Returns a string containing a query string suitable for use in a URL.
170
- */
171
- URLSearchParams.prototype.toString = function () {
172
- return this._params.map(function (param) { return param.join('='); }).join('&');
173
- };
174
- /**
175
- * Returns an iterator.
176
- *
177
- * @returns Values iterator.
178
- */
179
- URLSearchParams.prototype.values = function () {
180
- var params = this._params;
181
- var Iterator = function Iterator() {
182
- var index = 0;
183
- this.next = function () {
184
- var value = params[index] !== undefined ? params[index][1] : undefined;
185
- var done = index >= params.length;
186
- index++;
187
- return { value: value, done: done };
188
- };
189
- this[Symbol.iterator] = function () { return new Iterator(); };
190
- };
191
- return new Iterator();
192
- };
193
- return URLSearchParams;
194
- }());
195
- exports.default = URLSearchParams;
196
- //# sourceMappingURL=URLSearchParams.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"URLSearchParams.js","sourceRoot":"","sources":["../../src/url-search-params/URLSearchParams.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- /// <reference types="node" />
2
- import AsyncTaskTypeEnum from './AsyncTaskTypeEnum';
3
- /**
4
- * Handles async tasks.
5
- */
6
- export default class AsyncTaskManager {
7
- private tasks;
8
- private queue;
9
- /**
10
- * Returns a promise that is fulfilled when async tasks are complete.
11
- * This method is not part of the HTML standard.
12
- *
13
- * @returns Promise.
14
- */
15
- whenComplete(): Promise<void>;
16
- /**
17
- * Cancels all tasks.
18
- *
19
- * @param [error] Error.
20
- */
21
- cancelAllTasks(error?: Error): void;
22
- /**
23
- * Starts a timer.
24
- *
25
- * @param id Timer ID.
26
- */
27
- startTimer(id?: NodeJS.Timeout): void;
28
- /**
29
- * Ends a timer.
30
- *
31
- * @param id Timer ID.
32
- */
33
- endTimer(id?: NodeJS.Timeout): void;
34
- /**
35
- * Starts an async task.
36
- *
37
- * @param type Task type.
38
- */
39
- startTask(type: AsyncTaskTypeEnum): void;
40
- /**
41
- * Ends an async task.
42
- *
43
- * @param type Task type.
44
- * @param [error] Error.
45
- */
46
- endTask(type: AsyncTaskTypeEnum, error?: Error): void;
47
- /**
48
- * Returns the amount of running tasks by type.
49
- *
50
- * @param type Task type.
51
- * @returns Count.
52
- */
53
- getRunningCount(type: AsyncTaskTypeEnum): number;
54
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"AsyncTaskManager.js","sourceRoot":"","sources":["../../src/window/AsyncTaskManager.ts"],"names":[],"mappings":"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"}