swpp-backends 1.0.4 → 1.0.7

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.
@@ -295,7 +295,8 @@ function getShorthand(url, offset = 0) {
295
295
  }
296
296
  }
297
297
  switch (count) {
298
- case 1: return result;
298
+ case 1:
299
+ case 0: return result;
299
300
  case 2:
300
301
  --index;
301
302
  removeSet.forEach(it => collide.delete(it));
package/dist/Utils.js CHANGED
@@ -140,26 +140,27 @@ exports.getSource = getSource;
140
140
  * **调用该函数前必须调用过 [loadRules]**
141
141
  */
142
142
  async function fetchFile(link) {
143
- const config = (0, SwppRules_1.readRules)().config;
144
143
  const url = replaceDevRequest(link);
144
+ const timeout = (0, SwppRules_1.readRules)().config.external.timeout;
145
+ const controller = new AbortController();
145
146
  const opts = {
146
147
  headers: {
147
148
  referer: 'kmar-swpp',
148
149
  'User-Agent': 'kmar-swpp'
149
- },
150
- timeout: config.external.timeout
150
+ }
151
151
  };
152
152
  try {
153
153
  if (typeof url === 'string') {
154
+ setTimeout(() => controller.abort('timeout'), timeout + 100);
154
155
  return await (0, node_fetch_1.default)(url, opts);
155
156
  }
156
157
  else {
157
- return await fetchSpeed(url);
158
+ return await fetchSpeed(url, opts, timeout);
158
159
  }
159
160
  }
160
161
  catch (err) {
161
162
  // @ts-ignore
162
- if (err.type === 'request-timeout') {
163
+ if (err.name === 'AbortError') {
163
164
  logger.error(`[SWPP FetchFile] 拉取文件 [${link}] 时出现了超时错误,如果您构建所在的位置无法访问该资源,` +
164
165
  "请尝试通过 DevReplace(https://kmar.top/posts/73014407/#4ea71e00)功能解决该问题。");
165
166
  throw 'timeout';
@@ -179,11 +180,26 @@ function replaceDevRequest(link) {
179
180
  }
180
181
  exports.replaceDevRequest = replaceDevRequest;
181
182
  /** 通过 CDN 竞速的方式拉取文件 */
182
- async function fetchSpeed(list) {
183
+ async function fetchSpeed(list, opts, timeout) {
183
184
  const controllers = new Array(list.length);
185
+ let overtime = false;
186
+ setTimeout(() => {
187
+ overtime = true;
188
+ for (let controller of controllers) {
189
+ if (controller)
190
+ controller.abort('timeout');
191
+ }
192
+ }, timeout + 200);
184
193
  const result = await Promise.any(list.map((it, index) => (0, node_fetch_1.default)(it, {
194
+ headers: opts.headers,
185
195
  signal: (controllers[index] = new AbortController()).signal
186
- }).then(response => [200, 301, 302, 307, 308].includes(response.status) ? { index, response } : Promise.reject())));
196
+ }).then(response => [200, 301, 302, 307, 308].includes(response.status) ? { index, response } : Promise.reject()))).catch(err => ({ err }));
197
+ if ('err' in result) {
198
+ if (overtime)
199
+ throw { name: 'AbortError' };
200
+ else
201
+ throw result.err;
202
+ }
187
203
  for (let i = 0; i < controllers.length; i++) {
188
204
  if (i !== result.index)
189
205
  controllers[i].abort();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swpp-backends",
3
- "version": "1.0.4",
3
+ "version": "1.0.7",
4
4
  "main": "dist/index.js",
5
5
  "typings": "types/index.d.ts",
6
6
  "description": "Generate a powerful ServiceWorker for your website.",
@@ -14,11 +14,11 @@
14
14
  "@types/css": "^0.0.33",
15
15
  "@types/fast-html-parser": "^1.0.2",
16
16
  "@types/node": "^20.4.5",
17
+ "@types/node-fetch": "^2.6.4",
17
18
  "gulp": "^4.0.2",
18
19
  "typescript": "^5.1.6"
19
20
  },
20
21
  "dependencies": {
21
- "@types/node-fetch": "^2.6.4",
22
22
  "css": "^3.0.0",
23
23
  "fast-html-parser": "^1.0.1",
24
24
  "hexo-log": "^4.1.0",