@matter/nodejs 0.16.6-alpha.0-20260121-bc6d62766 → 0.16.6

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 (150) hide show
  1. package/dist/cjs/config.d.ts +6 -0
  2. package/dist/cjs/config.d.ts.map +1 -1
  3. package/dist/cjs/config.js +14 -1
  4. package/dist/cjs/config.js.map +1 -1
  5. package/dist/cjs/environment/NodeJsEnvironment.d.ts +2 -1
  6. package/dist/cjs/environment/NodeJsEnvironment.d.ts.map +1 -1
  7. package/dist/cjs/environment/NodeJsEnvironment.js +28 -10
  8. package/dist/cjs/environment/NodeJsEnvironment.js.map +1 -1
  9. package/dist/cjs/storage/StorageFactory.d.ts +52 -0
  10. package/dist/cjs/storage/StorageFactory.d.ts.map +1 -0
  11. package/dist/cjs/storage/StorageFactory.js +215 -0
  12. package/dist/cjs/storage/StorageFactory.js.map +6 -0
  13. package/dist/cjs/storage/fs/StorageBackendDisk.d.ts.map +1 -0
  14. package/dist/cjs/storage/{StorageBackendDisk.js.map → fs/StorageBackendDisk.js.map} +1 -1
  15. package/dist/cjs/storage/fs/StorageBackendJsonFile.d.ts.map +1 -0
  16. package/dist/cjs/storage/{StorageBackendJsonFile.js.map → fs/StorageBackendJsonFile.js.map} +1 -1
  17. package/dist/cjs/storage/fs/index.d.ts +8 -0
  18. package/dist/cjs/storage/fs/index.d.ts.map +1 -0
  19. package/dist/cjs/storage/fs/index.js +25 -0
  20. package/dist/cjs/storage/fs/index.js.map +6 -0
  21. package/dist/cjs/storage/index.d.ts +3 -2
  22. package/dist/cjs/storage/index.d.ts.map +1 -1
  23. package/dist/cjs/storage/index.js +3 -2
  24. package/dist/cjs/storage/index.js.map +1 -1
  25. package/dist/cjs/storage/sqlite/SqliteStorage.d.ts +105 -0
  26. package/dist/cjs/storage/sqlite/SqliteStorage.d.ts.map +1 -0
  27. package/dist/cjs/storage/sqlite/SqliteStorage.js +439 -0
  28. package/dist/cjs/storage/sqlite/SqliteStorage.js.map +6 -0
  29. package/dist/cjs/storage/sqlite/SqliteStorageError.d.ts +19 -0
  30. package/dist/cjs/storage/sqlite/SqliteStorageError.d.ts.map +1 -0
  31. package/dist/cjs/storage/sqlite/SqliteStorageError.js +38 -0
  32. package/dist/cjs/storage/sqlite/SqliteStorageError.js.map +6 -0
  33. package/dist/cjs/storage/sqlite/SqliteTypes.d.ts +67 -0
  34. package/dist/cjs/storage/sqlite/SqliteTypes.d.ts.map +1 -0
  35. package/dist/cjs/storage/sqlite/SqliteTypes.js +35 -0
  36. package/dist/cjs/storage/sqlite/SqliteTypes.js.map +6 -0
  37. package/dist/cjs/storage/sqlite/SqliteUtil.d.ts +33 -0
  38. package/dist/cjs/storage/sqlite/SqliteUtil.d.ts.map +1 -0
  39. package/dist/cjs/storage/sqlite/SqliteUtil.js +64 -0
  40. package/dist/cjs/storage/sqlite/SqliteUtil.js.map +6 -0
  41. package/dist/cjs/storage/sqlite/index.d.ts +10 -0
  42. package/dist/cjs/storage/sqlite/index.d.ts.map +1 -0
  43. package/dist/cjs/storage/sqlite/index.js +34 -0
  44. package/dist/cjs/storage/sqlite/index.js.map +6 -0
  45. package/dist/cjs/storage/sqlite/platform/BunSqlite.d.ts +17 -0
  46. package/dist/cjs/storage/sqlite/platform/BunSqlite.d.ts.map +1 -0
  47. package/dist/cjs/storage/sqlite/platform/BunSqlite.js +62 -0
  48. package/dist/cjs/storage/sqlite/platform/BunSqlite.js.map +6 -0
  49. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.d.ts +12 -0
  50. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.d.ts.map +1 -0
  51. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.js +49 -0
  52. package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.js.map +6 -0
  53. package/dist/cjs/storage/sqlite/platform/PlatformSqlite.d.ts +8 -0
  54. package/dist/cjs/storage/sqlite/platform/PlatformSqlite.d.ts.map +1 -0
  55. package/dist/cjs/storage/sqlite/platform/PlatformSqlite.js +54 -0
  56. package/dist/cjs/storage/sqlite/platform/PlatformSqlite.js.map +6 -0
  57. package/dist/cjs/util/runtimeChecks.d.ts +14 -0
  58. package/dist/cjs/util/runtimeChecks.d.ts.map +1 -0
  59. package/dist/cjs/util/runtimeChecks.js +45 -0
  60. package/dist/cjs/util/runtimeChecks.js.map +6 -0
  61. package/dist/esm/config.d.ts +6 -0
  62. package/dist/esm/config.d.ts.map +1 -1
  63. package/dist/esm/config.js +14 -1
  64. package/dist/esm/config.js.map +1 -1
  65. package/dist/esm/environment/NodeJsEnvironment.d.ts +2 -1
  66. package/dist/esm/environment/NodeJsEnvironment.d.ts.map +1 -1
  67. package/dist/esm/environment/NodeJsEnvironment.js +29 -10
  68. package/dist/esm/environment/NodeJsEnvironment.js.map +1 -1
  69. package/dist/esm/storage/StorageFactory.d.ts +52 -0
  70. package/dist/esm/storage/StorageFactory.d.ts.map +1 -0
  71. package/dist/esm/storage/StorageFactory.js +195 -0
  72. package/dist/esm/storage/StorageFactory.js.map +6 -0
  73. package/dist/esm/storage/fs/StorageBackendDisk.d.ts.map +1 -0
  74. package/dist/esm/storage/{StorageBackendDisk.js.map → fs/StorageBackendDisk.js.map} +1 -1
  75. package/dist/esm/storage/fs/StorageBackendJsonFile.d.ts.map +1 -0
  76. package/dist/esm/storage/{StorageBackendJsonFile.js.map → fs/StorageBackendJsonFile.js.map} +1 -1
  77. package/dist/esm/storage/fs/index.d.ts +8 -0
  78. package/dist/esm/storage/fs/index.d.ts.map +1 -0
  79. package/dist/esm/storage/fs/index.js +8 -0
  80. package/dist/esm/storage/fs/index.js.map +6 -0
  81. package/dist/esm/storage/index.d.ts +3 -2
  82. package/dist/esm/storage/index.d.ts.map +1 -1
  83. package/dist/esm/storage/index.js +3 -2
  84. package/dist/esm/storage/index.js.map +1 -1
  85. package/dist/esm/storage/sqlite/SqliteStorage.d.ts +105 -0
  86. package/dist/esm/storage/sqlite/SqliteStorage.d.ts.map +1 -0
  87. package/dist/esm/storage/sqlite/SqliteStorage.js +423 -0
  88. package/dist/esm/storage/sqlite/SqliteStorage.js.map +6 -0
  89. package/dist/esm/storage/sqlite/SqliteStorageError.d.ts +19 -0
  90. package/dist/esm/storage/sqlite/SqliteStorageError.d.ts.map +1 -0
  91. package/dist/esm/storage/sqlite/SqliteStorageError.js +18 -0
  92. package/dist/esm/storage/sqlite/SqliteStorageError.js.map +6 -0
  93. package/dist/esm/storage/sqlite/SqliteTypes.d.ts +67 -0
  94. package/dist/esm/storage/sqlite/SqliteTypes.d.ts.map +1 -0
  95. package/dist/esm/storage/sqlite/SqliteTypes.js +15 -0
  96. package/dist/esm/storage/sqlite/SqliteTypes.js.map +6 -0
  97. package/dist/esm/storage/sqlite/SqliteUtil.d.ts +33 -0
  98. package/dist/esm/storage/sqlite/SqliteUtil.d.ts.map +1 -0
  99. package/dist/esm/storage/sqlite/SqliteUtil.js +44 -0
  100. package/dist/esm/storage/sqlite/SqliteUtil.js.map +6 -0
  101. package/dist/esm/storage/sqlite/index.d.ts +10 -0
  102. package/dist/esm/storage/sqlite/index.d.ts.map +1 -0
  103. package/dist/esm/storage/sqlite/index.js +14 -0
  104. package/dist/esm/storage/sqlite/index.js.map +6 -0
  105. package/dist/esm/storage/sqlite/platform/BunSqlite.d.ts +17 -0
  106. package/dist/esm/storage/sqlite/platform/BunSqlite.d.ts.map +1 -0
  107. package/dist/esm/storage/sqlite/platform/BunSqlite.js +32 -0
  108. package/dist/esm/storage/sqlite/platform/BunSqlite.js.map +6 -0
  109. package/dist/esm/storage/sqlite/platform/NodeJsSqlite.d.ts +12 -0
  110. package/dist/esm/storage/sqlite/platform/NodeJsSqlite.d.ts.map +1 -0
  111. package/dist/esm/storage/sqlite/platform/NodeJsSqlite.js +29 -0
  112. package/dist/esm/storage/sqlite/platform/NodeJsSqlite.js.map +6 -0
  113. package/dist/esm/storage/sqlite/platform/PlatformSqlite.d.ts +8 -0
  114. package/dist/esm/storage/sqlite/platform/PlatformSqlite.d.ts.map +1 -0
  115. package/dist/esm/storage/sqlite/platform/PlatformSqlite.js +24 -0
  116. package/dist/esm/storage/sqlite/platform/PlatformSqlite.js.map +6 -0
  117. package/dist/esm/util/runtimeChecks.d.ts +14 -0
  118. package/dist/esm/util/runtimeChecks.d.ts.map +1 -0
  119. package/dist/esm/util/runtimeChecks.js +25 -0
  120. package/dist/esm/util/runtimeChecks.js.map +6 -0
  121. package/package.json +10 -10
  122. package/src/config.ts +18 -4
  123. package/src/environment/NodeJsEnvironment.ts +41 -12
  124. package/src/net/NodeJsHttpEndpoint.ts +1 -1
  125. package/src/storage/StorageFactory.ts +310 -0
  126. package/src/storage/fs/index.ts +8 -0
  127. package/src/storage/index.ts +3 -2
  128. package/src/storage/sqlite/SqliteStorage.ts +572 -0
  129. package/src/storage/sqlite/SqliteStorageError.ts +23 -0
  130. package/src/storage/sqlite/SqliteTypes.ts +75 -0
  131. package/src/storage/sqlite/SqliteUtil.ts +61 -0
  132. package/src/storage/sqlite/index.ts +10 -0
  133. package/src/storage/sqlite/platform/BunSqlite.ts +40 -0
  134. package/src/storage/sqlite/platform/NodeJsSqlite.ts +35 -0
  135. package/src/storage/sqlite/platform/PlatformSqlite.ts +52 -0
  136. package/src/util/runtimeChecks.ts +31 -0
  137. package/dist/cjs/storage/StorageBackendDisk.d.ts.map +0 -1
  138. package/dist/cjs/storage/StorageBackendJsonFile.d.ts.map +0 -1
  139. package/dist/esm/storage/StorageBackendDisk.d.ts.map +0 -1
  140. package/dist/esm/storage/StorageBackendJsonFile.d.ts.map +0 -1
  141. /package/dist/cjs/storage/{StorageBackendDisk.d.ts → fs/StorageBackendDisk.d.ts} +0 -0
  142. /package/dist/cjs/storage/{StorageBackendDisk.js → fs/StorageBackendDisk.js} +0 -0
  143. /package/dist/cjs/storage/{StorageBackendJsonFile.d.ts → fs/StorageBackendJsonFile.d.ts} +0 -0
  144. /package/dist/cjs/storage/{StorageBackendJsonFile.js → fs/StorageBackendJsonFile.js} +0 -0
  145. /package/dist/esm/storage/{StorageBackendDisk.d.ts → fs/StorageBackendDisk.d.ts} +0 -0
  146. /package/dist/esm/storage/{StorageBackendDisk.js → fs/StorageBackendDisk.js} +0 -0
  147. /package/dist/esm/storage/{StorageBackendJsonFile.d.ts → fs/StorageBackendJsonFile.d.ts} +0 -0
  148. /package/dist/esm/storage/{StorageBackendJsonFile.js → fs/StorageBackendJsonFile.js} +0 -0
  149. /package/src/storage/{StorageBackendDisk.ts → fs/StorageBackendDisk.ts} +0 -0
  150. /package/src/storage/{StorageBackendJsonFile.ts → fs/StorageBackendJsonFile.ts} +0 -0
