From 25baade9ef7f78935dff44dd65d68be3270fef4e Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 28 Aug 2020 12:03:39 +0100 Subject: [PATCH 1/8] fix: use native fetch if available If you are in the Electron Renderer process, native fetch is available but it's ignored because the renderer does not respect the browser field of package.json, so we end up with node-fetch that uses a browser polyfill of the node http api. Instead use native fetch if it's available or node fetch if not. --- package.json | 4 +++- src/http.js | 11 ++++++----- test/http.spec.js | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 0ef447f..e17a473 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", - "any-signal": "^1.1.0", + "any-signal": "achingbrain/any-signal#fix/use-native-abort-controller-if-available", "buffer": "^5.6.0", "err-code": "^2.0.0", "fs-extra": "^9.0.1", @@ -43,6 +43,8 @@ "it-glob": "0.0.8", "merge-options": "^2.0.0", "nanoid": "^3.1.3", + "native-abort-controller": "0.0.3", + "native-browser-fetch": "0.0.1", "node-fetch": "^2.6.0", "stream-to-it": "^0.2.0" }, diff --git a/src/http.js b/src/http.js index 6655e06..42718af 100644 --- a/src/http.js +++ b/src/http.js @@ -1,16 +1,17 @@ /* eslint-disable no-undef */ 'use strict' -const fetch = require('node-fetch') +const { + default: fetch, + Request, + Headers +} = require('native-browser-fetch') const merge = require('merge-options').bind({ ignoreUndefined: true }) const { URL, URLSearchParams } = require('iso-url') const TextDecoder = require('./text-decoder') -const AbortController = require('abort-controller') +const AbortController = require('native-abort-controller') const anySignal = require('any-signal') -const Request = fetch.Request -const Headers = fetch.Headers - class TimeoutError extends Error { constructor () { super('Request timed out') diff --git a/test/http.spec.js b/test/http.spec.js index b79ea62..3c02951 100644 --- a/test/http.spec.js +++ b/test/http.spec.js @@ -5,7 +5,7 @@ const { expect } = require('aegir/utils/chai') const HTTP = require('../src/http') const toStream = require('it-to-stream') const delay = require('delay') -const AbortController = require('abort-controller') +const AbortController = require('native-abort-controller') const drain = require('it-drain') const all = require('it-all') const { isBrowser, isWebWorker } = require('../src/env') From b047b22877d94fd0c75c063c725486e55f52f5b8 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Thu, 3 Sep 2020 08:02:19 +0100 Subject: [PATCH 2/8] chore: swap out native-browser-fetch for native-fetch --- package.json | 2 +- src/http.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e17a473..b0f9709 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "merge-options": "^2.0.0", "nanoid": "^3.1.3", "native-abort-controller": "0.0.3", - "native-browser-fetch": "0.0.1", + "native-fetch": "^2.0.0", "node-fetch": "^2.6.0", "stream-to-it": "^0.2.0" }, diff --git a/src/http.js b/src/http.js index 42718af..c7ff902 100644 --- a/src/http.js +++ b/src/http.js @@ -5,7 +5,7 @@ const { default: fetch, Request, Headers -} = require('native-browser-fetch') +} = require('native-fetch') const merge = require('merge-options').bind({ ignoreUndefined: true }) const { URL, URLSearchParams } = require('iso-url') const TextDecoder = require('./text-decoder') From 8bbfc10d3b138c08d531404c94b5815d90ee93f5 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Tue, 6 Oct 2020 15:59:42 +0100 Subject: [PATCH 3/8] chore: remove gh dep --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b0f9709..21079ce 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", - "any-signal": "achingbrain/any-signal#fix/use-native-abort-controller-if-available", + "any-signal": "^2.1.0", "buffer": "^5.6.0", "err-code": "^2.0.0", "fs-extra": "^9.0.1", From bd794dab161655b10af04538405994f47265b262 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Thu, 8 Oct 2020 20:24:16 +0100 Subject: [PATCH 4/8] chore: use electron-fetch module for electron main process --- package.json | 4 +++- src/fetch.js | 10 ++++++++++ src/http.js | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/fetch.js diff --git a/package.json b/package.json index 21079ce..700cb0d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "./src/text-decoder.js": "./src/text-decoder.browser.js", "./src/temp-dir.js": "./src/temp-dir.browser.js", "./src/path-join.js": "./src/path-join.browser.js", - "./test/files/glob-source.spec.js": false + "./test/files/glob-source.spec.js": false, + "electron-fetch": false }, "repository": "github:ipfs/js-ipfs-utils", "scripts": { @@ -36,6 +37,7 @@ "abort-controller": "^3.0.0", "any-signal": "^2.1.0", "buffer": "^5.6.0", + "electron-fetch": "^1.7.1", "err-code": "^2.0.0", "fs-extra": "^9.0.1", "is-electron": "^2.2.0", diff --git a/src/fetch.js b/src/fetch.js new file mode 100644 index 0000000..a5b48cc --- /dev/null +++ b/src/fetch.js @@ -0,0 +1,10 @@ +'use strict' + +const { isElectronMain } = require('./env') + +if (isElectronMain) { + module.exports = require('electron-fetch') +} else { + // use window.fetch if it is available, fall back to node-fetch if not + module.exports = require('native-fetch') +} diff --git a/src/http.js b/src/http.js index c7ff902..61225b2 100644 --- a/src/http.js +++ b/src/http.js @@ -5,7 +5,7 @@ const { default: fetch, Request, Headers -} = require('native-fetch') +} = require('./fetch') const merge = require('merge-options').bind({ ignoreUndefined: true }) const { URL, URLSearchParams } = require('iso-url') const TextDecoder = require('./text-decoder') From d7f95ccf97c2a3e952512706312f52bf103ff0b0 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 9 Oct 2020 14:04:37 +0100 Subject: [PATCH 5/8] chore: use gh branch --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 700cb0d..0c2f70d 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "abort-controller": "^3.0.0", "any-signal": "^2.1.0", "buffer": "^5.6.0", - "electron-fetch": "^1.7.1", + "electron-fetch": "achingbrain/electron-fetch#fix/abort-request-when-abort-signal-received", "err-code": "^2.0.0", "fs-extra": "^9.0.1", "is-electron": "^2.2.0", From d1f6cfeeafa820f7048e1af2afc949bb8d818a25 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 9 Oct 2020 14:10:56 +0100 Subject: [PATCH 6/8] chore: revert gh as it needs building --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c2f70d..700cb0d 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "abort-controller": "^3.0.0", "any-signal": "^2.1.0", "buffer": "^5.6.0", - "electron-fetch": "achingbrain/electron-fetch#fix/abort-request-when-abort-signal-received", + "electron-fetch": "^1.7.1", "err-code": "^2.0.0", "fs-extra": "^9.0.1", "is-electron": "^2.2.0", From a6dd0393a2bb7e46a1db7dec9f232c92956e891f Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 9 Oct 2020 14:49:47 +0100 Subject: [PATCH 7/8] chore: use fork until pr is merged --- package.json | 2 +- src/fetch.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 700cb0d..28af29c 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "abort-controller": "^3.0.0", "any-signal": "^2.1.0", "buffer": "^5.6.0", - "electron-fetch": "^1.7.1", + "@achingbrain/electron-fetch": "^1.7.2", "err-code": "^2.0.0", "fs-extra": "^9.0.1", "is-electron": "^2.2.0", diff --git a/src/fetch.js b/src/fetch.js index a5b48cc..3507138 100644 --- a/src/fetch.js +++ b/src/fetch.js @@ -3,7 +3,7 @@ const { isElectronMain } = require('./env') if (isElectronMain) { - module.exports = require('electron-fetch') + module.exports = require('@achingbrain/electron-fetch') } else { // use window.fetch if it is available, fall back to node-fetch if not module.exports = require('native-fetch') From 4871980040b66265ec1a353d926f9062793ed7fb Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 9 Oct 2020 16:58:19 +0100 Subject: [PATCH 8/8] chore: do not include electron-fetch --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28af29c..575d753 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "./src/temp-dir.js": "./src/temp-dir.browser.js", "./src/path-join.js": "./src/path-join.browser.js", "./test/files/glob-source.spec.js": false, - "electron-fetch": false + "@achingbrain/electron-fetch": false }, "repository": "github:ipfs/js-ipfs-utils", "scripts": {