@matter/nodejs 0.17.0-alpha.0-20260507-059f7763b → 0.17.0-alpha.0-20260508-29ff5ae9e

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 (273) hide show
  1. package/package.json +9 -9
  2. package/dist/cjs/behavior/index.d.ts +0 -7
  3. package/dist/cjs/behavior/index.d.ts.map +0 -1
  4. package/dist/cjs/behavior/index.js +0 -8
  5. package/dist/cjs/behavior/index.js.map +0 -6
  6. package/dist/cjs/behavior/instrumentation.d.ts +0 -11
  7. package/dist/cjs/behavior/instrumentation.d.ts.map +0 -1
  8. package/dist/cjs/behavior/instrumentation.js +0 -39
  9. package/dist/cjs/behavior/instrumentation.js.map +0 -6
  10. package/dist/cjs/behavior/register.d.ts +0 -7
  11. package/dist/cjs/behavior/register.d.ts.map +0 -1
  12. package/dist/cjs/behavior/register.js +0 -9
  13. package/dist/cjs/behavior/register.js.map +0 -6
  14. package/dist/cjs/config.d.ts +0 -98
  15. package/dist/cjs/config.d.ts.map +0 -1
  16. package/dist/cjs/config.js +0 -210
  17. package/dist/cjs/config.js.map +0 -6
  18. package/dist/cjs/crypto/NodeJsCrypto.d.ts +0 -13
  19. package/dist/cjs/crypto/NodeJsCrypto.d.ts.map +0 -1
  20. package/dist/cjs/crypto/NodeJsCrypto.js +0 -46
  21. package/dist/cjs/crypto/NodeJsCrypto.js.map +0 -6
  22. package/dist/cjs/crypto/index.d.ts +0 -7
  23. package/dist/cjs/crypto/index.d.ts.map +0 -1
  24. package/dist/cjs/crypto/index.js +0 -24
  25. package/dist/cjs/crypto/index.js.map +0 -6
  26. package/dist/cjs/environment/NodeJsEnvironment.d.ts +0 -77
  27. package/dist/cjs/environment/NodeJsEnvironment.d.ts.map +0 -1
  28. package/dist/cjs/environment/NodeJsEnvironment.js +0 -254
  29. package/dist/cjs/environment/NodeJsEnvironment.js.map +0 -6
  30. package/dist/cjs/environment/ProcessManager.d.ts +0 -48
  31. package/dist/cjs/environment/ProcessManager.d.ts.map +0 -1
  32. package/dist/cjs/environment/ProcessManager.js +0 -129
  33. package/dist/cjs/environment/ProcessManager.js.map +0 -6
  34. package/dist/cjs/environment/index.d.ts +0 -9
  35. package/dist/cjs/environment/index.d.ts.map +0 -1
  36. package/dist/cjs/environment/index.js +0 -26
  37. package/dist/cjs/environment/index.js.map +0 -6
  38. package/dist/cjs/environment/register.d.ts +0 -7
  39. package/dist/cjs/environment/register.d.ts.map +0 -1
  40. package/dist/cjs/environment/register.js +0 -10
  41. package/dist/cjs/environment/register.js.map +0 -6
  42. package/dist/cjs/fs/NodeJsDirectory.d.ts +0 -24
  43. package/dist/cjs/fs/NodeJsDirectory.d.ts.map +0 -1
  44. package/dist/cjs/fs/NodeJsDirectory.js +0 -102
  45. package/dist/cjs/fs/NodeJsDirectory.js.map +0 -6
  46. package/dist/cjs/fs/NodeJsFile.d.ts +0 -22
  47. package/dist/cjs/fs/NodeJsFile.d.ts.map +0 -1
  48. package/dist/cjs/fs/NodeJsFile.js +0 -248
  49. package/dist/cjs/fs/NodeJsFile.js.map +0 -6
  50. package/dist/cjs/fs/NodeJsFilesystem.d.ts +0 -27
  51. package/dist/cjs/fs/NodeJsFilesystem.d.ts.map +0 -1
  52. package/dist/cjs/fs/NodeJsFilesystem.js +0 -83
  53. package/dist/cjs/fs/NodeJsFilesystem.js.map +0 -6
  54. package/dist/cjs/fs/fs-utils.d.ts +0 -16
  55. package/dist/cjs/fs/fs-utils.d.ts.map +0 -1
  56. package/dist/cjs/fs/fs-utils.js +0 -154
  57. package/dist/cjs/fs/fs-utils.js.map +0 -6
  58. package/dist/cjs/fs/index.d.ts +0 -7
  59. package/dist/cjs/fs/index.d.ts.map +0 -1
  60. package/dist/cjs/fs/index.js +0 -24
  61. package/dist/cjs/fs/index.js.map +0 -6
  62. package/dist/cjs/fs/lock-utils.d.ts +0 -12
  63. package/dist/cjs/fs/lock-utils.d.ts.map +0 -1
  64. package/dist/cjs/fs/lock-utils.js +0 -132
  65. package/dist/cjs/fs/lock-utils.js.map +0 -6
  66. package/dist/cjs/index.d.ts +0 -14
  67. package/dist/cjs/index.d.ts.map +0 -1
  68. package/dist/cjs/index.js +0 -31
  69. package/dist/cjs/index.js.map +0 -6
  70. package/dist/cjs/log/FileLogger.d.ts +0 -12
  71. package/dist/cjs/log/FileLogger.d.ts.map +0 -1
  72. package/dist/cjs/log/FileLogger.js +0 -46
  73. package/dist/cjs/log/FileLogger.js.map +0 -6
  74. package/dist/cjs/log/index.d.ts +0 -7
  75. package/dist/cjs/log/index.d.ts.map +0 -1
  76. package/dist/cjs/log/index.js +0 -24
  77. package/dist/cjs/log/index.js.map +0 -6
  78. package/dist/cjs/net/NodeJsHttpEndpoint.d.ts +0 -38
  79. package/dist/cjs/net/NodeJsHttpEndpoint.d.ts.map +0 -1
  80. package/dist/cjs/net/NodeJsHttpEndpoint.js +0 -306
  81. package/dist/cjs/net/NodeJsHttpEndpoint.js.map +0 -6
  82. package/dist/cjs/net/NodeJsNetwork.d.ts +0 -37
  83. package/dist/cjs/net/NodeJsNetwork.d.ts.map +0 -1
  84. package/dist/cjs/net/NodeJsNetwork.js +0 -199
  85. package/dist/cjs/net/NodeJsNetwork.js.map +0 -6
  86. package/dist/cjs/net/NodeJsTcpConnection.d.ts +0 -24
  87. package/dist/cjs/net/NodeJsTcpConnection.d.ts.map +0 -1
  88. package/dist/cjs/net/NodeJsTcpConnection.js +0 -138
  89. package/dist/cjs/net/NodeJsTcpConnection.js.map +0 -6
  90. package/dist/cjs/net/NodeJsTcpListener.d.ts +0 -19
  91. package/dist/cjs/net/NodeJsTcpListener.d.ts.map +0 -1
  92. package/dist/cjs/net/NodeJsTcpListener.js +0 -100
  93. package/dist/cjs/net/NodeJsTcpListener.js.map +0 -6
  94. package/dist/cjs/net/NodeJsUdpSocket.d.ts +0 -23
  95. package/dist/cjs/net/NodeJsUdpSocket.d.ts.map +0 -1
  96. package/dist/cjs/net/NodeJsUdpSocket.js +0 -394
  97. package/dist/cjs/net/NodeJsUdpSocket.js.map +0 -6
  98. package/dist/cjs/net/WsAdapter.d.ts +0 -25
  99. package/dist/cjs/net/WsAdapter.d.ts.map +0 -1
  100. package/dist/cjs/net/WsAdapter.js +0 -33
  101. package/dist/cjs/net/WsAdapter.js.map +0 -6
  102. package/dist/cjs/net/index.d.ts +0 -12
  103. package/dist/cjs/net/index.d.ts.map +0 -1
  104. package/dist/cjs/net/index.js +0 -29
  105. package/dist/cjs/net/index.js.map +0 -6
  106. package/dist/cjs/package.json +0 -6
  107. package/dist/cjs/storage/fs/DirectoryBlobStorageDriver.d.ts +0 -29
  108. package/dist/cjs/storage/fs/DirectoryBlobStorageDriver.d.ts.map +0 -1
  109. package/dist/cjs/storage/fs/DirectoryBlobStorageDriver.js +0 -155
  110. package/dist/cjs/storage/fs/DirectoryBlobStorageDriver.js.map +0 -6
  111. package/dist/cjs/storage/fs/FileStorageDriver.d.ts +0 -44
  112. package/dist/cjs/storage/fs/FileStorageDriver.d.ts.map +0 -1
  113. package/dist/cjs/storage/fs/FileStorageDriver.js +0 -334
  114. package/dist/cjs/storage/fs/FileStorageDriver.js.map +0 -6
  115. package/dist/cjs/storage/fs/FlatFileBlobStorageDriver.d.ts +0 -30
  116. package/dist/cjs/storage/fs/FlatFileBlobStorageDriver.d.ts.map +0 -1
  117. package/dist/cjs/storage/fs/FlatFileBlobStorageDriver.js +0 -195
  118. package/dist/cjs/storage/fs/FlatFileBlobStorageDriver.js.map +0 -6
  119. package/dist/cjs/storage/fs/JsonFileStorageDriver.d.ts +0 -27
  120. package/dist/cjs/storage/fs/JsonFileStorageDriver.d.ts.map +0 -1
  121. package/dist/cjs/storage/fs/JsonFileStorageDriver.js +0 -128
  122. package/dist/cjs/storage/fs/JsonFileStorageDriver.js.map +0 -6
  123. package/dist/cjs/storage/fs/WalBlobStorageDriver.d.ts +0 -19
  124. package/dist/cjs/storage/fs/WalBlobStorageDriver.d.ts.map +0 -1
  125. package/dist/cjs/storage/fs/WalBlobStorageDriver.js +0 -44
  126. package/dist/cjs/storage/fs/WalBlobStorageDriver.js.map +0 -6
  127. package/dist/cjs/storage/fs/index.d.ts +0 -21
  128. package/dist/cjs/storage/fs/index.d.ts.map +0 -1
  129. package/dist/cjs/storage/fs/index.js +0 -40
  130. package/dist/cjs/storage/fs/index.js.map +0 -6
  131. package/dist/cjs/storage/index.d.ts +0 -8
  132. package/dist/cjs/storage/index.d.ts.map +0 -1
  133. package/dist/cjs/storage/index.js +0 -25
  134. package/dist/cjs/storage/index.js.map +0 -6
  135. package/dist/cjs/storage/sqlite/SqliteBlobStorageDriver.d.ts +0 -48
  136. package/dist/cjs/storage/sqlite/SqliteBlobStorageDriver.d.ts.map +0 -1
  137. package/dist/cjs/storage/sqlite/SqliteBlobStorageDriver.js +0 -217
  138. package/dist/cjs/storage/sqlite/SqliteBlobStorageDriver.js.map +0 -6
  139. package/dist/cjs/storage/sqlite/SqlitePlatform.d.ts +0 -23
  140. package/dist/cjs/storage/sqlite/SqlitePlatform.d.ts.map +0 -1
  141. package/dist/cjs/storage/sqlite/SqlitePlatform.js +0 -56
  142. package/dist/cjs/storage/sqlite/SqlitePlatform.js.map +0 -6
  143. package/dist/cjs/storage/sqlite/SqliteStorageDriver.d.ts +0 -102
  144. package/dist/cjs/storage/sqlite/SqliteStorageDriver.d.ts.map +0 -1
  145. package/dist/cjs/storage/sqlite/SqliteStorageDriver.js +0 -424
  146. package/dist/cjs/storage/sqlite/SqliteStorageDriver.js.map +0 -6
  147. package/dist/cjs/storage/sqlite/SqliteStorageDriverError.d.ts +0 -19
  148. package/dist/cjs/storage/sqlite/SqliteStorageDriverError.d.ts.map +0 -1
  149. package/dist/cjs/storage/sqlite/SqliteStorageDriverError.js +0 -41
  150. package/dist/cjs/storage/sqlite/SqliteStorageDriverError.js.map +0 -6
  151. package/dist/cjs/storage/sqlite/SqliteTypes.d.ts +0 -67
  152. package/dist/cjs/storage/sqlite/SqliteTypes.d.ts.map +0 -1
  153. package/dist/cjs/storage/sqlite/SqliteTypes.js +0 -35
  154. package/dist/cjs/storage/sqlite/SqliteTypes.js.map +0 -6
  155. package/dist/cjs/storage/sqlite/SqliteUtil.d.ts +0 -33
  156. package/dist/cjs/storage/sqlite/SqliteUtil.d.ts.map +0 -1
  157. package/dist/cjs/storage/sqlite/SqliteUtil.js +0 -64
  158. package/dist/cjs/storage/sqlite/SqliteUtil.js.map +0 -6
  159. package/dist/cjs/storage/sqlite/index.d.ts +0 -15
  160. package/dist/cjs/storage/sqlite/index.d.ts.map +0 -1
  161. package/dist/cjs/storage/sqlite/index.js +0 -37
  162. package/dist/cjs/storage/sqlite/index.js.map +0 -6
  163. package/dist/cjs/storage/sqlite/platform/BunSqlite.d.ts +0 -13
  164. package/dist/cjs/storage/sqlite/platform/BunSqlite.d.ts.map +0 -1
  165. package/dist/cjs/storage/sqlite/platform/BunSqlite.js +0 -61
  166. package/dist/cjs/storage/sqlite/platform/BunSqlite.js.map +0 -6
  167. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.d.ts +0 -8
  168. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.d.ts.map +0 -1
  169. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.js +0 -53
  170. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.js.map +0 -6
  171. package/dist/cjs/time/index.d.ts +0 -7
  172. package/dist/cjs/time/index.d.ts.map +0 -1
  173. package/dist/cjs/time/index.js +0 -8
  174. package/dist/cjs/time/index.js.map +0 -6
  175. package/dist/cjs/time/startup.d.ts +0 -7
  176. package/dist/cjs/time/startup.d.ts.map +0 -1
  177. package/dist/cjs/time/startup.js +0 -11
  178. package/dist/cjs/time/startup.js.map +0 -6
  179. package/dist/cjs/util/runtimeChecks.d.ts +0 -14
  180. package/dist/cjs/util/runtimeChecks.d.ts.map +0 -1
  181. package/dist/cjs/util/runtimeChecks.js +0 -45
  182. package/dist/cjs/util/runtimeChecks.js.map +0 -6
  183. package/dist/esm/behavior/index.js +0 -7
  184. package/dist/esm/behavior/index.js.map +0 -6
  185. package/dist/esm/behavior/instrumentation.js +0 -19
  186. package/dist/esm/behavior/instrumentation.js.map +0 -6
  187. package/dist/esm/behavior/register.js +0 -8
  188. package/dist/esm/behavior/register.js.map +0 -6
  189. package/dist/esm/config.js +0 -190
  190. package/dist/esm/config.js.map +0 -6
  191. package/dist/esm/crypto/NodeJsCrypto.js +0 -16
  192. package/dist/esm/crypto/NodeJsCrypto.js.map +0 -6
  193. package/dist/esm/crypto/index.js +0 -7
  194. package/dist/esm/crypto/index.js.map +0 -6
  195. package/dist/esm/environment/NodeJsEnvironment.js +0 -242
  196. package/dist/esm/environment/NodeJsEnvironment.js.map +0 -6
  197. package/dist/esm/environment/ProcessManager.js +0 -109
  198. package/dist/esm/environment/ProcessManager.js.map +0 -6
  199. package/dist/esm/environment/index.js +0 -9
  200. package/dist/esm/environment/index.js.map +0 -6
  201. package/dist/esm/environment/register.js +0 -9
  202. package/dist/esm/environment/register.js.map +0 -6
  203. package/dist/esm/fs/NodeJsDirectory.js +0 -82
  204. package/dist/esm/fs/NodeJsDirectory.js.map +0 -6
  205. package/dist/esm/fs/NodeJsFile.js +0 -232
  206. package/dist/esm/fs/NodeJsFile.js.map +0 -6
  207. package/dist/esm/fs/NodeJsFilesystem.js +0 -63
  208. package/dist/esm/fs/NodeJsFilesystem.js.map +0 -6
  209. package/dist/esm/fs/fs-utils.js +0 -137
  210. package/dist/esm/fs/fs-utils.js.map +0 -6
  211. package/dist/esm/fs/index.js +0 -7
  212. package/dist/esm/fs/index.js.map +0 -6
  213. package/dist/esm/fs/lock-utils.js +0 -112
  214. package/dist/esm/fs/lock-utils.js.map +0 -6
  215. package/dist/esm/index.js +0 -14
  216. package/dist/esm/index.js.map +0 -6
  217. package/dist/esm/log/FileLogger.js +0 -26
  218. package/dist/esm/log/FileLogger.js.map +0 -6
  219. package/dist/esm/log/index.js +0 -7
  220. package/dist/esm/log/index.js.map +0 -6
  221. package/dist/esm/net/NodeJsHttpEndpoint.js +0 -286
  222. package/dist/esm/net/NodeJsHttpEndpoint.js.map +0 -6
  223. package/dist/esm/net/NodeJsNetwork.js +0 -189
  224. package/dist/esm/net/NodeJsNetwork.js.map +0 -6
  225. package/dist/esm/net/NodeJsTcpConnection.js +0 -124
  226. package/dist/esm/net/NodeJsTcpConnection.js.map +0 -6
  227. package/dist/esm/net/NodeJsTcpListener.js +0 -86
  228. package/dist/esm/net/NodeJsTcpListener.js.map +0 -6
  229. package/dist/esm/net/NodeJsUdpSocket.js +0 -385
  230. package/dist/esm/net/NodeJsUdpSocket.js.map +0 -6
  231. package/dist/esm/net/WsAdapter.js +0 -13
  232. package/dist/esm/net/WsAdapter.js.map +0 -6
  233. package/dist/esm/net/index.js +0 -12
  234. package/dist/esm/net/index.js.map +0 -6
  235. package/dist/esm/package.json +0 -6
  236. package/dist/esm/storage/fs/DirectoryBlobStorageDriver.js +0 -140
  237. package/dist/esm/storage/fs/DirectoryBlobStorageDriver.js.map +0 -6
  238. package/dist/esm/storage/fs/FileStorageDriver.js +0 -323
  239. package/dist/esm/storage/fs/FileStorageDriver.js.map +0 -6
  240. package/dist/esm/storage/fs/FlatFileBlobStorageDriver.js +0 -180
  241. package/dist/esm/storage/fs/FlatFileBlobStorageDriver.js.map +0 -6
  242. package/dist/esm/storage/fs/JsonFileStorageDriver.js +0 -116
  243. package/dist/esm/storage/fs/JsonFileStorageDriver.js.map +0 -6
  244. package/dist/esm/storage/fs/WalBlobStorageDriver.js +0 -24
  245. package/dist/esm/storage/fs/WalBlobStorageDriver.js.map +0 -6
  246. package/dist/esm/storage/fs/index.js +0 -19
  247. package/dist/esm/storage/fs/index.js.map +0 -6
  248. package/dist/esm/storage/index.js +0 -8
  249. package/dist/esm/storage/index.js.map +0 -6
  250. package/dist/esm/storage/sqlite/SqliteBlobStorageDriver.js +0 -197
  251. package/dist/esm/storage/sqlite/SqliteBlobStorageDriver.js.map +0 -6
  252. package/dist/esm/storage/sqlite/SqlitePlatform.js +0 -26
  253. package/dist/esm/storage/sqlite/SqlitePlatform.js.map +0 -6
  254. package/dist/esm/storage/sqlite/SqliteStorageDriver.js +0 -409
  255. package/dist/esm/storage/sqlite/SqliteStorageDriver.js.map +0 -6
  256. package/dist/esm/storage/sqlite/SqliteStorageDriverError.js +0 -21
  257. package/dist/esm/storage/sqlite/SqliteStorageDriverError.js.map +0 -6
  258. package/dist/esm/storage/sqlite/SqliteTypes.js +0 -15
  259. package/dist/esm/storage/sqlite/SqliteTypes.js.map +0 -6
  260. package/dist/esm/storage/sqlite/SqliteUtil.js +0 -44
  261. package/dist/esm/storage/sqlite/SqliteUtil.js.map +0 -6
  262. package/dist/esm/storage/sqlite/index.js +0 -17
  263. package/dist/esm/storage/sqlite/index.js.map +0 -6
  264. package/dist/esm/storage/sqlite/platform/BunSqlite.js +0 -41
  265. package/dist/esm/storage/sqlite/platform/BunSqlite.js.map +0 -6
  266. package/dist/esm/storage/sqlite/platform/NodeJsSqlite.js +0 -33
  267. package/dist/esm/storage/sqlite/platform/NodeJsSqlite.js.map +0 -6
  268. package/dist/esm/time/index.js +0 -7
  269. package/dist/esm/time/index.js.map +0 -6
  270. package/dist/esm/time/startup.js +0 -10
  271. package/dist/esm/time/startup.js.map +0 -6
  272. package/dist/esm/util/runtimeChecks.js +0 -25
  273. package/dist/esm/util/runtimeChecks.js.map +0 -6
