cacheable-request
Advanced tools
+3
-3
@@ -1,3 +0,3 @@ | ||
| import { Keyv } from 'keyv'; | ||
| import { RequestFn, CacheResponse, CacheValue, CacheableOptions, Emitter } from './types.js'; | ||
| import { Keyv } from "keyv"; | ||
| import { type CacheableOptions, type CacheResponse, type CacheValue, type Emitter, type RequestFn } from "./types.js"; | ||
| type Function_ = (...arguments_: any[]) => any; | ||
@@ -32,4 +32,4 @@ declare class CacheableRequest { | ||
| export default CacheableRequest; | ||
| export * from './types.js'; | ||
| export * from "./types.js"; | ||
| export declare const onResponse = "onResponse"; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAE1B,OAAO,EACN,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAuC,OAAO,EACpG,MAAM,YAAY,CAAC;AAGpB,KAAK,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAE/C,cAAM,gBAAgB;IACrB,KAAK,EAAE,IAAI,CAAmD;IAC9D,YAAY,EAAE,SAAS,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAgC;gBACjD,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,GAAG;IAgBvD,OAAO,SACN,SAAS,gBAAgB,EACzB,WAAW,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,KAC1C,OAAO,CAyNR;IAEF,OAAO,GAAI,MAAM,MAAM,EAAE,WAAW,SAAS,UAI3C;IAEF,UAAU,GAAI,MAAM,MAAM,aAA6B;IAEvD,OAAO,GAAI,MAAM,MAAM,eAA0B;IAEjD,OAAO,GAAU,MAAM,MAAM,EAAE,GAAG,YAAY,GAAG,EAAE,KAAG,OAAO,CAAC,UAAU,CAAC,CAA0C;CACnH;AA6CD,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM;;;;;;;;;;;;;;;CAqB1C,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,eAAO,MAAM,UAAU,eAAe,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EACN,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,OAAO,EAEZ,KAAK,SAAS,EAEd,MAAM,YAAY,CAAC;AAEpB,KAAK,SAAS,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAE/C,cAAM,gBAAgB;IACrB,KAAK,EAAE,IAAI,CAAqD;IAChE,YAAY,EAAE,SAAS,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAgC;gBACjD,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,GAAG;IAgBvD,OAAO,SAGL,SAAS,gBAAgB,EACzB,WAAW,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,KAC1C,OAAO,CA0PR;IAEH,OAAO,GAAI,MAAM,MAAM,EAAE,WAAW,SAAS,UAI3C;IAEF,UAAU,GAAI,MAAM,MAAM,aAA6B;IAEvD,OAAO,GAAI,MAAM,MAAM,eAA0B;IAEjD,OAAO,GAAU,MAAM,MAAM,EAAE,GAAG,YAAY,GAAG,EAAE,KAAG,OAAO,CAAC,UAAU,CAAC,CAClC;CACvC;AA+CD,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM;;;;;;;;;;;;;;;CAmB1C,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,eAAO,MAAM,UAAU,eAAe,CAAC"} |
+78
-65
@@ -1,19 +0,21 @@ | ||
| import EventEmitter from 'node:events'; | ||
| import urlLib, { URL } from 'node:url'; | ||
| import crypto from 'node:crypto'; | ||
| import stream, { PassThrough as PassThroughStream } from 'node:stream'; | ||
| import normalizeUrl from 'normalize-url'; | ||
| import { getStreamAsBuffer } from 'get-stream'; | ||
| import CachePolicy from 'http-cache-semantics'; | ||
| import Response from 'responselike'; | ||
| import { Keyv } from 'keyv'; | ||
| import mimicResponse from 'mimic-response'; | ||
| import { CacheError, RequestError, } from './types.js'; | ||
| // biome-ignore-all lint/suspicious/noImplicitAnyLet: legacy format | ||
| // biome-ignore-all lint/suspicious/noExplicitAny: legacy format | ||
| import crypto from "node:crypto"; | ||
| import EventEmitter from "node:events"; | ||
| import stream, { PassThrough as PassThroughStream } from "node:stream"; | ||
| import urlLib, { URL } from "node:url"; | ||
| import { getStreamAsBuffer } from "get-stream"; | ||
| import CachePolicy from "http-cache-semantics"; | ||
| import { Keyv } from "keyv"; | ||
| import mimicResponse from "mimic-response"; | ||
| import normalizeUrl from "normalize-url"; | ||
| import Response from "responselike"; | ||
| import { CacheError, RequestError, } from "./types.js"; | ||
| class CacheableRequest { | ||
| constructor(cacheRequest, cacheAdapter) { | ||
| this.cache = new Keyv({ namespace: 'cacheable-request' }); | ||
| this.cache = new Keyv({ namespace: "cacheable-request" }); | ||
| this.hooks = new Map(); | ||
| this.request = () => (options, callback) => { | ||
| let url; | ||
| if (typeof options === 'string') { | ||
| if (typeof options === "string") { | ||
| url = normalizeUrlObject(parseWithWhatwg(options)); | ||
@@ -27,6 +29,4 @@ options = {}; | ||
| else { | ||
| const [pathname, ...searchParts] = (options.path ?? '').split('?'); | ||
| const search = searchParts.length > 0 | ||
| ? `?${searchParts.join('?')}` | ||
| : ''; | ||
| const [pathname, ...searchParts] = (options.path ?? "").split("?"); | ||
| const search = searchParts.length > 0 ? `?${searchParts.join("?")}` : ""; | ||
| url = normalizeUrlObject({ ...options, pathname, search }); | ||
@@ -36,3 +36,3 @@ } | ||
| headers: {}, | ||
| method: 'GET', | ||
| method: "GET", | ||
| cache: true, | ||
@@ -44,6 +44,9 @@ strictTtl: false, | ||
| }; | ||
| options.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [key.toLowerCase(), value])); | ||
| options.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [ | ||
| key.toLowerCase(), | ||
| value, | ||
| ])); | ||
| const ee = new EventEmitter(); | ||
| const normalizedUrlString = normalizeUrl(urlLib.format(url), { | ||
| stripWWW: false, // eslint-disable-line @typescript-eslint/naming-convention | ||
| stripWWW: false, | ||
| removeTrailingSlash: false, | ||
@@ -56,3 +59,5 @@ stripAuthentication: false, | ||
| // added to the cache key in order to avoid collisions. | ||
| if (options.body && options.method !== undefined && ['POST', 'PATCH', 'PUT'].includes(options.method)) { | ||
| if (options.body && | ||
| options.method !== undefined && | ||
| ["POST", "PATCH", "PUT"].includes(options.method)) { | ||
| if (options.body instanceof stream.Readable) { | ||
@@ -65,3 +70,3 @@ // Streamed bodies should completely skip the cache because they may | ||
| else { | ||
| key += `:${crypto.createHash('md5').update(options.body).digest('hex')}`; | ||
| key += `:${crypto.createHash("md5").update(options.body).digest("hex")}`; | ||
| } | ||
@@ -74,4 +79,7 @@ } | ||
| let requestErrored = false; | ||
| let requestErrorCallback = () => { }; | ||
| const requestErrorPromise = new Promise(resolve => { | ||
| /* c8 ignore next 4 */ | ||
| let requestErrorCallback = () => { | ||
| /* do nothing */ | ||
| }; | ||
| const requestErrorPromise = new Promise((resolve) => { | ||
| requestErrorCallback = () => { | ||
@@ -90,10 +98,12 @@ if (!requestErrored) { | ||
| response.resume(); | ||
| await new Promise(resolve => { | ||
| await new Promise((resolve) => { | ||
| // Skipping 'error' handler cause 'error' event should't be emitted for 304 response | ||
| response | ||
| .once('end', resolve); | ||
| response.once("end", resolve); | ||
| }); | ||
| const headers = convertHeaders(revalidatedPolicy.policy.responseHeaders()); | ||
| response = new Response({ | ||
| statusCode: revalidate.statusCode, headers, body: revalidate.body, url: revalidate.url, | ||
| statusCode: revalidate.statusCode, | ||
| headers, | ||
| body: revalidate.body, | ||
| url: revalidate.url, | ||
| }); | ||
@@ -116,4 +126,4 @@ response.cachePolicy = revalidatedPolicy.policy; | ||
| requestErrorPromise, | ||
| new Promise(resolve => response.once('end', resolve)), // eslint-disable-line no-promise-executor-return | ||
| new Promise(resolve => response.once('close', resolve)), // eslint-disable-line no-promise-executor-return | ||
| new Promise((resolve) => response.once("end", resolve)), | ||
| new Promise((resolve) => response.once("close", resolve)), | ||
| ]); | ||
@@ -123,7 +133,11 @@ const body = await bodyPromise; | ||
| url: response.url, | ||
| statusCode: response.fromCache ? revalidate.statusCode : response.statusCode, | ||
| statusCode: response.fromCache | ||
| ? revalidate.statusCode | ||
| : response.statusCode, | ||
| body, | ||
| cachePolicy: response.cachePolicy.toObject(), | ||
| }; | ||
| let ttl = options_.strictTtl ? response.cachePolicy.timeToLive() : undefined; | ||
| let ttl = options_.strictTtl | ||
| ? response.cachePolicy.timeToLive() | ||
| : undefined; | ||
| if (options_.maxTtl) { | ||
@@ -133,7 +147,5 @@ ttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl; | ||
| if (this.hooks.size > 0) { | ||
| /* eslint-disable no-await-in-loop */ | ||
| for (const key_ of this.hooks.keys()) { | ||
| value = await this.runHook(key_, value, response); | ||
| } | ||
| /* eslint-enable no-await-in-loop */ | ||
| } | ||
@@ -144,3 +156,3 @@ await this.cache.set(key, value, ttl); | ||
| /* c8 ignore next 2 */ | ||
| ee.emit('error', new CacheError(error)); | ||
| ee.emit("error", new CacheError(error)); | ||
| } | ||
@@ -156,8 +168,8 @@ })(); | ||
| /* c8 ignore next 2 */ | ||
| ee.emit('error', new CacheError(error)); | ||
| ee.emit("error", new CacheError(error)); | ||
| } | ||
| })(); | ||
| } | ||
| ee.emit('response', clonedResponse ?? response); | ||
| if (typeof callback === 'function') { | ||
| ee.emit("response", clonedResponse ?? response); | ||
| if (typeof callback === "function") { | ||
| callback(clonedResponse ?? response); | ||
@@ -168,10 +180,9 @@ } | ||
| const request_ = this.cacheRequest(options_, handler); | ||
| request_.once('error', requestErrorCallback); | ||
| // eslint-disable-next-line @typescript-eslint/no-deprecated | ||
| request_.once('abort', requestErrorCallback); | ||
| request_.once('destroy', requestErrorCallback); | ||
| ee.emit('request', request_); | ||
| request_.once("error", requestErrorCallback); | ||
| request_.once("abort", requestErrorCallback); | ||
| request_.once("destroy", requestErrorCallback); | ||
| ee.emit("request", request_); | ||
| } | ||
| catch (error) { | ||
| ee.emit('error', new RequestError(error)); | ||
| ee.emit("error", new RequestError(error)); | ||
| } | ||
@@ -182,3 +193,5 @@ }; | ||
| await Promise.resolve(); | ||
| const cacheEntry = options_.cache ? await this.cache.get(key) : undefined; | ||
| const cacheEntry = options_.cache | ||
| ? await this.cache.get(key) | ||
| : undefined; | ||
| if (cacheEntry === undefined && !options_.forceRefresh) { | ||
@@ -189,6 +202,6 @@ makeRequest(options_); | ||
| const policy = CachePolicy.fromObject(cacheEntry.cachePolicy); | ||
| if (policy.satisfiesWithoutRevalidation(options_) && !options_.forceRefresh) { | ||
| if (policy.satisfiesWithoutRevalidation(options_) && | ||
| !options_.forceRefresh) { | ||
| const headers = convertHeaders(policy.responseHeaders()); | ||
| const bodyBuffer = cacheEntry.body; | ||
| // eslint-disable-next-line n/prefer-global/buffer | ||
| const body = Buffer.from(bodyBuffer); | ||
@@ -203,8 +216,10 @@ const response = new Response({ | ||
| response.fromCache = true; | ||
| ee.emit('response', response); | ||
| if (typeof callback === 'function') { | ||
| ee.emit("response", response); | ||
| if (typeof callback === "function") { | ||
| callback(response); | ||
| } | ||
| } | ||
| else if (policy.satisfiesWithoutRevalidation(options_) && Date.now() >= policy.timeToLive() && options_.forceRefresh) { | ||
| else if (policy.satisfiesWithoutRevalidation(options_) && | ||
| Date.now() >= policy.timeToLive() && | ||
| options_.forceRefresh) { | ||
| await this.cache.delete(key); | ||
@@ -220,11 +235,11 @@ options_.headers = policy.revalidationHeaders(options_); | ||
| }; | ||
| const errorHandler = (error) => ee.emit('error', new CacheError(error)); | ||
| const errorHandler = (error) => ee.emit("error", new CacheError(error)); | ||
| if (this.cache instanceof Keyv) { | ||
| const cachek = this.cache; | ||
| cachek.once('error', errorHandler); | ||
| ee.on('error', () => { | ||
| cachek.removeListener('error', errorHandler); | ||
| cachek.once("error", errorHandler); | ||
| ee.on("error", () => { | ||
| cachek.removeListener("error", errorHandler); | ||
| }); | ||
| ee.on('response', () => { | ||
| cachek.removeListener('error', errorHandler); | ||
| ee.on("response", () => { | ||
| cachek.removeListener("error", errorHandler); | ||
| }); | ||
@@ -240,3 +255,3 @@ } | ||
| } | ||
| ee.emit('error', new CacheError(error)); | ||
| ee.emit("error", new CacheError(error)); | ||
| } | ||
@@ -261,3 +276,3 @@ })(); | ||
| store: cacheAdapter, | ||
| namespace: 'cacheable-request', | ||
| namespace: "cacheable-request", | ||
| }); | ||
@@ -278,3 +293,3 @@ } | ||
| const options = { ...url }; | ||
| options.path = `${url.pathname || '/'}${url.search || ''}`; | ||
| options.path = `${url.pathname || "/"}${url.search || ""}`; | ||
| delete options.pathname; | ||
@@ -295,3 +310,3 @@ delete options.search; | ||
| auth: url.auth, | ||
| hostname: url.hostname || url.host || 'localhost', | ||
| hostname: url.hostname || url.host || "localhost", | ||
| port: url.port, | ||
@@ -315,5 +330,3 @@ pathname: url.pathname, | ||
| /* c8 ignore next 3 */ | ||
| auth: u.username || u.password | ||
| ? `${u.username}:${u.password}` | ||
| : undefined, | ||
| auth: u.username || u.password ? `${u.username}:${u.password}` : undefined, | ||
| host: u.host, // E.g. 'example.com:8080' | ||
@@ -331,4 +344,4 @@ port: u.port, // E.g. '8080' | ||
| export default CacheableRequest; | ||
| export * from './types.js'; | ||
| export const onResponse = 'onResponse'; | ||
| export * from "./types.js"; | ||
| export const onResponse = "onResponse"; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport EventEmitter from 'node:events';\nimport urlLib, {URL} from 'node:url';\nimport crypto from 'node:crypto';\nimport stream, {PassThrough as PassThroughStream} from 'node:stream';\nimport {IncomingMessage} from 'node:http';\nimport normalizeUrl from 'normalize-url';\nimport {getStreamAsBuffer} from 'get-stream';\nimport CachePolicy from 'http-cache-semantics';\nimport Response from 'responselike';\nimport {Keyv} from 'keyv';\nimport mimicResponse from 'mimic-response';\nimport {\n\tRequestFn, CacheResponse, CacheValue, CacheableOptions, UrlOption, CacheError, RequestError, Emitter, CacheableRequestFunction,\n} from './types.js';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype Function_ = (...arguments_: any[]) => any;\n\nclass CacheableRequest {\n\tcache: Keyv = new Keyv<any>({namespace: 'cacheable-request'});\n\tcacheRequest: RequestFn;\n\thooks: Map<string, Function_> = new Map<string, Function_>();\n\tconstructor(cacheRequest: RequestFn, cacheAdapter?: any) {\n\t\tif (cacheAdapter) {\n\t\t\tif (cacheAdapter instanceof Keyv) {\n\t\t\t\tthis.cache = cacheAdapter;\n\t\t\t} else {\n\t\t\t\tthis.cache = new Keyv({\n\t\t\t\t\tstore: cacheAdapter,\n\t\t\t\t\tnamespace: 'cacheable-request',\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis.request = this.request.bind(this);\n\t\tthis.cacheRequest = cacheRequest;\n\t}\n\n\trequest = () => (\n\t\toptions: CacheableOptions,\n\t\tcallback?: (response: CacheResponse) => void,\n\t): Emitter => {\n\t\tlet url;\n\t\tif (typeof options === 'string') {\n\t\t\turl = normalizeUrlObject(parseWithWhatwg(options));\n\t\t\toptions = {};\n\t\t} else if (options instanceof urlLib.URL) {\n\t\t\turl = normalizeUrlObject(parseWithWhatwg(options.toString()));\n\t\t\toptions = {};\n\t\t} else {\n\t\t\tconst [pathname, ...searchParts] = (options.path ?? '').split('?');\n\t\t\tconst search = searchParts.length > 0\n\t\t\t\t? `?${searchParts.join('?')}`\n\t\t\t\t: '';\n\t\t\turl = normalizeUrlObject({...options, pathname, search});\n\t\t}\n\n\t\toptions = {\n\t\t\theaders: {},\n\t\t\tmethod: 'GET',\n\t\t\tcache: true,\n\t\t\tstrictTtl: false,\n\t\t\tautomaticFailover: false,\n\t\t\t...options,\n\t\t\t...urlObjectToRequestOptions(url),\n\t\t};\n\t\toptions.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [(key as string).toLowerCase(), value]));\n\t\tconst ee: Emitter = new EventEmitter() as Emitter;\n\t\tconst normalizedUrlString = normalizeUrl(urlLib.format(url), {\n\t\t\tstripWWW: false, // eslint-disable-line @typescript-eslint/naming-convention\n\t\t\tremoveTrailingSlash: false,\n\t\t\tstripAuthentication: false,\n\t\t});\n\t\tlet key = `${options.method}:${normalizedUrlString}`;\n\t\t// POST, PATCH, and PUT requests may be cached, depending on the response\n\t\t// cache-control headers. As a result, the body of the request should be\n\t\t// added to the cache key in order to avoid collisions.\n\t\tif (options.body && options.method !== undefined && ['POST', 'PATCH', 'PUT'].includes(options.method)) {\n\t\t\tif (options.body instanceof stream.Readable) {\n\t\t\t\t// Streamed bodies should completely skip the cache because they may\n\t\t\t\t// or may not be hashable and in either case the stream would need to\n\t\t\t\t// close before the cache key could be generated.\n\t\t\t\toptions.cache = false;\n\t\t\t} else {\n\t\t\t\tkey += `:${crypto.createHash('md5').update(options.body).digest('hex')}`;\n\t\t\t}\n\t\t}\n\n\t\tlet revalidate: any = false;\n\t\tlet madeRequest = false;\n\t\tconst makeRequest = (options_: any) => {\n\t\t\tmadeRequest = true;\n\t\t\tlet requestErrored = false;\n\t\t\tlet requestErrorCallback: (...arguments_: any[]) => void = () => {/* do nothing */};\n\n\t\t\tconst requestErrorPromise = new Promise<void>(resolve => {\n\t\t\t\trequestErrorCallback = () => {\n\t\t\t\t\tif (!requestErrored) {\n\t\t\t\t\t\trequestErrored = true;\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst handler = async (response: any) => {\n\t\t\t\tif (revalidate) {\n\t\t\t\t\tresponse.status = response.statusCode;\n\t\t\t\t\tconst revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(options_, response);\n\t\t\t\t\tif (!revalidatedPolicy.modified) {\n\t\t\t\t\t\tresponse.resume();\n\t\t\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\t\t\t// Skipping 'error' handler cause 'error' event should't be emitted for 304 response\n\t\t\t\t\t\t\tresponse\n\t\t\t\t\t\t\t\t.once('end', resolve);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst headers = convertHeaders(revalidatedPolicy.policy.responseHeaders());\n\t\t\t\t\t\tresponse = new Response({\n\t\t\t\t\t\t\tstatusCode: revalidate.statusCode, headers, body: revalidate.body, url: revalidate.url,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresponse.cachePolicy = revalidatedPolicy.policy;\n\t\t\t\t\t\tresponse.fromCache = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!response.fromCache) {\n\t\t\t\t\tresponse.cachePolicy = new CachePolicy(options_, response, options_);\n\t\t\t\t\tresponse.fromCache = false;\n\t\t\t\t}\n\n\t\t\t\tlet clonedResponse;\n\t\t\t\tif (options_.cache && response.cachePolicy.storable()) {\n\t\t\t\t\tclonedResponse = cloneResponse(response);\n\t\t\t\t\t(async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst bodyPromise = getStreamAsBuffer(response);\n\t\t\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\t\t\trequestErrorPromise,\n\t\t\t\t\t\t\t\tnew Promise(resolve => response.once('end', resolve)), // eslint-disable-line no-promise-executor-return\n\t\t\t\t\t\t\t\tnew Promise(resolve => response.once('close', resolve)), // eslint-disable-line no-promise-executor-return\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tconst body = await bodyPromise;\n\t\t\t\t\t\t\tlet value: CacheValue = {\n\t\t\t\t\t\t\t\turl: response.url,\n\t\t\t\t\t\t\t\tstatusCode: response.fromCache ? revalidate.statusCode : response.statusCode,\n\t\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\t\tcachePolicy: response.cachePolicy.toObject(),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tlet ttl = options_.strictTtl ? response.cachePolicy.timeToLive() : undefined;\n\t\t\t\t\t\t\tif (options_.maxTtl) {\n\t\t\t\t\t\t\t\tttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.hooks.size > 0) {\n\t\t\t\t\t\t\t\t/* eslint-disable no-await-in-loop */\n\t\t\t\t\t\t\t\tfor (const key_ of this.hooks.keys()) {\n\t\t\t\t\t\t\t\t\tvalue = await this.runHook(key_, value, response);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/* eslint-enable no-await-in-loop */\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tawait this.cache.set(key, value, ttl);\n\t\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\t\t/* c8 ignore next 2 */\n\t\t\t\t\t\t\tee.emit('error', new CacheError(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t} else if (options_.cache && revalidate) {\n\t\t\t\t\t(async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.cache.delete(key);\n\t\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\t\t/* c8 ignore next 2 */\n\t\t\t\t\t\t\tee.emit('error', new CacheError(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\t\t\t\t}\n\n\t\t\t\tee.emit('response', clonedResponse ?? response);\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(clonedResponse ?? response);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst request_ = this.cacheRequest(options_, handler);\n\t\t\t\trequest_.once('error', requestErrorCallback);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\t\t\trequest_.once('abort', requestErrorCallback);\n\t\t\t\trequest_.once('destroy', requestErrorCallback);\n\t\t\t\tee.emit('request', request_);\n\t\t\t} catch (error: any) {\n\t\t\t\tee.emit('error', new RequestError(error));\n\t\t\t}\n\t\t};\n\n\t\t(async () => {\n\t\t\tconst get = async (options_: any) => {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tconst cacheEntry = options_.cache ? await this.cache.get(key) : undefined;\n\n\t\t\t\tif (cacheEntry === undefined && !options_.forceRefresh) {\n\t\t\t\t\tmakeRequest(options_);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst policy = CachePolicy.fromObject((cacheEntry as CacheValue).cachePolicy);\n\t\t\t\tif (policy.satisfiesWithoutRevalidation(options_) && !options_.forceRefresh) {\n\t\t\t\t\tconst headers = convertHeaders(policy.responseHeaders());\n\t\t\t\t\tconst bodyBuffer = (cacheEntry as CacheValue).body;\n\t\t\t\t\t// eslint-disable-next-line n/prefer-global/buffer\n\t\t\t\t\tconst body = Buffer.from(bodyBuffer as string);\n\t\t\t\t\tconst response: any = new Response({\n\t\t\t\t\t\tstatusCode: (cacheEntry as CacheValue).statusCode,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\turl: (cacheEntry as CacheValue).url,\n\t\t\t\t\t});\n\t\t\t\t\tresponse.cachePolicy = policy;\n\t\t\t\t\tresponse.fromCache = true;\n\t\t\t\t\tee.emit('response', response);\n\t\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\t\tcallback(response);\n\t\t\t\t\t}\n\t\t\t\t} else if (policy.satisfiesWithoutRevalidation(options_) && Date.now() >= policy.timeToLive() && options_.forceRefresh) {\n\t\t\t\t\tawait this.cache.delete(key);\n\t\t\t\t\toptions_.headers = policy.revalidationHeaders(options_);\n\t\t\t\t\tmakeRequest(options_);\n\t\t\t\t} else {\n\t\t\t\t\trevalidate = cacheEntry;\n\t\t\t\t\toptions_.headers = policy.revalidationHeaders(options_);\n\t\t\t\t\tmakeRequest(options_);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst errorHandler = (error: Error) => ee.emit('error', new CacheError(error));\n\t\t\tif (this.cache instanceof Keyv) {\n\t\t\t\tconst cachek = this.cache;\n\t\t\t\tcachek.once('error', errorHandler);\n\t\t\t\tee.on('error', () => {\n\t\t\t\t\tcachek.removeListener('error', errorHandler);\n\t\t\t\t});\n\t\t\t\tee.on('response', () => {\n\t\t\t\t\tcachek.removeListener('error', errorHandler);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait get(options);\n\t\t\t} catch (error: any) {\n\t\t\t\t/* c8 ignore next 3 */\n\t\t\t\tif (options.automaticFailover && !madeRequest) {\n\t\t\t\t\tmakeRequest(options);\n\t\t\t\t}\n\n\t\t\t\tee.emit('error', new CacheError(error));\n\t\t\t}\n\t\t})();\n\n\t\treturn ee;\n\t};\n\n\taddHook = (name: string, function_: Function_) => {\n\t\tif (!this.hooks.has(name)) {\n\t\t\tthis.hooks.set(name, function_);\n\t\t}\n\t};\n\n\tremoveHook = (name: string) => this.hooks.delete(name);\n\n\tgetHook = (name: string) => this.hooks.get(name);\n\n\trunHook = async (name: string, ...arguments_: any[]): Promise<CacheValue> => this.hooks.get(name)?.(...arguments_);\n}\n\nconst entries = Object.entries as <T>(object: T) => Array<[keyof T, T[keyof T]]>;\n\nconst cloneResponse = (response: IncomingMessage) => {\n\tconst clone = new PassThroughStream({autoDestroy: false});\n\tmimicResponse(response, clone);\n\n\treturn response.pipe(clone);\n};\n\nconst urlObjectToRequestOptions = (url: any) => {\n\tconst options: UrlOption = {...url};\n\toptions.path = `${url.pathname || '/'}${url.search || ''}`;\n\tdelete options.pathname;\n\tdelete options.search;\n\treturn options;\n};\n\nconst normalizeUrlObject = (url: any) =>\n// If url was parsed by url.parse or new URL:\n// - hostname will be set\n// - host will be hostname[:port]\n// - port will be set if it was explicit in the parsed string\n// Otherwise, url was from request options:\n// - hostname or host may be set\n// - host shall not have port encoded\n\t({\n\t\tprotocol: url.protocol,\n\t\tauth: url.auth,\n\t\thostname: url.hostname || url.host || 'localhost',\n\t\tport: url.port,\n\t\tpathname: url.pathname,\n\t\tsearch: url.search,\n\t});\n\nconst convertHeaders = (headers: CachePolicy.Headers) => {\n\tconst result: any = [];\n\tfor (const name of Object.keys(headers)) {\n\t\tresult[name.toLowerCase()] = headers[name];\n\t}\n\n\treturn result;\n};\n\nexport const parseWithWhatwg = (raw: string) => {\n\tconst u = new URL(raw);\n\n\t// If normalizeUrlObject expects the same fields as url.parse()\n\treturn {\n\t\tprotocol: u.protocol, // E.g. 'https:'\n\t\tslashes: true, // Always true for WHATWG URLs\n\t\t/* c8 ignore next 3 */\n\t\tauth: u.username || u.password\n\t\t\t? `${u.username}:${u.password}`\n\t\t\t: undefined,\n\t\thost: u.host, // E.g. 'example.com:8080'\n\t\tport: u.port, // E.g. '8080'\n\t\thostname: u.hostname, // E.g. 'example.com'\n\t\thash: u.hash, // E.g. '#quux'\n\t\tsearch: u.search, // E.g. '?bar=baz'\n\t\tquery: Object.fromEntries(u.searchParams), // { bar: 'baz' }\n\t\tpathname: u.pathname, // E.g. '/foo'\n\t\tpath: u.pathname + u.search, // '/foo?bar=baz'\n\t\thref: u.href, // Full serialized URL\n\t};\n};\n\nexport default CacheableRequest;\nexport * from './types.js';\nexport const onResponse = 'onResponse';\n"]} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// biome-ignore-all lint/suspicious/noImplicitAnyLet: legacy format\n// biome-ignore-all lint/suspicious/noExplicitAny: legacy format\nimport crypto from \"node:crypto\";\nimport EventEmitter from \"node:events\";\nimport type { IncomingMessage } from \"node:http\";\nimport stream, { PassThrough as PassThroughStream } from \"node:stream\";\nimport urlLib, { URL } from \"node:url\";\nimport { getStreamAsBuffer } from \"get-stream\";\nimport CachePolicy from \"http-cache-semantics\";\nimport { Keyv } from \"keyv\";\nimport mimicResponse from \"mimic-response\";\nimport normalizeUrl from \"normalize-url\";\nimport Response from \"responselike\";\nimport {\n\ttype CacheableOptions,\n\tCacheError,\n\ttype CacheResponse,\n\ttype CacheValue,\n\ttype Emitter,\n\tRequestError,\n\ttype RequestFn,\n\ttype UrlOption,\n} from \"./types.js\";\n\ntype Function_ = (...arguments_: any[]) => any;\n\nclass CacheableRequest {\n\tcache: Keyv = new Keyv<any>({ namespace: \"cacheable-request\" });\n\tcacheRequest: RequestFn;\n\thooks: Map<string, Function_> = new Map<string, Function_>();\n\tconstructor(cacheRequest: RequestFn, cacheAdapter?: any) {\n\t\tif (cacheAdapter) {\n\t\t\tif (cacheAdapter instanceof Keyv) {\n\t\t\t\tthis.cache = cacheAdapter;\n\t\t\t} else {\n\t\t\t\tthis.cache = new Keyv({\n\t\t\t\t\tstore: cacheAdapter,\n\t\t\t\t\tnamespace: \"cacheable-request\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis.request = this.request.bind(this);\n\t\tthis.cacheRequest = cacheRequest;\n\t}\n\n\trequest =\n\t\t() =>\n\t\t(\n\t\t\toptions: CacheableOptions,\n\t\t\tcallback?: (response: CacheResponse) => void,\n\t\t): Emitter => {\n\t\t\tlet url;\n\t\t\tif (typeof options === \"string\") {\n\t\t\t\turl = normalizeUrlObject(parseWithWhatwg(options));\n\t\t\t\toptions = {};\n\t\t\t} else if (options instanceof urlLib.URL) {\n\t\t\t\turl = normalizeUrlObject(parseWithWhatwg(options.toString()));\n\t\t\t\toptions = {};\n\t\t\t} else {\n\t\t\t\tconst [pathname, ...searchParts] = (options.path ?? \"\").split(\"?\");\n\t\t\t\tconst search =\n\t\t\t\t\tsearchParts.length > 0 ? `?${searchParts.join(\"?\")}` : \"\";\n\t\t\t\turl = normalizeUrlObject({ ...options, pathname, search });\n\t\t\t}\n\n\t\t\toptions = {\n\t\t\t\theaders: {},\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcache: true,\n\t\t\t\tstrictTtl: false,\n\t\t\t\tautomaticFailover: false,\n\t\t\t\t...options,\n\t\t\t\t...urlObjectToRequestOptions(url),\n\t\t\t};\n\t\t\toptions.headers = Object.fromEntries(\n\t\t\t\tentries(options.headers).map(([key, value]) => [\n\t\t\t\t\t(key as string).toLowerCase(),\n\t\t\t\t\tvalue,\n\t\t\t\t]),\n\t\t\t);\n\t\t\tconst ee: Emitter = new EventEmitter() as Emitter;\n\t\t\tconst normalizedUrlString = normalizeUrl(urlLib.format(url), {\n\t\t\t\tstripWWW: false,\n\t\t\t\tremoveTrailingSlash: false,\n\t\t\t\tstripAuthentication: false,\n\t\t\t});\n\t\t\tlet key = `${options.method}:${normalizedUrlString}`;\n\t\t\t// POST, PATCH, and PUT requests may be cached, depending on the response\n\t\t\t// cache-control headers. As a result, the body of the request should be\n\t\t\t// added to the cache key in order to avoid collisions.\n\t\t\tif (\n\t\t\t\toptions.body &&\n\t\t\t\toptions.method !== undefined &&\n\t\t\t\t[\"POST\", \"PATCH\", \"PUT\"].includes(options.method)\n\t\t\t) {\n\t\t\t\tif (options.body instanceof stream.Readable) {\n\t\t\t\t\t// Streamed bodies should completely skip the cache because they may\n\t\t\t\t\t// or may not be hashable and in either case the stream would need to\n\t\t\t\t\t// close before the cache key could be generated.\n\t\t\t\t\toptions.cache = false;\n\t\t\t\t} else {\n\t\t\t\t\tkey += `:${crypto.createHash(\"md5\").update(options.body).digest(\"hex\")}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet revalidate: any = false;\n\t\t\tlet madeRequest = false;\n\t\t\tconst makeRequest = (options_: any) => {\n\t\t\t\tmadeRequest = true;\n\t\t\t\tlet requestErrored = false;\n\t\t\t\t/* c8 ignore next 4 */\n\t\t\t\tlet requestErrorCallback: (...arguments_: any[]) => void = () => {\n\t\t\t\t\t/* do nothing */\n\t\t\t\t};\n\n\t\t\t\tconst requestErrorPromise = new Promise<void>((resolve) => {\n\t\t\t\t\trequestErrorCallback = () => {\n\t\t\t\t\t\tif (!requestErrored) {\n\t\t\t\t\t\t\trequestErrored = true;\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tconst handler = async (response: any) => {\n\t\t\t\t\tif (revalidate) {\n\t\t\t\t\t\tresponse.status = response.statusCode;\n\t\t\t\t\t\tconst revalidatedPolicy = CachePolicy.fromObject(\n\t\t\t\t\t\t\trevalidate.cachePolicy,\n\t\t\t\t\t\t).revalidatedPolicy(options_, response);\n\t\t\t\t\t\tif (!revalidatedPolicy.modified) {\n\t\t\t\t\t\t\tresponse.resume();\n\t\t\t\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\t\t\t\t// Skipping 'error' handler cause 'error' event should't be emitted for 304 response\n\t\t\t\t\t\t\t\tresponse.once(\"end\", resolve);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconst headers = convertHeaders(\n\t\t\t\t\t\t\t\trevalidatedPolicy.policy.responseHeaders(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponse = new Response({\n\t\t\t\t\t\t\t\tstatusCode: revalidate.statusCode,\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t\tbody: revalidate.body,\n\t\t\t\t\t\t\t\turl: revalidate.url,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tresponse.cachePolicy = revalidatedPolicy.policy;\n\t\t\t\t\t\t\tresponse.fromCache = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!response.fromCache) {\n\t\t\t\t\t\tresponse.cachePolicy = new CachePolicy(\n\t\t\t\t\t\t\toptions_,\n\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\toptions_,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresponse.fromCache = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet clonedResponse;\n\t\t\t\t\tif (options_.cache && response.cachePolicy.storable()) {\n\t\t\t\t\t\tclonedResponse = cloneResponse(response);\n\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst bodyPromise = getStreamAsBuffer(response);\n\t\t\t\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\t\t\t\trequestErrorPromise,\n\t\t\t\t\t\t\t\t\tnew Promise((resolve) => response.once(\"end\", resolve)),\n\t\t\t\t\t\t\t\t\tnew Promise((resolve) => response.once(\"close\", resolve)),\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tconst body = await bodyPromise;\n\t\t\t\t\t\t\t\tlet value: CacheValue = {\n\t\t\t\t\t\t\t\t\turl: response.url,\n\t\t\t\t\t\t\t\t\tstatusCode: response.fromCache\n\t\t\t\t\t\t\t\t\t\t? revalidate.statusCode\n\t\t\t\t\t\t\t\t\t\t: response.statusCode,\n\t\t\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\t\t\tcachePolicy: response.cachePolicy.toObject(),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tlet ttl = options_.strictTtl\n\t\t\t\t\t\t\t\t\t? response.cachePolicy.timeToLive()\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\t\tif (options_.maxTtl) {\n\t\t\t\t\t\t\t\t\tttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (this.hooks.size > 0) {\n\t\t\t\t\t\t\t\t\tfor (const key_ of this.hooks.keys()) {\n\t\t\t\t\t\t\t\t\t\tvalue = await this.runHook(key_, value, response);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tawait this.cache.set(key, value, ttl);\n\t\t\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\t\t\t/* c8 ignore next 2 */\n\t\t\t\t\t\t\t\tee.emit(\"error\", new CacheError(error));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})();\n\t\t\t\t\t} else if (options_.cache && revalidate) {\n\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait this.cache.delete(key);\n\t\t\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\t\t\t/* c8 ignore next 2 */\n\t\t\t\t\t\t\t\tee.emit(\"error\", new CacheError(error));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})();\n\t\t\t\t\t}\n\n\t\t\t\t\tee.emit(\"response\", clonedResponse ?? response);\n\t\t\t\t\tif (typeof callback === \"function\") {\n\t\t\t\t\t\tcallback(clonedResponse ?? response);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tconst request_ = this.cacheRequest(options_, handler);\n\t\t\t\t\trequest_.once(\"error\", requestErrorCallback);\n\t\t\t\t\trequest_.once(\"abort\", requestErrorCallback);\n\t\t\t\t\trequest_.once(\"destroy\", requestErrorCallback);\n\t\t\t\t\tee.emit(\"request\", request_);\n\t\t\t\t} catch (error: any) {\n\t\t\t\t\tee.emit(\"error\", new RequestError(error));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t(async () => {\n\t\t\t\tconst get = async (options_: any) => {\n\t\t\t\t\tawait Promise.resolve();\n\t\t\t\t\tconst cacheEntry = options_.cache\n\t\t\t\t\t\t? await this.cache.get(key)\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tif (cacheEntry === undefined && !options_.forceRefresh) {\n\t\t\t\t\t\tmakeRequest(options_);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst policy = CachePolicy.fromObject(\n\t\t\t\t\t\t(cacheEntry as CacheValue).cachePolicy,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tpolicy.satisfiesWithoutRevalidation(options_) &&\n\t\t\t\t\t\t!options_.forceRefresh\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst headers = convertHeaders(policy.responseHeaders());\n\t\t\t\t\t\tconst bodyBuffer = (cacheEntry as CacheValue).body;\n\t\t\t\t\t\tconst body = Buffer.from(bodyBuffer as string);\n\t\t\t\t\t\tconst response: any = new Response({\n\t\t\t\t\t\t\tstatusCode: (cacheEntry as CacheValue).statusCode,\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\turl: (cacheEntry as CacheValue).url,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresponse.cachePolicy = policy;\n\t\t\t\t\t\tresponse.fromCache = true;\n\t\t\t\t\t\tee.emit(\"response\", response);\n\t\t\t\t\t\tif (typeof callback === \"function\") {\n\t\t\t\t\t\t\tcallback(response);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tpolicy.satisfiesWithoutRevalidation(options_) &&\n\t\t\t\t\t\tDate.now() >= policy.timeToLive() &&\n\t\t\t\t\t\toptions_.forceRefresh\n\t\t\t\t\t) {\n\t\t\t\t\t\tawait this.cache.delete(key);\n\t\t\t\t\t\toptions_.headers = policy.revalidationHeaders(options_);\n\t\t\t\t\t\tmakeRequest(options_);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trevalidate = cacheEntry;\n\t\t\t\t\t\toptions_.headers = policy.revalidationHeaders(options_);\n\t\t\t\t\t\tmakeRequest(options_);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst errorHandler = (error: Error) =>\n\t\t\t\t\tee.emit(\"error\", new CacheError(error));\n\t\t\t\tif (this.cache instanceof Keyv) {\n\t\t\t\t\tconst cachek = this.cache;\n\t\t\t\t\tcachek.once(\"error\", errorHandler);\n\t\t\t\t\tee.on(\"error\", () => {\n\t\t\t\t\t\tcachek.removeListener(\"error\", errorHandler);\n\t\t\t\t\t});\n\t\t\t\t\tee.on(\"response\", () => {\n\t\t\t\t\t\tcachek.removeListener(\"error\", errorHandler);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait get(options);\n\t\t\t\t} catch (error: any) {\n\t\t\t\t\t/* c8 ignore next 3 */\n\t\t\t\t\tif (options.automaticFailover && !madeRequest) {\n\t\t\t\t\t\tmakeRequest(options);\n\t\t\t\t\t}\n\n\t\t\t\t\tee.emit(\"error\", new CacheError(error));\n\t\t\t\t}\n\t\t\t})();\n\n\t\t\treturn ee;\n\t\t};\n\n\taddHook = (name: string, function_: Function_) => {\n\t\tif (!this.hooks.has(name)) {\n\t\t\tthis.hooks.set(name, function_);\n\t\t}\n\t};\n\n\tremoveHook = (name: string) => this.hooks.delete(name);\n\n\tgetHook = (name: string) => this.hooks.get(name);\n\n\trunHook = async (name: string, ...arguments_: any[]): Promise<CacheValue> =>\n\t\tthis.hooks.get(name)?.(...arguments_);\n}\n\nconst entries = Object.entries as <T>(\n\tobject: T,\n) => Array<[keyof T, T[keyof T]]>;\n\nconst cloneResponse = (response: IncomingMessage) => {\n\tconst clone = new PassThroughStream({ autoDestroy: false });\n\tmimicResponse(response, clone);\n\n\treturn response.pipe(clone);\n};\n\nconst urlObjectToRequestOptions = (url: any) => {\n\tconst options: UrlOption = { ...url };\n\toptions.path = `${url.pathname || \"/\"}${url.search || \"\"}`;\n\tdelete options.pathname;\n\tdelete options.search;\n\treturn options;\n};\n\nconst normalizeUrlObject = (url: any) =>\n\t// If url was parsed by url.parse or new URL:\n\t// - hostname will be set\n\t// - host will be hostname[:port]\n\t// - port will be set if it was explicit in the parsed string\n\t// Otherwise, url was from request options:\n\t// - hostname or host may be set\n\t// - host shall not have port encoded\n\t({\n\t\tprotocol: url.protocol,\n\t\tauth: url.auth,\n\t\thostname: url.hostname || url.host || \"localhost\",\n\t\tport: url.port,\n\t\tpathname: url.pathname,\n\t\tsearch: url.search,\n\t});\n\nconst convertHeaders = (headers: CachePolicy.Headers) => {\n\tconst result: any = [];\n\tfor (const name of Object.keys(headers)) {\n\t\tresult[name.toLowerCase()] = headers[name];\n\t}\n\n\treturn result;\n};\n\nexport const parseWithWhatwg = (raw: string) => {\n\tconst u = new URL(raw);\n\n\t// If normalizeUrlObject expects the same fields as url.parse()\n\treturn {\n\t\tprotocol: u.protocol, // E.g. 'https:'\n\t\tslashes: true, // Always true for WHATWG URLs\n\t\t/* c8 ignore next 3 */\n\t\tauth: u.username || u.password ? `${u.username}:${u.password}` : undefined,\n\t\thost: u.host, // E.g. 'example.com:8080'\n\t\tport: u.port, // E.g. '8080'\n\t\thostname: u.hostname, // E.g. 'example.com'\n\t\thash: u.hash, // E.g. '#quux'\n\t\tsearch: u.search, // E.g. '?bar=baz'\n\t\tquery: Object.fromEntries(u.searchParams), // { bar: 'baz' }\n\t\tpathname: u.pathname, // E.g. '/foo'\n\t\tpath: u.pathname + u.search, // '/foo?bar=baz'\n\t\thref: u.href, // Full serialized URL\n\t};\n};\n\nexport default CacheableRequest;\nexport * from \"./types.js\";\nexport const onResponse = \"onResponse\";\n"]} |
+60
-60
@@ -1,7 +0,7 @@ | ||
| import { request, RequestOptions, ClientRequest, ServerResponse } from 'node:http'; | ||
| import { URL } from 'node:url'; | ||
| import { EventEmitter } from 'node:events'; | ||
| import { Buffer } from 'node:buffer'; | ||
| import ResponseLike from 'responselike'; | ||
| import { CachePolicyObject } from 'http-cache-semantics'; | ||
| import type { Buffer } from "node:buffer"; | ||
| import type { EventEmitter } from "node:events"; | ||
| import type { ClientRequest, RequestOptions, request, ServerResponse } from "node:http"; | ||
| import type { URL } from "node:url"; | ||
| import type { CachePolicyObject } from "http-cache-semantics"; | ||
| import type ResponseLike from "responselike"; | ||
| export type RequestFn = typeof request; | ||
@@ -11,33 +11,33 @@ export type RequestFunction = typeof request; | ||
| export type CacheableRequestFunction = (options: CacheableOptions, callback?: (response: CacheResponse) => void) => Emitter; | ||
| export type CacheableOptions = Options & RequestOptions | string | URL; | ||
| export type CacheableOptions = (Options & RequestOptions) | string | URL; | ||
| export interface Options { | ||
| /** | ||
| * If the cache should be used. Setting this to `false` will completely bypass the cache for the current request. | ||
| * @default true | ||
| */ | ||
| * If the cache should be used. Setting this to `false` will completely bypass the cache for the current request. | ||
| * @default true | ||
| */ | ||
| cache?: boolean | undefined; | ||
| /** | ||
| * If set to `true` once a cached resource has expired it is deleted and will have to be re-requested. | ||
| * | ||
| * If set to `false`, after a cached resource's TTL expires it is kept in the cache and will be revalidated | ||
| * on the next request with `If-None-Match`/`If-Modified-Since` headers. | ||
| * @default false | ||
| */ | ||
| * If set to `true` once a cached resource has expired it is deleted and will have to be re-requested. | ||
| * | ||
| * If set to `false`, after a cached resource's TTL expires it is kept in the cache and will be revalidated | ||
| * on the next request with `If-None-Match`/`If-Modified-Since` headers. | ||
| * @default false | ||
| */ | ||
| strictTtl?: boolean | undefined; | ||
| /** | ||
| * Limits TTL. The `number` represents milliseconds. | ||
| * @default undefined | ||
| */ | ||
| * Limits TTL. The `number` represents milliseconds. | ||
| * @default undefined | ||
| */ | ||
| maxTtl?: number | undefined; | ||
| /** | ||
| * When set to `true`, if the DB connection fails we will automatically fallback to a network request. | ||
| * DB errors will still be emitted to notify you of the problem even though the request callback may succeed. | ||
| * @default false | ||
| */ | ||
| * When set to `true`, if the DB connection fails we will automatically fallback to a network request. | ||
| * DB errors will still be emitted to notify you of the problem even though the request callback may succeed. | ||
| * @default false | ||
| */ | ||
| automaticFailover?: boolean | undefined; | ||
| /** | ||
| * Forces refreshing the cache. If the response could be retrieved from the cache, it will perform a | ||
| * new request and override the cache instead. | ||
| * @default false | ||
| */ | ||
| * Forces refreshing the cache. If the response could be retrieved from the cache, it will perform a | ||
| * new request and override the cache instead. | ||
| * @default false | ||
| */ | ||
| forceRefresh?: boolean | undefined; | ||
@@ -56,35 +56,35 @@ remoteAddress?: boolean | undefined; | ||
| export interface Emitter extends EventEmitter { | ||
| addListener(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| addListener(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| addListener(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| on(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| on(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| on(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| once(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| once(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| once(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| prependListener(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| prependListener(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| prependListener(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| prependOnceListener(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| prependOnceListener(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| prependOnceListener(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| removeListener(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| removeListener(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| removeListener(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| off(event: 'request', listener: (request: ClientRequest) => void): this; | ||
| off(event: 'response', listener: (response: CacheResponse) => void): this; | ||
| off(event: 'error', listener: (error: RequestError | CacheError) => void): this; | ||
| removeAllListeners(event?: 'request' | 'response' | 'error'): this; | ||
| listeners(event: 'request'): Array<(request: ClientRequest) => void>; | ||
| listeners(event: 'response'): Array<(response: CacheResponse) => void>; | ||
| listeners(event: 'error'): Array<(error: RequestError | CacheError) => void>; | ||
| rawListeners(event: 'request'): Array<(request: ClientRequest) => void>; | ||
| rawListeners(event: 'response'): Array<(response: CacheResponse) => void>; | ||
| rawListeners(event: 'error'): Array<(error: RequestError | CacheError) => void>; | ||
| emit(event: 'request', request: ClientRequest): boolean; | ||
| emit(event: 'response', response: CacheResponse): boolean; | ||
| emit(event: 'error', error: RequestError | CacheError): boolean; | ||
| eventNames(): Array<'request' | 'response' | 'error'>; | ||
| listenerCount(type: 'request' | 'response' | 'error'): number; | ||
| addListener(event: "request", listener: (request: ClientRequest) => void): this; | ||
| addListener(event: "response", listener: (response: CacheResponse) => void): this; | ||
| addListener(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| on(event: "request", listener: (request: ClientRequest) => void): this; | ||
| on(event: "response", listener: (response: CacheResponse) => void): this; | ||
| on(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| once(event: "request", listener: (request: ClientRequest) => void): this; | ||
| once(event: "response", listener: (response: CacheResponse) => void): this; | ||
| once(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| prependListener(event: "request", listener: (request: ClientRequest) => void): this; | ||
| prependListener(event: "response", listener: (response: CacheResponse) => void): this; | ||
| prependListener(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| prependOnceListener(event: "request", listener: (request: ClientRequest) => void): this; | ||
| prependOnceListener(event: "response", listener: (response: CacheResponse) => void): this; | ||
| prependOnceListener(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| removeListener(event: "request", listener: (request: ClientRequest) => void): this; | ||
| removeListener(event: "response", listener: (response: CacheResponse) => void): this; | ||
| removeListener(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| off(event: "request", listener: (request: ClientRequest) => void): this; | ||
| off(event: "response", listener: (response: CacheResponse) => void): this; | ||
| off(event: "error", listener: (error: RequestError | CacheError) => void): this; | ||
| removeAllListeners(event?: "request" | "response" | "error"): this; | ||
| listeners(event: "request"): Array<(request: ClientRequest) => void>; | ||
| listeners(event: "response"): Array<(response: CacheResponse) => void>; | ||
| listeners(event: "error"): Array<(error: RequestError | CacheError) => void>; | ||
| rawListeners(event: "request"): Array<(request: ClientRequest) => void>; | ||
| rawListeners(event: "response"): Array<(response: CacheResponse) => void>; | ||
| rawListeners(event: "error"): Array<(error: RequestError | CacheError) => void>; | ||
| emit(event: "request", request: ClientRequest): boolean; | ||
| emit(event: "response", response: CacheResponse): boolean; | ||
| emit(event: "error", error: RequestError | CacheError): boolean; | ||
| eventNames(): Array<"request" | "response" | "error">; | ||
| listenerCount(type: "request" | "response" | "error"): number; | ||
| } | ||
@@ -91,0 +91,0 @@ export declare class RequestError extends Error { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,kEAAkE;AAClE,mEAAmE;AACnE,kEAAkE;AAClE,kEAAkE;AAClE,0BAA0B;AAgI1B,MAAM,OAAO,YAAa,SAAQ,KAAK;IACtC,YAAY,KAAY;QACvB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;CACD;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK;IACpC,YAAY,KAAY;QACvB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;CACD","sourcesContent":["// Type definitions for cacheable-request 6.0\n// Project: https://github.com/lukechilds/cacheable-request#readme\n// Definitions by: BendingBender <https://github.com/BendingBender>\n// Paul Melnikow <https://github.com/paulmelnikow>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// <reference types=\"node\" />\n\nimport {\n\trequest, RequestOptions, ClientRequest, ServerResponse,\n} from 'node:http';\nimport {URL} from 'node:url';\nimport {EventEmitter} from 'node:events';\nimport {Buffer} from 'node:buffer';\nimport ResponseLike from 'responselike';\nimport {CachePolicyObject} from 'http-cache-semantics';\n\nexport type RequestFn = typeof request;\nexport type RequestFunction = typeof request;\nexport type CacheResponse = ServerResponse | typeof ResponseLike;\n\nexport type CacheableRequestFunction = (\n\toptions: CacheableOptions,\n\tcallback?: (response: CacheResponse) => void\n) => Emitter;\n\nexport type CacheableOptions = Options & RequestOptions | string | URL;\n\nexport interface Options {\n\t/**\n\t\t\t * If the cache should be used. Setting this to `false` will completely bypass the cache for the current request.\n\t\t\t * @default true\n\t\t\t */\n\tcache?: boolean | undefined;\n\n\t/**\n\t\t\t * If set to `true` once a cached resource has expired it is deleted and will have to be re-requested.\n\t\t\t *\n\t\t\t * If set to `false`, after a cached resource's TTL expires it is kept in the cache and will be revalidated\n\t\t\t * on the next request with `If-None-Match`/`If-Modified-Since` headers.\n\t\t\t * @default false\n\t\t\t */\n\tstrictTtl?: boolean | undefined;\n\n\t/**\n\t\t\t * Limits TTL. The `number` represents milliseconds.\n\t\t\t * @default undefined\n\t\t\t */\n\tmaxTtl?: number | undefined;\n\n\t/**\n\t\t\t * When set to `true`, if the DB connection fails we will automatically fallback to a network request.\n\t\t\t * DB errors will still be emitted to notify you of the problem even though the request callback may succeed.\n\t\t\t * @default false\n\t\t\t */\n\tautomaticFailover?: boolean | undefined;\n\n\t/**\n * Forces refreshing the cache. If the response could be retrieved from the cache, it will perform a\n * new request and override the cache instead.\n * @default false\n */\n\tforceRefresh?: boolean | undefined;\n\tremoteAddress?: boolean | undefined;\n\n\turl?: string | undefined;\n\n\theaders?: Record<string, string | string[] | undefined>;\n\n\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\tbody?: Buffer;\n}\n\nexport interface CacheValue extends Record<string, any> {\n\turl: string;\n\tstatusCode: number;\n\t// eslint-disable-next-line @typescript-eslint/no-restricted-types\n\tbody: Buffer | string;\n\tcachePolicy: CachePolicyObject;\n}\n\nexport interface Emitter extends EventEmitter {\n\taddListener(event: 'request', listener: (request: ClientRequest) => void): this;\n\taddListener(\n\t\tevent: 'response',\n\t\tlistener: (response: CacheResponse) => void\n\t): this;\n\taddListener(event: 'error', listener: (error: RequestError | CacheError) => void): this;\n\ton(event: 'request', listener: (request: ClientRequest) => void): this;\n\ton(event: 'response', listener: (response: CacheResponse) => void): this;\n\ton(event: 'error', listener: (error: RequestError | CacheError) => void): this;\n\tonce(event: 'request', listener: (request: ClientRequest) => void): this;\n\tonce(event: 'response', listener: (response: CacheResponse) => void): this;\n\tonce(event: 'error', listener: (error: RequestError | CacheError) => void): this;\n\tprependListener(event: 'request', listener: (request: ClientRequest) => void): this;\n\tprependListener(\n\t\tevent: 'response',\n\t\tlistener: (response: CacheResponse) => void\n\t): this;\n\tprependListener(event: 'error', listener: (error: RequestError | CacheError) => void): this;\n\tprependOnceListener(event: 'request', listener: (request: ClientRequest) => void): this;\n\tprependOnceListener(\n\t\tevent: 'response',\n\t\tlistener: (response: CacheResponse) => void\n\t): this;\n\tprependOnceListener(\n\t\tevent: 'error',\n\t\tlistener: (error: RequestError | CacheError) => void\n\t): this;\n\tremoveListener(event: 'request', listener: (request: ClientRequest) => void): this;\n\tremoveListener(\n\t\tevent: 'response',\n\t\tlistener: (response: CacheResponse) => void\n\t): this;\n\tremoveListener(event: 'error', listener: (error: RequestError | CacheError) => void): this;\n\toff(event: 'request', listener: (request: ClientRequest) => void): this;\n\toff(event: 'response', listener: (response: CacheResponse) => void): this;\n\toff(event: 'error', listener: (error: RequestError | CacheError) => void): this;\n\tremoveAllListeners(event?: 'request' | 'response' | 'error'): this;\n\tlisteners(event: 'request'): Array<(request: ClientRequest) => void>;\n\tlisteners(event: 'response'): Array<(response: CacheResponse) => void>;\n\tlisteners(event: 'error'): Array<(error: RequestError | CacheError) => void>;\n\trawListeners(event: 'request'): Array<(request: ClientRequest) => void>;\n\trawListeners(event: 'response'): Array<(response: CacheResponse) => void>;\n\trawListeners(event: 'error'): Array<(error: RequestError | CacheError) => void>;\n\temit(event: 'request', request: ClientRequest): boolean;\n\temit(event: 'response', response: CacheResponse): boolean;\n\temit(event: 'error', error: RequestError | CacheError): boolean;\n\teventNames(): Array<'request' | 'response' | 'error'>;\n\tlistenerCount(type: 'request' | 'response' | 'error'): number;\n}\n\nexport class RequestError extends Error {\n\tconstructor(error: Error) {\n\t\tsuper(error.message);\n\t\tObject.defineProperties(this, Object.getOwnPropertyDescriptors(error));\n\t}\n}\n\nexport class CacheError extends Error {\n\tconstructor(error: Error) {\n\t\tsuper(error.message);\n\t\tObject.defineProperties(this, Object.getOwnPropertyDescriptors(error));\n\t}\n}\n\nexport interface UrlOption {\n\tpath: string;\n\tpathname?: string;\n\tsearch?: string;\n}\n"]} | ||
| {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,kEAAkE;AAClE,mEAAmE;AACnE,kEAAkE;AAClE,kEAAkE;AAClE,0BAA0B;AAkK1B,MAAM,OAAO,YAAa,SAAQ,KAAK;IACtC,YAAY,KAAY;QACvB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;CACD;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK;IACpC,YAAY,KAAY;QACvB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;CACD","sourcesContent":["// Type definitions for cacheable-request 6.0\n// Project: https://github.com/lukechilds/cacheable-request#readme\n// Definitions by: BendingBender <https://github.com/BendingBender>\n// Paul Melnikow <https://github.com/paulmelnikow>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// <reference types=\"node\" />\n\nimport type { Buffer } from \"node:buffer\";\nimport type { EventEmitter } from \"node:events\";\nimport type {\n\tClientRequest,\n\tRequestOptions,\n\trequest,\n\tServerResponse,\n} from \"node:http\";\nimport type { URL } from \"node:url\";\nimport type { CachePolicyObject } from \"http-cache-semantics\";\nimport type ResponseLike from \"responselike\";\n\nexport type RequestFn = typeof request;\nexport type RequestFunction = typeof request;\nexport type CacheResponse = ServerResponse | typeof ResponseLike;\n\nexport type CacheableRequestFunction = (\n\toptions: CacheableOptions,\n\tcallback?: (response: CacheResponse) => void,\n) => Emitter;\n\nexport type CacheableOptions = (Options & RequestOptions) | string | URL;\n\nexport interface Options {\n\t/**\n\t * If the cache should be used. Setting this to `false` will completely bypass the cache for the current request.\n\t * @default true\n\t */\n\tcache?: boolean | undefined;\n\n\t/**\n\t * If set to `true` once a cached resource has expired it is deleted and will have to be re-requested.\n\t *\n\t * If set to `false`, after a cached resource's TTL expires it is kept in the cache and will be revalidated\n\t * on the next request with `If-None-Match`/`If-Modified-Since` headers.\n\t * @default false\n\t */\n\tstrictTtl?: boolean | undefined;\n\n\t/**\n\t * Limits TTL. The `number` represents milliseconds.\n\t * @default undefined\n\t */\n\tmaxTtl?: number | undefined;\n\n\t/**\n\t * When set to `true`, if the DB connection fails we will automatically fallback to a network request.\n\t * DB errors will still be emitted to notify you of the problem even though the request callback may succeed.\n\t * @default false\n\t */\n\tautomaticFailover?: boolean | undefined;\n\n\t/**\n\t * Forces refreshing the cache. If the response could be retrieved from the cache, it will perform a\n\t * new request and override the cache instead.\n\t * @default false\n\t */\n\tforceRefresh?: boolean | undefined;\n\tremoteAddress?: boolean | undefined;\n\n\turl?: string | undefined;\n\n\theaders?: Record<string, string | string[] | undefined>;\n\n\tbody?: Buffer;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: type\nexport interface CacheValue extends Record<string, any> {\n\turl: string;\n\tstatusCode: number;\n\tbody: Buffer | string;\n\tcachePolicy: CachePolicyObject;\n}\n\nexport interface Emitter extends EventEmitter {\n\taddListener(\n\t\tevent: \"request\",\n\t\tlistener: (request: ClientRequest) => void,\n\t): this;\n\taddListener(\n\t\tevent: \"response\",\n\t\tlistener: (response: CacheResponse) => void,\n\t): this;\n\taddListener(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\ton(event: \"request\", listener: (request: ClientRequest) => void): this;\n\ton(event: \"response\", listener: (response: CacheResponse) => void): this;\n\ton(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\tonce(event: \"request\", listener: (request: ClientRequest) => void): this;\n\tonce(event: \"response\", listener: (response: CacheResponse) => void): this;\n\tonce(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\tprependListener(\n\t\tevent: \"request\",\n\t\tlistener: (request: ClientRequest) => void,\n\t): this;\n\tprependListener(\n\t\tevent: \"response\",\n\t\tlistener: (response: CacheResponse) => void,\n\t): this;\n\tprependListener(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\tprependOnceListener(\n\t\tevent: \"request\",\n\t\tlistener: (request: ClientRequest) => void,\n\t): this;\n\tprependOnceListener(\n\t\tevent: \"response\",\n\t\tlistener: (response: CacheResponse) => void,\n\t): this;\n\tprependOnceListener(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\tremoveListener(\n\t\tevent: \"request\",\n\t\tlistener: (request: ClientRequest) => void,\n\t): this;\n\tremoveListener(\n\t\tevent: \"response\",\n\t\tlistener: (response: CacheResponse) => void,\n\t): this;\n\tremoveListener(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\toff(event: \"request\", listener: (request: ClientRequest) => void): this;\n\toff(event: \"response\", listener: (response: CacheResponse) => void): this;\n\toff(\n\t\tevent: \"error\",\n\t\tlistener: (error: RequestError | CacheError) => void,\n\t): this;\n\tremoveAllListeners(event?: \"request\" | \"response\" | \"error\"): this;\n\tlisteners(event: \"request\"): Array<(request: ClientRequest) => void>;\n\tlisteners(event: \"response\"): Array<(response: CacheResponse) => void>;\n\tlisteners(event: \"error\"): Array<(error: RequestError | CacheError) => void>;\n\trawListeners(event: \"request\"): Array<(request: ClientRequest) => void>;\n\trawListeners(event: \"response\"): Array<(response: CacheResponse) => void>;\n\trawListeners(\n\t\tevent: \"error\",\n\t): Array<(error: RequestError | CacheError) => void>;\n\temit(event: \"request\", request: ClientRequest): boolean;\n\temit(event: \"response\", response: CacheResponse): boolean;\n\temit(event: \"error\", error: RequestError | CacheError): boolean;\n\teventNames(): Array<\"request\" | \"response\" | \"error\">;\n\tlistenerCount(type: \"request\" | \"response\" | \"error\"): number;\n}\n\nexport class RequestError extends Error {\n\tconstructor(error: Error) {\n\t\tsuper(error.message);\n\t\tObject.defineProperties(this, Object.getOwnPropertyDescriptors(error));\n\t}\n}\n\nexport class CacheError extends Error {\n\tconstructor(error: Error) {\n\t\tsuper(error.message);\n\t\tObject.defineProperties(this, Object.getOwnPropertyDescriptors(error));\n\t}\n}\n\nexport interface UrlOption {\n\tpath: string;\n\tpathname?: string;\n\tsearch?: string;\n}\n"]} |
+8
-32
| { | ||
| "name": "cacheable-request", | ||
| "version": "13.0.9", | ||
| "version": "13.0.10", | ||
| "description": "Wrap native HTTP requests with RFC compliant cache support", | ||
@@ -41,3 +41,3 @@ "license": "MIT", | ||
| "http-cache-semantics": "^4.2.0", | ||
| "keyv": "^5.5.0", | ||
| "keyv": "^5.5.1", | ||
| "mimic-response": "^4.0.0", | ||
@@ -48,5 +48,6 @@ "normalize-url": "^8.0.2", | ||
| "devDependencies": { | ||
| "@biomejs/biome": "^2.2.3", | ||
| "@keyv/sqlite": "^4.0.5", | ||
| "@types/express": "^5.0.3", | ||
| "@types/node": "^24.2.0", | ||
| "@types/node": "^24.3.1", | ||
| "@types/responselike": "^1.0.3", | ||
@@ -62,33 +63,8 @@ "@vitest/coverage-v8": "^3.2.4", | ||
| "typescript": "^5.9.2", | ||
| "vitest": "^3.2.4", | ||
| "xo": "^1.2.1" | ||
| "vitest": "^3.2.4" | ||
| }, | ||
| "xo": { | ||
| "rules": { | ||
| "@typescript-eslint/triple-slash-reference": 0, | ||
| "@typescript-eslint/no-namespace": 0, | ||
| "@typescript-eslint/no-unsafe-assignment": 0, | ||
| "@typescript-eslint/no-unsafe-call": 0, | ||
| "@typescript-eslint/ban-types": 0, | ||
| "@typescript-eslint/restrict-template-expressions": 0, | ||
| "@typescript-eslint/no-unsafe-return": 0, | ||
| "@typescript-eslint/no-unsafe-argument": 0, | ||
| "new-cap": 0, | ||
| "unicorn/no-abusive-eslint-disable": 0, | ||
| "@typescript-eslint/restrict-plus-operands": 0, | ||
| "@typescript-eslint/no-implicit-any-catch": 0, | ||
| "@typescript-eslint/consistent-type-imports": 0, | ||
| "@typescript-eslint/consistent-type-definitions": 0, | ||
| "@typescript-eslint/prefer-nullish-coalescing": 0, | ||
| "n/prefer-global/url": 0, | ||
| "n/no-deprecated-api": 0, | ||
| "unicorn/prefer-event-target": 0, | ||
| "@typescript-eslint/no-unnecessary-type-assertion": 0, | ||
| "promise/prefer-await-to-then": 0, | ||
| "@typescript-eslint/no-unnecessary-boolean-literal-compare": 0 | ||
| } | ||
| }, | ||
| "scripts": { | ||
| "test": "xo --fix && vitest run --coverage", | ||
| "test:ci": "xo && vitest run --coverage", | ||
| "lint": "biome check --write --error-on-warnings", | ||
| "test": "pnpm lint && vitest run --coverage", | ||
| "test:ci": "biome check --error-on-warnings && vitest run --coverage", | ||
| "prepublish": "pnpm run build", | ||
@@ -95,0 +71,0 @@ "build": "rimraf ./dist && tsc --project tsconfig.build.json", |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
75523
0.17%473
2.83%1
-75%1
-50%Updated