happy-dom 7.7.1 → 7.8.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 (109) hide show
  1. package/README.md +62 -27
  2. package/lib/async-task-manager/AsyncTaskManager.d.ts +3 -8
  3. package/lib/async-task-manager/AsyncTaskManager.js +21 -24
  4. package/lib/async-task-manager/AsyncTaskManager.js.map +1 -1
  5. package/lib/cookie/Cookie.d.ts +53 -0
  6. package/lib/cookie/Cookie.js +146 -0
  7. package/lib/cookie/Cookie.js.map +1 -0
  8. package/lib/cookie/CookieJar.d.ts +30 -0
  9. package/lib/cookie/CookieJar.js +84 -0
  10. package/lib/cookie/CookieJar.js.map +1 -0
  11. package/lib/event/IEventListener.d.ts +1 -1
  12. package/lib/exception/DOMExceptionNameEnum.d.ts +4 -1
  13. package/lib/exception/DOMExceptionNameEnum.js +3 -0
  14. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  15. package/lib/fetch/FetchHandler.d.ts +3 -2
  16. package/lib/fetch/FetchHandler.js +31 -3
  17. package/lib/fetch/FetchHandler.js.map +1 -1
  18. package/lib/fetch/RequestInfo.d.ts +5 -0
  19. package/lib/fetch/RequestInfo.js +3 -0
  20. package/lib/fetch/RequestInfo.js.map +1 -0
  21. package/lib/fetch/ResourceFetchHandler.d.ts +2 -2
  22. package/lib/fetch/ResourceFetchHandler.js +9 -8
  23. package/lib/fetch/ResourceFetchHandler.js.map +1 -1
  24. package/lib/index.d.ts +1 -2
  25. package/lib/index.js +3 -4
  26. package/lib/index.js.map +1 -1
  27. package/lib/location/Location.d.ts +2 -1
  28. package/lib/location/Location.js +4 -7
  29. package/lib/location/Location.js.map +1 -1
  30. package/lib/location/RelativeURL.d.ts +3 -1
  31. package/lib/location/RelativeURL.js +2 -11
  32. package/lib/location/RelativeURL.js.map +1 -1
  33. package/lib/nodes/document/Document.d.ts +14 -3
  34. package/lib/nodes/document/Document.js +21 -6
  35. package/lib/nodes/document/Document.js.map +1 -1
  36. package/lib/nodes/document/IDocument.d.ts +2 -0
  37. package/lib/nodes/html-link-element/HTMLLinkElement.js +5 -2
  38. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  39. package/lib/nodes/html-script-element/HTMLScriptElement.js +1 -1
  40. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  41. package/lib/nodes/html-script-element/ScriptUtility.js +4 -0
  42. package/lib/nodes/html-script-element/ScriptUtility.js.map +1 -1
  43. package/lib/window/IHappyDOMSettings.d.ts +9 -0
  44. package/lib/window/IHappyDOMSettings.js +3 -0
  45. package/lib/window/IHappyDOMSettings.js.map +1 -0
  46. package/lib/window/IWindow.d.ts +15 -6
  47. package/lib/window/Window.d.ts +18 -3
  48. package/lib/window/Window.js +26 -4
  49. package/lib/window/Window.js.map +1 -1
  50. package/lib/xml-http-request/XMLHttpRequest.d.ts +196 -0
  51. package/lib/xml-http-request/XMLHttpRequest.js +777 -0
  52. package/lib/xml-http-request/XMLHttpRequest.js.map +1 -0
  53. package/lib/xml-http-request/XMLHttpRequestCertificate.d.ts +5 -0
  54. package/lib/xml-http-request/XMLHttpRequestCertificate.js +55 -0
  55. package/lib/xml-http-request/XMLHttpRequestCertificate.js.map +1 -0
  56. package/lib/xml-http-request/XMLHttpRequestEventTarget.d.ts +15 -0
  57. package/lib/xml-http-request/XMLHttpRequestEventTarget.js +23 -0
  58. package/lib/xml-http-request/XMLHttpRequestEventTarget.js.map +1 -0
  59. package/lib/xml-http-request/XMLHttpRequestReadyStateEnum.d.ts +8 -0
  60. package/lib/xml-http-request/XMLHttpRequestReadyStateEnum.js +12 -0
  61. package/lib/xml-http-request/XMLHttpRequestReadyStateEnum.js.map +1 -0
  62. package/lib/xml-http-request/XMLHttpRequestUpload.d.ts +6 -0
  63. package/lib/xml-http-request/XMLHttpRequestUpload.js +13 -0
  64. package/lib/xml-http-request/XMLHttpRequestUpload.js.map +1 -0
  65. package/lib/xml-http-request/XMLHttpResponseTypeEnum.d.ts +8 -0
  66. package/lib/xml-http-request/XMLHttpResponseTypeEnum.js +12 -0
  67. package/lib/xml-http-request/XMLHttpResponseTypeEnum.js.map +1 -0
  68. package/lib/xml-http-request/utilities/XMLHttpRequestSyncRequestScriptBuilder.d.ts +15 -0
  69. package/lib/xml-http-request/utilities/XMLHttpRequestSyncRequestScriptBuilder.js +55 -0
  70. package/lib/xml-http-request/utilities/XMLHttpRequestSyncRequestScriptBuilder.js.map +1 -0
  71. package/lib/xml-http-request/utilities/XMLHttpRequestURLUtility.d.ts +35 -0
  72. package/lib/xml-http-request/utilities/XMLHttpRequestURLUtility.js +62 -0
  73. package/lib/xml-http-request/utilities/XMLHttpRequestURLUtility.js.map +1 -0
  74. package/package.json +2 -2
  75. package/src/async-task-manager/AsyncTaskManager.ts +24 -26
  76. package/src/cookie/Cookie.ts +158 -0
  77. package/src/cookie/CookieJar.ts +82 -0
  78. package/src/event/IEventListener.ts +1 -1
  79. package/src/exception/DOMExceptionNameEnum.ts +4 -1
  80. package/src/fetch/FetchHandler.ts +40 -4
  81. package/src/fetch/RequestInfo.ts +6 -0
  82. package/src/fetch/ResourceFetchHandler.ts +10 -8
  83. package/src/index.ts +1 -2
  84. package/src/location/Location.ts +3 -3
  85. package/src/location/RelativeURL.ts +3 -14
  86. package/src/nodes/document/Document.ts +24 -6
  87. package/src/nodes/document/IDocument.ts +2 -0
  88. package/src/nodes/html-link-element/HTMLLinkElement.ts +7 -2
  89. package/src/nodes/html-script-element/HTMLScriptElement.ts +1 -1
  90. package/src/nodes/html-script-element/ScriptUtility.ts +8 -0
  91. package/src/window/IHappyDOMSettings.ts +9 -0
  92. package/src/window/IWindow.ts +15 -6
  93. package/src/window/Window.ts +36 -5
  94. package/src/xml-http-request/XMLHttpRequest.ts +998 -0
  95. package/src/xml-http-request/XMLHttpRequestCertificate.ts +52 -0
  96. package/src/xml-http-request/XMLHttpRequestEventTarget.ts +17 -0
  97. package/src/xml-http-request/XMLHttpRequestReadyStateEnum.ts +9 -0
  98. package/src/xml-http-request/XMLHttpRequestUpload.ts +6 -0
  99. package/src/xml-http-request/XMLHttpResponseTypeEnum.ts +9 -0
  100. package/src/xml-http-request/utilities/XMLHttpRequestSyncRequestScriptBuilder.ts +53 -0
  101. package/src/xml-http-request/utilities/XMLHttpRequestURLUtility.ts +64 -0
  102. package/lib/cookie/CookieUtility.d.ts +0 -15
  103. package/lib/cookie/CookieUtility.js +0 -83
  104. package/lib/cookie/CookieUtility.js.map +0 -1
  105. package/lib/location/URL.d.ts +0 -53
  106. package/lib/location/URL.js +0 -96
  107. package/lib/location/URL.js.map +0 -1
  108. package/src/cookie/CookieUtility.ts +0 -87
  109. package/src/location/URL.ts +0 -102
