mirror of
https://github.com/SukkaW/Surge.git
synced 2026-02-03 12:31:54 +08:00
Refactor: migrate to undici fetch
This commit is contained in:
@@ -1,86 +1,86 @@
|
||||
import path from 'node:path';
|
||||
import fs from 'node:fs';
|
||||
import makeFetchHappen from 'make-fetch-happen';
|
||||
import type { FetchOptions } from 'make-fetch-happen';
|
||||
import cacache from 'cacache';
|
||||
import picocolors from 'picocolors';
|
||||
// eslint-disable-next-line @typescript-eslint/no-restricted-imports -- type only
|
||||
import type { Response as NodeFetchResponse } from 'node-fetch';
|
||||
import { task } from '../trace';
|
||||
import { bytes } from 'xbits';
|
||||
import fsp from 'node:fs/promises';
|
||||
// import makeFetchHappen from 'make-fetch-happen';
|
||||
// import type { FetchOptions } from 'make-fetch-happen';
|
||||
// import cacache from 'cacache';
|
||||
// import picocolors from 'picocolors';
|
||||
|
||||
export type { NodeFetchResponse };
|
||||
import { task } from '../trace';
|
||||
// import { bytes } from 'xbits';
|
||||
|
||||
const cachePath = path.resolve(__dirname, '../../.cache/__make_fetch_happen__');
|
||||
fs.mkdirSync(cachePath, { recursive: true });
|
||||
// fs.mkdirSync(cachePath, { recursive: true });
|
||||
|
||||
interface CacacheVerifyStats {
|
||||
startTime: Date,
|
||||
endTime: Date,
|
||||
runTime: {
|
||||
markStartTime: 0,
|
||||
fixPerms: number,
|
||||
garbageCollect: number,
|
||||
rebuildIndex: number,
|
||||
cleanTmp: number,
|
||||
writeVerifile: number,
|
||||
markEndTime: number,
|
||||
total: number
|
||||
},
|
||||
verifiedContent: number,
|
||||
reclaimedCount: number,
|
||||
reclaimedSize: number,
|
||||
badContentCount: number,
|
||||
keptSize: number,
|
||||
missingContent: number,
|
||||
rejectedEntries: number,
|
||||
totalEntries: number
|
||||
}
|
||||
// interface CacacheVerifyStats {
|
||||
// startTime: Date,
|
||||
// endTime: Date,
|
||||
// runTime: {
|
||||
// markStartTime: 0,
|
||||
// fixPerms: number,
|
||||
// garbageCollect: number,
|
||||
// rebuildIndex: number,
|
||||
// cleanTmp: number,
|
||||
// writeVerifile: number,
|
||||
// markEndTime: number,
|
||||
// total: number
|
||||
// },
|
||||
// verifiedContent: number,
|
||||
// reclaimedCount: number,
|
||||
// reclaimedSize: number,
|
||||
// badContentCount: number,
|
||||
// keptSize: number,
|
||||
// missingContent: number,
|
||||
// rejectedEntries: number,
|
||||
// totalEntries: number
|
||||
// }
|
||||
|
||||
export const cacheGc = task(require.main === module, __filename)(
|
||||
(span) => span
|
||||
.traceChildAsync('cacache gc', () => cacache.verify(cachePath, { concurrency: 64 }))
|
||||
.then((stats: CacacheVerifyStats) => {
|
||||
// console.log({ stats });
|
||||
console.log(picocolors.green('[cacheGc] running gc on cache:'), cachePath);
|
||||
console.log(picocolors.green('[cacheGc] content verified:'), stats.verifiedContent, '(' + bytes(stats.keptSize) + ')');
|
||||
console.log(picocolors.green('[cacheGc] reclaimed:'), stats.reclaimedCount, '(' + bytes(stats.reclaimedSize) + ')');
|
||||
})
|
||||
() => fsp.rm(cachePath, { recursive: true, force: true })
|
||||
// span
|
||||
// .traceChildAsync('cacache gc', () => cacache.verify(cachePath, { concurrency: 64 }))
|
||||
// .then((stats: CacacheVerifyStats) => {
|
||||
// // console.log({ stats });
|
||||
// console.log(picocolors.green('[cacheGc] running gc on cache:'), cachePath);
|
||||
// console.log(picocolors.green('[cacheGc] content verified:'), stats.verifiedContent, '(' + bytes(stats.keptSize) + ')');
|
||||
// console.log(picocolors.green('[cacheGc] reclaimed:'), stats.reclaimedCount, '(' + bytes(stats.reclaimedSize) + ')');
|
||||
// });
|
||||
);
|
||||
|
||||
const _fetch = makeFetchHappen.defaults({
|
||||
cachePath,
|
||||
maxSockets: 32, /**
|
||||
* They said 15 is a good default that prevents knocking out others' routers,
|
||||
* I disagree. 32 is a good number.
|
||||
*/
|
||||
headers: {
|
||||
'User-Agent': 'curl/8.9.1 (https://github.com/SukkaW/Surge)'
|
||||
},
|
||||
retry: {
|
||||
retries: 5,
|
||||
randomize: true
|
||||
}
|
||||
});
|
||||
// const _fetch = makeFetchHappen.defaults({
|
||||
// cachePath,
|
||||
// maxSockets: 32, /**
|
||||
// * They said 15 is a good default that prevents knocking out others' routers,
|
||||
// * I disagree. 32 is a good number.
|
||||
// */
|
||||
// headers: {
|
||||
// 'User-Agent': 'curl/8.9.1 (https://github.com/SukkaW/Surge)'
|
||||
// },
|
||||
// retry: {
|
||||
// retries: 5,
|
||||
// randomize: true
|
||||
// }
|
||||
// });
|
||||
|
||||
export function $fetch(uriOrRequest: string | Request, opts?: FetchOptions) {
|
||||
return _fetch(uriOrRequest, opts).then((resp) => {
|
||||
printResponseStatus(resp);
|
||||
return resp;
|
||||
});
|
||||
}
|
||||
// export function $fetch(uriOrRequest: string | Request, opts?: FetchOptions) {
|
||||
// return _fetch(uriOrRequest, opts).then((resp) => {
|
||||
// printResponseStatus(resp);
|
||||
// return resp;
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function $delete(resp: NodeFetchResponse) {
|
||||
const cacheKey = resp.headers.get('X-Local-Cache-Key');
|
||||
if (cacheKey) {
|
||||
await cacache.rm.entry(cachePath, cacheKey);
|
||||
await cacache.verify(cachePath, { concurrency: 64 });
|
||||
}
|
||||
}
|
||||
// export async function $delete(resp: NodeFetchResponse) {
|
||||
// const cacheKey = resp.headers.get('X-Local-Cache-Key');
|
||||
// if (cacheKey) {
|
||||
// await cacache.rm.entry(cachePath, cacheKey);
|
||||
// await cacache.verify(cachePath, { concurrency: 64 });
|
||||
// }
|
||||
// }
|
||||
|
||||
export function printResponseStatus(resp: NodeFetchResponse) {
|
||||
const status = resp.headers.get('X-Local-Cache-Status');
|
||||
if (status) {
|
||||
console.log('[$fetch cache]', { status }, picocolors.gray(resp.url));
|
||||
}
|
||||
}
|
||||
// export function printResponseStatus(resp: NodeFetchResponse) {
|
||||
// const status = resp.headers.get('X-Local-Cache-Status');
|
||||
// if (status) {
|
||||
// console.log('[$fetch cache]', { status }, picocolors.gray(resp.url));
|
||||
// }
|
||||
// }
|
||||
|
||||
// export { type Response as NodeFetchResponse } from 'node-fetch';
|
||||
|
||||
Reference in New Issue
Block a user