@dynlabs/react-native-immutable-file-cache 1.0.0-alpha.3 → 1.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/adapters/rnfsAdapter.js +38 -23
- package/lib/commonjs/adapters/rnfsAdapter.js.map +1 -1
- package/lib/module/adapters/rnfsAdapter.js +18 -2
- package/lib/module/adapters/rnfsAdapter.js.map +1 -1
- package/lib/typescript/src/adapters/rnfsAdapter.d.ts +70 -1
- package/lib/typescript/src/adapters/rnfsAdapter.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +14 -2
- package/src/adapters/rnfsAdapter.ts +74 -2
- package/src/index.ts +1 -1
|
@@ -10,8 +10,11 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
10
10
|
/**
|
|
11
11
|
* React Native FS Adapter
|
|
12
12
|
*
|
|
13
|
-
* This is the ONLY file that imports react-native-fs.
|
|
13
|
+
* This is the ONLY file that imports react-native-fs by default.
|
|
14
14
|
* Implements IStorageAdapter using RNFS APIs.
|
|
15
|
+
*
|
|
16
|
+
* Users can provide their own RNFS-compatible instance (e.g., a fork)
|
|
17
|
+
* via the `rnfs` option.
|
|
15
18
|
*/
|
|
16
19
|
|
|
17
20
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
@@ -23,11 +26,23 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
23
26
|
|
|
24
27
|
// RNFS types are not fully typed, disable unsafe rules for this adapter
|
|
25
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Minimal interface for RNFS-compatible libraries.
|
|
31
|
+
* Allows users to provide alternative implementations or forks.
|
|
32
|
+
*/
|
|
33
|
+
|
|
26
34
|
/**
|
|
27
35
|
* Creates a storage adapter backed by react-native-fs.
|
|
36
|
+
*
|
|
37
|
+
* @param options - Configuration options
|
|
38
|
+
* @param options.baseDir - Base directory for cache storage
|
|
39
|
+
* @param options.namespace - Namespace subdirectory for isolation
|
|
40
|
+
* @param options.rnfs - Custom RNFS-compatible instance (for forks)
|
|
28
41
|
*/
|
|
29
42
|
function createRnfsAdapter(options) {
|
|
30
|
-
|
|
43
|
+
// Use provided RNFS instance or fall back to default import
|
|
44
|
+
const RNFS = options?.rnfs ?? _reactNativeFs.default;
|
|
45
|
+
const baseDir = options?.baseDir ?? RNFS.CachesDirectoryPath;
|
|
31
46
|
const namespace = options?.namespace ?? "default";
|
|
32
47
|
const rootPath = `${baseDir}/immutable-cache/${namespace}`;
|
|
33
48
|
|
|
@@ -55,7 +70,7 @@ function createRnfsAdapter(options) {
|
|
|
55
70
|
async ensureDir(path) {
|
|
56
71
|
try {
|
|
57
72
|
const absPath = toAbsolute(path);
|
|
58
|
-
await
|
|
73
|
+
await RNFS.mkdir(absPath);
|
|
59
74
|
} catch (error) {
|
|
60
75
|
throw new _errors.AdapterIOError("ensureDir", path, error);
|
|
61
76
|
}
|
|
@@ -63,7 +78,7 @@ function createRnfsAdapter(options) {
|
|
|
63
78
|
async exists(path) {
|
|
64
79
|
try {
|
|
65
80
|
const absPath = toAbsolute(path);
|
|
66
|
-
return await
|
|
81
|
+
return await RNFS.exists(absPath);
|
|
67
82
|
} catch {
|
|
68
83
|
return false;
|
|
69
84
|
}
|
|
@@ -71,9 +86,9 @@ function createRnfsAdapter(options) {
|
|
|
71
86
|
async remove(path) {
|
|
72
87
|
try {
|
|
73
88
|
const absPath = toAbsolute(path);
|
|
74
|
-
const exists = await
|
|
89
|
+
const exists = await RNFS.exists(absPath);
|
|
75
90
|
if (exists) {
|
|
76
|
-
await
|
|
91
|
+
await RNFS.unlink(absPath);
|
|
77
92
|
}
|
|
78
93
|
} catch (error) {
|
|
79
94
|
throw new _errors.AdapterIOError("remove", path, error);
|
|
@@ -82,10 +97,10 @@ function createRnfsAdapter(options) {
|
|
|
82
97
|
async removeDir(path) {
|
|
83
98
|
try {
|
|
84
99
|
const absPath = toAbsolute(path);
|
|
85
|
-
const exists = await
|
|
100
|
+
const exists = await RNFS.exists(absPath);
|
|
86
101
|
if (exists) {
|
|
87
102
|
// RNFS.unlink can remove directories recursively
|
|
88
|
-
await
|
|
103
|
+
await RNFS.unlink(absPath);
|
|
89
104
|
}
|
|
90
105
|
} catch (error) {
|
|
91
106
|
throw new _errors.AdapterIOError("removeDir", path, error);
|
|
@@ -94,11 +109,11 @@ function createRnfsAdapter(options) {
|
|
|
94
109
|
async listDir(path) {
|
|
95
110
|
try {
|
|
96
111
|
const absPath = toAbsolute(path);
|
|
97
|
-
const exists = await
|
|
112
|
+
const exists = await RNFS.exists(absPath);
|
|
98
113
|
if (!exists) {
|
|
99
114
|
return [];
|
|
100
115
|
}
|
|
101
|
-
const items = await
|
|
116
|
+
const items = await RNFS.readDir(absPath);
|
|
102
117
|
return items.map(item => item.name);
|
|
103
118
|
} catch (error) {
|
|
104
119
|
throw new _errors.AdapterIOError("listDir", path, error);
|
|
@@ -111,7 +126,7 @@ function createRnfsAdapter(options) {
|
|
|
111
126
|
async readText(path, _encoding) {
|
|
112
127
|
try {
|
|
113
128
|
const absPath = toAbsolute(path);
|
|
114
|
-
return await
|
|
129
|
+
return await RNFS.readFile(absPath, "utf8");
|
|
115
130
|
} catch (error) {
|
|
116
131
|
throw new _errors.AdapterIOError("readText", path, error);
|
|
117
132
|
}
|
|
@@ -122,17 +137,17 @@ function createRnfsAdapter(options) {
|
|
|
122
137
|
try {
|
|
123
138
|
// Ensure parent directory exists
|
|
124
139
|
const parentDir = absPath.substring(0, absPath.lastIndexOf("/"));
|
|
125
|
-
await
|
|
140
|
+
await RNFS.mkdir(parentDir);
|
|
126
141
|
|
|
127
142
|
// Write to temp file
|
|
128
|
-
await
|
|
143
|
+
await RNFS.writeFile(tempPath, content, "utf8");
|
|
129
144
|
|
|
130
145
|
// Atomic move
|
|
131
|
-
await
|
|
146
|
+
await RNFS.moveFile(tempPath, absPath);
|
|
132
147
|
} catch (error) {
|
|
133
148
|
// Clean up temp file on error
|
|
134
149
|
try {
|
|
135
|
-
await
|
|
150
|
+
await RNFS.unlink(tempPath);
|
|
136
151
|
} catch {
|
|
137
152
|
// Ignore cleanup errors
|
|
138
153
|
}
|
|
@@ -142,7 +157,7 @@ function createRnfsAdapter(options) {
|
|
|
142
157
|
async stat(path) {
|
|
143
158
|
try {
|
|
144
159
|
const absPath = toAbsolute(path);
|
|
145
|
-
const statResult = await
|
|
160
|
+
const statResult = await RNFS.stat(absPath);
|
|
146
161
|
return {
|
|
147
162
|
sizeBytes: statResult.size,
|
|
148
163
|
mtimeMs: new Date(statResult.mtime).getTime()
|
|
@@ -157,7 +172,7 @@ function createRnfsAdapter(options) {
|
|
|
157
172
|
try {
|
|
158
173
|
// Ensure parent directory exists
|
|
159
174
|
const parentDir = absPath.substring(0, absPath.lastIndexOf("/"));
|
|
160
|
-
await
|
|
175
|
+
await RNFS.mkdir(parentDir);
|
|
161
176
|
let contentType;
|
|
162
177
|
switch (source.type) {
|
|
163
178
|
case "url":
|
|
@@ -166,7 +181,7 @@ function createRnfsAdapter(options) {
|
|
|
166
181
|
const downloadResult = await new Promise((resolve, reject) => {
|
|
167
182
|
const {
|
|
168
183
|
promise
|
|
169
|
-
} =
|
|
184
|
+
} = RNFS.downloadFile({
|
|
170
185
|
fromUrl: source.url,
|
|
171
186
|
toFile: tempPath,
|
|
172
187
|
headers: {
|
|
@@ -191,14 +206,14 @@ function createRnfsAdapter(options) {
|
|
|
191
206
|
case "file":
|
|
192
207
|
{
|
|
193
208
|
// Copy file
|
|
194
|
-
await
|
|
209
|
+
await RNFS.copyFile(source.filePath, tempPath);
|
|
195
210
|
break;
|
|
196
211
|
}
|
|
197
212
|
case "bytes":
|
|
198
213
|
{
|
|
199
214
|
// Convert Uint8Array to base64 and write
|
|
200
215
|
const base64 = uint8ArrayToBase64(source.bytes);
|
|
201
|
-
await
|
|
216
|
+
await RNFS.writeFile(tempPath, base64, "base64");
|
|
202
217
|
break;
|
|
203
218
|
}
|
|
204
219
|
case "blob":
|
|
@@ -214,10 +229,10 @@ function createRnfsAdapter(options) {
|
|
|
214
229
|
}
|
|
215
230
|
|
|
216
231
|
// Get size before moving
|
|
217
|
-
const statResult = await
|
|
232
|
+
const statResult = await RNFS.stat(tempPath);
|
|
218
233
|
|
|
219
234
|
// Atomic move
|
|
220
|
-
await
|
|
235
|
+
await RNFS.moveFile(tempPath, absPath);
|
|
221
236
|
|
|
222
237
|
// Report 100% progress
|
|
223
238
|
options?.onProgress?.(100);
|
|
@@ -228,7 +243,7 @@ function createRnfsAdapter(options) {
|
|
|
228
243
|
} catch (error) {
|
|
229
244
|
// Clean up temp file on error
|
|
230
245
|
try {
|
|
231
|
-
await
|
|
246
|
+
await RNFS.unlink(tempPath);
|
|
232
247
|
} catch {
|
|
233
248
|
// Ignore cleanup errors
|
|
234
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeFs","_interopRequireDefault","require","_errors","e","__esModule","default","createRnfsAdapter","options","
|
|
1
|
+
{"version":3,"names":["_reactNativeFs","_interopRequireDefault","require","_errors","e","__esModule","default","createRnfsAdapter","options","RNFS","rnfs","DefaultRNFS","baseDir","CachesDirectoryPath","namespace","rootPath","toAbsolute","path","getTempPath","Date","now","Math","random","toString","slice","adapter","kind","rootId","supportedSources","Set","ensureDir","absPath","mkdir","error","AdapterIOError","exists","remove","unlink","removeDir","listDir","items","readDir","map","item","name","readText","_encoding","readFile","writeTextAtomic","content","tempPath","parentDir","substring","lastIndexOf","writeFile","moveFile","stat","statResult","sizeBytes","size","mtimeMs","mtime","getTime","writeBinaryAtomic","source","contentType","type","downloadResult","Promise","resolve","reject","promise","downloadFile","fromUrl","url","toFile","headers","progress","res","onProgress","contentLength","pct","bytesWritten","progressDivider","then","catch","statusCode","Error","copyFile","filePath","base64","uint8ArrayToBase64","bytes","UnsupportedSourceError","_exhaustive","getPublicUri","CHUNK_SIZE","chunks","i","length","chunk","subarray","push","String","fromCharCode","apply","btoa","join"],"sourceRoot":"../../../src","sources":["adapters/rnfsAdapter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* React Native FS Adapter
|
|
3
3
|
*
|
|
4
|
-
* This is the ONLY file that imports react-native-fs.
|
|
4
|
+
* This is the ONLY file that imports react-native-fs by default.
|
|
5
5
|
* Implements IStorageAdapter using RNFS APIs.
|
|
6
|
+
*
|
|
7
|
+
* Users can provide their own RNFS-compatible instance (e.g., a fork)
|
|
8
|
+
* via the `rnfs` option.
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
11
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
@@ -13,12 +16,25 @@
|
|
|
13
16
|
/* eslint-disable @typescript-eslint/require-await */
|
|
14
17
|
|
|
15
18
|
// RNFS types are not fully typed, disable unsafe rules for this adapter
|
|
16
|
-
import
|
|
19
|
+
import DefaultRNFS from "react-native-fs";
|
|
17
20
|
import { UnsupportedSourceError, AdapterIOError } from "../core/errors";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Minimal interface for RNFS-compatible libraries.
|
|
24
|
+
* Allows users to provide alternative implementations or forks.
|
|
25
|
+
*/
|
|
26
|
+
|
|
18
27
|
/**
|
|
19
28
|
* Creates a storage adapter backed by react-native-fs.
|
|
29
|
+
*
|
|
30
|
+
* @param options - Configuration options
|
|
31
|
+
* @param options.baseDir - Base directory for cache storage
|
|
32
|
+
* @param options.namespace - Namespace subdirectory for isolation
|
|
33
|
+
* @param options.rnfs - Custom RNFS-compatible instance (for forks)
|
|
20
34
|
*/
|
|
21
35
|
export function createRnfsAdapter(options) {
|
|
36
|
+
// Use provided RNFS instance or fall back to default import
|
|
37
|
+
const RNFS = options?.rnfs ?? DefaultRNFS;
|
|
22
38
|
const baseDir = options?.baseDir ?? RNFS.CachesDirectoryPath;
|
|
23
39
|
const namespace = options?.namespace ?? "default";
|
|
24
40
|
const rootPath = `${baseDir}/immutable-cache/${namespace}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["DefaultRNFS","UnsupportedSourceError","AdapterIOError","createRnfsAdapter","options","RNFS","rnfs","baseDir","CachesDirectoryPath","namespace","rootPath","toAbsolute","path","getTempPath","Date","now","Math","random","toString","slice","adapter","kind","rootId","supportedSources","Set","ensureDir","absPath","mkdir","error","exists","remove","unlink","removeDir","listDir","items","readDir","map","item","name","readText","_encoding","readFile","writeTextAtomic","content","tempPath","parentDir","substring","lastIndexOf","writeFile","moveFile","stat","statResult","sizeBytes","size","mtimeMs","mtime","getTime","writeBinaryAtomic","source","contentType","type","downloadResult","Promise","resolve","reject","promise","downloadFile","fromUrl","url","toFile","headers","progress","res","onProgress","contentLength","pct","bytesWritten","progressDivider","then","catch","statusCode","Error","copyFile","filePath","base64","uint8ArrayToBase64","bytes","_exhaustive","getPublicUri","CHUNK_SIZE","chunks","i","length","chunk","subarray","push","String","fromCharCode","apply","btoa","join"],"sourceRoot":"../../../src","sources":["adapters/rnfsAdapter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,87 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* React Native FS Adapter
|
|
3
3
|
*
|
|
4
|
-
* This is the ONLY file that imports react-native-fs.
|
|
4
|
+
* This is the ONLY file that imports react-native-fs by default.
|
|
5
5
|
* Implements IStorageAdapter using RNFS APIs.
|
|
6
|
+
*
|
|
7
|
+
* Users can provide their own RNFS-compatible instance (e.g., a fork)
|
|
8
|
+
* via the `rnfs` option.
|
|
6
9
|
*/
|
|
10
|
+
import { type DownloadResult } from "react-native-fs";
|
|
7
11
|
import type { IStorageAdapter } from "../core/adapter";
|
|
12
|
+
/**
|
|
13
|
+
* Minimal interface for RNFS-compatible libraries.
|
|
14
|
+
* Allows users to provide alternative implementations or forks.
|
|
15
|
+
*/
|
|
16
|
+
export interface IRnfsLike {
|
|
17
|
+
/** Path to the caches directory. */
|
|
18
|
+
readonly CachesDirectoryPath: string;
|
|
19
|
+
/** Check if a file/directory exists. */
|
|
20
|
+
exists(path: string): Promise<boolean>;
|
|
21
|
+
/** Create a directory (and parents). */
|
|
22
|
+
mkdir(path: string): Promise<void>;
|
|
23
|
+
/** Delete a file or directory. */
|
|
24
|
+
unlink(path: string): Promise<void>;
|
|
25
|
+
/** Read directory contents. */
|
|
26
|
+
readDir(path: string): Promise<ReadonlyArray<{
|
|
27
|
+
name: string;
|
|
28
|
+
}>>;
|
|
29
|
+
/** Read file as text. */
|
|
30
|
+
readFile(path: string, encoding: "utf8" | "base64"): Promise<string>;
|
|
31
|
+
/** Write file. */
|
|
32
|
+
writeFile(path: string, content: string, encoding: "utf8" | "base64"): Promise<void>;
|
|
33
|
+
/** Move/rename a file. */
|
|
34
|
+
moveFile(from: string, to: string): Promise<void>;
|
|
35
|
+
/** Copy a file. */
|
|
36
|
+
copyFile(from: string, to: string): Promise<void>;
|
|
37
|
+
/** Get file stats. */
|
|
38
|
+
stat(path: string): Promise<{
|
|
39
|
+
size: number;
|
|
40
|
+
mtime: string | number | Date;
|
|
41
|
+
}>;
|
|
42
|
+
/** Download a file from URL. */
|
|
43
|
+
downloadFile(options: {
|
|
44
|
+
fromUrl: string;
|
|
45
|
+
toFile: string;
|
|
46
|
+
headers?: Record<string, string>;
|
|
47
|
+
progress?: (res: {
|
|
48
|
+
contentLength: number;
|
|
49
|
+
bytesWritten: number;
|
|
50
|
+
}) => void;
|
|
51
|
+
progressDivider?: number;
|
|
52
|
+
}): {
|
|
53
|
+
promise: Promise<DownloadResult>;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
8
56
|
export interface IRnfsAdapterOptions {
|
|
9
57
|
/** Base directory. @default RNFS.CachesDirectoryPath */
|
|
10
58
|
readonly baseDir?: string;
|
|
11
59
|
/** Namespace subdirectory. */
|
|
12
60
|
readonly namespace?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Custom RNFS-compatible instance.
|
|
63
|
+
* Use this to provide a fork or alternative implementation of react-native-fs.
|
|
64
|
+
* @default The default react-native-fs import
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* import CustomRNFS from 'react-native-fs-turbo';
|
|
69
|
+
*
|
|
70
|
+
* const adapter = createRnfsAdapter({
|
|
71
|
+
* rnfs: CustomRNFS,
|
|
72
|
+
* namespace: 'my-cache',
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
readonly rnfs?: IRnfsLike;
|
|
13
77
|
}
|
|
14
78
|
/**
|
|
15
79
|
* Creates a storage adapter backed by react-native-fs.
|
|
80
|
+
*
|
|
81
|
+
* @param options - Configuration options
|
|
82
|
+
* @param options.baseDir - Base directory for cache storage
|
|
83
|
+
* @param options.namespace - Namespace subdirectory for isolation
|
|
84
|
+
* @param options.rnfs - Custom RNFS-compatible instance (for forks)
|
|
16
85
|
*/
|
|
17
86
|
export declare function createRnfsAdapter(options?: IRnfsAdapterOptions): IStorageAdapter;
|
|
18
87
|
//# sourceMappingURL=rnfsAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rnfsAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rnfsAdapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rnfsAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/rnfsAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,iBAAiB,CAAC;AAGzB;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAErC,wCAAwC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,wCAAwC;IACxC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,kCAAkC;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,+BAA+B;IAC/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAEhE,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErE,kBAAkB;IAClB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErF,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,sBAAsB;IACtB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAE7E,gCAAgC;IAChC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CA+OhF"}
|
|
@@ -12,7 +12,7 @@ export { CacheEngine } from "./core/cacheEngine";
|
|
|
12
12
|
export { createImmutableFileCache, createCacheEngineSync } from "./factory";
|
|
13
13
|
export type { ICreateCacheOptions } from "./factory";
|
|
14
14
|
export { createRnfsAdapter } from "./adapters/rnfsAdapter";
|
|
15
|
-
export type { IRnfsAdapterOptions } from "./adapters/rnfsAdapter";
|
|
15
|
+
export type { IRnfsAdapterOptions, IRnfsLike } from "./adapters/rnfsAdapter";
|
|
16
16
|
export { createWebAdapter } from "./adapters/webAdapter";
|
|
17
17
|
export type { IWebAdapterOptions, IWebAdapterWithCleanup } from "./adapters/webAdapter";
|
|
18
18
|
export { createMemoryAdapter } from "./adapters/memoryAdapter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,EACf,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EAEV,OAAO,EACP,GAAG,EACH,IAAI,EAEJ,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAMvC,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMjD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE5E,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAMrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,EACf,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EAEV,OAAO,EACP,GAAG,EACH,IAAI,EAEJ,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAMvC,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMjD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE5E,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAMrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynlabs/react-native-immutable-file-cache",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.4",
|
|
4
4
|
"description": "Cross-platform immutable file cache with pluggable storage adapters for React Native and Web",
|
|
5
5
|
"author": "dienp",
|
|
6
6
|
"license": "MIT",
|
|
@@ -63,7 +63,8 @@
|
|
|
63
63
|
"prepublishOnly": "npm run build && npm run lint && npm run typecheck && npm test",
|
|
64
64
|
"release:patch": "npm version patch",
|
|
65
65
|
"release:minor": "npm version minor",
|
|
66
|
-
"release:major": "npm version major"
|
|
66
|
+
"release:major": "npm version major",
|
|
67
|
+
"prepare": "husky"
|
|
67
68
|
},
|
|
68
69
|
"keywords": [
|
|
69
70
|
"react-native",
|
|
@@ -98,7 +99,9 @@
|
|
|
98
99
|
"eslint": "^8.57.0",
|
|
99
100
|
"eslint-config-prettier": "^9.1.0",
|
|
100
101
|
"eslint-plugin-prettier": "^5.1.3",
|
|
102
|
+
"husky": "^9.1.7",
|
|
101
103
|
"jest": "^29.7.0",
|
|
104
|
+
"lint-staged": "^16.2.7",
|
|
102
105
|
"prettier": "^3.2.5",
|
|
103
106
|
"react-native-builder-bob": "^0.23.2",
|
|
104
107
|
"rimraf": "^5.0.5",
|
|
@@ -121,5 +124,14 @@
|
|
|
121
124
|
},
|
|
122
125
|
"engines": {
|
|
123
126
|
"node": ">=18"
|
|
127
|
+
},
|
|
128
|
+
"lint-staged": {
|
|
129
|
+
"src/**/*.{ts,tsx}": [
|
|
130
|
+
"eslint --fix",
|
|
131
|
+
"prettier --write"
|
|
132
|
+
],
|
|
133
|
+
"__tests__/**/*.ts": [
|
|
134
|
+
"prettier --write"
|
|
135
|
+
]
|
|
124
136
|
}
|
|
125
137
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* React Native FS Adapter
|
|
3
3
|
*
|
|
4
|
-
* This is the ONLY file that imports react-native-fs.
|
|
4
|
+
* This is the ONLY file that imports react-native-fs by default.
|
|
5
5
|
* Implements IStorageAdapter using RNFS APIs.
|
|
6
|
+
*
|
|
7
|
+
* Users can provide their own RNFS-compatible instance (e.g., a fork)
|
|
8
|
+
* via the `rnfs` option.
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
11
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
@@ -13,7 +16,7 @@
|
|
|
13
16
|
/* eslint-disable @typescript-eslint/require-await */
|
|
14
17
|
|
|
15
18
|
// RNFS types are not fully typed, disable unsafe rules for this adapter
|
|
16
|
-
import
|
|
19
|
+
import DefaultRNFS, { type DownloadResult } from "react-native-fs";
|
|
17
20
|
import type {
|
|
18
21
|
IStorageAdapter,
|
|
19
22
|
TAdapterPath,
|
|
@@ -24,17 +27,86 @@ import type {
|
|
|
24
27
|
} from "../core/adapter";
|
|
25
28
|
import { UnsupportedSourceError, AdapterIOError } from "../core/errors";
|
|
26
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Minimal interface for RNFS-compatible libraries.
|
|
32
|
+
* Allows users to provide alternative implementations or forks.
|
|
33
|
+
*/
|
|
34
|
+
export interface IRnfsLike {
|
|
35
|
+
/** Path to the caches directory. */
|
|
36
|
+
readonly CachesDirectoryPath: string;
|
|
37
|
+
|
|
38
|
+
/** Check if a file/directory exists. */
|
|
39
|
+
exists(path: string): Promise<boolean>;
|
|
40
|
+
|
|
41
|
+
/** Create a directory (and parents). */
|
|
42
|
+
mkdir(path: string): Promise<void>;
|
|
43
|
+
|
|
44
|
+
/** Delete a file or directory. */
|
|
45
|
+
unlink(path: string): Promise<void>;
|
|
46
|
+
|
|
47
|
+
/** Read directory contents. */
|
|
48
|
+
readDir(path: string): Promise<ReadonlyArray<{ name: string }>>;
|
|
49
|
+
|
|
50
|
+
/** Read file as text. */
|
|
51
|
+
readFile(path: string, encoding: "utf8" | "base64"): Promise<string>;
|
|
52
|
+
|
|
53
|
+
/** Write file. */
|
|
54
|
+
writeFile(path: string, content: string, encoding: "utf8" | "base64"): Promise<void>;
|
|
55
|
+
|
|
56
|
+
/** Move/rename a file. */
|
|
57
|
+
moveFile(from: string, to: string): Promise<void>;
|
|
58
|
+
|
|
59
|
+
/** Copy a file. */
|
|
60
|
+
copyFile(from: string, to: string): Promise<void>;
|
|
61
|
+
|
|
62
|
+
/** Get file stats. */
|
|
63
|
+
stat(path: string): Promise<{ size: number; mtime: string | number | Date }>;
|
|
64
|
+
|
|
65
|
+
/** Download a file from URL. */
|
|
66
|
+
downloadFile(options: {
|
|
67
|
+
fromUrl: string;
|
|
68
|
+
toFile: string;
|
|
69
|
+
headers?: Record<string, string>;
|
|
70
|
+
progress?: (res: { contentLength: number; bytesWritten: number }) => void;
|
|
71
|
+
progressDivider?: number;
|
|
72
|
+
}): { promise: Promise<DownloadResult> };
|
|
73
|
+
}
|
|
74
|
+
|
|
27
75
|
export interface IRnfsAdapterOptions {
|
|
28
76
|
/** Base directory. @default RNFS.CachesDirectoryPath */
|
|
29
77
|
readonly baseDir?: string;
|
|
30
78
|
/** Namespace subdirectory. */
|
|
31
79
|
readonly namespace?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Custom RNFS-compatible instance.
|
|
82
|
+
* Use this to provide a fork or alternative implementation of react-native-fs.
|
|
83
|
+
* @default The default react-native-fs import
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* import CustomRNFS from 'react-native-fs-turbo';
|
|
88
|
+
*
|
|
89
|
+
* const adapter = createRnfsAdapter({
|
|
90
|
+
* rnfs: CustomRNFS,
|
|
91
|
+
* namespace: 'my-cache',
|
|
92
|
+
* });
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
readonly rnfs?: IRnfsLike;
|
|
32
96
|
}
|
|
33
97
|
|
|
34
98
|
/**
|
|
35
99
|
* Creates a storage adapter backed by react-native-fs.
|
|
100
|
+
*
|
|
101
|
+
* @param options - Configuration options
|
|
102
|
+
* @param options.baseDir - Base directory for cache storage
|
|
103
|
+
* @param options.namespace - Namespace subdirectory for isolation
|
|
104
|
+
* @param options.rnfs - Custom RNFS-compatible instance (for forks)
|
|
36
105
|
*/
|
|
37
106
|
export function createRnfsAdapter(options?: IRnfsAdapterOptions): IStorageAdapter {
|
|
107
|
+
// Use provided RNFS instance or fall back to default import
|
|
108
|
+
const RNFS: IRnfsLike = options?.rnfs ?? DefaultRNFS;
|
|
109
|
+
|
|
38
110
|
const baseDir = options?.baseDir ?? RNFS.CachesDirectoryPath;
|
|
39
111
|
const namespace = options?.namespace ?? "default";
|
|
40
112
|
const rootPath = `${baseDir}/immutable-cache/${namespace}`;
|
package/src/index.ts
CHANGED
|
@@ -87,7 +87,7 @@ export type { ICreateCacheOptions } from "./factory";
|
|
|
87
87
|
// ─────────────────────────────────────────────────────────────────
|
|
88
88
|
|
|
89
89
|
export { createRnfsAdapter } from "./adapters/rnfsAdapter";
|
|
90
|
-
export type { IRnfsAdapterOptions } from "./adapters/rnfsAdapter";
|
|
90
|
+
export type { IRnfsAdapterOptions, IRnfsLike } from "./adapters/rnfsAdapter";
|
|
91
91
|
|
|
92
92
|
export { createWebAdapter } from "./adapters/webAdapter";
|
|
93
93
|
export type { IWebAdapterOptions, IWebAdapterWithCleanup } from "./adapters/webAdapter";
|