diff --git a/src/source.ts b/src/source.ts index f7aa0df..eab2696 100644 --- a/src/source.ts +++ b/src/source.ts @@ -343,6 +343,9 @@ export type UrlSourceOptions = { /** The maximum number of bytes the cache is allowed to hold in memory. Defaults to 64 MiB. */ maxCacheSize?: number; + /** The maximum number of parallel workers to use for fetching. Defaults to 2. */ + parallelism?: number; + /** * A WHATWG-compatible fetch function. You can use this field to polyfill the `fetch` function, add missing * features, or use a custom implementation. @@ -403,6 +406,9 @@ export class UrlSource extends Source { ) { throw new TypeError('options.maxCacheSize, when provided, must be a non-negative number.'); } + if (options.parallelism !== undefined && (!isNumber(options.parallelism) || options.parallelism < 1)) { + throw new TypeError('options.parallelism, when provided, must be a positive number.'); + } if (options.fetchFn !== undefined && typeof options.fetchFn !== 'function') { throw new TypeError('options.fetchFn, when provided, must be a function.'); // Won't bother validating this function beyond this @@ -418,7 +424,7 @@ export class UrlSource extends Source { maxCacheSize: options.maxCacheSize ?? (64 * 2 ** 20 /* 64 MiB */), // Most files in the real-world have a single sequential access pattern, but having two in parallel can // also happen - maxWorkerCount: 2, + maxWorkerCount: options.parallelism ?? 2, runWorker: this._runWorker.bind(this), prefetchProfile: PREFETCH_PROFILES.network, });