@@ -0,0 +1,423 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import {
7
+ fromJson,
8
+ Storage,
9
+ toJson
10
+ } from "@matter/general";
11
+ import { SqliteStorageError } from "./SqliteStorageError.js";
12
+ import { SqliteTransaction as Transaction } from "./SqliteTypes.js";
13
+ import { buildContextKeyLog, buildContextKeyPair, buildContextPath, escapeGlob } from "./SqliteUtil.js";
14
+ class SqliteStorage extends Storage {
15
+ static memoryPath = ":memory:";
16
+ static defaultTableName = "kvstore";
17
+ isInitialized = false;
18
+ #inTransaction = false;
19
+ // internal values
20
+ database;
21
+ dbPath;
22
+ tableName;
23
+ clearOnInit;
24
+ databaseCreator;
25
+ // queries
26
+ #queryInit;
27
+ #queryGet;
28
+ #queryGetRaw;
29
+ #querySet;
30
+ #querySetRaw;
31
+ #queryDelete;
32
+ #queryKeys;
33
+ #queryValues;
34
+ #queryContextSub;
35
+ #queryClear;
36
+ #queryClearAll;
37
+ #queryHas;
38
+ #queryOpenBlob;
39
+ #queryWriteBlob;
40
+ /**
41
+ * Create sqlite-based disk
42
+ *
43
+ * @param args.databaseCreator database instance creator
44
+ * @param args.path Database path (treats `null` as `:memory:`, DO NOT input `:memory:` directly)
45
+ * @param args.clear Clear on init
46
+ * @param args.tableName table name
47
+ */
48
+ constructor(args) {
49
+ super();
50
+ const { databaseCreator, path, tableName, clear } = args;
51
+ this.dbPath = path === null ? SqliteStorage.memoryPath : path;
52
+ this.databaseCreator = databaseCreator;
53
+ this.database = databaseCreator(this.dbPath);
54
+ this.tableName = tableName ?? SqliteStorage.defaultTableName;
55
+ this.clearOnInit = clear ?? false;
56
+ this.#queryInit = this.database.prepare(`
57
+ CREATE TABLE IF NOT EXISTS ${this.tableName} (
58
+ context TEXT NOT NULL,
59
+ key TEXT NOT NULL,
60
+ value_type TEXT CHECK(value_type IN ('json', 'blob')),
61
+ value_json TEXT,
62
+ value_blob BLOB,
63
+ CONSTRAINT PKPair PRIMARY KEY (context, key)
64
+ ) STRICT
65
+ `);
66
+ this.#queryInit.run();
67
+ this.#queryGet = this.database.prepare(`
68
+ SELECT value_json FROM ${this.tableName} WHERE
69
+ context=$context AND
70
+ key=$key AND
71
+ value_type='json'
72
+ `);
73
+ this.#queryGetRaw = this.database.prepare(`
74
+ SELECT * FROM ${this.tableName}
75
+ `);
76
+ this.#queryHas = this.database.prepare(`
77
+ SELECT EXISTS(
78
+ SELECT 1 FROM ${this.tableName}
79
+ WHERE context=$context AND key=$key
80
+ ) as has_record
81
+ `);
82
+ this.#querySet = this.database.prepare(`
83
+ INSERT INTO ${this.tableName}
84
+ (context, key, value_type, value_json, value_blob)
85
+ VALUES($context, $key, 'json', $value_json, NULL)
86
+ ON CONFLICT(context, key)
87
+ DO UPDATE SET
88
+ value_type = 'json',
89
+ value_json = excluded.value_json,
90
+ value_blob = NULL
91
+ `);
92
+ this.#querySetRaw = this.database.prepare(`
93
+ INSERT INTO ${this.tableName}
94
+ (context, key, value_type, value_json, value_blob)
95
+ VALUES($context, $key, $value_type, $value_json, $value_blob)
96
+ ON CONFLICT(context, key)
97
+ DO UPDATE SET
98
+ value_type = excluded.value_type,
99
+ value_json = excluded.value_json,
100
+ value_blob = excluded.value_blob
101
+ `);
102
+ this.#queryDelete = this.database.prepare(`
103
+ DELETE FROM ${this.tableName} WHERE
104
+ context=$context AND
105
+ key=$key
106
+ `);
107
+ this.#queryClear = this.database.prepare(`
108
+ DELETE FROM ${this.tableName}
109
+ `);
110
+ this.#queryClearAll = this.database.prepare(`
111
+ DELETE FROM ${this.tableName} WHERE
112
+ context=$context OR context GLOB $contextGlob
113
+ `);
114
+ this.#queryKeys = this.database.prepare(`
115
+ SELECT DISTINCT key FROM ${this.tableName} WHERE
116
+ context=$context
117
+ `);
118
+ this.#queryValues = this.database.prepare(`
119
+ SELECT key, value_json FROM ${this.tableName} WHERE
120
+ context=$context AND
121
+ value_type='json'
122
+ `);
123
+ this.#queryContextSub = this.database.prepare(`
124
+ SELECT DISTINCT context FROM ${this.tableName} WHERE
125
+ context GLOB $contextGlob
126
+ `);
127
+ this.#queryOpenBlob = this.database.prepare(`
128
+ SELECT value_type, value_json, value_blob FROM ${this.tableName} WHERE
129
+ context=$context AND
130
+ key=$key
131
+ `);
132
+ this.#queryWriteBlob = this.database.prepare(`
133
+ INSERT INTO ${this.tableName}
134
+ (context, key, value_type, value_json, value_blob)
135
+ VALUES($context, $key, 'blob', NULL, $value_blob)
136
+ ON CONFLICT(context, key)
137
+ DO UPDATE SET
138
+ value_type = 'blob',
139
+ value_json = NULL,
140
+ value_blob = excluded.value_blob
141
+ `);
142
+ }
143
+ /**
144
+ * Manual transaction control
145
+ *
146
+ * Use this for explicit transaction management across multiple operations.
147
+ * Internal methods like `set()` will automatically detect and use external transactions.
148
+ *
149
+ * TODO: Sync transaction to native matter.js API
150
+ */
151
+ transaction(mode) {
152
+ switch (mode) {
153
+ case Transaction.BEGIN:
154
+ if (this.#inTransaction) {
155
+ throw new SqliteStorageError("transaction", "BEGIN", "Transaction is in progress.");
156
+ }
157
+ this.database.exec("BEGIN IMMEDIATE TRANSACTION");
158
+ this.#inTransaction = true;
159
+ break;
160
+ case Transaction.COMMIT:
161
+ if (!this.#inTransaction) {
162
+ throw new SqliteStorageError("transaction", "COMMIT", "No transaction in progress.");
163
+ }
164
+ this.database.exec("COMMIT");
165
+ this.#inTransaction = false;
166
+ break;
167
+ case Transaction.ROLLBACK:
168
+ if (!this.#inTransaction) {
169
+ return;
170
+ }
171
+ this.database.exec("ROLLBACK");
172
+ this.#inTransaction = false;
173
+ break;
174
+ }
175
+ }
176
+ withAnyTransaction(callback) {
177
+ if (this.#inTransaction) {
178
+ return callback();
179
+ }
180
+ this.transaction(Transaction.BEGIN);
181
+ try {
182
+ const result = callback();
183
+ this.transaction(Transaction.COMMIT);
184
+ return result;
185
+ } catch (err) {
186
+ this.transaction(Transaction.ROLLBACK);
187
+ throw err;
188
+ }
189
+ }
190
+ get initialized() {
191
+ return this.isInitialized;
192
+ }
193
+ async initialize() {
194
+ if (this.clearOnInit) {
195
+ await this.clear(false);
196
+ }
197
+ this.isInitialized = true;
198
+ }
199
+ clone() {
200
+ const clonedStorage = new SqliteStorage({
201
+ databaseCreator: this.databaseCreator,
202
+ path: null,
203
+ tableName: this.tableName,
204
+ clear: false
205
+ });
206
+ const rawData = this.getRawAll();
207
+ clonedStorage.setRaw(rawData);
208
+ clonedStorage.isInitialized = true;
209
+ return clonedStorage;
210
+ }
211
+ close() {
212
+ this.isInitialized = false;
213
+ this.database.close();
214
+ }
215
+ get(contexts, key) {
216
+ const queryResult = this.#queryGet.get(buildContextKeyPair(contexts, key));
217
+ if (queryResult == null) {
218
+ return void 0;
219
+ }
220
+ if (queryResult.value_json === null) {
221
+ this.delete(contexts, key);
222
+ throw new SqliteStorageError(
223
+ "get",
224
+ buildContextKeyLog(contexts, key),
225
+ "path has null json-value! (expected non-null value)"
226
+ );
227
+ }
228
+ return fromJson(queryResult.value_json);
229
+ }
230
+ getRawAll() {
231
+ return this.#queryGetRaw.all().filter((v) => v != null);
232
+ }
233
+ set(contexts, keyOrValues, value) {
234
+ if (typeof keyOrValues === "string") {
235
+ if (value === void 0) {
236
+ throw new SqliteStorageError(
237
+ "set",
238
+ buildContextKeyLog(contexts, keyOrValues),
239
+ "Use null instead of undefined if you want to store null value!"
240
+ );
241
+ }
242
+ this.setValue(contexts, keyOrValues, toJson(value));
243
+ } else {
244
+ this.withAnyTransaction(() => {
245
+ for (const [key, value2] of Object.entries(keyOrValues)) {
246
+ this.setValue(contexts, key, toJson(value2 ?? null));
247
+ }
248
+ });
249
+ }
250
+ }
251
+ /**
252
+ * Set [contexts, key] to value
253
+ * @param contexts Context
254
+ * @param key Key
255
+ * @param value Value
256
+ * @returns
257
+ */
258
+ setValue(contexts, key, value) {
259
+ const { changes } = this.#querySet.run({
260
+ ...buildContextKeyPair(contexts, key),
261
+ value_json: value
262
+ });
263
+ if (Number(changes) <= 0) {
264
+ throw new SqliteStorageError(
265
+ "set",
266
+ buildContextKeyLog(contexts, key),
267
+ `Something went wrong! Value wasn't changed.`
268
+ );
269
+ }
270
+ }
271
+ /**
272
+ * Set Raw data. (for copy)
273
+ */
274
+ setRaw(rawData) {
275
+ if (rawData.length <= 0) {
276
+ return;
277
+ }
278
+ if (rawData.length === 1) {
279
+ const raw = rawData[0];
280
+ const { changes } = this.#querySetRaw.run({
281
+ context: raw.context,
282
+ key: raw.key,
283
+ value_type: raw.value_type,
284
+ value_json: raw.value_json,
285
+ value_blob: raw.value_blob
286
+ });
287
+ if (Number(changes) <= 0) {
288
+ throw new SqliteStorageError(
289
+ "setraw",
290
+ `${raw.context}$${raw.key}`,
291
+ `Something went wrong! Value wasn't changed.`
292
+ );
293
+ }
294
+ return;
295
+ }
296
+ this.withAnyTransaction(() => {
297
+ for (const raw of rawData) {
298
+ const { changes } = this.#querySetRaw.run({
299
+ context: raw.context,
300
+ key: raw.key,
301
+ value_type: raw.value_type,
302
+ value_json: raw.value_json,
303
+ value_blob: raw.value_blob
304
+ });
305
+ if (Number(changes) <= 0) {
306
+ throw new SqliteStorageError(
307
+ "setraw",
308
+ `${raw.context}$${raw.key}`,
309
+ `Something went wrong! Value wasn't changed.`
310
+ );
311
+ }
312
+ }
313
+ });
314
+ }
315
+ delete(contexts, key) {
316
+ this.#queryDelete.run(buildContextKeyPair(contexts, key));
317
+ }
318
+ keys(contexts) {
319
+ const queryResults = this.#queryKeys.all({
320
+ context: buildContextPath(contexts)
321
+ }).filter((v) => v != null);
322
+ return queryResults.map((v) => v.key);
323
+ }
324
+ values(contexts) {
325
+ const queryResults = this.#queryValues.all({
326
+ context: buildContextPath(contexts)
327
+ }).filter((v) => v != null);
328
+ const record = /* @__PURE__ */ Object.create(null);
329
+ for (const element of queryResults) {
330
+ record[element.key] = fromJson(element.value_json);
331
+ }
332
+ return record;
333
+ }
334
+ /**
335
+ * Return sub contexts of context
336
+ * (search nested depth, return 1 depth of them)
337
+ * @param contexts context path
338
+ * @returns sub contexts
339
+ */
340
+ contexts(contexts) {
341
+ const parentCtx = buildContextPath(contexts);
342
+ let subContexts;
343
+ if (contexts.length === 0) {
344
+ const allContexts = this.#queryContextSub.all({ contextGlob: "*" }).filter((v) => v != null);
345
+ subContexts = allContexts.map((v) => {
346
+ const firstDotIndex = v.context.indexOf(".");
347
+ if (firstDotIndex < 0) {
348
+ return v.context;
349
+ }
350
+ return v.context.substring(0, firstDotIndex);
351
+ });
352
+ } else {
353
+ const allSubContexts = this.#queryContextSub.all({
354
+ contextGlob: escapeGlob(parentCtx) + ".*"
355
+ }).filter((v) => v != null);
356
+ subContexts = allSubContexts.map((v) => {
357
+ const subKey = v.context.substring(parentCtx.length + 1);
358
+ const dotIndex = subKey.indexOf(".");
359
+ if (dotIndex < 0) {
360
+ return subKey;
361
+ }
362
+ return subKey.substring(0, dotIndex);
363
+ });
364
+ }
365
+ return [...new Set(subContexts.filter((c) => c != null && c.trim().length > 0))];
366
+ }
367
+ /**
368
+ * Should be implement to platform specific class
369
+ * when `completely = true`
370
+ *
371
+ * basic cleanup query for here.
372
+ */
373
+ async clear(_completely) {
374
+ this.#queryClear.run();
375
+ }
376
+ clearAll(contexts) {
377
+ if (contexts.length === 0) {
378
+ return;
379
+ }
380
+ const contextPath = buildContextPath(contexts);
381
+ this.#queryClearAll.run({
382
+ context: contextPath,
383
+ contextGlob: escapeGlob(contextPath) + ".*"
384
+ });
385
+ }
386
+ has(contexts, key) {
387
+ const result = this.#queryHas.get(buildContextKeyPair(contexts, key));
388
+ return result?.has_record === 1;
389
+ }
390
+ openBlob(contexts, key) {
391
+ const queryResult = this.#queryOpenBlob.get(buildContextKeyPair(contexts, key));
392
+ if (queryResult == null) {
393
+ return new Blob();
394
+ }
395
+ if (queryResult.value_type === "blob" && queryResult.value_blob != null) {
396
+ return new Blob([new Uint8Array(queryResult.value_blob)]);
397
+ }
398
+ if (queryResult.value_type === "json" && queryResult.value_json != null) {
399
+ return new Blob([queryResult.value_json]);
400
+ }
401
+ this.delete(contexts, key);
402
+ return new Blob();
403
+ }
404
+ async writeBlobFromStream(contexts, key, stream) {
405
+ const arrayBuffer = await new Response(stream).arrayBuffer();
406
+ const bytes = new Uint8Array(arrayBuffer);
407
+ const queryResult = this.#queryWriteBlob.run({
408
+ ...buildContextKeyPair(contexts, key),
409
+ value_blob: bytes
410
+ });
411
+ if (Number(queryResult.changes) <= 0) {
412
+ throw new SqliteStorageError(
413
+ "writeBlob",
414
+ buildContextKeyLog(contexts, key),
415
+ `Something went wrong! Value wasn't changed.`
416
+ );
417
+ }
418
+ }
419
+ }
420
+ export {
421
+ SqliteStorage
422
+ };
423
+ //# sourceMappingURL=SqliteStorage.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/storage/sqlite/SqliteStorage.ts"],
4
+ "mappings": "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",
5
+ "names": ["value"]
6
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { StorageError } from "@matter/general";
7
+ /**
8
+ * StorageError with
9
+ *
10
+ * `methodType`: Method type of Storage
11
+ * `contextKey`: Context$Key
12
+ */
13
+ export declare class SqliteStorageError extends StorageError {
14
+ readonly methodType: string;
15
+ readonly contextKey: string;
16
+ readonly mainReason: string;
17
+ constructor(methodType: string, contextKey: string, mainReason: string);
18
+ }
19
+ //# sourceMappingURL=SqliteStorageError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteStorageError.d.ts","sourceRoot":"","sources":["../../../../src/storage/sqlite/SqliteStorageError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;aAE5B,UAAU,EAAE,MAAM;aAClB,UAAU,EAAE,MAAM;aAClB,UAAU,EAAE,MAAM;gBAFlB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;CAIzC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { StorageError } from "@matter/general";
7
+ class SqliteStorageError extends StorageError {
8
+ constructor(methodType, contextKey, mainReason) {
9
+ super(`[${methodType.toUpperCase()}] ${contextKey}: ${mainReason}`);
10
+ this.methodType = methodType;
11
+ this.contextKey = contextKey;
12
+ this.mainReason = mainReason;
13
+ }
14
+ }
15
+ export {
16
+ SqliteStorageError
17
+ };
18
+ //# sourceMappingURL=SqliteStorageError.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/storage/sqlite/SqliteStorageError.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,oBAAoB;AAQtB,MAAM,2BAA2B,aAAa;AAAA,EACjD,YACoB,YACA,YACA,YAClB;AACE,UAAM,IAAI,WAAW,YAAY,CAAC,KAAK,UAAU,KAAK,UAAU,EAAE;AAJlD;AACA;AACA;AAAA,EAGpB;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Stores various utility types used by sqlite disk.
8
+ */
9
+ export type SafeUint8Array = Uint8Array<ArrayBuffer>;
10
+ export type SqliteDataType = null | number | bigint | string | SafeUint8Array;
11
+ export type SqliteResultType = Record<string, SqliteDataType>;
12
+ /**
13
+ * DatabaseLike
14
+ *
15
+ * compatible with `node:sqlite`(type mismatch), `bun:sqlite`
16
+ */
17
+ export interface DatabaseLike {
18
+ prepare<O extends SqliteResultType | void>(query: string): SqlRunnableSimple<O> & SqlRunnableParam<any, O>;
19
+ exec(sql: string): void;
20
+ close(): void;
21
+ }
22
+ export type DatabaseCreator = (path: string) => DatabaseLike;
23
+ /**
24
+ * Defines `I` -> `O` Runnable
25
+ *
26
+ * `I` type is treated as Input.
27
+ *
28
+ * `O` type is treated as Output.
29
+ *
30
+ * `void` type is used for no input/output.
31
+ */
32
+ export type SqlRunnable<I extends SqliteResultType | void, O extends SqliteResultType | void> = I extends SqliteResultType ? SqlRunnableParam<I, O> : SqlRunnableSimple<O>;
33
+ /**
34
+ * Database method with no parameter.
35
+ *
36
+ * (`I` must be void)
37
+ */
38
+ interface SqlRunnableSimple<O extends SqliteResultType | void> {
39
+ run(): {
40
+ changes: number | bigint;
41
+ };
42
+ get(): O | null | undefined;
43
+ all(): Array<O | undefined>;
44
+ }
45
+ /**
46
+ * Database method with parameter.
47
+ */
48
+ interface SqlRunnableParam<I extends SqliteResultType, O extends SqliteResultType | void> {
49
+ run(arg: I): {
50
+ changes: number | bigint;
51
+ };
52
+ get(arg: I): O | null | undefined;
53
+ all(arg: I): Array<O | undefined>;
54
+ }
55
+ /**
56
+ * SQLite Transaction mode
57
+ *
58
+ * TODO: Move transaction control to higher level (matter.js Transaction API)
59
+ * and remove this
60
+ */
61
+ export declare enum SqliteTransaction {
62
+ BEGIN = 0,
63
+ COMMIT = 1,
64
+ ROLLBACK = 2
65
+ }
66
+ export {};
67
+ //# sourceMappingURL=SqliteTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteTypes.d.ts","sourceRoot":"","sources":["../../../../src/storage/sqlite/SqliteTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AAGH,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,CAAC,SAAS,gBAAgB,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3G,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,CACnB,CAAC,SAAS,gBAAgB,GAAG,IAAI,EACjC,CAAC,SAAS,gBAAgB,GAAG,IAAI,IACjC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAE/E;;;;GAIG;AACH,UAAU,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,GAAG,IAAI;IACzD,GAAG,IAAI;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACpC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5B,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,UAAU,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,SAAS,gBAAgB,GAAG,IAAI;IACpF,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC1C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACrC;AAED;;;;;GAKG;AACH,oBAAY,iBAAiB;IACzB,KAAK,IAAA;IACL,MAAM,IAAA;IACN,QAAQ,IAAA;CACX"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ var SqliteTransaction = /* @__PURE__ */ ((SqliteTransaction2) => {
7
+ SqliteTransaction2[SqliteTransaction2["BEGIN"] = 0] = "BEGIN";
8
+ SqliteTransaction2[SqliteTransaction2["COMMIT"] = 1] = "COMMIT";
9
+ SqliteTransaction2[SqliteTransaction2["ROLLBACK"] = 2] = "ROLLBACK";
10
+ return SqliteTransaction2;
11
+ })(SqliteTransaction || {});
12
+ export {
13
+ SqliteTransaction
14
+ };
15
+ //# sourceMappingURL=SqliteTypes.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/storage/sqlite/SqliteTypes.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAsEO,IAAK,oBAAL,kBAAKA,uBAAL;AACH,EAAAA,sCAAA;AACA,EAAAA,sCAAA;AACA,EAAAA,sCAAA;AAHQ,SAAAA;AAAA,GAAA;",
5
+ "names": ["SqliteTransaction"]
6
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Build string context path from contexts[]
8
+ * @param contexts Contexts
9
+ * @returns `.` joined context path
10
+ */
11
+ export declare function buildContextPath(contexts: string[]): string;
12
+ /**
13
+ * Build Context & Key pair
14
+ * @param contexts Contexts
15
+ * @param key Key
16
+ */
17
+ export declare function buildContextKeyPair(contexts: string[], key: string): {
18
+ context: string;
19
+ key: string;
20
+ };
21
+ /**
22
+ * Build Context & Key *log* path
23
+ */
24
+ export declare function buildContextKeyLog(contexts: string[], key: string): string;
25
+ /**
26
+ * Build key (just verification)
27
+ */
28
+ export declare function buildKey(key: string): string;
29
+ /**
30
+ * Escape string for Glob
31
+ */
32
+ export declare function escapeGlob(value: string): string;
33
+ //# sourceMappingURL=SqliteUtil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteUtil.d.ts","sourceRoot":"","sources":["../../../../src/storage/sqlite/SqliteUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAWlD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM;;;EAKlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,UAEjE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,UAKnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,UAEvC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SqliteStorageError } from "./SqliteStorageError.js";
7
+ function buildContextPath(contexts) {
8
+ for (const ctx of contexts) {
9
+ if (ctx.trim().length <= 0 || ctx.includes(".")) {
10
+ throw new SqliteStorageError(
11
+ "build",
12
+ `{${contexts.join(",")}}`,
13
+ "Context must not be an empty and not contain dots."
14
+ );
15
+ }
16
+ }
17
+ return contexts.join(".");
18
+ }
19
+ function buildContextKeyPair(contexts, key) {
20
+ return {
21
+ context: buildContextPath(contexts),
22
+ key: buildKey(key)
23
+ };
24
+ }
25
+ function buildContextKeyLog(contexts, key) {
26
+ return `${buildContextPath(contexts)}$${key}`;
27
+ }
28
+ function buildKey(key) {
29
+ if (key.trim().length <= 0) {
30
+ throw new SqliteStorageError("build", key, "Key must not be an empty string.");
31
+ }
32
+ return key;
33
+ }
34
+ function escapeGlob(value) {
35
+ return value.replace(/[*[?]/g, "[$&]");
36
+ }
37
+ export {
38
+ buildContextKeyLog,
39
+ buildContextKeyPair,
40
+ buildContextPath,
41
+ buildKey,
42
+ escapeGlob
43
+ };
44
+ //# sourceMappingURL=SqliteUtil.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/storage/sqlite/SqliteUtil.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,0BAA0B;AAO5B,SAAS,iBAAiB,UAAoB;AACjD,aAAW,OAAO,UAAU;AACxB,QAAI,IAAI,KAAK,EAAE,UAAU,KAAK,IAAI,SAAS,GAAG,GAAG;AAC7C,YAAM,IAAI;AAAA,QACN;AAAA,QACA,IAAI,SAAS,KAAK,GAAG,CAAC;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,SAAO,SAAS,KAAK,GAAG;AAC5B;AAOO,SAAS,oBAAoB,UAAoB,KAAa;AACjE,SAAO;AAAA,IACH,SAAS,iBAAiB,QAAQ;AAAA,IAClC,KAAK,SAAS,GAAG;AAAA,EACrB;AACJ;AAKO,SAAS,mBAAmB,UAAoB,KAAa;AAChE,SAAO,GAAG,iBAAiB,QAAQ,CAAC,IAAI,GAAG;AAC/C;AAKO,SAAS,SAAS,KAAa;AAClC,MAAI,IAAI,KAAK,EAAE,UAAU,GAAG;AACxB,UAAM,IAAI,mBAAmB,SAAS,KAAK,kCAAkC;AAAA,EACjF;AACA,SAAO;AACX;AAKO,SAAS,WAAW,OAAe;AACtC,SAAO,MAAM,QAAQ,UAAU,MAAM;AACzC;",
5
+ "names": []
6
+ }