@@ -0,0 +1,52 @@
1
+ // SSL certificate generated for Happy DOM to be able to perform HTTPS requests
2
+ export default {
3
+ cert: `-----BEGIN CERTIFICATE-----
4
+ MIIDYzCCAkugAwIBAgIUJRKB/H66hpet1VfUlm0CiXqePA4wDQYJKoZIhvcNAQEL
5
+ BQAwQTELMAkGA1UEBhMCU0UxDjAMBgNVBAgMBVNrYW5lMQ4wDAYDVQQHDAVNYWxt
6
+ bzESMBAGA1UECgwJSGFwcHkgRE9NMB4XDTIyMTAxMTIyMDM0OVoXDTMyMTAwODIy
7
+ MDM0OVowQTELMAkGA1UEBhMCU0UxDjAMBgNVBAgMBVNrYW5lMQ4wDAYDVQQHDAVN
8
+ YWxtbzESMBAGA1UECgwJSGFwcHkgRE9NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
9
+ MIIBCgKCAQEAqerQSQEg/SxVxRiwlItithr5e5EMZo1nsqt/xOxagbmpW3IEmt0j
10
+ bpbH7iEF4DDEo7KAOwUCOwVWeFxRoag8lG2ax48wrgjlCna45XDn0Xeg1ARajL04
11
+ gs46HZ0VrzIloVGfln0zgt/Vum5BNqs9Oc5fQoBmoP3cAn3dn4ZVcP0AKthtcyPl
12
+ q2DuNRN0PV0D2RtMSiAy9l1Ko6N5x+sAeClDyOL+sTDLngZBVeZyOKt9Id15S8Zt
13
+ XtA6VMgHnnF3jChn7pag77rsd/y5iANAVNZYqRl+Eg7xaDcsvbgH46UBOrBcB39Q
14
+ tTh5Mtjoxep5e3ZDFG+kQ1HUE+iz5O5n0wIDAQABo1MwUTAdBgNVHQ4EFgQU69s9
15
+ YSobG/m2SN4L/7zTaF7iDbwwHwYDVR0jBBgwFoAU69s9YSobG/m2SN4L/7zTaF7i
16
+ DbwwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAi/WUXx2oal8L
17
+ YnPlIuKfh49n/K18wXSYG//oFYwxfVxqpYH8hUiXVm/GUcXCxS++hUkaKLqXmH9q
18
+ MKJiCrZr3vS+2nsBKopkICu/TLdROl0sAI9lByfnEbfSAzjxe1IWJdK8NdY0y5m5
19
+ 9pEr/URVIAp/CxrneyASb4q0Jg5To3FR7vYc+2X6wZn0MundKMg6Dp9/A37jiF3l
20
+ Tt/EJp299YZcsUzh+LnRuggRjnoOVu1aLcLFlaUiwZfy9m8mLG6B/mdW/qNzNMh9
21
+ Oqvg1zfGdpz/4D/2UUUBn6pq1vbsoAaF3OesoA3mfDcegDf/H9woJlpT0Wql+e68
22
+ Y3FblSokcA==
23
+ -----END CERTIFICATE-----`,
24
+ key: `-----BEGIN PRIVATE KEY-----
25
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCp6tBJASD9LFXF
26
+ GLCUi2K2Gvl7kQxmjWeyq3/E7FqBualbcgSa3SNulsfuIQXgMMSjsoA7BQI7BVZ4
27
+ XFGhqDyUbZrHjzCuCOUKdrjlcOfRd6DUBFqMvTiCzjodnRWvMiWhUZ+WfTOC39W6
28
+ bkE2qz05zl9CgGag/dwCfd2fhlVw/QAq2G1zI+WrYO41E3Q9XQPZG0xKIDL2XUqj
29
+ o3nH6wB4KUPI4v6xMMueBkFV5nI4q30h3XlLxm1e0DpUyAeecXeMKGfulqDvuux3
30
+ /LmIA0BU1lipGX4SDvFoNyy9uAfjpQE6sFwHf1C1OHky2OjF6nl7dkMUb6RDUdQT
31
+ 6LPk7mfTAgMBAAECggEAKkwTkTjAt4UjzK56tl+EMQTB+ep/hb/JgoaChci4Nva6
32
+ m9LkJpDJ0yuhlTuPNOGu8XjrxsVWas7HWarRf0Zb3i7yip6wZYI9Ub+AA015x4DZ
33
+ /i0fRU2NFbK0cM67qSL4jxG8gj+kZP3HPGNZxHwX/53JxMolwgmvjMc8NgvAlSFd
34
+ NnV9h4xtbhUh1NGS5zmP3iU2rwnE8JrIEzwy6axLom7nekAgkdcbAr0UoBs8gcgH
35
+ aYNhU4Gz3tGcZZ0IXAfT/bJIH1Ko8AGv4pssWc3BXcmmNdm/+kzvHIxEIV7Qegmo
36
+ XG1ZyZCyD/0b4/3e8ySDBEDqwR+HeyTW2isWG2agAQKBgQDp44aTwr3dkIXY30xv
37
+ FPfUOipg/B49dWnffYJ9MWc1FT9ijNPAngWSk0EIiEQIazICcUBI4Yji6/KeyqLJ
38
+ GdLpDi1CkKqtyh73mjELinYp3EUQgEa77aQogGa2+nMOVfu+O5CtloUrv/A18jX3
39
+ +VEyaEASK0fWmnSI0OdlxQHIAQKBgQC5+xOls2F3MlKASvWRLlnW1wHqlDTtVoYg
40
+ 5Nh8syZH4Ci2UH8tON3A5/7SWNM0t1cgV6Cw4zW8Z2spgIT/W0iYYrQ4hHL1xdCu
41
+ +CxL1km4Gy8Uwpsd+KdFahFqF/XTmLzW0HXLxWSK0fTwmdV0SFrKF3MXfTCU2AeZ
42
+ jJoMFb6P0wKBgQC3Odw6s0vkYAzLGhuZxfZkVvDOK5RRF0NKpttr0iEFL9EJFkPo
43
+ 2KKK8jr3QTDy229BBJGUxsJi6u6VwS8HlehpVQbV59kd7oKV/EBBx0XMg1fDlopT
44
+ PNbmN7i/zbIG4AsoOyebJZjL7kBzMn1e9vzKHWtcEHXlw/hZGja8vjooAQKBgAeg
45
+ xK2HLfg1mCyq5meN/yFQsENu0LzrT5UJzddPgcJw7zqLEqxIKNBAs7Ls8by3yFsL
46
+ PQwERa/0jfCl1M6kb9XQNpQa2pw6ANUsWKTDpUJn2wZ+9N3F1RaDwzMWyH5lRVmK
47
+ M0qoTfdjpSg5Jwgd75taWt4bxGJWeflSSv8z5R0BAoGAWL8c527AbeBvx2tOYKkD
48
+ 2TFranvANNcoMrbeviZSkkGvMNDP3p8b6juJwXOIeWNr8q4vFgCzLmq6d1/9gYm2
49
+ 3XJwwyD0LKlqzkBrrKU47qrnmMosUrIRlrAzd3HbShOptxc6Iz2apSaUDKGKXkaw
50
+ gl5OpEjeliU7Mus0BVS858g=
51
+ -----END PRIVATE KEY-----`
52
+ };
@@ -0,0 +1,17 @@
1
+ import ProgressEvent from '../event/events/ProgressEvent';
2
+ import EventTarget from '../event/EventTarget';
3
+
4
+ export type ProgressEventListener = (event: ProgressEvent) => void;
5
+
6
+ /**
7
+ * References: https://xhr.spec.whatwg.org/#xmlhttprequesteventtarget.
8
+ */
9
+ export default class XMLHttpRequestEventTarget extends EventTarget {
10
+ public onloadstart: ProgressEventListener | null = null;
11
+ public onprogress: ProgressEventListener | null = null;
12
+ public onabort: (event: ProgressEvent) => void | null = null;
13
+ public onerror: ProgressEventListener | null = null;
14
+ public onload: ProgressEventListener | null = null;
15
+ public ontimeout: ProgressEventListener | null = null;
16
+ public onloadend: ProgressEventListener | null = null;
17
+ }
@@ -0,0 +1,9 @@
1
+ enum XMLHttpRequestReadyStateEnum {
2
+ unsent = 0,
3
+ opened = 1,
4
+ headersRecieved = 2,
5
+ loading = 3,
6
+ done = 4
7
+ }
8
+
9
+ export default XMLHttpRequestReadyStateEnum;
@@ -0,0 +1,6 @@
1
+ import XMLHttpRequestEventTarget from './XMLHttpRequestEventTarget';
2
+
3
+ /**
4
+ * References: https://xhr.spec.whatwg.org/#xmlhttprequestupload.
5
+ */
6
+ export default class XMLHttpRequestUpload extends XMLHttpRequestEventTarget {}
@@ -0,0 +1,9 @@
1
+ enum XMLHttpResponseTypeEnum {
2
+ arraybuffer = 'arraybuffer',
3
+ blob = 'blob',
4
+ document = 'document',
5
+ json = 'json',
6
+ text = 'text'
7
+ }
8
+
9
+ export default XMLHttpResponseTypeEnum;
@@ -0,0 +1,53 @@
1
+ import HTTPS from 'https';
2
+
3
+ /**
4
+ * Synchroneous XMLHttpRequest script builder.
5
+ */
6
+ export default class XMLHttpRequestSyncRequestScriptBuilder {
7
+ /**
8
+ * Sends a synchronous request.
9
+ *
10
+ * @param options Options.
11
+ * @param ssl SSL.
12
+ * @param data Data.
13
+ */
14
+ public static getScript(options: HTTPS.RequestOptions, ssl: boolean, data?: string): string {
15
+ // Synchronous
16
+ // Note: console.log === stdout
17
+ // The async request the other Node process executes
18
+ return `
19
+ const HTTP = require('http');
20
+ const HTTPS = require('https');
21
+ const sendRequest = HTTP${ssl ? 'S' : ''}.request;
22
+ const options = ${JSON.stringify(options)};
23
+ const request = sendRequest(options, (response) => {
24
+ let responseText = '';
25
+ let responseData = Buffer.alloc(0);
26
+ response.setEncoding('utf8');
27
+ response.on('data', (chunk) => {
28
+ responseText += chunk;
29
+ responseData = Buffer.concat([responseData, Buffer.from(chunk)]);
30
+ });
31
+ response.on('end', () => {
32
+ console.log(JSON.stringify({
33
+ error: null,
34
+ data: {
35
+ statusCode: response.statusCode,
36
+ statusMessage: response.statusMessage,
37
+ headers: response.headers,
38
+ text: responseText,
39
+ data: responseData.toString('base64')
40
+ }
41
+ }));
42
+ });
43
+ response.on('error', (error) => {
44
+ console.log(JSON.stringify({ error: error.toString(), data: null }));
45
+ });
46
+ });
47
+ request.write(\`${JSON.stringify(data ?? '')
48
+ .slice(1, -1)
49
+ .replace(/'/g, "\\'")}\`);
50
+ request.end();
51
+ `;
52
+ }
53
+ }
@@ -0,0 +1,64 @@
1
+ import { URL } from 'url';
2
+
3
+ /**
4
+ * URL utility.
5
+ */
6
+ export default class XMLHttpRequestURLUtility {
7
+ /**
8
+ * Returns "true" if SSL.
9
+ *
10
+ * @param url URL.
11
+ * @returns "true" if SSL.
12
+ */
13
+ public static isSSL(url: URL): boolean {
14
+ return url.protocol === 'https:';
15
+ }
16
+
17
+ /**
18
+ * Returns "true" if SSL.
19
+ *
20
+ * @param url URL.
21
+ * @returns "true" if SSL.
22
+ */
23
+ public static isLocal(url: URL): boolean {
24
+ return url.protocol === 'file:';
25
+ }
26
+
27
+ /**
28
+ * Returns "true" if protocol is valid.
29
+ *
30
+ * @param url URL.
31
+ * @returns "true" if valid.
32
+ */
33
+ public static isSupportedProtocol(url: URL): boolean {
34
+ switch (url.protocol) {
35
+ case 'https:':
36
+ case 'http:':
37
+ case 'file:':
38
+ case undefined:
39
+ case '':
40
+ return true;
41
+ }
42
+
43
+ return false;
44
+ }
45
+
46
+ /**
47
+ * Returns host.
48
+ *
49
+ * @param url URL.
50
+ * @returns Host.
51
+ */
52
+ public static getHost(url: URL): string {
53
+ switch (url.protocol) {
54
+ case 'http:':
55
+ case 'https:':
56
+ return url.hostname;
57
+ case undefined:
58
+ case '':
59
+ return 'localhost';
60
+ default:
61
+ return null;
62
+ }
63
+ }
64
+ }
@@ -1,15 +0,0 @@
1
- import Location from '../location/Location';
2
- /**
3
- * Cookie utility.
4
- */
5
- export default class CookieUtility {
6
- /**
7
- * Returns a cookie string.
8
- *
9
- * @param location Location.
10
- * @param cookies Current cookie string.
11
- * @param newCookie New cookie string.
12
- * @returns Generated cookie string.
13
- */
14
- static getCookieString(location: Location, cookies: string, newCookie: any): string;
15
- }
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Cookie utility.
5
- */
6
- class CookieUtility {
7
- /**
8
- * Returns a cookie string.
9
- *
10
- * @param location Location.
11
- * @param cookies Current cookie string.
12
- * @param newCookie New cookie string.
13
- * @returns Generated cookie string.
14
- */
15
- static getCookieString(location, cookies, newCookie) {
16
- const newCookieParts = newCookie.split(';');
17
- const [newCookieName, newCookieValue] = newCookieParts.shift().trim().split('=');
18
- let isExpired = false;
19
- for (const part of newCookieParts) {
20
- const [key, value] = part.trim().split('=');
21
- switch (key.toLowerCase()) {
22
- case 'expires':
23
- const expires = new Date(value).getTime();
24
- const now = Date.now();
25
- if (expires < now) {
26
- isExpired = true;
27
- break;
28
- }
29
- break;
30
- case 'domain':
31
- const hostnameParts = location.hostname.split('.');
32
- if (hostnameParts.length > 2) {
33
- hostnameParts.shift();
34
- }
35
- const currentDomain = hostnameParts.join('.');
36
- if (!value.endsWith(currentDomain)) {
37
- return cookies;
38
- }
39
- break;
40
- case 'path':
41
- const pathname = location.pathname;
42
- const currentPath = pathname.startsWith('/') ? pathname.replace('/', '') : pathname;
43
- const path = value.startsWith('/') ? value.replace('/', '') : value;
44
- if (path && !currentPath.startsWith(path)) {
45
- return cookies;
46
- }
47
- break;
48
- case 'max-age':
49
- if (parseInt(value) <= 0) {
50
- return cookies;
51
- }
52
- break;
53
- }
54
- }
55
- const newCookies = [];
56
- if (cookies) {
57
- for (const cookie of cookies.split(';')) {
58
- const [name, value] = cookie.trim().split('=');
59
- if ((name && name !== newCookieName) ||
60
- (!value && newCookieValue) ||
61
- (value && !newCookieValue)) {
62
- if (value) {
63
- newCookies.push(`${name}=${value}`);
64
- }
65
- else {
66
- newCookies.push(name);
67
- }
68
- }
69
- }
70
- }
71
- if (!isExpired) {
72
- if (newCookieValue) {
73
- newCookies.push(`${newCookieName}=${newCookieValue}`);
74
- }
75
- else {
76
- newCookies.push(newCookieName);
77
- }
78
- }
79
- return newCookies.join('; ');
80
- }
81
- }
82
- exports.default = CookieUtility;
83
- //# sourceMappingURL=CookieUtility.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CookieUtility.js","sourceRoot":"","sources":["../../src/cookie/CookieUtility.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- /**
2
- *
3
- */
4
- export default class URL {
5
- protocol: string;
6
- hostname: string;
7
- port: string;
8
- pathname: string;
9
- search: string;
10
- hash: string;
11
- username: string;
12
- password: string;
13
- /**
14
- * Constructor.
15
- *
16
- * @param [url] URL.
17
- */
18
- constructor(url?: string);
19
- /**
20
- * Returns the entire URL as a string.
21
- *
22
- * @returns Href.
23
- */
24
- get href(): string;
25
- /**
26
- * Sets the href.
27
- *
28
- * @param url URL.
29
- */
30
- set href(url: string);
31
- /**
32
- * Returns the origin.
33
- *
34
- * @returns HREF.
35
- */
36
- get origin(): string;
37
- /**
38
- * Returns the entire URL as a string.
39
- *
40
- * @returns Host.
41
- */
42
- get host(): string;
43
- /**
44
- * Returns the entire URL as a string.
45
- */
46
- toString(): string;
47
- /**
48
- * Parses an URL.
49
- *
50
- * @param url URL.
51
- */
52
- protected parse(url: string): void;
53
- }
@@ -1,96 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const URL_REGEXP = /(https?:)\/\/([-a-zA-Z0-9@:%._\+~#=]{2,256}[a-z]{2,6})(:[0-9]*)?([-a-zA-Z0-9@:%_\+.~c&//=]*)(\?[^#]*)?(#.*)?/;
4
- const PATH_REGEXP = /([-a-zA-Z0-9@:%_\+.~c&//=]*)(\?[^#]*)?(#.*)?/;
5
- /**
6
- *
7
- */
8
- class URL {
9
- /**
10
- * Constructor.
11
- *
12
- * @param [url] URL.
13
- */
14
- constructor(url) {
15
- this.protocol = '';
16
- this.hostname = '';
17
- this.port = '';
18
- this.pathname = '';
19
- this.search = '';
20
- this.hash = '';
21
- this.username = '';
22
- this.password = '';
23
- if (url) {
24
- this.parse(url);
25
- }
26
- }
27
- /**
28
- * Returns the entire URL as a string.
29
- *
30
- * @returns Href.
31
- */
32
- get href() {
33
- const credentials = this.username ? `${this.username}:${this.password}@` : '';
34
- return this.protocol + '//' + credentials + this.host + this.pathname + this.search + this.hash;
35
- }
36
- /**
37
- * Sets the href.
38
- *
39
- * @param url URL.
40
- */
41
- set href(url) {
42
- this.parse(url);
43
- }
44
- /**
45
- * Returns the origin.
46
- *
47
- * @returns HREF.
48
- */
49
- get origin() {
50
- return this.protocol + '//' + this.host;
51
- }
52
- /**
53
- * Returns the entire URL as a string.
54
- *
55
- * @returns Host.
56
- */
57
- get host() {
58
- return this.hostname + this.port;
59
- }
60
- /**
61
- * Returns the entire URL as a string.
62
- */
63
- toString() {
64
- return this.href;
65
- }
66
- /**
67
- * Parses an URL.
68
- *
69
- * @param url URL.
70
- */
71
- parse(url) {
72
- const match = url.match(URL_REGEXP);
73
- if (match) {
74
- const hostnamePart = match[2] ? match[2].split('@') : '';
75
- const credentialsPart = hostnamePart.length > 1 ? hostnamePart[0].split(':') : null;
76
- this.protocol = match[1] || '';
77
- this.hostname = hostnamePart.length > 1 ? hostnamePart[1] : hostnamePart[0];
78
- this.port = match[3] || '';
79
- this.pathname = match[4] || '/';
80
- this.search = match[5] || '';
81
- this.hash = match[6] || '';
82
- this.username = credentialsPart ? credentialsPart[0] : '';
83
- this.password = credentialsPart ? credentialsPart[1] : '';
84
- }
85
- else {
86
- const pathMatch = url.match(PATH_REGEXP);
87
- if (pathMatch) {
88
- this.pathname = pathMatch[1] || '';
89
- this.search = pathMatch[2] || '';
90
- this.hash = pathMatch[3] || '';
91
- }
92
- }
93
- }
94
- }
95
- exports.default = URL;
96
- //# sourceMappingURL=URL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"URL.js","sourceRoot":"","sources":["../../src/location/URL.ts"],"names":[],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- import Location from '../location/Location';
2
-
3
- /**
4
- * Cookie utility.
5
- */
6
- export default class CookieUtility {
7
- /**
8
- * Returns a cookie string.
9
- *
10
- * @param location Location.
11
- * @param cookies Current cookie string.
12
- * @param newCookie New cookie string.
13
- * @returns Generated cookie string.
14
- */
15
- public static getCookieString(location: Location, cookies: string, newCookie): string {
16
- const newCookieParts = newCookie.split(';');
17
- const [newCookieName, newCookieValue] = newCookieParts.shift().trim().split('=');
18
- let isExpired = false;
19
-
20
- for (const part of newCookieParts) {
21
- const [key, value] = part.trim().split('=');
22
-
23
- switch (key.toLowerCase()) {
24
- case 'expires':
25
- const expires = new Date(value).getTime();
26
- const now = Date.now();
27
- if (expires < now) {
28
- isExpired = true;
29
- break;
30
- }
31
- break;
32
- case 'domain':
33
- const hostnameParts = location.hostname.split('.');
34
- if (hostnameParts.length > 2) {
35
- hostnameParts.shift();
36
- }
37
- const currentDomain = hostnameParts.join('.');
38
- if (!value.endsWith(currentDomain)) {
39
- return cookies;
40
- }
41
- break;
42
- case 'path':
43
- const pathname = location.pathname;
44
- const currentPath = pathname.startsWith('/') ? pathname.replace('/', '') : pathname;
45
- const path = value.startsWith('/') ? value.replace('/', '') : value;
46
- if (path && !currentPath.startsWith(path)) {
47
- return cookies;
48
- }
49
- break;
50
- case 'max-age':
51
- if (parseInt(value) <= 0) {
52
- return cookies;
53
- }
54
- break;
55
- }
56
- }
57
-
58
- const newCookies = [];
59
-
60
- if (cookies) {
61
- for (const cookie of cookies.split(';')) {
62
- const [name, value] = cookie.trim().split('=');
63
- if (
64
- (name && name !== newCookieName) ||
65
- (!value && newCookieValue) ||
66
- (value && !newCookieValue)
67
- ) {
68
- if (value) {
69
- newCookies.push(`${name}=${value}`);
70
- } else {
71
- newCookies.push(name);
72
- }
73
- }
74
- }
75
- }
76
-
77
- if (!isExpired) {
78
- if (newCookieValue) {
79
- newCookies.push(`${newCookieName}=${newCookieValue}`);
80
- } else {
81
- newCookies.push(newCookieName);
82
- }
83
- }
84
-
85
- return newCookies.join('; ');
86
- }
87
- }
@@ -1,102 +0,0 @@
1
- const URL_REGEXP =
2
- /(https?:)\/\/([-a-zA-Z0-9@:%._\+~#=]{2,256}[a-z]{2,6})(:[0-9]*)?([-a-zA-Z0-9@:%_\+.~c&//=]*)(\?[^#]*)?(#.*)?/;
3
- const PATH_REGEXP = /([-a-zA-Z0-9@:%_\+.~c&//=]*)(\?[^#]*)?(#.*)?/;
4
-
5
- /**
6
- *
7
- */
8
- export default class URL {
9
- public protocol = '';
10
- public hostname = '';
11
- public port = '';
12
- public pathname = '';
13
- public search = '';
14
- public hash = '';
15
- public username = '';
16
- public password = '';
17
-
18
- /**
19
- * Constructor.
20
- *
21
- * @param [url] URL.
22
- */
23
- constructor(url?: string) {
24
- if (url) {
25
- this.parse(url);
26
- }
27
- }
28
-
29
- /**
30
- * Returns the entire URL as a string.
31
- *
32
- * @returns Href.
33
- */
34
- public get href(): string {
35
- const credentials = this.username ? `${this.username}:${this.password}@` : '';
36
- return this.protocol + '//' + credentials + this.host + this.pathname + this.search + this.hash;
37
- }
38
-
39
- /**
40
- * Sets the href.
41
- *
42
- * @param url URL.
43
- */
44
- public set href(url: string) {
45
- this.parse(url);
46
- }
47
-
48
- /**
49
- * Returns the origin.
50
- *
51
- * @returns HREF.
52
- */
53
- public get origin(): string {
54
- return this.protocol + '//' + this.host;
55
- }
56
-
57
- /**
58
- * Returns the entire URL as a string.
59
- *
60
- * @returns Host.
61
- */
62
- public get host(): string {
63
- return this.hostname + this.port;
64
- }
65
-
66
- /**
67
- * Returns the entire URL as a string.
68
- */
69
- public toString(): string {
70
- return this.href;
71
- }
72
-
73
- /**
74
- * Parses an URL.
75
- *
76
- * @param url URL.
77
- */
78
- protected parse(url: string): void {
79
- const match = url.match(URL_REGEXP);
80
-
81
- if (match) {
82
- const hostnamePart = match[2] ? match[2].split('@') : '';
83
- const credentialsPart = hostnamePart.length > 1 ? hostnamePart[0].split(':') : null;
84
-
85
- this.protocol = match[1] || '';
86
- this.hostname = hostnamePart.length > 1 ? hostnamePart[1] : hostnamePart[0];
87
- this.port = match[3] || '';
88
- this.pathname = match[4] || '/';
89
- this.search = match[5] || '';
90
- this.hash = match[6] || '';
91
- this.username = credentialsPart ? credentialsPart[0] : '';
92
- this.password = credentialsPart ? credentialsPart[1] : '';
93
- } else {
94
- const pathMatch = url.match(PATH_REGEXP);
95
- if (pathMatch) {
96
- this.pathname = pathMatch[1] || '';
97
- this.search = pathMatch[2] || '';
98
- this.hash = pathMatch[3] || '';
99
- }
100
- }
101
- }
102
- }