@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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +415 -0
  3. package/lib/commonjs/adapters/memoryAdapter.js +266 -0
  4. package/lib/commonjs/adapters/memoryAdapter.js.map +1 -0
  5. package/lib/commonjs/adapters/rnfsAdapter.js +259 -0
  6. package/lib/commonjs/adapters/rnfsAdapter.js.map +1 -0
  7. package/lib/commonjs/adapters/webAdapter.js +432 -0
  8. package/lib/commonjs/adapters/webAdapter.js.map +1 -0
  9. package/lib/commonjs/core/adapter.js +2 -0
  10. package/lib/commonjs/core/adapter.js.map +1 -0
  11. package/lib/commonjs/core/cacheEngine.js +578 -0
  12. package/lib/commonjs/core/cacheEngine.js.map +1 -0
  13. package/lib/commonjs/core/errors.js +83 -0
  14. package/lib/commonjs/core/errors.js.map +1 -0
  15. package/lib/commonjs/core/hash.js +83 -0
  16. package/lib/commonjs/core/hash.js.map +1 -0
  17. package/lib/commonjs/core/indexStore.js +175 -0
  18. package/lib/commonjs/core/indexStore.js.map +1 -0
  19. package/lib/commonjs/core/mutex.js +143 -0
  20. package/lib/commonjs/core/mutex.js.map +1 -0
  21. package/lib/commonjs/core/prune.js +127 -0
  22. package/lib/commonjs/core/prune.js.map +1 -0
  23. package/lib/commonjs/core/types.js +6 -0
  24. package/lib/commonjs/core/types.js.map +1 -0
  25. package/lib/commonjs/factory.js +56 -0
  26. package/lib/commonjs/factory.js.map +1 -0
  27. package/lib/commonjs/index.js +110 -0
  28. package/lib/commonjs/index.js.map +1 -0
  29. package/lib/commonjs/index.native.js +74 -0
  30. package/lib/commonjs/index.native.js.map +1 -0
  31. package/lib/commonjs/index.web.js +75 -0
  32. package/lib/commonjs/index.web.js.map +1 -0
  33. package/lib/commonjs/types/react-native-fs.d.js +2 -0
  34. package/lib/commonjs/types/react-native-fs.d.js.map +1 -0
  35. package/lib/module/adapters/memoryAdapter.js +261 -0
  36. package/lib/module/adapters/memoryAdapter.js.map +1 -0
  37. package/lib/module/adapters/rnfsAdapter.js +251 -0
  38. package/lib/module/adapters/rnfsAdapter.js.map +1 -0
  39. package/lib/module/adapters/webAdapter.js +426 -0
  40. package/lib/module/adapters/webAdapter.js.map +1 -0
  41. package/lib/module/core/adapter.js +2 -0
  42. package/lib/module/core/adapter.js.map +1 -0
  43. package/lib/module/core/cacheEngine.js +571 -0
  44. package/lib/module/core/cacheEngine.js.map +1 -0
  45. package/lib/module/core/errors.js +71 -0
  46. package/lib/module/core/errors.js.map +1 -0
  47. package/lib/module/core/hash.js +76 -0
  48. package/lib/module/core/hash.js.map +1 -0
  49. package/lib/module/core/indexStore.js +168 -0
  50. package/lib/module/core/indexStore.js.map +1 -0
  51. package/lib/module/core/mutex.js +135 -0
  52. package/lib/module/core/mutex.js.map +1 -0
  53. package/lib/module/core/prune.js +116 -0
  54. package/lib/module/core/prune.js.map +1 -0
  55. package/lib/module/core/types.js +2 -0
  56. package/lib/module/core/types.js.map +1 -0
  57. package/lib/module/factory.js +49 -0
  58. package/lib/module/factory.js.map +1 -0
  59. package/lib/module/index.js +41 -0
  60. package/lib/module/index.js.map +1 -0
  61. package/lib/module/index.native.js +54 -0
  62. package/lib/module/index.native.js.map +1 -0
  63. package/lib/module/index.web.js +55 -0
  64. package/lib/module/index.web.js.map +1 -0
  65. package/lib/module/types/react-native-fs.d.js +2 -0
  66. package/lib/module/types/react-native-fs.d.js.map +1 -0
  67. package/lib/typescript/src/adapters/memoryAdapter.d.ts +23 -0
  68. package/lib/typescript/src/adapters/memoryAdapter.d.ts.map +1 -0
  69. package/lib/typescript/src/adapters/rnfsAdapter.d.ts +18 -0
  70. package/lib/typescript/src/adapters/rnfsAdapter.d.ts.map +1 -0
  71. package/lib/typescript/src/adapters/webAdapter.d.ts +30 -0
  72. package/lib/typescript/src/adapters/webAdapter.d.ts.map +1 -0
  73. package/lib/typescript/src/core/adapter.d.ts +105 -0
  74. package/lib/typescript/src/core/adapter.d.ts.map +1 -0
  75. package/lib/typescript/src/core/cacheEngine.d.ts +99 -0
  76. package/lib/typescript/src/core/cacheEngine.d.ts.map +1 -0
  77. package/lib/typescript/src/core/errors.d.ts +54 -0
  78. package/lib/typescript/src/core/errors.d.ts.map +1 -0
  79. package/lib/typescript/src/core/hash.d.ts +20 -0
  80. package/lib/typescript/src/core/hash.d.ts.map +1 -0
  81. package/lib/typescript/src/core/indexStore.d.ts +34 -0
  82. package/lib/typescript/src/core/indexStore.d.ts.map +1 -0
  83. package/lib/typescript/src/core/mutex.d.ts +49 -0
  84. package/lib/typescript/src/core/mutex.d.ts.map +1 -0
  85. package/lib/typescript/src/core/prune.d.ts +39 -0
  86. package/lib/typescript/src/core/prune.d.ts.map +1 -0
  87. package/lib/typescript/src/core/types.d.ts +109 -0
  88. package/lib/typescript/src/core/types.d.ts.map +1 -0
  89. package/lib/typescript/src/factory.d.ts +46 -0
  90. package/lib/typescript/src/factory.d.ts.map +1 -0
  91. package/lib/typescript/src/index.d.ts +20 -0
  92. package/lib/typescript/src/index.d.ts.map +1 -0
  93. package/lib/typescript/src/index.native.d.ts +37 -0
  94. package/lib/typescript/src/index.native.d.ts.map +1 -0
  95. package/lib/typescript/src/index.web.d.ts +38 -0
  96. package/lib/typescript/src/index.web.d.ts.map +1 -0
  97. package/package.json +125 -0
  98. package/src/adapters/memoryAdapter.ts +307 -0
  99. package/src/adapters/rnfsAdapter.ts +283 -0
  100. package/src/adapters/webAdapter.ts +480 -0
  101. package/src/core/adapter.ts +128 -0
  102. package/src/core/cacheEngine.ts +634 -0
  103. package/src/core/errors.ts +82 -0
  104. package/src/core/hash.ts +78 -0
  105. package/src/core/indexStore.ts +184 -0
  106. package/src/core/mutex.ts +134 -0
  107. package/src/core/prune.ts +145 -0
  108. package/src/core/types.ts +165 -0
  109. package/src/factory.ts +60 -0
  110. package/src/index.native.ts +58 -0
  111. package/src/index.ts +82 -0
  112. package/src/index.web.ts +59 -0
  113. 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,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=react-native-fs.d.js.map
@@ -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":[]}