@wener/utils 1.1.14 → 1.1.16

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 (90) hide show
  1. package/dist/cjs/{globalThis-ee7c1669.js → getGlobalThis-304f74e0.js} +2 -2
  2. package/dist/cjs/getGlobalThis-304f74e0.js.map +1 -0
  3. package/dist/cjs/index.cjs +16 -5
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/server.cjs +1 -1
  6. package/dist/cjs/server.cjs.map +1 -1
  7. package/dist/esm/{globalThis-000611c3.js → getGlobalThis-b7ad0cf9.js} +2 -2
  8. package/dist/esm/getGlobalThis-b7ad0cf9.js.map +1 -0
  9. package/dist/esm/index.js +15 -4
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/server.js +1 -1
  12. package/dist/esm/server.js.map +1 -1
  13. package/dist/system/getGlobalThis-8951eb0e.js +2 -0
  14. package/dist/system/getGlobalThis-8951eb0e.js.map +1 -0
  15. package/dist/system/index.js +16 -5
  16. package/dist/system/index.js.map +1 -1
  17. package/dist/system/server.js +1 -1
  18. package/dist/system/server.js.map +1 -1
  19. package/lib/asyncs/timeout.js.map +1 -1
  20. package/lib/browsers/download.js.map +1 -1
  21. package/lib/browsers/loaders.js.map +1 -1
  22. package/lib/crypto/getRandomValues.js +2 -1
  23. package/lib/crypto/getRandomValues.js.map +1 -1
  24. package/lib/crypto/randomUUID.js +2 -1
  25. package/lib/crypto/randomUUID.js.map +1 -1
  26. package/lib/fetch/createFetchWith.js +26 -0
  27. package/lib/fetch/createFetchWith.js.map +1 -0
  28. package/lib/fetch/createFetchWithLogging.js +21 -0
  29. package/lib/fetch/createFetchWithLogging.js.map +1 -0
  30. package/lib/fetch/dumpRequest.js +46 -0
  31. package/lib/fetch/dumpRequest.js.map +1 -0
  32. package/lib/fetch/dumpResponse.js +23 -0
  33. package/lib/fetch/dumpResponse.js.map +1 -0
  34. package/lib/index.js +4 -1
  35. package/lib/index.js.map +1 -1
  36. package/lib/io/ArrayBuffers.js +2 -2
  37. package/lib/io/ArrayBuffers.js.map +1 -1
  38. package/lib/io/isTransferable.js +2 -1
  39. package/lib/io/isTransferable.js.map +1 -1
  40. package/lib/isomorphics/structuredClone.js +2 -1
  41. package/lib/isomorphics/structuredClone.js.map +1 -1
  42. package/lib/logging/createLogger.js.map +1 -1
  43. package/lib/objects/get.js.map +1 -1
  44. package/lib/objects/set.js.map +1 -1
  45. package/lib/server.js +0 -2
  46. package/lib/server.js.map +1 -1
  47. package/lib/servers/createFetchWithProxy.js +1 -8
  48. package/lib/servers/createFetchWithProxy.js.map +1 -1
  49. package/lib/servers/createFetchWithProxyByUndici.js +25 -3
  50. package/lib/servers/createFetchWithProxyByUndici.js.map +1 -1
  51. package/lib/servers/polyfillCrypto.js +2 -1
  52. package/lib/servers/polyfillCrypto.js.map +1 -1
  53. package/lib/servers/polyfillJsDom.js +2 -1
  54. package/lib/servers/polyfillJsDom.js.map +1 -1
  55. package/package.json +35 -38
  56. package/src/asyncs/timeout.ts +3 -1
  57. package/src/browsers/download.ts +3 -1
  58. package/src/browsers/loaders.ts +6 -2
  59. package/src/crypto/getRandomValues.ts +2 -1
  60. package/src/crypto/randomUUID.ts +3 -1
  61. package/src/fetch/createFetchWith.ts +33 -0
  62. package/src/fetch/createFetchWithLogging.ts +22 -0
  63. package/src/fetch/dumpRequest.ts +51 -0
  64. package/src/fetch/dumpResponse.ts +28 -0
  65. package/src/fetch/index.ts +5 -1
  66. package/src/fetch/types.ts +1 -0
  67. package/src/index.ts +4 -2
  68. package/src/io/ArrayBuffers.ts +2 -2
  69. package/src/io/isTransferable.ts +3 -1
  70. package/src/isomorphics/structuredClone.ts +3 -1
  71. package/src/logging/createLogger.ts +15 -5
  72. package/src/objects/get.ts +1 -1
  73. package/src/objects/set.ts +1 -1
  74. package/src/server.ts +0 -2
  75. package/src/servers/createFetchWithProxy.ts +1 -10
  76. package/src/servers/createFetchWithProxyByNodeFetch.ts +3 -2
  77. package/src/servers/createFetchWithProxyByUndici.ts +35 -8
  78. package/src/servers/polyfillCrypto.ts +2 -1
  79. package/src/servers/polyfillJsDom.ts +3 -1
  80. package/src/servers/polyfillWebSocket.ts +2 -1
  81. package/dist/cjs/globalThis-ee7c1669.js.map +0 -1
  82. package/dist/esm/globalThis-000611c3.js.map +0 -1
  83. package/dist/system/globalThis-7bba6592.js +0 -2
  84. package/dist/system/globalThis-7bba6592.js.map +0 -1
  85. package/lib/isomorphics/globalThis.js +0 -6
  86. package/lib/isomorphics/globalThis.js.map +0 -1
  87. package/lib/servers/createFetchWithProxyByNodeFetch.js +0 -37
  88. package/lib/servers/createFetchWithProxyByNodeFetch.js.map +0 -1
  89. package/src/isomorphics/globalThis.ts +0 -3
  90. package/src/servers/createFetchWithLogger.ts +0 -75