@@ -1,155 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var DirectoryBlobStorageDriver_exports = {};
20
- __export(DirectoryBlobStorageDriver_exports, {
21
- DirectoryBlobStorageDriver: () => DirectoryBlobStorageDriver
22
- });
23
- module.exports = __toCommonJS(DirectoryBlobStorageDriver_exports);
24
- var import_general = require("@matter/general");
25
- /**
26
- * @license
27
- * Copyright 2022-2026 Matter.js Authors
28
- * SPDX-License-Identifier: Apache-2.0
29
- */
30
- class DirectoryBlobStorageDriver extends import_general.FilesystemBlobStorageDriver {
31
- static id = "dir";
32
- static create(namespace, _descriptor) {
33
- return new DirectoryBlobStorageDriver(namespace);
34
- }
35
- #rootDir;
36
- #initialized = false;
37
- constructor(namespace) {
38
- super(namespace);
39
- this.#rootDir = this.root.directory;
40
- }
41
- get initialized() {
42
- return this.#initialized;
43
- }
44
- async initialize() {
45
- await super.initialize();
46
- await this.#rootDir.mkdir();
47
- this.#initialized = true;
48
- }
49
- async close() {
50
- this.#initialized = false;
51
- await super.close();
52
- }
53
- async openBlob(contexts, key) {
54
- const file = this.#resolve(contexts, key);
55
- if (!await file.exists()) {
56
- return new Blob([]);
57
- }
58
- const bytes = await file.readAllBytes();
59
- return new Blob([import_general.Bytes.exclusive(bytes)]);
60
- }
61
- // TODO: writes go directly to the final file via the File abstraction's streaming support.
62
- // Not atomic — a crash mid-write leaves a partial file. Hardening with write-to-tmp + rename
63
- // would require bypassing File.write() to get a temp path in the same directory.
64
- async writeBlobFromStream(contexts, key, stream) {
65
- validateKey(key);
66
- let dir = this.#rootDir;
67
- for (const ctx of contexts) {
68
- if (ctx === ".." || ctx === "." || !ctx.length || ctx.includes("\\")) {
69
- throw new import_general.StorageError(`Context segment "${ctx}" is not allowed`);
70
- }
71
- dir = dir.directory(encodeContextSegment(ctx));
72
- await dir.mkdir();
73
- }
74
- const file = dir.file(key);
75
- await file.write(streamToAsyncIterable(stream));
76
- }
77
- async delete(contexts, key) {
78
- const file = this.#resolve(contexts, key);
79
- if (await file.exists()) {
80
- await file.delete();
81
- }
82
- }
83
- async has(contexts, key) {
84
- return this.#resolve(contexts, key).exists();
85
- }
86
- async keys(contexts) {
87
- const dir = this.#contextDir(contexts);
88
- if (!await dir.exists()) {
89
- return [];
90
- }
91
- const files = await dir.files();
92
- return files.filter((f) => !import_general.BaseStorageDriver.RESERVED_FILENAMES.has(f) && !f.endsWith(".tmp"));
93
- }
94
- async contexts(contexts) {
95
- const dir = this.#contextDir(contexts);
96
- if (!await dir.exists()) {
97
- return [];
98
- }
99
- const encoded = await dir.directories();
100
- return encoded.map(decodeContextSegment);
101
- }
102
- async clearAll(contexts) {
103
- const dir = this.#contextDir(contexts);
104
- if (await dir.exists()) {
105
- await dir.delete();
106
- }
107
- }
108
- #contextDir(contexts) {
109
- let dir = this.#rootDir;
110
- for (const ctx of contexts) {
111
- if (ctx === ".." || ctx === "." || !ctx.length || ctx.includes("\\")) {
112
- throw new import_general.StorageError(`Context segment "${ctx}" is not allowed`);
113
- }
114
- dir = dir.directory(encodeContextSegment(ctx));
115
- }
116
- return dir;
117
- }
118
- #resolve(contexts, key) {
119
- validateKey(key);
120
- return this.#contextDir(contexts).file(key);
121
- }
122
- }
123
- function validateKey(key) {
124
- if (!key.length) {
125
- throw new import_general.StorageError("Key must not be empty");
126
- }
127
- if (key.includes("/") || key.includes("\\") || key === ".." || key.startsWith("../") || key.includes("/../")) {
128
- throw new import_general.StorageError(`Key "${key}" contains path traversal characters`);
129
- }
130
- if (import_general.BaseStorageDriver.RESERVED_FILENAMES.has(key)) {
131
- throw new import_general.StorageError(`Key "${key}" is a reserved filename`);
132
- }
133
- if (key.endsWith(".tmp")) {
134
- throw new import_general.StorageError(`Key "${key}" must not end with ".tmp" (reserved for atomic writes)`);
135
- }
136
- }
137
- async function* streamToAsyncIterable(stream) {
138
- const reader = stream.getReader();
139
- try {
140
- while (true) {
141
- const { done, value } = await reader.read();
142
- if (done) break;
143
- yield import_general.Bytes.of(value);
144
- }
145
- } finally {
146
- reader.releaseLock();
147
- }
148
- }
149
- function encodeContextSegment(segment) {
150
- return segment.replace(/%/g, "%25").replace(/\//g, "%2F");
151
- }
152
- function decodeContextSegment(encoded) {
153
- return encoded.replace(/%2F/gi, "/").replace(/%25/g, "%");
154
- }
155
- //# sourceMappingURL=DirectoryBlobStorageDriver.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/storage/fs/DirectoryBlobStorageDriver.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,44 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { Bytes, FilesystemStorageDriver, StorageDriver, SupportedStorageTypes, type DataNamespace, type LegacyBlobSource } from "@matter/general";
7
- export declare class FileStorageDriver extends FilesystemStorageDriver implements LegacyBlobSource {
8
- #private;
9
- static readonly id = "file";
10
- static create(namespace: DataNamespace, _descriptor: StorageDriver.Descriptor): Promise<FileStorageDriver>;
11
- protected isInitialized: boolean;
12
- constructor(namespaceOrPath?: DataNamespace | string, clear?: boolean);
13
- get initialized(): boolean;
14
- initialize(): Promise<void>;
15
- close(): Promise<void>;
16
- filePath(fileName: string): string;
17
- getContextBaseKey(contexts: string[]): string;
18
- buildStorageKey(contexts: string[], key: string): string;
19
- has(contexts: string[], key: string): Promise<boolean>;
20
- get<T extends SupportedStorageTypes>(contexts: string[], key: string): Promise<T | undefined>;
21
- /**
22
- * Read a blob from the flat file format. Retained for legacy migration support — the
23
- * {@link StorageMigration} cross-type kv→blob strategy duck-types this method to extract
24
- * blobs from old FileStorageDriver data.
25
- *
26
- * @deprecated Only used for migration from legacy flat-file blob format.
27
- */
28
- openBlob(contexts: string[], key: string): Promise<Blob>;
29
- /**
30
- * Write blob data in the flat file format. Retained for legacy migration support.
31
- *
32
- * @deprecated Only used for migration from legacy flat-file blob format.
33
- */
34
- writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Bytes>): Promise<void>;
35
- set(contexts: string[], key: string, value: SupportedStorageTypes): Promise<void>;
36
- set(contexts: string[], values: Record<string, SupportedStorageTypes>): Promise<void>;
37
- delete(contexts: string[], key: string): Promise<void>;
38
- /** Returns all keys of a storage context without keys of sub-contexts */
39
- keys(contexts: string[]): Promise<string[]>;
40
- values(contexts: string[]): Promise<Record<string, SupportedStorageTypes>>;
41
- contexts(contexts: string[]): string[];
42
- clearAll(contexts: string[]): Promise<void>;
43
- }
44
- //# sourceMappingURL=FileStorageDriver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileStorageDriver.d.ts","sourceRoot":"","sources":["../../../../src/storage/fs/FileStorageDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,KAAK,EAEL,uBAAuB,EAIvB,aAAa,EAEb,qBAAqB,EAErB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACxB,MAAM,iBAAiB,CAAC;AAmBzB,qBAAa,iBAAkB,SAAQ,uBAAwB,YAAW,gBAAgB;;IACtF,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU;IAE5B,OAAa,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,UAAU,8BASlF;IAID,SAAS,CAAC,aAAa,UAAS;IAIhC,YAAY,eAAe,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,KAAK,UAAQ,EASlE;IAED,IAAI,WAAW,YAEd;IAEc,UAAU,kBA2BxB;IA6Cc,KAAK,kBAInB;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,UAExB;IAED,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAOnC;IAED,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,UAY9C;IAEc,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpE;IAEK,GAAG,CAAC,CAAC,SAAS,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAgBlG;IAED;;;;;;OAMG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7D;IAED;;;;OAIG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvG;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAwGhF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,iBAE3C;IASD,yEAAyE;IACnE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,qBAG5B;IAEK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,kDAiB9B;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAGrC;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAKhC;CAqBJ"}
@@ -1,334 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var FileStorageDriver_exports = {};
20
- __export(FileStorageDriver_exports, {
21
- FileStorageDriver: () => FileStorageDriver
22
- });
23
- module.exports = __toCommonJS(FileStorageDriver_exports);
24
- var import_general = require("@matter/general");
25
- var import_node_fs = require("node:fs");
26
- var import_promises = require("node:fs/promises");
27
- var import_node_path = require("node:path");
28
- /**
29
- * @license
30
- * Copyright 2022-2026 Matter.js Authors
31
- * SPDX-License-Identifier: Apache-2.0
32
- */
33
- const logger = new import_general.Logger("FileStorageDriver");
34
- class FileStorageDriver extends import_general.FilesystemStorageDriver {
35
- static id = "file";
36
- static async create(namespace, _descriptor) {
37
- const storage = new FileStorageDriver(namespace);
38
- try {
39
- await storage.initialize();
40
- } catch (error) {
41
- await storage.close().catch(() => {
42
- });
43
- throw error;
44
- }
45
- return storage;
46
- }
47
- #path;
48
- #clear;
49
- isInitialized = false;
50
- #writeFileBlocker = /* @__PURE__ */ new Map();
51
- #index = {};
52
- constructor(namespaceOrPath, clear = false) {
53
- super(typeof namespaceOrPath === "string" || namespaceOrPath === void 0 ? void 0 : namespaceOrPath);
54
- this.#path = typeof namespaceOrPath === "string" ? namespaceOrPath : namespaceOrPath !== void 0 ? this.root.directory.path : "";
55
- this.#clear = clear;
56
- }
57
- get initialized() {
58
- return this.isInitialized;
59
- }
60
- async initialize() {
61
- if (this.isInitialized) {
62
- throw new import_general.StorageError("Storage already initialized!");
63
- }
64
- await super.initialize();
65
- if (this.#clear) {
66
- this.#index = {};
67
- await (0, import_promises.rm)(this.#path, { recursive: true, force: true });
68
- }
69
- await (0, import_promises.mkdir)(this.#path, { recursive: true });
70
- const files = await (0, import_promises.readdir)(this.#path);
71
- for (const file of files) {
72
- if (import_general.StorageDriver.RESERVED_FILENAMES.has(file)) {
73
- continue;
74
- }
75
- if (file.endsWith(".tmp")) {
76
- logger.info("Deleting orphaned temp file", file);
77
- await (0, import_promises.rm)((0, import_node_path.join)(this.#path, file), { force: true });
78
- continue;
79
- }
80
- const parts = decodeURIComponent(file).split(".");
81
- this.#markValue(parts.slice(0, -1), parts[parts.length - 1]);
82
- }
83
- this.isInitialized = true;
84
- }
85
- #indexFor(contexts) {
86
- let node = this.#index;
87
- for (const name of contexts) {
88
- let child = node.contexts?.get(name);
89
- if (child === void 0) {
90
- child = {};
91
- if (!node.contexts) {
92
- node.contexts = /* @__PURE__ */ new Map();
93
- }
94
- node.contexts.set(name, child);
95
- }
96
- node = child;
97
- }
98
- return node;
99
- }
100
- #markValue(contexts, key) {
101
- const index = this.#indexFor(contexts);
102
- if (!index.keys) {
103
- index.keys = /* @__PURE__ */ new Set();
104
- }
105
- index.keys.add(key);
106
- }
107
- async #finishAllWrites(filename) {
108
- if (filename !== void 0 && this.#writeFileBlocker.has(filename) || filename === void 0 && this.#writeFileBlocker.size > 0) {
109
- for (let i = 0; i < 10; i++) {
110
- await import_general.MatterAggregateError.allSettled(
111
- filename !== void 0 ? [this.#writeFileBlocker.get(filename)] : this.#writeFileBlocker.values(),
112
- "Error on finishing all file system writes to storage"
113
- );
114
- if (!this.#writeFileBlocker.size) {
115
- return;
116
- }
117
- }
118
- await this.#fsyncStorageDir();
119
- }
120
- }
121
- async close() {
122
- this.isInitialized = false;
123
- await this.#finishAllWrites();
124
- await super.close();
125
- }
126
- filePath(fileName) {
127
- return (0, import_node_path.join)(this.#path, fileName);
128
- }
129
- getContextBaseKey(contexts) {
130
- for (const ctx of contexts) {
131
- if (!ctx.length || ctx.includes(".")) {
132
- throw new import_general.StorageError("Context must not contain empty segments or leading or trailing dots.");
133
- }
134
- }
135
- return contexts.join(".");
136
- }
137
- buildStorageKey(contexts, key) {
138
- if (!key.length) {
139
- throw new import_general.StorageError("Key must not be an empty string.");
140
- }
141
- if (key === "tmp") {
142
- throw new import_general.StorageError(`Key "tmp" is reserved for atomic write operations.`);
143
- }
144
- const contextKey = this.getContextBaseKey(contexts);
145
- const rawName = contextKey.length ? `${contextKey}.${key}` : key;
146
- return encodeURIComponent(rawName).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
147
- }
148
- async has(contexts, key) {
149
- const index = this.#indexFor(contexts);
150
- return !!index.keys?.has(key);
151
- }
152
- async get(contexts, key) {
153
- const fileName = this.filePath(this.buildStorageKey(contexts, key));
154
- await this.#finishAllWrites(fileName);
155
- let value;
156
- try {
157
- value = await (0, import_promises.readFile)(fileName, "utf8");
158
- } catch (error) {
159
- if (error.code === "ENOENT") return void 0;
160
- throw error;
161
- }
162
- try {
163
- return (0, import_general.fromJson)(value);
164
- } catch (error) {
165
- logger.error(`Failed to parse storage value for key ${key} in context ${contexts.join(".")}`);
166
- }
167
- }
168
- /**
169
- * Read a blob from the flat file format. Retained for legacy migration support — the
170
- * {@link StorageMigration} cross-type kv→blob strategy duck-types this method to extract
171
- * blobs from old FileStorageDriver data.
172
- *
173
- * @deprecated Only used for migration from legacy flat-file blob format.
174
- */
175
- async openBlob(contexts, key) {
176
- const fileName = this.filePath(this.buildStorageKey(contexts, key));
177
- if (await this.has(contexts, key)) {
178
- return await (0, import_node_fs.openAsBlob)(fileName);
179
- }
180
- return new Blob();
181
- }
182
- /**
183
- * Write blob data in the flat file format. Retained for legacy migration support.
184
- *
185
- * @deprecated Only used for migration from legacy flat-file blob format.
186
- */
187
- async writeBlobFromStream(contexts, key, stream) {
188
- return this.#writeFile(contexts, key, stream);
189
- }
190
- async set(contexts, keyOrValues, value) {
191
- if (typeof keyOrValues === "string") {
192
- return this.#writeFile(contexts, keyOrValues, (0, import_general.toJson)(value));
193
- }
194
- const promises = new Array();
195
- for (const [key, value2] of Object.entries(keyOrValues)) {
196
- promises.push(this.#writeFile(contexts, key, (0, import_general.toJson)(value2)));
197
- }
198
- await import_general.MatterAggregateError.allSettled(promises, "Error when writing values into filesystem storage");
199
- }
200
- /** According to Node.js documentation, writeFile is not atomic. This method ensures atomicity. */
201
- async #writeFile(contexts, key, valueOrStream) {
202
- const fileName = this.buildStorageKey(contexts, key);
203
- if (import_general.StorageDriver.RESERVED_FILENAMES.has(fileName)) {
204
- throw new import_general.StorageError(
205
- `Key "${key}" in context "${contexts.join(".")}" maps to reserved file "${fileName}"`
206
- );
207
- }
208
- const blocker = this.#writeFileBlocker.get(fileName);
209
- if (blocker !== void 0) {
210
- await blocker;
211
- return this.#writeFile(contexts, key, valueOrStream);
212
- }
213
- const promise = this.#writeAndMoveFile(this.filePath(fileName), valueOrStream).finally(() => {
214
- this.#writeFileBlocker.delete(fileName);
215
- this.#markValue(contexts, key);
216
- });
217
- this.#writeFileBlocker.set(fileName, promise);
218
- return promise;
219
- }
220
- async #writeAndMoveFile(filepath, valueOrStream) {
221
- const tmpName = `${filepath}.tmp`;
222
- const handle = await (0, import_promises.open)(tmpName, "w");
223
- const isStream = valueOrStream instanceof ReadableStream;
224
- const writer = handle.createWriteStream({ encoding: isStream ? null : "utf8", flush: true });
225
- const { resolver, rejecter, promise: writePromise } = (0, import_general.createPromise)();
226
- writer.on("finish", resolver);
227
- writer.on("error", rejecter);
228
- let reader;
229
- try {
230
- if (isStream) {
231
- reader = valueOrStream.getReader();
232
- while (true) {
233
- const { value: chunk, done } = await reader.read();
234
- if (chunk) {
235
- if (!writer.write(chunk)) {
236
- await new Promise((resolve) => writer.once("drain", resolve));
237
- }
238
- }
239
- if (done) {
240
- break;
241
- }
242
- }
243
- } else {
244
- writer.write(valueOrStream);
245
- }
246
- writer.end();
247
- await writePromise;
248
- } finally {
249
- if (isStream && reader) {
250
- if (valueOrStream.locked) {
251
- reader.releaseLock();
252
- }
253
- await valueOrStream.cancel();
254
- }
255
- await handle.close();
256
- }
257
- await (0, import_promises.rename)(tmpName, filepath);
258
- }
259
- /**
260
- * fsync on a directory ensures there are no rename operations etc. which haven't been persisted to disk.
261
- * We do this as best effort to ensure that all writes are persisted to disk.
262
- */
263
- async #fsyncStorageDir() {
264
- if (process.platform === "win32") {
265
- return;
266
- }
267
- const fd = await (0, import_promises.open)(this.#path, "r");
268
- try {
269
- await fd.sync();
270
- } catch (error) {
271
- logger.warn(`Failed to fsync storage directory ${this.#path}`, error);
272
- } finally {
273
- await fd.close();
274
- }
275
- }
276
- async delete(contexts, key) {
277
- await this.#rm(this.buildStorageKey(contexts, key), this.#indexFor(contexts), key);
278
- }
279
- async #rm(filename, index, key) {
280
- await this.#finishAllWrites(filename);
281
- return (0, import_promises.rm)(this.filePath(filename), { force: true }).finally(() => {
282
- index.keys?.delete(key);
283
- });
284
- }
285
- /** Returns all keys of a storage context without keys of sub-contexts */
286
- async keys(contexts) {
287
- const index = this.#indexFor(contexts);
288
- return index.keys ? [...index.keys] : [];
289
- }
290
- async values(contexts) {
291
- const values = {};
292
- const promises = new Array();
293
- for (const key of await this.keys(contexts)) {
294
- promises.push(
295
- (async () => {
296
- const value = await this.get(contexts, key);
297
- if (value !== void 0) {
298
- values[key] = value;
299
- }
300
- })()
301
- );
302
- }
303
- await import_general.MatterAggregateError.allSettled(promises, "Error when reading values from filesystem storage");
304
- return values;
305
- }
306
- contexts(contexts) {
307
- const index = this.#indexFor(contexts);
308
- return index.contexts ? [...index.contexts.keys()] : [];
309
- }
310
- async clearAll(contexts) {
311
- await this.#finishAllWrites();
312
- const parent = this.#indexFor(contexts.slice(0, -1));
313
- const name = contexts[contexts.length - 1];
314
- await this.#clearChildContext(contexts, parent, name);
315
- }
316
- async #clearChildContext(contexts, parent, name) {
317
- const index = parent.contexts?.get(name);
318
- if (index === void 0) {
319
- return;
320
- }
321
- if (index.contexts) {
322
- for (const name2 of index.contexts.keys()) {
323
- await this.#clearChildContext([...contexts, name2], index, name2);
324
- }
325
- }
326
- if (index.keys) {
327
- await import_general.MatterAggregateError.allSettled(
328
- [...index.keys].map((key) => this.#rm(this.buildStorageKey(contexts, key), index, key)),
329
- `Error deleting keys of storage context ${contexts.join(".")}`
330
- );
331
- }
332
- }
333
- }
334
- //# sourceMappingURL=FileStorageDriver.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/storage/fs/FileStorageDriver.ts"],
4
- "mappings": "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",
5
- "names": ["value", "name"]
6
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { BlobStorageDriver, Bytes, type DataNamespace, FilesystemBlobStorageDriver } from "@matter/general";
7
- /**
8
- * Blob storage driver using the legacy flat-file format from {@link FileStorageDriver}.
9
- *
10
- * All blobs live in a single directory. The filename is the URI-encoded concatenation of context
11
- * segments and key joined by `.`. Example: contexts `["bin", "fff1", "8000"]` with key `"prod"`
12
- * becomes the file `bin.fff1.8000.prod` (percent-encoded).
13
- */
14
- export declare class FlatFileBlobStorageDriver extends FilesystemBlobStorageDriver {
15
- #private;
16
- static readonly id = "file";
17
- static create(namespace: DataNamespace, _descriptor: BlobStorageDriver.Descriptor): FlatFileBlobStorageDriver;
18
- constructor(namespace: DataNamespace);
19
- get initialized(): boolean;
20
- initialize(): Promise<void>;
21
- close(): Promise<void>;
22
- openBlob(contexts: string[], key: string): Promise<Blob>;
23
- writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Bytes>): Promise<void>;
24
- delete(contexts: string[], key: string): Promise<void>;
25
- has(contexts: string[], key: string): Promise<boolean>;
26
- keys(contexts: string[]): Promise<string[]>;
27
- contexts(contexts: string[]): Promise<string[]>;
28
- clearAll(contexts: string[]): Promise<void>;
29
- }
30
- //# sourceMappingURL=FlatFileBlobStorageDriver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlatFileBlobStorageDriver.d.ts","sourceRoot":"","sources":["../../../../src/storage/fs/FlatFileBlobStorageDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,iBAAiB,EACjB,KAAK,EACL,KAAK,aAAa,EAClB,2BAA2B,EAE9B,MAAM,iBAAiB,CAAC;AAKzB;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,2BAA2B;;IACtE,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU;IAE5B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC,UAAU,GAAG,yBAAyB,CAE5G;IAKD,YAAY,SAAS,EAAE,aAAa,EAGnC;IAED,IAAI,WAAW,YAEd;IAEc,UAAU,kBAIxB;IAEc,KAAK,kBAGnB;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7D;IAGK,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvG;IAEK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3D;IAEK,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3D;IAIK,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYhD;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYpD;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAShD;CAoCJ"}