瀏覽代碼

Make reject filter download abortable

SukkaW 2 年之前
父節點
當前提交
2c4d5a33a5
共有 4 個文件被更改,包括 35 次插入3 次删除
  1. 9 1
      Build/lib/parse-filter.js
  2. 5 0
      package.json
  3. 13 0
      patches/@vercel__fetch-retry@5.1.3.patch
  4. 8 2
      pnpm-lock.yaml

+ 9 - 1
Build/lib/parse-filter.js

@@ -133,11 +133,19 @@ async function processFilterRules(filterRulesUrl, fallbackUrls, includeThirdPart
 
   let filterRules;
   try {
+    const controller = new AbortController();
+    const signal = controller.signal;
+
     /** @type string[] */
     filterRules = (
       await Promise.any(
         [filterRulesUrl, ...(fallbackUrls || [])].map(
-          async url => (await fetchWithRetry(url)).text()
+          url => fetchWithRetry(url, { signal })
+            .then(r => r.text())
+            .then(text => {
+              controller.abort();
+              return text;
+            })
         )
       )
     ).split('\n').map(line => line.trim());

+ 5 - 0
package.json

@@ -135,5 +135,10 @@
   },
   "engines": {
     "node": ">=18.0.0"
+  },
+  "pnpm": {
+    "patchedDependencies": {
+      "@vercel/fetch-retry@5.1.3": "patches/@vercel__fetch-retry@5.1.3.patch"
+    }
   }
 }

+ 13 - 0
patches/@vercel__fetch-retry@5.1.3.patch

@@ -0,0 +1,13 @@
+diff --git a/index.js b/index.js
+index e5eeb353f6da8968d926cb4e502207912b6c3594..eb1370dc19030404e3def46ce13938d34a9e6214 100644
+--- a/index.js
++++ b/index.js
+@@ -66,7 +66,7 @@ function setup(fetch) {
+             return res;
+           }
+         } catch (err) {
+-          if (err.type === 'aborted') {
++          if (err.type === 'aborted' || err.name === 'AbortError') {
+             return bail(err);
+           }
+           const clientError = isClientError(err);

+ 8 - 2
pnpm-lock.yaml

@@ -4,6 +4,11 @@ settings:
   autoInstallPeers: true
   excludeLinksFromLockfile: false
 
+patchedDependencies:
+  '@vercel/fetch-retry@5.1.3':
+    hash: jczsp2gadg65vd4ekschpibzda
+    path: patches/@vercel__fetch-retry@5.1.3.patch
+
 dependencies:
   '@cliqz/adblocker':
     specifier: ^1.26.6
@@ -13,7 +18,7 @@ dependencies:
     version: 0.2.0
   '@vercel/fetch-retry':
     specifier: ^5.1.3
-    version: 5.1.3(node-fetch@2.6.11)
+    version: 5.1.3(patch_hash=jczsp2gadg65vd4ekschpibzda)(node-fetch@2.6.11)
   ci-info:
     specifier: ^3.8.0
     version: 3.8.0
@@ -248,7 +253,7 @@ packages:
     resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==}
     dev: true
 
-  /@vercel/fetch-retry@5.1.3(node-fetch@2.6.11):
+  /@vercel/fetch-retry@5.1.3(patch_hash=jczsp2gadg65vd4ekschpibzda)(node-fetch@2.6.11):
     resolution: {integrity: sha512-UIbFc4VsEZHOr6dWuE+kxY4NxnOLXFMCWm0fSKRRHUEtrIzaJLzHpWk2QskCXTSzFgFvhkLAvSrBK2XZg7NSzg==}
     peerDependencies:
       node-fetch: ^2.6.7
@@ -259,6 +264,7 @@ packages:
     transitivePeerDependencies:
       - supports-color
     dev: false
+    patched: true
 
   /acorn-jsx@5.3.2(acorn@8.9.0):
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}