@e-mc/request 0.14.0 → 0.14.1

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.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  ## Interface
11
11
 
12
- * [View Source](https://www.unpkg.com/@e-mc/types@0.14.0/lib/index.d.ts)
12
+ * [View Source](https://www.unpkg.com/@e-mc/types@0.14.1/lib/index.d.ts)
13
13
 
14
14
  ```typescript
15
15
  import type { IModule, ModuleConstructor } from "./index";
@@ -253,9 +253,9 @@ instance.get("http://hostname/path/config.yml", options).then(data => {
253
253
 
254
254
  ## References
255
255
 
256
- - https://www.unpkg.com/@e-mc/types@0.14.0/lib/http.d.ts
257
- - https://www.unpkg.com/@e-mc/types@0.14.0/lib/request.d.ts
258
- - https://www.unpkg.com/@e-mc/types@0.14.0/lib/settings.d.ts
256
+ - https://www.unpkg.com/@e-mc/types@0.14.1/lib/http.d.ts
257
+ - https://www.unpkg.com/@e-mc/types@0.14.1/lib/request.d.ts
258
+ - https://www.unpkg.com/@e-mc/types@0.14.1/lib/settings.d.ts
259
259
 
260
260
  * https://www.npmjs.com/package/@types/node
261
261
 
package/index.js CHANGED
@@ -18,7 +18,7 @@ const which = require('which');
18
18
  const { fileURLToPath } = require('node:url');
19
19
  const { createAbortError, errorMessage, errorValue, formatTime, getEncoding, getLogCurrent, isArray, isObject, isPlainObject, isString, parseExpires, sanitizeArgs, sanitizeCmd, supported } = require('@e-mc/types');
20
20
  const Module = require('@e-mc/module');
21
- const { asInt, fromSeconds, fromStatusCode, getBasicAuth, normalizeHeaders, parseOutgoingHeaders, trimPath } = require('@e-mc/request/util');
21
+ const { asInt, copyHeaders, fromSeconds, fromStatusCode, getBasicAuth, normalizeHeaders, trimPath } = require('@e-mc/request/util');
22
22
  const HttpHost = require('@e-mc/request/http/host');
23
23
  const HttpAdapter = require('@e-mc/request/http/adapter');
24
24
  const kRequest = Symbol.for('request:constructor');
@@ -1408,6 +1408,7 @@ class Request extends Module {
1408
1408
  silent ??= this.#singleton;
1409
1409
  return new Promise((resolve, reject) => {
1410
1410
  const init = [
1411
+ '--files-only=true',
1411
1412
  '--links=false',
1412
1413
  '--delete-excluded=false',
1413
1414
  '--interactive=false',
@@ -1661,8 +1662,9 @@ class Request extends Module {
1661
1662
  return { ...options, host, url };
1662
1663
  }
1663
1664
  open(uri, options) {
1664
- let { host, url, httpVersion, method = 'GET', search, encoding, format, socketPath, expectContinue = false, timeout = this._config.connectTimeout, outStream } = options, headers = parseOutgoingHeaders(options.headers), getting = false, posting = false;
1665
- switch (method = method.toUpperCase()) {
1665
+ let { host, url, httpVersion, search, encoding, format, socketPath, expectContinue = false, timeout = this._config.connectTimeout, outStream } = options, headers = copyHeaders(options.headers), getting = false, posting = false;
1666
+ const method = (options.method?.toUpperCase() || 'GET');
1667
+ switch (method) {
1666
1668
  case 'GET':
1667
1669
  case 'DELETE':
1668
1670
  getting = true;
@@ -1775,6 +1777,19 @@ class Request extends Module {
1775
1777
  ({ ca, cert, key, ciphers, version: minVersion } = certs);
1776
1778
  }
1777
1779
  }
1780
+ const basicAuth = HttpHost.getBasicAuth(url);
1781
+ if (baseHeaders || basicAuth) {
1782
+ headers = { ...baseHeaders, ...basicAuth, ...headers };
1783
+ }
1784
+ if (headers) {
1785
+ const cacheControl = headers['cache-control']?.toLowerCase();
1786
+ if (headers.authorization && !cacheControl?.includes('max-age') || cacheControl?.includes('no-cache')) {
1787
+ options.noCache ??= true;
1788
+ }
1789
+ if (cacheControl?.includes('no-store')) {
1790
+ options.noStore ??= true;
1791
+ }
1792
+ }
1778
1793
  if (!proxy && httpVersion !== 1 && ((httpVersion || host.version) === 2 && version !== 1 || secure && version === 2 && host.failed(2, true) === 0)) {
1779
1794
  let session = this.#session[0][origin], conn, maxConcurrentStreams = 0;
1780
1795
  if (session) {
@@ -1791,7 +1806,10 @@ class Request extends Module {
1791
1806
  else {
1792
1807
  conn = session[0].at(-1);
1793
1808
  }
1794
- request = conn.request({ ...baseHeaders, ...HttpHost.getBasicAuth(url), ...headers, ':path': pathname, ':method': method });
1809
+ headers ||= {};
1810
+ headers[':method'] = method;
1811
+ headers[':path'] = pathname;
1812
+ request = conn.request(headers);
1795
1813
  if (getting) {
1796
1814
  const listenerMap = {};
1797
1815
  const onEvent = request.on.bind(request);
@@ -1917,10 +1935,6 @@ class Request extends Module {
1917
1935
  }
1918
1936
  }
1919
1937
  }
1920
- const basicAuth = HttpHost.getBasicAuth(url);
1921
- if (baseHeaders || basicAuth) {
1922
- headers = { ...baseHeaders, ...basicAuth, ...headers };
1923
- }
1924
1938
  request = (secure ? https : http).request(socketPath ? { socketPath, path: pathname } : {
1925
1939
  protocol: host.protocol,
1926
1940
  hostname,
@@ -2114,7 +2128,7 @@ class Request extends Module {
2114
2128
  else {
2115
2129
  options = {};
2116
2130
  }
2117
- const headers = parseOutgoingHeaders(options.headers, 'content-type', 'content-length') || {};
2131
+ const headers = copyHeaders(options.headers, 'content-type', 'content-length') || {};
2118
2132
  if (!putting && (parts || contentType === "multipart/form-data" || contentType === 'form-data')) {
2119
2133
  let valid = false;
2120
2134
  if (isArray(parts)) {
@@ -2453,7 +2467,7 @@ class Request extends Module {
2453
2467
  return [];
2454
2468
  }).flat();
2455
2469
  }
2456
- return { pathname, headers: parseOutgoingHeaders(options.headers), binOpts };
2470
+ return { pathname, headers: copyHeaders(options.headers), binOpts };
2457
2471
  }
2458
2472
  mergeBinOpts(args, opts, binOpts, options) {
2459
2473
  if (binOpts) {
package/package.json CHANGED
@@ -1,12 +1,9 @@
1
1
  {
2
2
  "name": "@e-mc/request",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Request constructor for E-mc.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
- "publishConfig": {
8
- "access": "public"
9
- },
10
7
  "repository": {
11
8
  "type": "git",
12
9
  "url": "git+https://github.com/anpham6/e-mc.git",
@@ -19,8 +16,8 @@
19
16
  "license": "BSD-3-Clause",
20
17
  "homepage": "https://github.com/anpham6/e-mc#readme",
21
18
  "dependencies": {
22
- "@e-mc/module": "0.14.0",
23
- "@e-mc/types": "0.14.0",
19
+ "@e-mc/module": "0.14.1",
20
+ "@e-mc/types": "0.14.1",
24
21
  "combined-stream": "^1.0.8",
25
22
  "js-yaml": "^4.1.1",
26
23
  "picomatch": "^4.0.4",
package/util.d.ts CHANGED
@@ -4,10 +4,17 @@ import type { HttpProxySettings } from '@e-mc/types/lib/settings';
4
4
  import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'node:http';
5
5
  import type { Readable, Writable } from 'node:stream';
6
6
 
7
+ type OutgoingHeaders = OutgoingHttpHeaders | Headers;
8
+
7
9
  declare namespace util {
8
- function parseHeader<T = unknown>(headers: IncomingHttpHeaders, name: string): T | undefined;
9
- function parseOutgoingHeaders(headers: OutgoingHttpHeaders | Headers | undefined, ...ignore: string[]): OutgoingHttpHeaders | undefined;
10
- function normalizeHeaders(headers: OutgoingHttpHeaders | Headers): OutgoingHttpHeaders;
10
+ function parseHeader(headers: IncomingHttpHeaders | OutgoingHttpHeaders, name: "cache-control"): string[] | undefined;
11
+ function parseHeader(headers: IncomingHttpHeaders, name: "expires" | "date" | "age"): number | undefined;
12
+ function parseHeader(headers: IncomingHttpHeaders, name: "content-disposition"): string | undefined;
13
+ function parseHeader<T extends string | string[] | number>(headers: IncomingHttpHeaders, name: string): T | undefined;
14
+ /** @deprecated copyHeaders (rename) */
15
+ function parseOutgoingHeaders(headers: OutgoingHeaders | undefined, ...ignore: string[]): OutgoingHttpHeaders | undefined;
16
+ function copyHeaders(headers: OutgoingHeaders | undefined, ...ignore: string[]): OutgoingHttpHeaders | undefined;
17
+ function normalizeHeaders(headers: OutgoingHeaders): OutgoingHttpHeaders;
11
18
  function getBasicAuth(auth: AuthValue): string;
12
19
  function getBasicAuth(username: unknown, password?: unknown): string;
13
20
  function hasBasicAuth(value: string): boolean;
package/util.js CHANGED
@@ -17,7 +17,30 @@ function setHeader(result, key, value) {
17
17
  const safeInt = (value) => value >= 0 ? Math.min(value, Number.MAX_SAFE_INTEGER) : NaN;
18
18
  function parseHeader(headers, name) {
19
19
  const value = headers[name];
20
+ if (!value) {
21
+ return;
22
+ }
20
23
  switch (name.toLowerCase()) {
24
+ case 'date':
25
+ case 'expires': {
26
+ const result = Date.parse(value);
27
+ if (!isNaN(result)) {
28
+ return result;
29
+ }
30
+ break;
31
+ }
32
+ case 'age': {
33
+ const result = parseInt(value);
34
+ if (!isNaN(result)) {
35
+ return result * 1000;
36
+ }
37
+ break;
38
+ }
39
+ case 'cache-control':
40
+ if (isString(value)) {
41
+ return value.toLowerCase().split(/\s*,\s*/);
42
+ }
43
+ break;
21
44
  case 'content-disposition':
22
45
  if (isString(value)) {
23
46
  let result;
@@ -30,9 +53,11 @@ function parseHeader(headers, name) {
30
53
  return result;
31
54
  }
32
55
  break;
56
+ default:
57
+ return value;
33
58
  }
34
59
  }
35
- function parseOutgoingHeaders(headers, ...ignore) {
60
+ function copyHeaders(headers, ...ignore) {
36
61
  if (!headers) {
37
62
  return;
38
63
  }
@@ -438,6 +463,7 @@ exports.asInt = asInt;
438
463
  exports.byteLength = byteLength;
439
464
  exports.checkRetryable = checkRetryable;
440
465
  exports.cleanupStream = cleanupStream;
466
+ exports.copyHeaders = copyHeaders;
441
467
  exports.fromSeconds = fromSeconds;
442
468
  exports.fromStatusCode = fromStatusCode;
443
469
  exports.fromURL = fromURL;
@@ -451,5 +477,5 @@ exports.isRetryable = isRetryable;
451
477
  exports.normalizeHeaders = normalizeHeaders;
452
478
  exports.parseHeader = parseHeader;
453
479
  exports.parseHttpProxy = parseHttpProxy;
454
- exports.parseOutgoingHeaders = parseOutgoingHeaders;
480
+ exports.parseOutgoingHeaders = copyHeaders;
455
481
  exports.trimPath = trimPath;