@loaders.gl/polyfills 4.0.0-alpha.5 → 4.0.0-alpha.6

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 (170) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +268 -55
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/index.js +103 -0
  6. package/dist/es5/index.js.map +1 -0
  7. package/dist/es5/lib/encoding-indexes.js +37 -0
  8. package/dist/es5/lib/encoding-indexes.js.map +1 -0
  9. package/dist/es5/lib/encoding.js +1214 -0
  10. package/dist/es5/lib/encoding.js.map +1 -0
  11. package/dist/es5/libs/encoding-indexes-asian.js +13 -0
  12. package/dist/es5/node/buffer/btoa.node.js +14 -0
  13. package/dist/es5/node/buffer/btoa.node.js.map +1 -0
  14. package/dist/es5/node/buffer/to-array-buffer.node.js +14 -0
  15. package/dist/es5/node/buffer/to-array-buffer.node.js.map +1 -0
  16. package/dist/es5/node/fetch/fetch-file.node.js +83 -0
  17. package/dist/es5/node/fetch/fetch-file.node.js.map +1 -0
  18. package/dist/es5/node/fetch/fetch.node.js +194 -0
  19. package/dist/es5/node/fetch/fetch.node.js.map +1 -0
  20. package/dist/es5/node/fetch/headers.node.js +151 -0
  21. package/dist/es5/node/fetch/headers.node.js.map +1 -0
  22. package/dist/es5/node/fetch/response.node.js +182 -0
  23. package/dist/es5/node/fetch/response.node.js.map +1 -0
  24. package/dist/es5/node/fetch/utils/decode-data-uri.node.js +58 -0
  25. package/dist/es5/node/fetch/utils/decode-data-uri.node.js.map +1 -0
  26. package/dist/es5/node/fetch/utils/stream-utils.node.js +92 -0
  27. package/dist/es5/node/fetch/utils/stream-utils.node.js.map +1 -0
  28. package/dist/es5/node/file/blob-stream-controller.js +90 -0
  29. package/dist/es5/node/file/blob-stream-controller.js.map +1 -0
  30. package/dist/es5/node/file/blob-stream.js +64 -0
  31. package/dist/es5/node/file/blob-stream.js.map +1 -0
  32. package/dist/es5/node/file/blob.js +212 -0
  33. package/dist/es5/node/file/blob.js.map +1 -0
  34. package/dist/es5/node/file/file-reader.js +153 -0
  35. package/dist/es5/node/file/file-reader.js.map +1 -0
  36. package/dist/es5/node/file/file.js +44 -0
  37. package/dist/es5/node/file/file.js.map +1 -0
  38. package/dist/es5/node/file/install-file-polyfills.js +25 -0
  39. package/dist/es5/node/file/install-file-polyfills.js.map +1 -0
  40. package/dist/es5/node/file/readable-stream.js +27 -0
  41. package/dist/es5/node/file/readable-stream.js.map +1 -0
  42. package/dist/es5/node/images/encode-image.node.js +30 -0
  43. package/dist/es5/node/images/encode-image.node.js.map +1 -0
  44. package/dist/es5/node/images/parse-image.node.js +64 -0
  45. package/dist/es5/node/images/parse-image.node.js.map +1 -0
  46. package/dist/es5/promise/all-settled.js +28 -0
  47. package/dist/es5/promise/all-settled.js.map +1 -0
  48. package/dist/es5/utils/assert.js +12 -0
  49. package/dist/es5/utils/assert.js.map +1 -0
  50. package/dist/es5/utils/globals.js +18 -0
  51. package/dist/es5/utils/globals.js.map +1 -0
  52. package/dist/esm/bundle.js +4 -0
  53. package/dist/esm/bundle.js.map +1 -0
  54. package/dist/esm/index.js +54 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/lib/encoding-indexes.js +30 -0
  57. package/dist/esm/lib/encoding-indexes.js.map +1 -0
  58. package/dist/esm/lib/encoding.js +1206 -0
  59. package/dist/esm/lib/encoding.js.map +1 -0
  60. package/dist/esm/libs/encoding-indexes-asian.js +13 -0
  61. package/dist/esm/node/buffer/btoa.node.js +7 -0
  62. package/dist/esm/node/buffer/btoa.node.js.map +1 -0
  63. package/dist/esm/node/buffer/to-array-buffer.node.js +8 -0
  64. package/dist/esm/node/buffer/to-array-buffer.node.js.map +1 -0
  65. package/dist/esm/node/fetch/fetch-file.node.js +50 -0
  66. package/dist/esm/node/fetch/fetch-file.node.js.map +1 -0
  67. package/dist/esm/node/fetch/fetch.node.js +126 -0
  68. package/dist/esm/node/fetch/fetch.node.js.map +1 -0
  69. package/dist/esm/node/fetch/headers.node.js +102 -0
  70. package/dist/esm/node/fetch/headers.node.js.map +1 -0
  71. package/dist/esm/node/fetch/response.node.js +67 -0
  72. package/dist/esm/node/fetch/response.node.js.map +1 -0
  73. package/dist/esm/node/fetch/utils/decode-data-uri.node.js +45 -0
  74. package/dist/esm/node/fetch/utils/decode-data-uri.node.js.map +1 -0
  75. package/dist/esm/node/fetch/utils/stream-utils.node.js +43 -0
  76. package/dist/esm/node/fetch/utils/stream-utils.node.js.map +1 -0
  77. package/dist/esm/node/file/blob-stream-controller.js +44 -0
  78. package/dist/esm/node/file/blob-stream-controller.js.map +1 -0
  79. package/dist/esm/node/file/blob-stream.js +20 -0
  80. package/dist/esm/node/file/blob-stream.js.map +1 -0
  81. package/dist/esm/node/file/blob.js +120 -0
  82. package/dist/esm/node/file/blob.js.map +1 -0
  83. package/dist/esm/node/file/file-reader.js +60 -0
  84. package/dist/esm/node/file/file-reader.js.map +1 -0
  85. package/dist/esm/node/file/file.js +19 -0
  86. package/dist/esm/node/file/file.js.map +1 -0
  87. package/dist/esm/node/file/install-file-polyfills.js +19 -0
  88. package/dist/esm/node/file/install-file-polyfills.js.map +1 -0
  89. package/dist/esm/node/file/readable-stream.js +4 -0
  90. package/dist/esm/node/file/readable-stream.js.map +1 -0
  91. package/dist/esm/node/images/encode-image.node.js +20 -0
  92. package/dist/esm/node/images/encode-image.node.js.map +1 -0
  93. package/dist/esm/node/images/parse-image.node.js +29 -0
  94. package/dist/esm/node/images/parse-image.node.js.map +1 -0
  95. package/dist/esm/promise/all-settled.js +19 -0
  96. package/dist/esm/promise/all-settled.js.map +1 -0
  97. package/dist/esm/utils/assert.js +6 -0
  98. package/dist/esm/utils/assert.js.map +1 -0
  99. package/dist/esm/utils/globals.js +9 -0
  100. package/dist/esm/utils/globals.js.map +1 -0
  101. package/dist/index.d.ts +2 -0
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +90 -49
  104. package/dist/lib/encoding-indexes.js +34 -29
  105. package/dist/lib/encoding.js +2610 -1281
  106. package/dist/libs/encoding-indexes-asian.d.ts +1 -1
  107. package/dist/libs/encoding-indexes-asian.js +9 -8
  108. package/dist/node/buffer/btoa.node.js +12 -5
  109. package/dist/node/buffer/to-array-buffer.node.js +11 -8
  110. package/dist/node/fetch/fetch-file.node.d.ts +4 -0
  111. package/dist/node/fetch/fetch-file.node.d.ts.map +1 -0
  112. package/dist/node/fetch/fetch-file.node.js +51 -0
  113. package/dist/node/fetch/fetch.node.d.ts +6 -1
  114. package/dist/node/fetch/fetch.node.d.ts.map +1 -1
  115. package/dist/node/fetch/fetch.node.js +128 -111
  116. package/dist/node/fetch/headers.node.d.ts +1 -1
  117. package/dist/node/fetch/headers.node.d.ts.map +1 -1
  118. package/dist/node/fetch/headers.node.js +95 -114
  119. package/dist/node/fetch/response.node.d.ts +2 -2
  120. package/dist/node/fetch/response.node.d.ts.map +1 -1
  121. package/dist/node/fetch/response.node.js +72 -84
  122. package/dist/node/fetch/utils/decode-data-uri.node.js +63 -53
  123. package/dist/node/fetch/utils/stream-utils.node.d.ts +8 -1
  124. package/dist/node/fetch/utils/stream-utils.node.d.ts.map +1 -1
  125. package/dist/node/fetch/utils/stream-utils.node.js +68 -93
  126. package/dist/node/file/blob-stream-controller.js +59 -52
  127. package/dist/node/file/blob-stream.js +36 -25
  128. package/dist/node/file/blob.js +151 -131
  129. package/dist/node/file/file-reader.js +28 -77
  130. package/dist/node/file/file.js +36 -25
  131. package/dist/node/file/install-file-polyfills.js +26 -21
  132. package/dist/node/file/readable-stream.js +10 -3
  133. package/dist/node/images/encode-image.node.js +38 -17
  134. package/dist/node/images/parse-image.node.d.ts +3 -1
  135. package/dist/node/images/parse-image.node.d.ts.map +1 -1
  136. package/dist/node/images/parse-image.node.js +40 -19
  137. package/dist/promise/all-settled.js +22 -17
  138. package/dist/utils/assert.js +8 -5
  139. package/dist/utils/globals.js +34 -7
  140. package/package.json +5 -4
  141. package/src/index.ts +7 -4
  142. package/src/node/fetch/fetch-file.node.ts +51 -0
  143. package/src/node/fetch/fetch.node.ts +64 -30
  144. package/src/node/fetch/headers.node.ts +1 -1
  145. package/src/node/fetch/response.node.ts +4 -2
  146. package/src/node/fetch/utils/stream-utils.node.ts +10 -58
  147. package/src/node/images/parse-image.node.ts +35 -20
  148. package/dist/bundle.js.map +0 -1
  149. package/dist/index.js.map +0 -1
  150. package/dist/lib/encoding-indexes.js.map +0 -1
  151. package/dist/lib/encoding.js.map +0 -1
  152. package/dist/node/buffer/btoa.node.js.map +0 -1
  153. package/dist/node/buffer/to-array-buffer.node.js.map +0 -1
  154. package/dist/node/fetch/fetch.node.js.map +0 -1
  155. package/dist/node/fetch/headers.node.js.map +0 -1
  156. package/dist/node/fetch/response.node.js.map +0 -1
  157. package/dist/node/fetch/utils/decode-data-uri.node.js.map +0 -1
  158. package/dist/node/fetch/utils/stream-utils.node.js.map +0 -1
  159. package/dist/node/file/blob-stream-controller.js.map +0 -1
  160. package/dist/node/file/blob-stream.js.map +0 -1
  161. package/dist/node/file/blob.js.map +0 -1
  162. package/dist/node/file/file-reader.js.map +0 -1
  163. package/dist/node/file/file.js.map +0 -1
  164. package/dist/node/file/install-file-polyfills.js.map +0 -1
  165. package/dist/node/file/readable-stream.js.map +0 -1
  166. package/dist/node/images/encode-image.node.js.map +0 -1
  167. package/dist/node/images/parse-image.node.js.map +0 -1
  168. package/dist/promise/all-settled.js.map +0 -1
  169. package/dist/utils/assert.js.map +0 -1
  170. package/dist/utils/globals.js.map +0 -1
