Skip to content

Commit 92b0009

Browse files
rizalibnumsluszniak
authored andcommitted
refactor: simplify ResourceFetcherAdapter interface
1 parent 4020294 commit 92b0009

3 files changed

Lines changed: 45 additions & 37 deletions

File tree

packages/bare-resource-fetcher/src/ResourceFetcher.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ interface BareResourceFetcherInterface extends ResourceFetcherAdapter {
3838
resume(source: ResourceSource): Promise<string[] | null>;
3939
cancel(source: ResourceSource): Promise<void>;
4040
findActive(sources: ResourceSource[]): ResourceSource;
41+
pauseFetching(...sources: ResourceSource[]): Promise<void>;
42+
resumeFetching(...sources: ResourceSource[]): Promise<void>;
43+
cancelFetching(...sources: ResourceSource[]): Promise<void>;
44+
listDownloadedFiles(): Promise<string[]>;
45+
listDownloadedModels(): Promise<string[]>;
46+
deleteResources(...sources: ResourceSource[]): Promise<void>;
47+
getFilesTotalSize(...sources: ResourceSource[]): Promise<number>;
4148
handleObject(source: ResourceSource): Promise<string>;
4249
handleLocalFile(source: ResourceSource): string;
4350
handleReleaseModeFile(

packages/expo-resource-fetcher/src/ResourceFetcher.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ interface ExpoResourceFetcherInterface extends ResourceFetcherAdapter {
3939
resume(source: ResourceSource): Promise<string[] | null>;
4040
cancel(source: ResourceSource): Promise<void>;
4141
findActive(sources: ResourceSource[]): ResourceSource;
42+
pauseFetching(...sources: ResourceSource[]): Promise<void>;
43+
resumeFetching(...sources: ResourceSource[]): Promise<void>;
44+
cancelFetching(...sources: ResourceSource[]): Promise<void>;
45+
listDownloadedFiles(): Promise<string[]>;
46+
listDownloadedModels(): Promise<string[]>;
47+
deleteResources(...sources: ResourceSource[]): Promise<void>;
48+
getFilesTotalSize(...sources: ResourceSource[]): Promise<number>;
4249
handleObject(source: ResourceSource): Promise<string>;
4350
handleLocalFile(source: ResourceSource): string;
4451
handleReleaseModeFile(

packages/react-native-executorch/src/utils/ResourceFetcher.ts

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,43 @@
1-
/**
2-
* Resource Fetcher
3-
*
4-
* Provides an interface for downloading files (via `ResourceFetcher.fetch()`)
5-
*
6-
* Key functionality:
7-
* - Download control: pause, resume, and cancel operations through:
8-
* - Single file: `.pauseFetching()`, `.resumeFetching()`, `.cancelFetching()`
9-
* - Downloaded file management:
10-
* - `.getFilesTotalSize()`, `.listDownloadedFiles()`, `.listDownloadedModels()`, `.deleteResources()`
11-
*
12-
* Remark: The pausing/resuming/canceling works only for fetching remote resources.
13-
*
14-
* Most exported functions accept:
15-
* - Multiple `ResourceSource` arguments, (union type of string, number or object)
16-
*
17-
* Method `.fetch()` takes argument as callback that reports download progress.
18-
* Method`.fetch()` returns array of paths to successfully saved files or null if the download was paused or cancelled (then resume functions can return paths).
19-
*
20-
* Technical Implementation:
21-
* - Maintains a `downloads` Map instance that tracks:
22-
* - Currently downloading resources
23-
* - Paused downloads
24-
* - Successful downloads are automatically removed from the `downloads` Map
25-
* - Uses the `ResourceSourceExtended` interface to enable pause/resume functionality:
26-
* - Wraps user-provided `ResourceSource` elements
27-
* - Implements linked list behavior via the `.next` attribute
28-
* - Automatically processes subsequent downloads when `.next` contains a valid resource
29-
*/
30-
311
import { ResourceSource } from '../types/common';
322
import { RnExecutorchError } from '../errors/errorUtils';
333
import { RnExecutorchErrorCode } from '../errors/ErrorCodes';
344

5+
/**
6+
* Adapter interface for resource fetching operations.
7+
*
8+
* **Required Methods:**
9+
* - {@link fetch}: Download resources to local storage (used by all modules)
10+
* - {@link readAsString}: Read file contents as string (used for config files)
11+
*
12+
* @remarks
13+
* This interface is intentionally minimal. Custom fetchers only need to implement
14+
* these two methods for the library to function correctly.
15+
*/
3516
export interface ResourceFetcherAdapter {
17+
/**
18+
* Download resources to local storage.
19+
*
20+
* @param callback - Progress callback (0-100)
21+
* @param sources - One or more resources to download
22+
* @returns Array of local file paths, or null if download was interrupted
23+
*
24+
* @remarks
25+
* **REQUIRED**: Used by all library modules for downloading models and resources.
26+
*/
3627
fetch(
3728
callback: (downloadProgress: number) => void,
3829
...sources: ResourceSource[]
3930
): Promise<string[] | null>;
40-
pauseFetching(...sources: ResourceSource[]): Promise<void>;
41-
resumeFetching(...sources: ResourceSource[]): Promise<void>;
42-
cancelFetching(...sources: ResourceSource[]): Promise<void>;
43-
listDownloadedFiles(): Promise<string[]>;
44-
listDownloadedModels(): Promise<string[]>;
45-
deleteResources(...sources: ResourceSource[]): Promise<void>;
46-
getFilesTotalSize(...sources: ResourceSource[]): Promise<number>;
31+
32+
/**
33+
* Read file contents as a string.
34+
*
35+
* @param path - Absolute file path
36+
* @returns File contents as string
37+
*
38+
* @remarks
39+
* **REQUIRED**: Used internally for reading configuration files (e.g., tokenizer configs).
40+
*/
4741
readAsString(path: string): Promise<string>;
4842
}
4943

0 commit comments

Comments
 (0)