@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.
- package/dist/cjs/config.d.ts +6 -0
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +14 -1
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/environment/NodeJsEnvironment.d.ts +2 -1
- package/dist/cjs/environment/NodeJsEnvironment.d.ts.map +1 -1
- package/dist/cjs/environment/NodeJsEnvironment.js +28 -10
- package/dist/cjs/environment/NodeJsEnvironment.js.map +1 -1
- package/dist/cjs/storage/StorageFactory.d.ts +52 -0
- package/dist/cjs/storage/StorageFactory.d.ts.map +1 -0
- package/dist/cjs/storage/StorageFactory.js +215 -0
- package/dist/cjs/storage/StorageFactory.js.map +6 -0
- package/dist/cjs/storage/fs/StorageBackendDisk.d.ts.map +1 -0
- package/dist/cjs/storage/{StorageBackendDisk.js.map → fs/StorageBackendDisk.js.map} +1 -1
- package/dist/cjs/storage/fs/StorageBackendJsonFile.d.ts.map +1 -0
- package/dist/cjs/storage/{StorageBackendJsonFile.js.map → fs/StorageBackendJsonFile.js.map} +1 -1
- package/dist/cjs/storage/fs/index.d.ts +8 -0
- package/dist/cjs/storage/fs/index.d.ts.map +1 -0
- package/dist/cjs/storage/fs/index.js +25 -0
- package/dist/cjs/storage/fs/index.js.map +6 -0
- package/dist/cjs/storage/index.d.ts +3 -2
- package/dist/cjs/storage/index.d.ts.map +1 -1
- package/dist/cjs/storage/index.js +3 -2
- package/dist/cjs/storage/index.js.map +1 -1
- package/dist/cjs/storage/sqlite/SqliteStorage.d.ts +105 -0
- package/dist/cjs/storage/sqlite/SqliteStorage.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/SqliteStorage.js +439 -0
- package/dist/cjs/storage/sqlite/SqliteStorage.js.map +6 -0
- package/dist/cjs/storage/sqlite/SqliteStorageError.d.ts +19 -0
- package/dist/cjs/storage/sqlite/SqliteStorageError.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/SqliteStorageError.js +38 -0
- package/dist/cjs/storage/sqlite/SqliteStorageError.js.map +6 -0
- package/dist/cjs/storage/sqlite/SqliteTypes.d.ts +67 -0
- package/dist/cjs/storage/sqlite/SqliteTypes.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/SqliteTypes.js +35 -0
- package/dist/cjs/storage/sqlite/SqliteTypes.js.map +6 -0
- package/dist/cjs/storage/sqlite/SqliteUtil.d.ts +33 -0
- package/dist/cjs/storage/sqlite/SqliteUtil.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/SqliteUtil.js +64 -0
- package/dist/cjs/storage/sqlite/SqliteUtil.js.map +6 -0
- package/dist/cjs/storage/sqlite/index.d.ts +10 -0
- package/dist/cjs/storage/sqlite/index.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/index.js +34 -0
- package/dist/cjs/storage/sqlite/index.js.map +6 -0
- package/dist/cjs/storage/sqlite/platform/BunSqlite.d.ts +17 -0
- package/dist/cjs/storage/sqlite/platform/BunSqlite.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/platform/BunSqlite.js +62 -0
- package/dist/cjs/storage/sqlite/platform/BunSqlite.js.map +6 -0
- package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.d.ts +12 -0
- package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.js +49 -0
- package/dist/cjs/storage/sqlite/platform/NodeJsSqlite.js.map +6 -0
- package/dist/cjs/storage/sqlite/platform/PlatformSqlite.d.ts +8 -0
- package/dist/cjs/storage/sqlite/platform/PlatformSqlite.d.ts.map +1 -0
- package/dist/cjs/storage/sqlite/platform/PlatformSqlite.js +54 -0
- package/dist/cjs/storage/sqlite/platform/PlatformSqlite.js.map +6 -0
- package/dist/cjs/util/runtimeChecks.d.ts +14 -0
- package/dist/cjs/util/runtimeChecks.d.ts.map +1 -0
- package/dist/cjs/util/runtimeChecks.js +45 -0
- package/dist/cjs/util/runtimeChecks.js.map +6 -0
- package/dist/esm/config.d.ts +6 -0
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +14 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/environment/NodeJsEnvironment.d.ts +2 -1
- package/dist/esm/environment/NodeJsEnvironment.d.ts.map +1 -1
- package/dist/esm/environment/NodeJsEnvironment.js +29 -10
- package/dist/esm/environment/NodeJsEnvironment.js.map +1 -1
- package/dist/esm/storage/StorageFactory.d.ts +52 -0
- package/dist/esm/storage/StorageFactory.d.ts.map +1 -0
- package/dist/esm/storage/StorageFactory.js +195 -0
- package/dist/esm/storage/StorageFactory.js.map +6 -0
- package/dist/esm/storage/fs/StorageBackendDisk.d.ts.map +1 -0
- package/dist/esm/storage/{StorageBackendDisk.js.map → fs/StorageBackendDisk.js.map} +1 -1
- package/dist/esm/storage/fs/StorageBackendJsonFile.d.ts.map +1 -0
- package/dist/esm/storage/{StorageBackendJsonFile.js.map → fs/StorageBackendJsonFile.js.map} +1 -1
- package/dist/esm/storage/fs/index.d.ts +8 -0
- package/dist/esm/storage/fs/index.d.ts.map +1 -0
- package/dist/esm/storage/fs/index.js +8 -0
- package/dist/esm/storage/fs/index.js.map +6 -0
- package/dist/esm/storage/index.d.ts +3 -2
- package/dist/esm/storage/index.d.ts.map +1 -1
- package/dist/esm/storage/index.js +3 -2
- package/dist/esm/storage/index.js.map +1 -1
- package/dist/esm/storage/sqlite/SqliteStorage.d.ts +105 -0
- package/dist/esm/storage/sqlite/SqliteStorage.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/SqliteStorage.js +423 -0
- package/dist/esm/storage/sqlite/SqliteStorage.js.map +6 -0
- package/dist/esm/storage/sqlite/SqliteStorageError.d.ts +19 -0
- package/dist/esm/storage/sqlite/SqliteStorageError.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/SqliteStorageError.js +18 -0
- package/dist/esm/storage/sqlite/SqliteStorageError.js.map +6 -0
- package/dist/esm/storage/sqlite/SqliteTypes.d.ts +67 -0
- package/dist/esm/storage/sqlite/SqliteTypes.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/SqliteTypes.js +15 -0
- package/dist/esm/storage/sqlite/SqliteTypes.js.map +6 -0
- package/dist/esm/storage/sqlite/SqliteUtil.d.ts +33 -0
- package/dist/esm/storage/sqlite/SqliteUtil.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/SqliteUtil.js +44 -0
- package/dist/esm/storage/sqlite/SqliteUtil.js.map +6 -0
- package/dist/esm/storage/sqlite/index.d.ts +10 -0
- package/dist/esm/storage/sqlite/index.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/index.js +14 -0
- package/dist/esm/storage/sqlite/index.js.map +6 -0
- package/dist/esm/storage/sqlite/platform/BunSqlite.d.ts +17 -0
- package/dist/esm/storage/sqlite/platform/BunSqlite.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/platform/BunSqlite.js +32 -0
- package/dist/esm/storage/sqlite/platform/BunSqlite.js.map +6 -0
- package/dist/esm/storage/sqlite/platform/NodeJsSqlite.d.ts +12 -0
- package/dist/esm/storage/sqlite/platform/NodeJsSqlite.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/platform/NodeJsSqlite.js +29 -0
- package/dist/esm/storage/sqlite/platform/NodeJsSqlite.js.map +6 -0
- package/dist/esm/storage/sqlite/platform/PlatformSqlite.d.ts +8 -0
- package/dist/esm/storage/sqlite/platform/PlatformSqlite.d.ts.map +1 -0
- package/dist/esm/storage/sqlite/platform/PlatformSqlite.js +24 -0
- package/dist/esm/storage/sqlite/platform/PlatformSqlite.js.map +6 -0
- package/dist/esm/util/runtimeChecks.d.ts +14 -0
- package/dist/esm/util/runtimeChecks.d.ts.map +1 -0
- package/dist/esm/util/runtimeChecks.js +25 -0
- package/dist/esm/util/runtimeChecks.js.map +6 -0
- package/package.json +10 -10
- package/src/config.ts +18 -4
- package/src/environment/NodeJsEnvironment.ts +41 -12
- package/src/net/NodeJsHttpEndpoint.ts +1 -1
- package/src/storage/StorageFactory.ts +310 -0
- package/src/storage/fs/index.ts +8 -0
- package/src/storage/index.ts +3 -2
- package/src/storage/sqlite/SqliteStorage.ts +572 -0
- package/src/storage/sqlite/SqliteStorageError.ts +23 -0
- package/src/storage/sqlite/SqliteTypes.ts +75 -0
- package/src/storage/sqlite/SqliteUtil.ts +61 -0
- package/src/storage/sqlite/index.ts +10 -0
- package/src/storage/sqlite/platform/BunSqlite.ts +40 -0
- package/src/storage/sqlite/platform/NodeJsSqlite.ts +35 -0
- package/src/storage/sqlite/platform/PlatformSqlite.ts +52 -0
- package/src/util/runtimeChecks.ts +31 -0
- package/dist/cjs/storage/StorageBackendDisk.d.ts.map +0 -1
- package/dist/cjs/storage/StorageBackendJsonFile.d.ts.map +0 -1
- package/dist/esm/storage/StorageBackendDisk.d.ts.map +0 -1
- package/dist/esm/storage/StorageBackendJsonFile.d.ts.map +0 -1
- /package/dist/cjs/storage/{StorageBackendDisk.d.ts → fs/StorageBackendDisk.d.ts} +0 -0
- /package/dist/cjs/storage/{StorageBackendDisk.js → fs/StorageBackendDisk.js} +0 -0
- /package/dist/cjs/storage/{StorageBackendJsonFile.d.ts → fs/StorageBackendJsonFile.d.ts} +0 -0
- /package/dist/cjs/storage/{StorageBackendJsonFile.js → fs/StorageBackendJsonFile.js} +0 -0
- /package/dist/esm/storage/{StorageBackendDisk.d.ts → fs/StorageBackendDisk.d.ts} +0 -0
- /package/dist/esm/storage/{StorageBackendDisk.js → fs/StorageBackendDisk.js} +0 -0
- /package/dist/esm/storage/{StorageBackendJsonFile.d.ts → fs/StorageBackendJsonFile.d.ts} +0 -0
- /package/dist/esm/storage/{StorageBackendJsonFile.js → fs/StorageBackendJsonFile.js} +0 -0
- /package/src/storage/{StorageBackendDisk.ts → fs/StorageBackendDisk.ts} +0 -0
- /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,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
|
+
}
|