@@ -1,7 +1,14 @@
1
- export function atob(string) {
2
- return Buffer.from(string).toString('base64');
1
+ "use strict";
2
+ // btoa, atob polyfills for Node.js
3
+ // Note: The atob and btoa functions (not just the polyfills!) are not unicode safe
4
+ // But still useful for unit testing
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.btoa = exports.atob = void 0;
7
+ function atob(string) {
8
+ return Buffer.from(string).toString('base64');
3
9
  }
4
- export function btoa(base64) {
5
- return Buffer.from(base64, 'base64').toString('ascii');
10
+ exports.atob = atob;
11
+ function btoa(base64) {
12
+ return Buffer.from(base64, 'base64').toString('ascii');
6
13
  }
7
- //# sourceMappingURL=btoa.node.js.map
14
+ exports.btoa = btoa;
@@ -1,9 +1,12 @@
1
- export function bufferToArrayBuffer(buffer) {
2
- if (Buffer.isBuffer(buffer)) {
3
- const typedArray = new Uint8Array(buffer);
4
- return typedArray.buffer;
5
- }
6
-
7
- return buffer;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bufferToArrayBuffer = void 0;
4
+ function bufferToArrayBuffer(buffer) {
5
+ // TODO - per docs we should just be able to call buffer.buffer, but there are issues
6
+ if (Buffer.isBuffer(buffer)) {
7
+ const typedArray = new Uint8Array(buffer);
8
+ return typedArray.buffer;
9
+ }
10
+ return buffer;
8
11
  }
9
- //# sourceMappingURL=to-array-buffer.node.js.map
12
+ exports.bufferToArrayBuffer = bufferToArrayBuffer;
@@ -0,0 +1,4 @@
1
+ import { Response } from './response.node';
2
+ export declare function isRequestURL(url: string): boolean;
3
+ export declare function fetchFileNode(url: string, options: any): Promise<Response>;
4
+ //# sourceMappingURL=fetch-file.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-file.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/fetch-file.node.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAGzC,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,KAAA,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsB3E"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ // loaders.gl, MIT license
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.fetchFileNode = exports.isRequestURL = void 0;
8
+ const fs_1 = __importDefault(require("fs")); // `fs` will be empty object in browsers (see package.json "browser" field).
9
+ const response_node_1 = require("./response.node");
10
+ const headers_node_1 = require("./headers.node");
11
+ function isRequestURL(url) {
12
+ return url.startsWith('http:') || url.startsWith('https:');
13
+ }
14
+ exports.isRequestURL = isRequestURL;
15
+ async function fetchFileNode(url, options) {
16
+ const noqueryUrl = url.split('?')[0];
17
+ try {
18
+ // Now open the stream
19
+ const body = await new Promise((resolve, reject) => {
20
+ // @ts-ignore
21
+ const stream = fs_1.default.createReadStream(noqueryUrl, { encoding: null });
22
+ stream.once('readable', () => resolve(stream));
23
+ stream.on('error', (error) => reject(error));
24
+ });
25
+ const status = 200;
26
+ const statusText = 'OK';
27
+ const headers = getHeadersForFile(noqueryUrl);
28
+ return new response_node_1.Response(body, { headers, status, statusText, url });
29
+ }
30
+ catch (error) {
31
+ const status = 400;
32
+ const statusText = error.message;
33
+ const headers = {};
34
+ return new response_node_1.Response(error.message, { headers, status, statusText, url });
35
+ }
36
+ }
37
+ exports.fetchFileNode = fetchFileNode;
38
+ function getHeadersForFile(noqueryUrl) {
39
+ const headers = {};
40
+ // Fix up content length if we can for best progress experience
41
+ if (!headers['content-length']) {
42
+ const stats = fs_1.default.statSync(noqueryUrl);
43
+ headers['content-length'] = stats.size;
44
+ }
45
+ // Automatically decompress gzipped files with .gz extension
46
+ if (noqueryUrl.endsWith('.gz')) {
47
+ noqueryUrl = noqueryUrl.slice(0, -3);
48
+ headers['content-encoding'] = 'gzip';
49
+ }
50
+ return new headers_node_1.Headers(headers);
51
+ }
@@ -1,7 +1,12 @@
1
+ /// <reference types="node" />
2
+ import http from 'http';
3
+ import { Response } from './response.node';
1
4
  /**
2
5
  * Emulation of Browser fetch for Node.js
3
6
  * @param url
4
7
  * @param options
5
8
  */
6
- export default function fetchNode(url: any, options: any): any;
9
+ export declare function fetchNode(url: string, options: any): Promise<Response>;
10
+ /** Returns a promise that resolves to a readable stream */
11
+ export declare function createHTTPRequestReadStream(url: string, options: any): Promise<http.IncomingMessage>;
7
12
  //# sourceMappingURL=fetch.node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/fetch.node.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAA8B,SAAS,CAAC,GAAG,KAAA,EAAE,OAAO,KAAA,OAwCnD"}
1
+ {"version":3,"file":"fetch.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/fetch.node.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AASzC;;;;GAIG;AAEH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,KAAA,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6CvE;AAED,2DAA2D;AAC3D,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,OAAO,KAAA,GACN,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAW/B"}
@@ -1,126 +1,143 @@
1
- import fs from 'fs';
2
- import Response from './response.node';
3
- import Headers from './headers.node';
4
- import { decodeDataUri } from './utils/decode-data-uri.node';
5
- import { createReadStream } from './utils/stream-utils.node';
6
-
7
- const isDataURL = url => url.startsWith('data:');
8
-
9
- const isRequestURL = url => url.startsWith('http:') || url.startsWith('https:');
10
-
11
- export default async function fetchNode(url, options) {
12
- try {
13
- if (isDataURL(url)) {
14
- const {
15
- arrayBuffer,
16
- mimeType
17
- } = decodeDataUri(url);
18
- const response = new Response(arrayBuffer, {
19
- headers: {
20
- 'content-type': mimeType
21
- },
22
- url
23
- });
24
- return response;
1
+ "use strict";
2
+ // loaders.gl, MIT license
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createHTTPRequestReadStream = exports.fetchNode = void 0;
8
+ const http_1 = __importDefault(require("http"));
9
+ const https_1 = __importDefault(require("https"));
10
+ const response_node_1 = require("./response.node");
11
+ const headers_node_1 = require("./headers.node");
12
+ const decode_data_uri_node_1 = require("./utils/decode-data-uri.node");
13
+ const fetch_file_node_1 = require("./fetch-file.node");
14
+ const isDataURL = (url) => url.startsWith('data:');
15
+ const isRequestURL = (url) => url.startsWith('http:') || url.startsWith('https:');
16
+ /**
17
+ * Emulation of Browser fetch for Node.js
18
+ * @param url
19
+ * @param options
20
+ */
21
+ // eslint-disable-next-line complexity
22
+ async function fetchNode(url, options) {
23
+ try {
24
+ // Handle file streams in node
25
+ if (!isRequestURL(url) && !isDataURL(url)) {
26
+ return await (0, fetch_file_node_1.fetchFileNode)(url, options);
27
+ }
28
+ // Handle data urls in node, to match `fetch``
29
+ // Note - this loses the MIME type, data URIs are handled directly in fetch
30
+ if (isDataURL(url)) {
31
+ const { arrayBuffer, mimeType } = (0, decode_data_uri_node_1.decodeDataUri)(url);
32
+ const response = new response_node_1.Response(arrayBuffer, {
33
+ headers: { 'content-type': mimeType },
34
+ url
35
+ });
36
+ return response;
37
+ }
38
+ // Automatically decompress gzipped files with .gz extension
39
+ const syntheticResponseHeaders = {};
40
+ const originalUrl = url;
41
+ if (url.endsWith('.gz')) {
42
+ url = url.slice(0, -3);
43
+ syntheticResponseHeaders['content-encoding'] = 'gzip';
44
+ }
45
+ // Need to create the stream in advance since Response constructor needs to be sync
46
+ const body = await createHTTPRequestReadStream(originalUrl, options);
47
+ const headers = getHeaders(url, body, syntheticResponseHeaders);
48
+ const { status, statusText } = getStatus(body);
49
+ const followRedirect = !options || options.followRedirect || options.followRedirect === undefined;
50
+ if (status >= 300 && status < 400 && headers.has('location') && followRedirect) {
51
+ const redirectUrl = generateRedirectUrl(url, headers.get('location'));
52
+ // Redirect
53
+ return await fetchNode(redirectUrl, options);
54
+ }
55
+ return new response_node_1.Response(body, { headers, status, statusText, url });
25
56
  }
26
-
27
- const syntheticResponseHeaders = {};
28
- const originalUrl = url;
29
-
30
- if (url.endsWith('.gz')) {
31
- url = url.slice(0, -3);
32
- syntheticResponseHeaders['content-encoding'] = 'gzip';
57
+ catch (error) {
58
+ // TODO - what error code to use here?
59
+ return new response_node_1.Response(null, { status: 400, statusText: String(error), url });
33
60
  }
34
-
35
- const body = await createReadStream(originalUrl, options);
36
- const headers = getHeaders(url, body, syntheticResponseHeaders);
37
- const {
38
- status,
39
- statusText
40
- } = getStatus(body);
41
- const followRedirect = !options || options.followRedirect || options.followRedirect === undefined;
42
-
43
- if (status >= 300 && status < 400 && headers.has('location') && followRedirect) {
44
- const redirectUrl = generateRedirectUrl(url, headers.get('location'));
45
- return await fetchNode(redirectUrl, options);
46
- }
47
-
48
- return new Response(body, {
49
- headers,
50
- status,
51
- statusText,
52
- url
53
- });
54
- } catch (error) {
55
- return new Response(null, {
56
- status: 400,
57
- statusText: String(error),
58
- url
61
+ }
62
+ exports.fetchNode = fetchNode;
63
+ /** Returns a promise that resolves to a readable stream */
64
+ async function createHTTPRequestReadStream(url, options) {
65
+ // HANDLE HTTP/HTTPS REQUESTS IN NODE
66
+ // TODO: THIS IS BAD SINCE WE RETURN A PROMISE INSTEAD OF A STREAM
67
+ return await new Promise((resolve, reject) => {
68
+ const requestOptions = getRequestOptions(url, options);
69
+ const req = url.startsWith('https:')
70
+ ? https_1.default.request(requestOptions, (res) => resolve(res))
71
+ : http_1.default.request(requestOptions, (res) => resolve(res));
72
+ req.on('error', (error) => reject(error));
73
+ req.end();
59
74
  });
60
- }
61
75
  }
62
-
76
+ exports.createHTTPRequestReadStream = createHTTPRequestReadStream;
77
+ /**
78
+ * Generate redirect url from location without origin and protocol.
79
+ * @param originalUrl
80
+ * @param redirectUrl
81
+ */
63
82
  function generateRedirectUrl(originalUrl, location) {
64
- if (location.startsWith('http')) {
65
- return location;
66
- }
67
-
68
- const url = new URL(originalUrl);
69
- url.pathname = location;
70
- return url.href;
83
+ if (location.startsWith('http')) {
84
+ return location;
85
+ }
86
+ // If url doesn't have origin and protocol just extend current url origin with location.
87
+ const url = new URL(originalUrl);
88
+ url.pathname = location;
89
+ return url.href;
71
90
  }
72
-
73
- function getStatus(httpResponse) {
74
- if (httpResponse.statusCode) {
91
+ // HELPER FUNCTIONS
92
+ function getRequestOptions(url, options) {
93
+ // Ensure header keys are lower case so that we can merge without duplicates
94
+ const originalHeaders = options?.headers || {};
95
+ const headers = {};
96
+ for (const key of Object.keys(originalHeaders)) {
97
+ headers[key.toLowerCase()] = originalHeaders[key];
98
+ }
99
+ // Add default accept-encoding to headers
100
+ headers['accept-encoding'] = headers['accept-encoding'] || 'gzip,br,deflate';
101
+ const urlObject = new URL(url);
75
102
  return {
76
- status: httpResponse.statusCode,
77
- statusText: httpResponse.statusMessage || 'NA'
103
+ hostname: urlObject.hostname,
104
+ path: urlObject.pathname,
105
+ method: 'GET',
106
+ // Add options and user provided 'options.fetch' overrides if available
107
+ ...options,
108
+ ...options?.fetch,
109
+ // Override with updated headers with accepted encodings:
110
+ headers,
111
+ port: urlObject.port
78
112
  };
79
- }
80
-
81
- return {
82
- status: 200,
83
- statusText: 'OK'
84
- };
85
113
  }
86
-
114
+ function getStatus(httpResponse) {
115
+ if (httpResponse.statusCode) {
116
+ return { status: httpResponse.statusCode, statusText: httpResponse.statusMessage || 'NA' };
117
+ }
118
+ return { status: 200, statusText: 'OK' };
119
+ }
87
120
  function getHeaders(url, httpResponse, additionalHeaders = {}) {
88
- const headers = {};
89
-
90
- if (httpResponse && httpResponse.headers) {
91
- const httpHeaders = httpResponse.headers;
92
-
93
- for (const key in httpHeaders) {
94
- const header = httpHeaders[key];
95
- headers[key.toLowerCase()] = String(header);
121
+ const headers = {};
122
+ if (httpResponse && httpResponse.headers) {
123
+ const httpHeaders = httpResponse.headers;
124
+ for (const key in httpHeaders) {
125
+ const header = httpHeaders[key];
126
+ headers[key.toLowerCase()] = String(header);
127
+ }
96
128
  }
97
- }
98
-
99
- if (!headers['content-length']) {
100
- const contentLength = getContentLength(url);
101
-
102
- if (Number.isFinite(contentLength)) {
103
- headers['content-length'] = contentLength;
129
+ // Fix up content length if we can for best progress experience
130
+ if (!headers['content-length']) {
131
+ const contentLength = getContentLength(url);
132
+ if (Number.isFinite(contentLength)) {
133
+ headers['content-length'] = contentLength;
134
+ }
104
135
  }
105
- }
106
-
107
- Object.assign(headers, additionalHeaders);
108
- return new Headers(headers);
136
+ Object.assign(headers, additionalHeaders);
137
+ return new headers_node_1.Headers(headers);
109
138
  }
110
-
139
+ /** Needs to be read from actual headers */
111
140
  function getContentLength(url) {
112
- if (isRequestURL(url)) {
113
- return null;
114
- } else if (isDataURL(url)) {
115
- return url.length - 'data:'.length;
116
- }
117
-
118
- try {
119
- const noqueryUrl = url.split('?')[0];
120
- const stats = fs.statSync(noqueryUrl);
121
- return stats.size;
122
- } catch (error) {}
123
-
124
- return null;
141
+ // TODO - remove media type etc
142
+ return isDataURL(url) ? url.length - 'data:'.length : null;
125
143
  }
126
- //# sourceMappingURL=fetch.node.js.map
@@ -2,7 +2,7 @@
2
2
  * Polyfill for Browser Headers
3
3
  * Based on https://github.com/github/fetch under MIT license
4
4
  */
5
- export default class Headers {
5
+ export declare class Headers {
6
6
  map: {};
7
7
  constructor(headers: any);
8
8
  append(name: any, value: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"headers.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/headers.node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,GAAG,EAAE,EAAE,CAAC;gBAEI,OAAO,KAAA;IAYnB,MAAM,CAAC,IAAI,KAAA,EAAE,KAAK,KAAA;IAOlB,MAAM,CAAC,IAAI,KAAA;IAIX,GAAG,CAAC,IAAI,KAAA;IAKR,GAAG,CAAC,IAAI,KAAA;IAIR,GAAG,CAAC,IAAI,KAAA,EAAE,KAAK,KAAA;IAIf,OAAO,CAAC,OAAO,KAAA,EAAE,OAAO,OAAO;IAY/B,IAAI;;;;;;IAQJ,MAAM;;;;;;IAQN,OAAO;;;;;;IAQN,CAAC,MAAM,CAAC,QAAQ,CAAC;CAInB"}
1
+ {"version":3,"file":"headers.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/headers.node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,OAAO;IAClB,GAAG,EAAE,EAAE,CAAC;gBAEI,OAAO,KAAA;IAYnB,MAAM,CAAC,IAAI,KAAA,EAAE,KAAK,KAAA;IAOlB,MAAM,CAAC,IAAI,KAAA;IAIX,GAAG,CAAC,IAAI,KAAA;IAKR,GAAG,CAAC,IAAI,KAAA;IAIR,GAAG,CAAC,IAAI,KAAA,EAAE,KAAK,KAAA;IAIf,OAAO,CAAC,OAAO,KAAA,EAAE,OAAO,OAAO;IAY/B,IAAI;;;;;;IAQJ,MAAM;;;;;;IAQN,OAAO;;;;;;IAQN,CAAC,MAAM,CAAC,QAAQ,CAAC;CAInB"}
@@ -1,125 +1,106 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
-
3
- let _Symbol$iterator;
4
-
5
- _Symbol$iterator = Symbol.iterator;
6
- export default class Headers {
7
- constructor(headers) {
8
- _defineProperty(this, "map", void 0);
9
-
10
- this.map = {};
11
-
12
- if (headers instanceof Headers) {
13
- headers.forEach((value, name) => this.append(name, value));
14
- } else if (Array.isArray(headers)) {
15
- headers.forEach(header => this.append(header[0], header[1]));
16
- } else if (headers) {
17
- Object.getOwnPropertyNames(headers).forEach(name => this.append(name, headers[name]));
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Headers = void 0;
4
+ /**
5
+ * Polyfill for Browser Headers
6
+ * Based on https://github.com/github/fetch under MIT license
7
+ */
8
+ class Headers {
9
+ constructor(headers) {
10
+ this.map = {};
11
+ if (headers instanceof Headers) {
12
+ headers.forEach((value, name) => this.append(name, value));
13
+ }
14
+ else if (Array.isArray(headers)) {
15
+ headers.forEach((header) => this.append(header[0], header[1]));
16
+ }
17
+ else if (headers) {
18
+ Object.getOwnPropertyNames(headers).forEach((name) => this.append(name, headers[name]));
19
+ }
20
+ }
21
+ append(name, value) {
22
+ name = normalizeName(name);
23
+ value = normalizeValue(value);
24
+ const oldValue = this.map[name];
25
+ this.map[name] = oldValue ? `${oldValue}, ${value}` : value;
26
+ }
27
+ delete(name) {
28
+ delete this.map[normalizeName(name)];
18
29
  }
19
- }
20
-
21
- append(name, value) {
22
- name = normalizeName(name);
23
- value = normalizeValue(value);
24
- const oldValue = this.map[name];
25
- this.map[name] = oldValue ? "".concat(oldValue, ", ").concat(value) : value;
26
- }
27
-
28
- delete(name) {
29
- delete this.map[normalizeName(name)];
30
- }
31
-
32
- get(name) {
33
- name = normalizeName(name);
34
- return this.has(name) ? this.map[name] : null;
35
- }
36
-
37
- has(name) {
38
- return this.map.hasOwnProperty(normalizeName(name));
39
- }
40
-
41
- set(name, value) {
42
- this.map[normalizeName(name)] = normalizeValue(value);
43
- }
44
-
45
- forEach(visitor, thisArg = null) {
46
- for (const name in this.map) {
47
- if (this.map.hasOwnProperty(name)) {
48
- if (thisArg) {
49
- visitor.call(thisArg, this.map[name], name, this);
50
- } else {
51
- visitor(this.map[name], name, this);
30
+ get(name) {
31
+ name = normalizeName(name);
32
+ return this.has(name) ? this.map[name] : null;
33
+ }
34
+ has(name) {
35
+ return this.map.hasOwnProperty(normalizeName(name));
36
+ }
37
+ set(name, value) {
38
+ this.map[normalizeName(name)] = normalizeValue(value);
39
+ }
40
+ forEach(visitor, thisArg = null) {
41
+ for (const name in this.map) {
42
+ if (this.map.hasOwnProperty(name)) {
43
+ if (thisArg) {
44
+ visitor.call(thisArg, this.map[name], name, this);
45
+ }
46
+ else {
47
+ visitor(this.map[name], name, this);
48
+ }
49
+ }
52
50
  }
53
- }
54
51
  }
55
- }
56
-
57
- keys() {
58
- const items = [];
59
- this.forEach(function (value, name) {
60
- items.push(name);
61
- });
62
- return iteratorFor(items);
63
- }
64
-
65
- values() {
66
- const items = [];
67
- this.forEach(function (value) {
68
- items.push(value);
69
- });
70
- return iteratorFor(items);
71
- }
72
-
73
- entries() {
74
- const items = [];
75
- this.forEach(function (value, name) {
76
- items.push([name, value]);
77
- });
78
- return iteratorFor(items);
79
- }
80
-
81
- *[_Symbol$iterator]() {
82
- yield* this.entries();
83
- }
84
-
52
+ keys() {
53
+ const items = [];
54
+ this.forEach(function (value, name) {
55
+ items.push(name);
56
+ });
57
+ return iteratorFor(items);
58
+ }
59
+ values() {
60
+ const items = [];
61
+ this.forEach(function (value) {
62
+ items.push(value);
63
+ });
64
+ return iteratorFor(items);
65
+ }
66
+ entries() {
67
+ const items = [];
68
+ this.forEach(function (value, name) {
69
+ items.push([name, value]);
70
+ });
71
+ return iteratorFor(items);
72
+ }
73
+ *[Symbol.iterator]() {
74
+ // @ts-ignore must have a '[Symbol.iterator]()' method that returns an iterator.
75
+ yield* this.entries();
76
+ }
85
77
  }
86
-
78
+ exports.Headers = Headers;
87
79
  function normalizeName(name) {
88
- if (typeof name !== 'string') {
89
- name = String(name);
90
- }
91
-
92
- if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name) || name === '') {
93
- throw new TypeError('Invalid character in header field name');
94
- }
95
-
96
- return name.toLowerCase();
80
+ if (typeof name !== 'string') {
81
+ name = String(name);
82
+ }
83
+ if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name) || name === '') {
84
+ throw new TypeError('Invalid character in header field name');
85
+ }
86
+ return name.toLowerCase();
97
87
  }
98
-
99
88
  function normalizeValue(value) {
100
- if (typeof value !== 'string') {
101
- value = String(value);
102
- }
103
-
104
- return value;
89
+ if (typeof value !== 'string') {
90
+ value = String(value);
91
+ }
92
+ return value;
105
93
  }
106
-
94
+ // Build a destructive iterator for the value list
107
95
  function iteratorFor(items) {
108
- const iterator = {
109
- next() {
110
- const value = items.shift();
111
- return {
112
- done: value === undefined,
113
- value
114
- };
115
- }
116
-
117
- };
118
-
119
- iterator[Symbol.iterator] = function () {
96
+ const iterator = {
97
+ next() {
98
+ const value = items.shift();
99
+ return { done: value === undefined, value };
100
+ }
101
+ };
102
+ iterator[Symbol.iterator] = function () {
103
+ return iterator;
104
+ };
120
105
  return iterator;
121
- };
122
-
123
- return iterator;
124
106
  }
125
- //# sourceMappingURL=headers.node.js.map
@@ -1,5 +1,5 @@
1
- import Headers from './headers.node';
2
- export default class Response {
1
+ import { Headers } from './headers.node';
2
+ export declare class Response {
3
3
  readonly ok: boolean;
4
4
  readonly status: number;
5
5
  readonly statusText: string;
@@ -1 +1 @@
1
- {"version":3,"file":"response.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/response.node.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAoBrC,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAIrB,IAAI,KAAA,EACJ,OAAO,EAAE;QACP,OAAO,CAAC,MAAC;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;KACb;IAuBH,IAAI,IAAI,QAKP;IAIK,WAAW;IAQX,IAAI;IAMJ,IAAI;IAKJ,IAAI;CAMX"}
1
+ {"version":3,"file":"response.node.d.ts","sourceRoot":"","sources":["../../../src/node/fetch/response.node.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAoBvC,qBAAa,QAAQ;IACnB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAIrB,IAAI,KAAA,EACJ,OAAO,EAAE;QACP,OAAO,CAAC,MAAC;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;KACb;IAuBH,IAAI,IAAI,QAKP;IAIK,WAAW;IAQX,IAAI;IAMJ,IAAI;IAKJ,IAAI;CAMX"}