dbl-utils
Version:
Utilities for dbl, adba and others projects
1 lines • 7.57 kB
Source Map (JSON)
{"version":3,"names":["cov_1sddzslb0a","actualCoverage","js_md5_1","s","require","FetchQueue","constructor","fetchFn","f","queue","isRunning","addRequest","url","options","hash","createHash","b","Promise","resolve","reject","push","runQueue","Object","keys","length","response","forEach","r","error","optionsString","JSON","stringify","md5","exports","default"],"sources":["/home/diablo/dev/dbl-utils/src/fetch-queue.ts"],"sourcesContent":["import { md5 } from 'js-md5';\r\n\r\n/**\r\n * Options for the fetch request.\r\n */\r\ninterface RequestOptions {\r\n url: string;\r\n options?: RequestInit;\r\n resolve: ((value: any) => void)[];\r\n reject: ((reason?: any) => void)[];\r\n}\r\n\r\n/**\r\n * A queue to manage fetch requests with unique identification.\r\n */\r\nexport default class FetchQueue {\r\n private queue: Record<string, RequestOptions> = {};\r\n private isRunning: boolean = false;\r\n private fetchFn: (url: string, options?: RequestInit) => Promise<any>;\r\n\r\n /**\r\n * \r\n * @param {Function} fetchFn - A fetch function (e.g., node-fetch or window.fetch).\r\n */\r\n constructor(fetchFn: (url: string, options?: RequestInit) => Promise<any>) {\r\n this.fetchFn = fetchFn;\r\n }\r\n\r\n /**\r\n * Adds a fetch request to the queue.\r\n * @param {string} url - The URL to fetch.\r\n * @param {RequestInit} [options] - Optional fetch options.\r\n * @returns {Promise<any>} - A promise that resolves with the fetch response.\r\n */\r\n public addRequest(url: string, options?: RequestInit): Promise<any> {\r\n const hash = this.createHash(url, options);\r\n\r\n if (this.queue[hash]) {\r\n return new Promise((resolve, reject) => {\r\n this.queue[hash].resolve.push(resolve);\r\n this.queue[hash].reject.push(reject);\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.queue[hash] = { url, options, resolve: [resolve], reject: [reject] };\r\n this.runQueue();\r\n });\r\n }\r\n\r\n /**\r\n * Runs the queue of fetch requests.\r\n */\r\n private async runQueue(): Promise<void> {\r\n if (this.isRunning) return;\r\n this.isRunning = true;\r\n\r\n while (Object.keys(this.queue).length > 0) {\r\n const hash = Object.keys(this.queue)[0];\r\n const { url, options, resolve, reject } = this.queue[hash];\r\n\r\n try {\r\n const response = await this.fetchFn(url, options);\r\n resolve.forEach(r => r(response));\r\n delete this.queue[hash];\r\n } catch (error) {\r\n reject.forEach(r => r(error));\r\n delete this.queue[hash];\r\n }\r\n }\r\n\r\n this.isRunning = false;\r\n }\r\n\r\n /**\r\n * Creates a hash to uniquely identify a request.\r\n * @param {string} url - The URL to fetch.\r\n * @param {RequestInit} [options] - Optional fetch options.\r\n * @returns {string} - A hash representing the unique request.\r\n */\r\n private createHash(url: string, options?: RequestInit): string {\r\n const optionsString = JSON.stringify(options || {});\r\n return md5(url + optionsString);\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","ignoreList":[]}