From 34c67e5a0dd865912f387d869c0def3d7b6be7fa Mon Sep 17 00:00:00 2001 From: SukkaW Date: Wed, 29 Nov 2023 21:50:10 +0800 Subject: [PATCH] Chore: update build infra & performance improvements --- Build/build-chn-cidr.ts | 3 + Build/build-internal-reverse-chn-cidr.ts | 3 + Build/download-previous-build.ts | 1 - Build/lib/create-file.ts | 25 ++--- Build/lib/fetch-retry.ts | 113 ++++++++++++++++++++++- Build/lib/text-line-transform-stream.ts | 21 +++-- bun.lockb | Bin 108306 -> 110306 bytes package.json | 9 +- 8 files changed, 146 insertions(+), 29 deletions(-) diff --git a/Build/build-chn-cidr.ts b/Build/build-chn-cidr.ts index a618f19b..1e2eec2f 100644 --- a/Build/build-chn-cidr.ts +++ b/Build/build-chn-cidr.ts @@ -10,6 +10,9 @@ const EXCLUDE_CIDRS = [ '223.120.0.0/15' ]; +// preload the module +import('cidr-tools-wasm'); + export const buildChnCidr = task(import.meta.path, async () => { const [{ exclude }, cidr] = await Promise.all([ import('cidr-tools-wasm'), diff --git a/Build/build-internal-reverse-chn-cidr.ts b/Build/build-internal-reverse-chn-cidr.ts index 5f923dd0..19177c78 100644 --- a/Build/build-internal-reverse-chn-cidr.ts +++ b/Build/build-internal-reverse-chn-cidr.ts @@ -22,6 +22,9 @@ const RESERVED_IPV4_CIDR = [ '240.0.0.0/4' ]; +// preload the module +import('cidr-tools-wasm'); + export const buildInternalReverseChnCIDR = task(import.meta.path, async () => { const [{ exclude }, cidr] = await Promise.all([ import('cidr-tools-wasm'), diff --git a/Build/download-previous-build.ts b/Build/download-previous-build.ts index b8bfccae..d8371c01 100644 --- a/Build/download-previous-build.ts +++ b/Build/download-previous-build.ts @@ -67,7 +67,6 @@ export const downloadPreviousBuild = task(import.meta.path, async () => { async onentry(entry) { if (entry.type !== 'File') { // not a file, throw away - console.log(entry.type, entry.path) entry.resume(); return; } diff --git a/Build/lib/create-file.ts b/Build/lib/create-file.ts index 7be6f7b7..d0c09cd6 100644 --- a/Build/lib/create-file.ts +++ b/Build/lib/create-file.ts @@ -6,10 +6,12 @@ export async function compareAndWriteFile(linesA: string[], filePath: string) { let isEqual = true; const file = Bun.file(filePath); + const linesALen = linesA.length; + if (!(await file.exists())) { console.log(`${filePath} does not exists, writing...`); isEqual = false; - } else if (linesA.length === 0) { + } else if (linesALen === 0) { console.log(`Nothing to write to ${filePath}...`); isEqual = false; } else { @@ -35,23 +37,24 @@ export async function compareAndWriteFile(linesA: string[], filePath: string) { } } - if (index !== linesA.length) { + if (index !== linesALen) { + // The file becomes larger isEqual = false; } } - if (!isEqual) { - const writer = file.writer(); - - for (let i = 0, len = linesA.length; i < len; i++) { - writer.write(`${linesA[i]}\n`); - } - - await writer.end(); + if (isEqual) { + console.log(`Same Content, bail out writing: ${filePath}`); return; } - console.log(`Same Content, bail out writing: ${filePath}`); + const writer = file.writer(); + + for (let i = 0; i < linesALen; i++) { + writer.write(`${linesA[i]}\n`); + } + + return writer.end(); } export const withBannerArray = (title: string, description: string[], date: Date, content: string[]) => { diff --git a/Build/lib/fetch-retry.ts b/Build/lib/fetch-retry.ts index 0f8cb2a2..7a6dc0d4 100644 --- a/Build/lib/fetch-retry.ts +++ b/Build/lib/fetch-retry.ts @@ -1,5 +1,112 @@ -// @ts-expect-error -- missing types -import createFetchRetry from '@vercel/fetch-retry'; +import retry from 'async-retry'; + +// retry settings +const MIN_TIMEOUT = 10; +const MAX_RETRIES = 5; +const MAX_RETRY_AFTER = 20; +const FACTOR = 6; + +function isClientError(err: any): err is NodeJS.ErrnoException { + if (!err) return false; + return ( + err.code === 'ERR_UNESCAPED_CHARACTERS' || + err.message === 'Request path contains unescaped characters' + ); +} + +interface FetchRetryOpt { + minTimeout?: number, + retries?: number, + factor?: number, + maxRetryAfter?: number, + retry?: number, + onRetry?: (err: Error) => void +} + +function createFetchRetry($fetch: typeof fetch): typeof fetch { + const fetchRetry = async (url: string | URL, opts: RequestInit & { retry?: FetchRetryOpt } = {}) => { + const retryOpts = Object.assign( + { + // timeouts will be [10, 60, 360, 2160, 12960] + // (before randomization is added) + minTimeout: MIN_TIMEOUT, + retries: MAX_RETRIES, + factor: FACTOR, + maxRetryAfter: MAX_RETRY_AFTER, + }, + opts.retry + ); + + try { + return await retry(async (bail) => { + try { + // this will be retried + const res = await $fetch(url, opts); + + if ((res.status >= 500 && res.status < 600) || res.status === 429) { + // NOTE: doesn't support http-date format + const retryAfterHeader = res.headers.get('retry-after'); + if (retryAfterHeader) { + const retryAfter = parseInt(retryAfterHeader, 10); + if (retryAfter) { + if (retryAfter > retryOpts.maxRetryAfter) { + return res; + } else { + await new Promise((r) => setTimeout(r, retryAfter * 1e3)); + } + } + } + throw new ResponseError(res); + } else { + return res; + } + } catch (err: unknown) { + if (err instanceof Error) { + if (err.name === 'AbortError') { + return bail(err); + } + } + if (isClientError(err)) { + return bail(err); + } + throw err; + } + }, retryOpts); + } catch (err) { + if (err instanceof ResponseError) { + return err.res; + } + throw err; + } + } + + for (const k of Object.keys($fetch)) { + const key = k as keyof typeof $fetch; + fetchRetry[key] = $fetch[key]; + } + + return fetchRetry as typeof fetch; +} + +export class ResponseError extends Error { + readonly res: Response; + readonly code: number; + readonly statusCode: number; + readonly url: string; + + constructor(res: Response) { + super(res.statusText); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, ResponseError); + } + + this.name = this.constructor.name; + this.res = res; + this.code = this.statusCode = res.status; + this.url = res.url; + } +} export const defaultRequestInit: RequestInit = { headers: { @@ -7,4 +114,4 @@ export const defaultRequestInit: RequestInit = { } } -export const fetchWithRetry: typeof fetch = createFetchRetry(fetch); +export const fetchWithRetry = createFetchRetry(fetch); diff --git a/Build/lib/text-line-transform-stream.ts b/Build/lib/text-line-transform-stream.ts index bd4f44ea..26c4a159 100644 --- a/Build/lib/text-line-transform-stream.ts +++ b/Build/lib/text-line-transform-stream.ts @@ -19,14 +19,15 @@ interface TextLineStreamOptions { * ``` */ export class TextLineStream extends TransformStream { - private __buf = ''; - + // private __buf = ''; constructor(options?: TextLineStreamOptions) { const allowCR = options?.allowCR ?? false; + let __buf = ''; + super({ - transform: (chunk, controller) => { - chunk = this.__buf + chunk; + transform(chunk, controller) { + chunk = __buf + chunk; for (; ;) { const lfIndex = chunk.indexOf('\n'); @@ -57,14 +58,14 @@ export class TextLineStream extends TransformStream { break; } - this.__buf = chunk; + __buf = chunk; }, - flush: (controller) => { - if (this.__buf.length > 0) { - if (allowCR && this.__buf[this.__buf.length - 1] === '\r') { - controller.enqueue(this.__buf.slice(0, -1)); + flush(controller) { + if (__buf.length > 0) { + if (allowCR && __buf[__buf.length - 1] === '\r') { + controller.enqueue(__buf.slice(0, -1)); } else { - controller.enqueue(this.__buf); + controller.enqueue(__buf); }; } }, diff --git a/bun.lockb b/bun.lockb index d69e15cd117dc4200b7fc671ec63a922b9e76972..dc6d9eba0da4602148d7c93437130a4527f2d2ce 100755 GIT binary patch delta 19138 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 UBVLnt-7FdgvZi9_8n*tw0OcNtSpWb4 delta 17898 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 Tt5r-|FZTK4T~G8@w(0)?sKGr+ diff --git a/package.json b/package.json index 4b659458..a2e9e1e4 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,11 @@ "dependencies": { "@cliqz/adblocker": "^1.26.12", "@sukka/listdir": "^0.2.0", - "@vercel/fetch-retry": "^5.1.3", + "async-retry": "^1.3.3", "async-sema": "^3.1.1", "ci-info": "^4.0.0", - "cidr-tools-wasm": "^0.0.13", - "eslint": "^8.53.0", + "cidr-tools-wasm": "^0.0.14", + "eslint": "^8.54.0", "gorhill-publicsuffixlist": "github:gorhill/publicsuffixlist.js", "mnemonist": "^0.39.5", "path-scurry": "^1.10.1", @@ -28,11 +28,12 @@ "punycode": "^2.3.1", "table": "^6.8.1", "tar": "^6.2.0", - "tldts": "^6.0.19" + "tldts": "^6.0.22" }, "devDependencies": { "@eslint-sukka/node": "4.1.9", "@eslint-sukka/ts": "4.1.9", + "@types/async-retry": "^1.4.8", "@types/mocha": "10.0.2", "@types/tar": "^6.1.9", "bun-types": "^1.0.11",