@dynlabs/react-native-immutable-file-cache 1.0.0-alpha.1
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/LICENSE +21 -0
- package/README.md +415 -0
- package/lib/commonjs/adapters/memoryAdapter.js +266 -0
- package/lib/commonjs/adapters/memoryAdapter.js.map +1 -0
- package/lib/commonjs/adapters/rnfsAdapter.js +259 -0
- package/lib/commonjs/adapters/rnfsAdapter.js.map +1 -0
- package/lib/commonjs/adapters/webAdapter.js +432 -0
- package/lib/commonjs/adapters/webAdapter.js.map +1 -0
- package/lib/commonjs/core/adapter.js +2 -0
- package/lib/commonjs/core/adapter.js.map +1 -0
- package/lib/commonjs/core/cacheEngine.js +578 -0
- package/lib/commonjs/core/cacheEngine.js.map +1 -0
- package/lib/commonjs/core/errors.js +83 -0
- package/lib/commonjs/core/errors.js.map +1 -0
- package/lib/commonjs/core/hash.js +83 -0
- package/lib/commonjs/core/hash.js.map +1 -0
- package/lib/commonjs/core/indexStore.js +175 -0
- package/lib/commonjs/core/indexStore.js.map +1 -0
- package/lib/commonjs/core/mutex.js +143 -0
- package/lib/commonjs/core/mutex.js.map +1 -0
- package/lib/commonjs/core/prune.js +127 -0
- package/lib/commonjs/core/prune.js.map +1 -0
- package/lib/commonjs/core/types.js +6 -0
- package/lib/commonjs/core/types.js.map +1 -0
- package/lib/commonjs/factory.js +56 -0
- package/lib/commonjs/factory.js.map +1 -0
- package/lib/commonjs/index.js +110 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/index.native.js +74 -0
- package/lib/commonjs/index.native.js.map +1 -0
- package/lib/commonjs/index.web.js +75 -0
- package/lib/commonjs/index.web.js.map +1 -0
- package/lib/commonjs/types/react-native-fs.d.js +2 -0
- package/lib/commonjs/types/react-native-fs.d.js.map +1 -0
- package/lib/module/adapters/memoryAdapter.js +261 -0
- package/lib/module/adapters/memoryAdapter.js.map +1 -0
- package/lib/module/adapters/rnfsAdapter.js +251 -0
- package/lib/module/adapters/rnfsAdapter.js.map +1 -0
- package/lib/module/adapters/webAdapter.js +426 -0
- package/lib/module/adapters/webAdapter.js.map +1 -0
- package/lib/module/core/adapter.js +2 -0
- package/lib/module/core/adapter.js.map +1 -0
- package/lib/module/core/cacheEngine.js +571 -0
- package/lib/module/core/cacheEngine.js.map +1 -0
- package/lib/module/core/errors.js +71 -0
- package/lib/module/core/errors.js.map +1 -0
- package/lib/module/core/hash.js +76 -0
- package/lib/module/core/hash.js.map +1 -0
- package/lib/module/core/indexStore.js +168 -0
- package/lib/module/core/indexStore.js.map +1 -0
- package/lib/module/core/mutex.js +135 -0
- package/lib/module/core/mutex.js.map +1 -0
- package/lib/module/core/prune.js +116 -0
- package/lib/module/core/prune.js.map +1 -0
- package/lib/module/core/types.js +2 -0
- package/lib/module/core/types.js.map +1 -0
- package/lib/module/factory.js +49 -0
- package/lib/module/factory.js.map +1 -0
- package/lib/module/index.js +41 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/index.native.js +54 -0
- package/lib/module/index.native.js.map +1 -0
- package/lib/module/index.web.js +55 -0
- package/lib/module/index.web.js.map +1 -0
- package/lib/module/types/react-native-fs.d.js +2 -0
- package/lib/module/types/react-native-fs.d.js.map +1 -0
- package/lib/typescript/src/adapters/memoryAdapter.d.ts +23 -0
- package/lib/typescript/src/adapters/memoryAdapter.d.ts.map +1 -0
- package/lib/typescript/src/adapters/rnfsAdapter.d.ts +18 -0
- package/lib/typescript/src/adapters/rnfsAdapter.d.ts.map +1 -0
- package/lib/typescript/src/adapters/webAdapter.d.ts +30 -0
- package/lib/typescript/src/adapters/webAdapter.d.ts.map +1 -0
- package/lib/typescript/src/core/adapter.d.ts +105 -0
- package/lib/typescript/src/core/adapter.d.ts.map +1 -0
- package/lib/typescript/src/core/cacheEngine.d.ts +99 -0
- package/lib/typescript/src/core/cacheEngine.d.ts.map +1 -0
- package/lib/typescript/src/core/errors.d.ts +54 -0
- package/lib/typescript/src/core/errors.d.ts.map +1 -0
- package/lib/typescript/src/core/hash.d.ts +20 -0
- package/lib/typescript/src/core/hash.d.ts.map +1 -0
- package/lib/typescript/src/core/indexStore.d.ts +34 -0
- package/lib/typescript/src/core/indexStore.d.ts.map +1 -0
- package/lib/typescript/src/core/mutex.d.ts +49 -0
- package/lib/typescript/src/core/mutex.d.ts.map +1 -0
- package/lib/typescript/src/core/prune.d.ts +39 -0
- package/lib/typescript/src/core/prune.d.ts.map +1 -0
- package/lib/typescript/src/core/types.d.ts +109 -0
- package/lib/typescript/src/core/types.d.ts.map +1 -0
- package/lib/typescript/src/factory.d.ts +46 -0
- package/lib/typescript/src/factory.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +20 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/index.native.d.ts +37 -0
- package/lib/typescript/src/index.native.d.ts.map +1 -0
- package/lib/typescript/src/index.web.d.ts +38 -0
- package/lib/typescript/src/index.web.d.ts.map +1 -0
- package/package.json +125 -0
- package/src/adapters/memoryAdapter.ts +307 -0
- package/src/adapters/rnfsAdapter.ts +283 -0
- package/src/adapters/webAdapter.ts +480 -0
- package/src/core/adapter.ts +128 -0
- package/src/core/cacheEngine.ts +634 -0
- package/src/core/errors.ts +82 -0
- package/src/core/hash.ts +78 -0
- package/src/core/indexStore.ts +184 -0
- package/src/core/mutex.ts +134 -0
- package/src/core/prune.ts +145 -0
- package/src/core/types.ts +165 -0
- package/src/factory.ts +60 -0
- package/src/index.native.ts +58 -0
- package/src/index.ts +82 -0
- package/src/index.web.ts +59 -0
- package/src/types/react-native-fs.d.ts +75 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "AdapterIOError", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _errors.AdapterIOError;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "CacheEngine", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _cacheEngine.CacheEngine;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "CacheError", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _errors.CacheError;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "CorruptIndexError", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _errors.CorruptIndexError;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "EntryNotFoundError", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _errors.EntryNotFoundError;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "ImmutableConflictError", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _errors.ImmutableConflictError;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "KeyedMutex", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _mutex.KeyedMutex;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "Mutex", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _mutex.Mutex;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "UnsupportedSourceError", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _errors.UnsupportedSourceError;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "createCacheEngineSync", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _factory.createCacheEngineSync;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(exports, "createImmutableFileCache", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _factory.createImmutableFileCache;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(exports, "createMemoryAdapter", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return _memoryAdapter.createMemoryAdapter;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(exports, "createRnfsAdapter", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _rnfsAdapter.createRnfsAdapter;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(exports, "createWebAdapter", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return _webAdapter.createWebAdapter;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
Object.defineProperty(exports, "hash", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _hash.hash;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
Object.defineProperty(exports, "hashSync", {
|
|
97
|
+
enumerable: true,
|
|
98
|
+
get: function () {
|
|
99
|
+
return _hash.hashSync;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
var _errors = require("./core/errors");
|
|
103
|
+
var _cacheEngine = require("./core/cacheEngine");
|
|
104
|
+
var _factory = require("./factory");
|
|
105
|
+
var _rnfsAdapter = require("./adapters/rnfsAdapter");
|
|
106
|
+
var _webAdapter = require("./adapters/webAdapter");
|
|
107
|
+
var _memoryAdapter = require("./adapters/memoryAdapter");
|
|
108
|
+
var _hash = require("./core/hash");
|
|
109
|
+
var _mutex = require("./core/mutex");
|
|
110
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_errors","require","_cacheEngine","_factory","_rnfsAdapter","_webAdapter","_memoryAdapter","_hash","_mutex"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,IAAAA,OAAA,GAAAC,OAAA;AAaA,IAAAC,YAAA,GAAAD,OAAA;AAMA,IAAAE,QAAA,GAAAF,OAAA;AAQA,IAAAG,YAAA,GAAAH,OAAA;AAGA,IAAAI,WAAA,GAAAJ,OAAA;AAGA,IAAAK,cAAA,GAAAL,OAAA;AAOA,IAAAM,KAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
createImmutableFileCache: true
|
|
8
|
+
};
|
|
9
|
+
exports.createImmutableFileCache = createImmutableFileCache;
|
|
10
|
+
var _index = require("./index");
|
|
11
|
+
Object.keys(_index).forEach(function (key) {
|
|
12
|
+
if (key === "default" || key === "__esModule") return;
|
|
13
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
14
|
+
if (key in exports && exports[key] === _index[key]) return;
|
|
15
|
+
Object.defineProperty(exports, key, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return _index[key];
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
var _rnfsAdapter = require("./adapters/rnfsAdapter");
|
|
23
|
+
var _cacheEngine = require("./core/cacheEngine");
|
|
24
|
+
/**
|
|
25
|
+
* @dynlabs/react-native-immutable-file-cache - Native entrypoint
|
|
26
|
+
* Auto-selects RNFS adapter for React Native (iOS/Android).
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// Re-export everything from main index
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates an immutable file cache instance for React Native.
|
|
33
|
+
* Automatically uses the RNFS adapter.
|
|
34
|
+
*
|
|
35
|
+
* @param options - Cache configuration options
|
|
36
|
+
* @returns Initialized CacheEngine instance
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import { createImmutableFileCache } from "@dynlabs/react-native-immutable-file-cache";
|
|
41
|
+
*
|
|
42
|
+
* const cache = await createImmutableFileCache({
|
|
43
|
+
* namespace: "images",
|
|
44
|
+
* defaultTtlMs: 7 * 24 * 60 * 60 * 1000,
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* // Cache an image
|
|
48
|
+
* const result = await cache.putFromUrl("avatar", "https://example.com/avatar.jpg");
|
|
49
|
+
*
|
|
50
|
+
* // Get cached image URI
|
|
51
|
+
* const entry = await cache.get("avatar");
|
|
52
|
+
* if (entry) {
|
|
53
|
+
* console.log("Image URI:", entry.uri);
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
async function createImmutableFileCache(options) {
|
|
58
|
+
const {
|
|
59
|
+
autoInit = true,
|
|
60
|
+
adapter,
|
|
61
|
+
...config
|
|
62
|
+
} = options ?? {};
|
|
63
|
+
|
|
64
|
+
// Use provided adapter or create RNFS adapter
|
|
65
|
+
const resolvedAdapter = adapter ?? (0, _rnfsAdapter.createRnfsAdapter)({
|
|
66
|
+
namespace: config.namespace
|
|
67
|
+
});
|
|
68
|
+
const engine = new _cacheEngine.CacheEngine(config, resolvedAdapter);
|
|
69
|
+
if (autoInit) {
|
|
70
|
+
await engine.init();
|
|
71
|
+
}
|
|
72
|
+
return engine;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_index","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_rnfsAdapter","_cacheEngine","createImmutableFileCache","options","autoInit","adapter","config","resolvedAdapter","createRnfsAdapter","namespace","engine","CacheEngine","init"],"sourceRoot":"../../src","sources":["index.native.ts"],"mappings":";;;;;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAS,YAAA,GAAAb,OAAA;AAEA,IAAAc,YAAA,GAAAd,OAAA;AAVA;AACA;AACA;AACA;;AAEA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAee,wBAAwBA,CAC5CC,OAA6F,EACvE;EACtB,MAAM;IAAEC,QAAQ,GAAG,IAAI;IAAEC,OAAO;IAAE,GAAGC;EAAO,CAAC,GAAGH,OAAO,IAAI,CAAC,CAAC;;EAE7D;EACA,MAAMI,eAAe,GACnBF,OAAO,IACP,IAAAG,8BAAiB,EAAC;IAChBC,SAAS,EAAEH,MAAM,CAACG;EACpB,CAAC,CAAC;EAEJ,MAAMC,MAAM,GAAG,IAAIC,wBAAW,CAACL,MAAM,EAAEC,eAAe,CAAC;EAEvD,IAAIH,QAAQ,EAAE;IACZ,MAAMM,MAAM,CAACE,IAAI,CAAC,CAAC;EACrB;EAEA,OAAOF,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
createImmutableFileCache: true
|
|
8
|
+
};
|
|
9
|
+
exports.createImmutableFileCache = createImmutableFileCache;
|
|
10
|
+
var _index = require("./index");
|
|
11
|
+
Object.keys(_index).forEach(function (key) {
|
|
12
|
+
if (key === "default" || key === "__esModule") return;
|
|
13
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
14
|
+
if (key in exports && exports[key] === _index[key]) return;
|
|
15
|
+
Object.defineProperty(exports, key, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return _index[key];
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
var _webAdapter = require("./adapters/webAdapter");
|
|
23
|
+
var _cacheEngine = require("./core/cacheEngine");
|
|
24
|
+
/**
|
|
25
|
+
* @dynlabs/react-native-immutable-file-cache - Web entrypoint
|
|
26
|
+
* Auto-selects Web adapter for browser environments.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// Re-export everything from main index
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates an immutable file cache instance for web browsers.
|
|
33
|
+
* Automatically uses the Web adapter (Cache Storage + IndexedDB).
|
|
34
|
+
*
|
|
35
|
+
* @param options - Cache configuration options
|
|
36
|
+
* @returns Initialized CacheEngine instance
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import { createImmutableFileCache } from "@dynlabs/react-native-immutable-file-cache/web";
|
|
41
|
+
*
|
|
42
|
+
* const cache = await createImmutableFileCache({
|
|
43
|
+
* namespace: "images",
|
|
44
|
+
* defaultTtlMs: 7 * 24 * 60 * 60 * 1000,
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* // Cache an image
|
|
48
|
+
* const result = await cache.putFromUrl("avatar", "https://example.com/avatar.jpg");
|
|
49
|
+
*
|
|
50
|
+
* // Get cached image URI (blob: URL)
|
|
51
|
+
* const entry = await cache.get("avatar");
|
|
52
|
+
* if (entry) {
|
|
53
|
+
* // Use entry.uri as image source
|
|
54
|
+
* // Remember to revoke blob URL when done to free memory
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
async function createImmutableFileCache(options) {
|
|
59
|
+
const {
|
|
60
|
+
autoInit = true,
|
|
61
|
+
adapter,
|
|
62
|
+
...config
|
|
63
|
+
} = options ?? {};
|
|
64
|
+
|
|
65
|
+
// Use provided adapter or create Web adapter
|
|
66
|
+
const resolvedAdapter = adapter ?? (0, _webAdapter.createWebAdapter)({
|
|
67
|
+
namespace: config.namespace
|
|
68
|
+
});
|
|
69
|
+
const engine = new _cacheEngine.CacheEngine(config, resolvedAdapter);
|
|
70
|
+
if (autoInit) {
|
|
71
|
+
await engine.init();
|
|
72
|
+
}
|
|
73
|
+
return engine;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=index.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_index","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_webAdapter","_cacheEngine","createImmutableFileCache","options","autoInit","adapter","config","resolvedAdapter","createWebAdapter","namespace","engine","CacheEngine","init"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;;;;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAS,WAAA,GAAAb,OAAA;AAEA,IAAAc,YAAA,GAAAd,OAAA;AAVA;AACA;AACA;AACA;;AAEA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAee,wBAAwBA,CAC5CC,OAA6F,EACvE;EACtB,MAAM;IAAEC,QAAQ,GAAG,IAAI;IAAEC,OAAO;IAAE,GAAGC;EAAO,CAAC,GAAGH,OAAO,IAAI,CAAC,CAAC;;EAE7D;EACA,MAAMI,eAAe,GACnBF,OAAO,IACP,IAAAG,4BAAgB,EAAC;IACfC,SAAS,EAAEH,MAAM,CAACG;EACpB,CAAC,CAAC;EAEJ,MAAMC,MAAM,GAAG,IAAIC,wBAAW,CAACL,MAAM,EAAEC,eAAe,CAAC;EAEvD,IAAIH,QAAQ,EAAE;IACZ,MAAMM,MAAM,CAACE,IAAI,CAAC,CAAC;EACrB;EAEA,OAAOF,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/react-native-fs.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Storage Adapter
|
|
3
|
+
*
|
|
4
|
+
* For testing purposes only.
|
|
5
|
+
* Implements IStorageAdapter using in-memory storage.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
9
|
+
|
|
10
|
+
import { AdapterIOError } from "../core/errors";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Extended interface for memory adapter with test utilities.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Creates an in-memory storage adapter for testing.
|
|
18
|
+
*/
|
|
19
|
+
export function createMemoryAdapter(namespace) {
|
|
20
|
+
const ns = namespace ?? "default";
|
|
21
|
+
const rootId = `memory://${ns}`;
|
|
22
|
+
|
|
23
|
+
// In-memory storage
|
|
24
|
+
const files = new Map();
|
|
25
|
+
const directories = new Set();
|
|
26
|
+
|
|
27
|
+
// Track blob URLs for cleanup
|
|
28
|
+
const blobUrls = new Map();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Normalizes path by removing leading/trailing slashes.
|
|
32
|
+
*/
|
|
33
|
+
const normalizePath = path => {
|
|
34
|
+
return path.replace(/^\/+|\/+$/g, "");
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Gets the parent directory of a path.
|
|
39
|
+
*/
|
|
40
|
+
const getParentDir = path => {
|
|
41
|
+
const lastSlash = path.lastIndexOf("/");
|
|
42
|
+
return lastSlash > 0 ? path.substring(0, lastSlash) : null;
|
|
43
|
+
};
|
|
44
|
+
const adapter = {
|
|
45
|
+
kind: "memory",
|
|
46
|
+
rootId,
|
|
47
|
+
// ─────────────────────────────────────────────────────────────────
|
|
48
|
+
// Directory Management
|
|
49
|
+
// ─────────────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
async ensureDir(path) {
|
|
52
|
+
const normalized = normalizePath(path);
|
|
53
|
+
if (normalized) {
|
|
54
|
+
directories.add(normalized);
|
|
55
|
+
// Also ensure parent directories
|
|
56
|
+
const parent = getParentDir(normalized);
|
|
57
|
+
if (parent) {
|
|
58
|
+
await this.ensureDir(parent);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
async exists(path) {
|
|
63
|
+
const normalized = normalizePath(path);
|
|
64
|
+
return files.has(normalized) || directories.has(normalized);
|
|
65
|
+
},
|
|
66
|
+
async remove(path) {
|
|
67
|
+
const normalized = normalizePath(path);
|
|
68
|
+
files.delete(normalized);
|
|
69
|
+
},
|
|
70
|
+
async removeDir(path) {
|
|
71
|
+
const normalized = normalizePath(path);
|
|
72
|
+
const prefix = normalized + "/";
|
|
73
|
+
|
|
74
|
+
// Remove all files with this prefix
|
|
75
|
+
for (const key of files.keys()) {
|
|
76
|
+
if (key === normalized || key.startsWith(prefix)) {
|
|
77
|
+
files.delete(key);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Remove all directories with this prefix
|
|
82
|
+
for (const dir of directories) {
|
|
83
|
+
if (dir === normalized || dir.startsWith(prefix)) {
|
|
84
|
+
directories.delete(dir);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
async listDir(path) {
|
|
89
|
+
const normalized = normalizePath(path);
|
|
90
|
+
const prefix = normalized ? normalized + "/" : "";
|
|
91
|
+
const entries = new Set();
|
|
92
|
+
|
|
93
|
+
// Find all files in this directory
|
|
94
|
+
for (const key of files.keys()) {
|
|
95
|
+
if (key.startsWith(prefix)) {
|
|
96
|
+
const relativePath = key.slice(prefix.length);
|
|
97
|
+
const firstSlash = relativePath.indexOf("/");
|
|
98
|
+
if (firstSlash === -1) {
|
|
99
|
+
// Direct child file
|
|
100
|
+
entries.add(relativePath);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return Array.from(entries);
|
|
105
|
+
},
|
|
106
|
+
// ─────────────────────────────────────────────────────────────────
|
|
107
|
+
// File I/O
|
|
108
|
+
// ─────────────────────────────────────────────────────────────────
|
|
109
|
+
|
|
110
|
+
async readText(path, _encoding) {
|
|
111
|
+
const normalized = normalizePath(path);
|
|
112
|
+
const entry = files.get(normalized);
|
|
113
|
+
if (!entry) {
|
|
114
|
+
throw new AdapterIOError("readText", path, new Error("File not found"));
|
|
115
|
+
}
|
|
116
|
+
const decoder = new TextDecoder("utf-8");
|
|
117
|
+
return decoder.decode(entry.content);
|
|
118
|
+
},
|
|
119
|
+
async writeTextAtomic(path, content, _encoding) {
|
|
120
|
+
const normalized = normalizePath(path);
|
|
121
|
+
const encoder = new TextEncoder();
|
|
122
|
+
const bytes = encoder.encode(content);
|
|
123
|
+
files.set(normalized, {
|
|
124
|
+
content: bytes,
|
|
125
|
+
mtime: Date.now(),
|
|
126
|
+
contentType: "text/plain"
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Ensure parent directory exists
|
|
130
|
+
const parent = getParentDir(normalized);
|
|
131
|
+
if (parent) {
|
|
132
|
+
directories.add(parent);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
async stat(path) {
|
|
136
|
+
const normalized = normalizePath(path);
|
|
137
|
+
const entry = files.get(normalized);
|
|
138
|
+
if (!entry) {
|
|
139
|
+
throw new AdapterIOError("stat", path, new Error("File not found"));
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
sizeBytes: entry.content.length,
|
|
143
|
+
mtimeMs: entry.mtime
|
|
144
|
+
};
|
|
145
|
+
},
|
|
146
|
+
async writeBinaryAtomic(path, source, options) {
|
|
147
|
+
const normalized = normalizePath(path);
|
|
148
|
+
let content;
|
|
149
|
+
let contentType;
|
|
150
|
+
switch (source.type) {
|
|
151
|
+
case "url":
|
|
152
|
+
{
|
|
153
|
+
// Simulate URL fetch
|
|
154
|
+
try {
|
|
155
|
+
const response = await fetch(source.url, {
|
|
156
|
+
headers: {
|
|
157
|
+
...source.headers,
|
|
158
|
+
...options?.headers
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
if (!response.ok) {
|
|
162
|
+
throw new Error(`Fetch failed: ${response.status}`);
|
|
163
|
+
}
|
|
164
|
+
contentType = response.headers.get("content-type") ?? undefined;
|
|
165
|
+
const buffer = await response.arrayBuffer();
|
|
166
|
+
content = new Uint8Array(buffer);
|
|
167
|
+
options?.onProgress?.(100);
|
|
168
|
+
} catch (error) {
|
|
169
|
+
throw new AdapterIOError("writeBinaryAtomic", path, error);
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case "file":
|
|
174
|
+
{
|
|
175
|
+
// Simulate file copy (just use path as content for testing)
|
|
176
|
+
const encoder = new TextEncoder();
|
|
177
|
+
content = encoder.encode(`[file:${source.filePath}]`);
|
|
178
|
+
options?.onProgress?.(100);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case "blob":
|
|
182
|
+
{
|
|
183
|
+
const buffer = await source.blob.arrayBuffer();
|
|
184
|
+
content = new Uint8Array(buffer);
|
|
185
|
+
contentType = source.blob.type || undefined;
|
|
186
|
+
options?.onProgress?.(100);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case "bytes":
|
|
190
|
+
{
|
|
191
|
+
content = source.bytes;
|
|
192
|
+
options?.onProgress?.(100);
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
default:
|
|
196
|
+
{
|
|
197
|
+
const _exhaustive = source;
|
|
198
|
+
throw new AdapterIOError("writeBinaryAtomic", path, new Error(`Unknown source type: ${_exhaustive.type}`));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
files.set(normalized, {
|
|
202
|
+
content,
|
|
203
|
+
mtime: Date.now(),
|
|
204
|
+
contentType
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// Ensure parent directory exists
|
|
208
|
+
const parent = getParentDir(normalized);
|
|
209
|
+
if (parent) {
|
|
210
|
+
directories.add(parent);
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
sizeBytes: content.length,
|
|
214
|
+
contentType
|
|
215
|
+
};
|
|
216
|
+
},
|
|
217
|
+
async getPublicUri(path) {
|
|
218
|
+
const normalized = normalizePath(path);
|
|
219
|
+
const entry = files.get(normalized);
|
|
220
|
+
if (!entry) {
|
|
221
|
+
throw new AdapterIOError("getPublicUri", path, new Error("File not found"));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Check if we already have a blob URL for this path
|
|
225
|
+
const existing = blobUrls.get(normalized);
|
|
226
|
+
if (existing) {
|
|
227
|
+
return existing;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Create blob URL
|
|
231
|
+
const blob = new Blob([entry.content.buffer], {
|
|
232
|
+
type: entry.contentType ?? "application/octet-stream"
|
|
233
|
+
});
|
|
234
|
+
const url = URL.createObjectURL(blob);
|
|
235
|
+
blobUrls.set(normalized, url);
|
|
236
|
+
return url;
|
|
237
|
+
},
|
|
238
|
+
// ─────────────────────────────────────────────────────────────────
|
|
239
|
+
// Test Utilities
|
|
240
|
+
// ─────────────────────────────────────────────────────────────────
|
|
241
|
+
|
|
242
|
+
_reset() {
|
|
243
|
+
files.clear();
|
|
244
|
+
directories.clear();
|
|
245
|
+
// Revoke all blob URLs
|
|
246
|
+
for (const url of blobUrls.values()) {
|
|
247
|
+
URL.revokeObjectURL(url);
|
|
248
|
+
}
|
|
249
|
+
blobUrls.clear();
|
|
250
|
+
},
|
|
251
|
+
_getContent(path) {
|
|
252
|
+
const normalized = normalizePath(path);
|
|
253
|
+
return files.get(normalized)?.content;
|
|
254
|
+
},
|
|
255
|
+
_getAllPaths() {
|
|
256
|
+
return Array.from(files.keys());
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
return adapter;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=memoryAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AdapterIOError","createMemoryAdapter","namespace","ns","rootId","files","Map","directories","Set","blobUrls","normalizePath","path","replace","getParentDir","lastSlash","lastIndexOf","substring","adapter","kind","ensureDir","normalized","add","parent","exists","has","remove","delete","removeDir","prefix","key","keys","startsWith","dir","listDir","entries","relativePath","slice","length","firstSlash","indexOf","Array","from","readText","_encoding","entry","get","Error","decoder","TextDecoder","decode","content","writeTextAtomic","encoder","TextEncoder","bytes","encode","set","mtime","Date","now","contentType","stat","sizeBytes","mtimeMs","writeBinaryAtomic","source","options","type","response","fetch","url","headers","ok","status","undefined","buffer","arrayBuffer","Uint8Array","onProgress","error","filePath","blob","_exhaustive","getPublicUri","existing","Blob","URL","createObjectURL","_reset","clear","values","revokeObjectURL","_getContent","_getAllPaths"],"sourceRoot":"../../../src","sources":["adapters/memoryAdapter.ts"],"mappings":"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","ignoreList":[]}
|