UNPKG

1.74 kBJavaScriptView Raw
1import { PassThrough } from "stream";
2import { request as httpsRequest } from "https";
3
4// ===================================================================
5
6export const createReadableCopies = (n, readable) => {
7 return Array.from({ length: n }, () => readable.pipe(new PassThrough()));
8};
9
10// -------------------------------------------------------------------
11
12export const fromCallback = (fn) =>
13 new Promise((resolve, reject) => {
14 fn((error, result) => (error ? reject(error) : resolve(result)));
15 });
16
17// -------------------------------------------------------------------
18
19export const proxyHttpsRequest = (
20 { headers, hostname, method, url, port },
21 inputReq
22) =>
23 new Promise((resolve, reject) => {
24 const req = httpsRequest(
25 {
26 headers: headers || inputReq.headers,
27 hostname,
28 method: method || inputReq.method,
29 path: url || inputReq.url,
30 port,
31 rejectUnauthorized: false,
32 },
33 resolve
34 ).on("error", reject);
35 inputReq.pipe(req);
36 });
37
38// -------------------------------------------------------------------
39
40const _isPort = (value) =>
41 typeof value === "number" &&
42 value >= 0 &&
43 value <= 65534 &&
44 Math.floor(value) === value;
45
46// splitHost('localhost:80') => { hostname: 'localhost', port: 80 }
47// splitHost('localhost') => { hostname: 'localhost' }
48// splitHost('80') => { port: 80 }
49export const splitHost = (host) => {
50 host = String(host);
51 const i = host.lastIndexOf(":");
52
53 if (i === -1) {
54 const port = +host;
55 return _isPort(port) ? { port } : { hostname: host };
56 }
57
58 const port = +host.slice(i + 1);
59 return _isPort(port)
60 ? {
61 hostname: host.slice(0, i),
62 port,
63 }
64 : { hostname: host };
65};