@@ -1,10 +1,11 @@
1
1
  import { type FetchLike } from '../fetch';
2
- import { globalThis } from '../isomorphics/globalThis';
2
+ import { getGlobalThis } from '../isomorphics/getGlobalThis';
3
3
 
4
4
  export function createFetchWithProxyByNodeFetch({
5
5
  proxy,
6
6
  fetch,
7
7
  }: { proxy?: string; fetch?: FetchLike } = {}): FetchLike {
8
+ const globalThis = getGlobalThis();
8
9
  if (!proxy) {
9
10
  return fetch || globalThis.fetch;
10
11
  }
@@ -16,7 +17,7 @@ export function createFetchWithProxyByNodeFetch({
16
17
  return async (url, init?: RequestInit) => {
17
18
  if (!agent) {
18
19
  const { default: createHttpsProxyAgent } = await import('https-proxy-agent');
19
- agent = createHttpsProxyAgent(proxy);
20
+ agent = (createHttpsProxyAgent as any)(proxy);
20
21
  }
21
22
 
22
23
  // node-fetch 才可以,node v18 fetch 不支持
@@ -1,12 +1,14 @@
1
- import { MaybePromise } from 'rollup';
1
+ import { MaybePromise } from '../asyncs/MaybePromise';
2
2
  import { FetchLike } from '../fetch';
3
3
 
4
4
  export function createFetchWithProxyByUndici({
5
5
  proxy,
6
+ token: _token,
6
7
  fetch,
7
8
  undici,
8
9
  }: {
9
10
  proxy?: string;
11
+ token?: string;
10
12
  fetch?: FetchLike;
11
13
  undici?: MaybePromise<{ fetch: any; ProxyAgent: any }>;
12
14
  } = {}): FetchLike {
@@ -14,19 +16,44 @@ export function createFetchWithProxyByUndici({
14
16
  return fetch || globalThis.fetch;
15
17
  }
16
18
  let agent: any;
19
+ // https://github.com/nodejs/undici/blob/main/docs/best-practices/proxy.md
17
20
  return async (...args) => {
18
- const init: RequestInit & { duplex?: string; dispatcher?: any } = (args[1] ||= {});
19
- if (init.body instanceof ReadableStream) {
20
- // https://github.com/nodejs/node/issues/46221
21
- init.duplex ||= 'half';
21
+ const init = (args[1] ||= {}) as RequestInit & {
22
+ duplex?: string;
23
+ dispatcher?: any;
24
+ };
25
+ {
26
+ const body = init.body;
27
+ if (typeof body === 'object' && body && (body instanceof ReadableStream || Symbol.asyncIterator in body)) {
28
+ // request.duplex must be set if request.body is ReadableStream or Async Iterables
29
+ init.duplex ||= 'half';
30
+ }
22
31
  }
23
32
  if (!agent) {
33
+ let uri = proxy;
34
+ let token = _token;
35
+ {
36
+ let u: URL | undefined;
37
+ try {
38
+ u = new URL(proxy);
39
+ } catch (e) {}
40
+ if (!token && u && (u.username || u.password)) {
41
+ token = `Basic ${btoa(`${u.username || ''}:${u.password}`)}`;
42
+ u.username = '';
43
+ u.password = '';
44
+ uri = u.toString();
45
+ }
46
+ }
24
47
  // if in next use 'next/dist/compiled/undici'
25
48
  undici ||= import('undici');
26
49
  const mod = await undici;
27
- const ProxyAgent = mod.ProxyAgent;
28
- fetch ||= mod.fetch;
29
- agent = new ProxyAgent(proxy);
50
+ const ProxyAgent = mod.ProxyAgent as new (_: any) => any;
51
+ fetch ||= mod.fetch as FetchLike;
52
+ // https://github.com/nodejs/undici/blob/main/docs/api/ProxyAgent.md
53
+ agent = new ProxyAgent({
54
+ uri,
55
+ token,
56
+ });
30
57
  // https://github.com/nodejs/node/issues/43187#issuecomment-1134634174
31
58
  // (global as any)[Symbol.for('undici.globalDispatcher.1')] = agent;
32
59
  }
@@ -1,6 +1,7 @@
1
- import { globalThis } from '../isomorphics/globalThis';
1
+ import { getGlobalThis } from '../isomorphics/getGlobalThis';
2
2
 
3
3
  export async function polyfillCrypto() {
4
+ const globalThis = getGlobalThis();
4
5
  if ('crypto' in globalThis) {
5
6
  return false;
6
7
  }
@@ -1,11 +1,13 @@
1
1
  import type { ConstructorOptions, ResourceLoaderConstructorOptions } from 'jsdom';
2
- import { globalThis } from '../isomorphics/globalThis';
2
+ import { getGlobalThis } from '../isomorphics/getGlobalThis';
3
3
 
4
4
  export async function polyfillJsDom() {
5
5
  if (typeof window !== 'undefined') {
6
6
  return false;
7
7
  }
8
8
 
9
+ const globalThis = getGlobalThis();
10
+
9
11
  const { ResourceLoader, JSDOM } = await import('jsdom');
10
12
 
11
13
  // https://github.com/lukechilds/window/blob/master/src/index.js
@@ -1,9 +1,10 @@
1
1
  import type { MaybePromise } from '../asyncs/MaybePromise';
2
- import { globalThis } from '../isomorphics/globalThis';
2
+ import { getGlobalThis } from '../isomorphics/getGlobalThis';
3
3
 
4
4
  export function polyfillWebSocket(ws: any): boolean;
5
5
  export function polyfillWebSocket(ws?: undefined): Promise<boolean>;
6
6
  export function polyfillWebSocket(ws?: any): MaybePromise<boolean> {
7
+ const globalThis = getGlobalThis();
7
8
  if ('WebSocket' in globalThis) {
8
9
  return false;
9
10
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"globalThis-ee7c1669.js","sources":["../../src/isomorphics/getGlobalThis.ts","../../src/isomorphics/globalThis.ts"],"sourcesContent":["declare const global: typeof globalThis;\n\n/**\n * isomorphic globalThis\n *\n * globalThis supported by ff 65, Chrome 71, Node 12, babel\n *\n * non-standard globalThis supported for Alipay Miniprogram\n *\n * @see https://caniuse.com/#search=globalThis\n * @see https://v8.dev/features/globalthis\n */\nexport const getGlobalThis = (): typeof globalThis => {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n if (typeof global !== 'undefined') return global as any;\n if (typeof this !== 'undefined') return this as any;\n throw new Error('Unable to locate global `this`');\n};\n","import { getGlobalThis } from './getGlobalThis';\n\nexport const globalThis = getGlobalThis();\n"],"names":["getGlobalThis","globalThis"],"mappings":"AAYO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,EAAgB,CAAyB,CAAA,CAAA,CAAA,CACpD,GAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,IAAa,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9C,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAS,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KACxC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAW,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,OAAO,CAE1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC,CAClD,CAAA,CCjBaC,EAAaD,CAAc,CAAA,CAAA;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"globalThis-000611c3.js","sources":["../../src/isomorphics/getGlobalThis.ts","../../src/isomorphics/globalThis.ts"],"sourcesContent":["declare const global: typeof globalThis;\n\n/**\n * isomorphic globalThis\n *\n * globalThis supported by ff 65, Chrome 71, Node 12, babel\n *\n * non-standard globalThis supported for Alipay Miniprogram\n *\n * @see https://caniuse.com/#search=globalThis\n * @see https://v8.dev/features/globalthis\n */\nexport const getGlobalThis = (): typeof globalThis => {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n if (typeof global !== 'undefined') return global as any;\n if (typeof this !== 'undefined') return this as any;\n throw new Error('Unable to locate global `this`');\n};\n","import { getGlobalThis } from './getGlobalThis';\n\nexport const globalThis = getGlobalThis();\n"],"names":["getGlobalThis","globalThis"],"mappings":"AAYO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAyB,CACpD,CAAA,CAAA,CAAI,OAAO,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9C,GAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KACxC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1C,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAW,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAE1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC,CAClD,CAAA,CCjBaC,EAAaD,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;"}
@@ -1,2 +0,0 @@
1
- System.register([],function(t){"use strict";return{execute:function(){const e=t("a",()=>{if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("Unable to locate global `this`")}),o=t("g",e())}}});
2
- //# sourceMappingURL=globalThis-7bba6592.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"globalThis-7bba6592.js","sources":["../../src/isomorphics/getGlobalThis.ts","../../src/isomorphics/globalThis.ts"],"sourcesContent":["declare const global: typeof globalThis;\n\n/**\n * isomorphic globalThis\n *\n * globalThis supported by ff 65, Chrome 71, Node 12, babel\n *\n * non-standard globalThis supported for Alipay Miniprogram\n *\n * @see https://caniuse.com/#search=globalThis\n * @see https://v8.dev/features/globalthis\n */\nexport const getGlobalThis = (): typeof globalThis => {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n if (typeof global !== 'undefined') return global as any;\n if (typeof this !== 'undefined') return this as any;\n throw new Error('Unable to locate global `this`');\n};\n","import { getGlobalThis } from './getGlobalThis';\n\nexport const globalThis = getGlobalThis();\n"],"names":["getGlobalThis","globalThis"],"mappings":"sEAYa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAA,QAAgB,CAAyB,CAAA,CAAA,CAAA,CACpD,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9C,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,OAAO,CACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAE1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAgC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClD,CAAA,CAAA,CCjBaC,KAAaD,CAAAA,CAAAA,CAAAA,CAAAA,CAAc,CAAA;"}
@@ -1,6 +0,0 @@
1
- import { getGlobalThis } from './getGlobalThis.js';
2
-
3
- const globalThis = getGlobalThis();
4
-
5
- export { globalThis };
6
- //# sourceMappingURL=globalThis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"globalThis.js","sources":["../../src/isomorphics/globalThis.ts"],"sourcesContent":["import { getGlobalThis } from './getGlobalThis';\n\nexport const globalThis = getGlobalThis();\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa,aAAc;;;;"}
@@ -1,37 +0,0 @@
1
- import { globalThis } from '../isomorphics/globalThis.js';
2
-
3
- function createFetchWithProxyByNodeFetch({
4
- proxy,
5
- fetch
6
- } = {}) {
7
- if (!proxy) {
8
- return fetch || globalThis.fetch;
9
- }
10
- let agent;
11
- const Request = globalThis.Request;
12
- let NodeRequest;
13
- let NodeFetch;
14
- return async (url, init) => {
15
- if (!agent) {
16
- const { default: createHttpsProxyAgent } = await import('https-proxy-agent');
17
- agent = createHttpsProxyAgent(proxy);
18
- }
19
- if (!NodeRequest) {
20
- ({ Request: NodeRequest, default: NodeFetch } = await import('node-fetch'));
21
- }
22
- fetch || (fetch = NodeFetch);
23
- if (url instanceof Request) {
24
- return fetch(new Request(url, { agent }));
25
- }
26
- if (url instanceof NodeRequest) {
27
- return fetch(new NodeRequest(url, { agent }));
28
- }
29
- return fetch(url, {
30
- ...init,
31
- agent
32
- });
33
- };
34
- }
35
-
36
- export { createFetchWithProxyByNodeFetch };
37
- //# sourceMappingURL=createFetchWithProxyByNodeFetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createFetchWithProxyByNodeFetch.js","sources":["../../src/servers/createFetchWithProxyByNodeFetch.ts"],"sourcesContent":["import { type FetchLike } from '../fetch';\nimport { globalThis } from '../isomorphics/globalThis';\n\nexport function createFetchWithProxyByNodeFetch({\n proxy,\n fetch,\n}: { proxy?: string; fetch?: FetchLike } = {}): FetchLike {\n if (!proxy) {\n return fetch || globalThis.fetch;\n }\n\n let agent: any;\n const Request = globalThis.Request;\n let NodeRequest: any;\n let NodeFetch: any;\n return async (url, init?: RequestInit) => {\n if (!agent) {\n const { default: createHttpsProxyAgent } = await import('https-proxy-agent');\n agent = createHttpsProxyAgent(proxy);\n }\n\n // node-fetch 才可以,node v18 fetch 不支持\n if (!NodeRequest) {\n ({ Request: NodeRequest, default: NodeFetch } = await import('node-fetch'));\n }\n\n fetch ||= NodeFetch;\n\n if (url instanceof Request) {\n return (fetch as any)(new Request(url, { agent } as any));\n }\n if ((url as any) instanceof NodeRequest) {\n return (fetch as any)(new NodeRequest(url, { agent } as any));\n }\n return (fetch as any)(url, {\n ...init,\n agent,\n } as any);\n };\n}\n"],"names":[],"mappings":";;AAGO,SAAS,+BAAgC,CAAA;AAAA,EAC9C,KAAA;AAAA,EACA,KAAA;AACF,CAAA,GAA2C,EAAe,EAAA;AACxD,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,SAAS,UAAW,CAAA,KAAA,CAAA;AAAA,GAC7B;AAEA,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,UAAU,UAAW,CAAA,OAAA,CAAA;AAC3B,EAAI,IAAA,WAAA,CAAA;AACJ,EAAI,IAAA,SAAA,CAAA;AACJ,EAAO,OAAA,OAAO,KAAK,IAAuB,KAAA;AACxC,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAA,MAAM,EAAE,OAAS,EAAA,qBAAA,EAA0B,GAAA,MAAM,OAAO,mBAAmB,CAAA,CAAA;AAC3E,MAAA,KAAA,GAAQ,sBAAsB,KAAK,CAAA,CAAA;AAAA,KACrC;AAGA,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAC,CAAA,EAAE,SAAS,WAAa,EAAA,OAAA,EAAS,WAAc,GAAA,MAAM,OAAO,YAAY,CAAA,EAAA;AAAA,KAC3E;AAEA,IAAU,KAAA,KAAA,KAAA,GAAA,SAAA,CAAA,CAAA;AAEV,IAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,MAAA,OAAQ,MAAc,IAAI,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAc,CAAC,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,IAAK,eAAuB,WAAa,EAAA;AACvC,MAAA,OAAQ,MAAc,IAAI,WAAA,CAAY,KAAK,EAAE,KAAA,EAAc,CAAC,CAAA,CAAA;AAAA,KAC9D;AACA,IAAA,OAAQ,MAAc,GAAK,EAAA;AAAA,MACzB,GAAG,IAAA;AAAA,MACH,KAAA;AAAA,KACM,CAAA,CAAA;AAAA,GACV,CAAA;AACF;;;;"}
@@ -1,3 +0,0 @@
1
- import { getGlobalThis } from './getGlobalThis';
2
-
3
- export const globalThis = getGlobalThis();
@@ -1,75 +0,0 @@
1
- import { FetchLike } from '../fetch';
2
-
3
- export function createFetchWithLogger({
4
- fetch = globalThis.fetch,
5
- logger = console.log,
6
- }: {
7
- fetch?: FetchLike;
8
- logger?: (s: string) => void;
9
- } = {}): FetchLike {
10
- return async (...args) => {
11
- const [, init = { method: 'GET', headers: {} } as RequestInit] = args;
12
- const url = typeof args[0] === 'string' ? args[0] : args[0].url;
13
-
14
- let dumpRequest = `-> ${init.method} ${url}
15
- ${Array.from(new Headers(init.headers).entries())
16
- .map(([k, v]) => `${k}: ${v}`)
17
- .join('\n')}
18
- `;
19
-
20
- if (init.body) {
21
- if (init.body instanceof ReadableStream) {
22
- const [a, b] = init.body.tee();
23
- init.body = a;
24
- const signal = init.signal;
25
- Promise.resolve().then(async () => {
26
- const reader = b.getReader();
27
- logger(dumpRequest);
28
- while (true) {
29
- if (signal?.aborted) {
30
- break;
31
- }
32
-
33
- let { done, value } = await reader.read();
34
- value instanceof Uint8Array && (value = new TextDecoder().decode(value));
35
- dumpRequest += value;
36
- logger(value);
37
- if (!done) {
38
- break;
39
- }
40
- }
41
- // maybe for archive
42
- dumpRequest += `\n`;
43
- });
44
- } else {
45
- dumpRequest += `
46
- ${init.body}
47
- `;
48
- }
49
- }
50
- console.log(dumpRequest);
51
-
52
- try {
53
- let res = await fetch(...args);
54
- let dumpResponse = `<- ${res.status} ${res.statusText} ${init.method} ${url}
55
- ${Array.from(res.headers.entries())
56
- .map(([k, v]) => `${k}: ${v}`)
57
- .join('\n')}
58
- `;
59
- let contentType = res.headers.get('content-type');
60
- // text/event-stream
61
- if (contentType?.includes('application/json') || contentType?.includes('text/plain')) {
62
- const body = await res.text();
63
- dumpResponse += `\n${body}\n`;
64
- res = new Response(body, res);
65
- }
66
-
67
- logger(dumpResponse);
68
-
69
- return res;
70
- } catch (e) {
71
- console.error(`[Error] -> ${init.method} ${url} :${e}`);
72
- throw e;
73
- }
74
- };
75
- }