@powersync/op-sqlite 0.0.0-dev-20260311081226 → 0.0.0-dev-20260414110516
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/lib/commonjs/db/OPSQLiteConnection.js +4 -17
- package/lib/commonjs/db/OPSQLiteConnection.js.map +1 -1
- package/lib/commonjs/db/OPSqliteAdapter.js +89 -137
- package/lib/commonjs/db/OPSqliteAdapter.js.map +1 -1
- package/lib/module/db/OPSQLiteConnection.js +5 -18
- package/lib/module/db/OPSQLiteConnection.js.map +1 -1
- package/lib/module/db/OPSqliteAdapter.js +90 -138
- package/lib/module/db/OPSqliteAdapter.js.map +1 -1
- package/lib/typescript/commonjs/src/db/OPSQLiteConnection.d.ts +11 -3
- package/lib/typescript/commonjs/src/db/OPSQLiteConnection.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/db/OPSqliteAdapter.d.ts +18 -13
- package/lib/typescript/commonjs/src/db/OPSqliteAdapter.d.ts.map +1 -1
- package/lib/typescript/module/src/db/OPSQLiteConnection.d.ts +11 -3
- package/lib/typescript/module/src/db/OPSQLiteConnection.d.ts.map +1 -1
- package/lib/typescript/module/src/db/OPSqliteAdapter.d.ts +18 -13
- package/lib/typescript/module/src/db/OPSqliteAdapter.d.ts.map +1 -1
- package/package.json +3 -4
- package/src/db/OPSQLiteConnection.ts +7 -20
- package/src/db/OPSqliteAdapter.ts +75 -150
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.OPSQLiteConnection = void 0;
|
|
7
7
|
var _common = require("@powersync/common");
|
|
8
|
-
class
|
|
8
|
+
class OPSQLiteExecutor extends _common.BaseObserver {
|
|
9
9
|
constructor(options) {
|
|
10
10
|
super();
|
|
11
11
|
this.options = options;
|
|
@@ -75,7 +75,7 @@ class OPSQLiteConnection extends _common.BaseObserver {
|
|
|
75
75
|
async executeRaw(query, params) {
|
|
76
76
|
return await this.DB.executeRaw(query, params);
|
|
77
77
|
}
|
|
78
|
-
async
|
|
78
|
+
async executeNativeBatch(query, params = []) {
|
|
79
79
|
const tuple = [[query, params[0]]];
|
|
80
80
|
params.slice(1).forEach(p => tuple.push([query, p]));
|
|
81
81
|
const result = await this.DB.executeBatch(tuple);
|
|
@@ -83,21 +83,8 @@ class OPSQLiteConnection extends _common.BaseObserver {
|
|
|
83
83
|
rowsAffected: result.rowsAffected ?? 0
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return result.rows ?? [];
|
|
89
|
-
}
|
|
90
|
-
async getOptional(sql, parameters) {
|
|
91
|
-
const result = await this.DB.execute(sql, parameters);
|
|
92
|
-
return result.rows?.[0] ?? null;
|
|
93
|
-
}
|
|
94
|
-
async get(sql, parameters) {
|
|
95
|
-
const result = await this.getOptional(sql, parameters);
|
|
96
|
-
if (!result) {
|
|
97
|
-
throw new Error('Result set is empty');
|
|
98
|
-
}
|
|
99
|
-
return result;
|
|
100
|
-
}
|
|
86
|
+
}
|
|
87
|
+
class OPSQLiteConnection extends (0, _common.DBGetUtilsDefaultMixin)(OPSQLiteExecutor) {
|
|
101
88
|
async refreshSchema() {
|
|
102
89
|
await this.get("PRAGMA table_info('sqlite_master')");
|
|
103
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","
|
|
1
|
+
{"version":3,"names":["_common","require","OPSQLiteExecutor","BaseObserver","constructor","options","DB","baseDB","updateBuffer","rollbackHook","updateHook","update","addTableUpdate","opType","operation","RowUpdateType","SQLITE_INSERT","SQLITE_DELETE","SQLITE_UPDATE","push","table","rowId","flushUpdates","length","groupedUpdates","reduce","grouping","updateGroup","batchedUpdate","rawUpdates","tables","Object","keys","iterateListeners","l","tablesUpdated","close","execute","query","params","res","insertId","rowsAffected","rows","_array","item","index","executeRaw","executeNativeBatch","tuple","slice","forEach","p","result","executeBatch","OPSQLiteConnection","DBGetUtilsDefaultMixin","refreshSchema","get","exports"],"sourceRoot":"../../../src","sources":["db/OPSQLiteConnection.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.OPSQLiteDBAdapter = void 0;
|
|
7
7
|
var _opSqlite = require("@op-engineering/op-sqlite");
|
|
8
8
|
var _common = require("@powersync/common");
|
|
9
|
-
var _asyncMutex = require("async-mutex");
|
|
10
9
|
var _reactNative = require("react-native");
|
|
11
10
|
var _OPSQLiteConnection = require("./OPSQLiteConnection.js");
|
|
12
11
|
/**
|
|
@@ -14,13 +13,11 @@ var _OPSQLiteConnection = require("./OPSQLiteConnection.js");
|
|
|
14
13
|
*/
|
|
15
14
|
|
|
16
15
|
const READ_CONNECTIONS = 5;
|
|
17
|
-
class
|
|
18
|
-
readQueue = [];
|
|
16
|
+
class OPSQLiteConnectionPool extends _common.BaseObserver {
|
|
19
17
|
constructor(options) {
|
|
20
18
|
super();
|
|
21
19
|
this.options = options;
|
|
22
20
|
this.name = this.options.name;
|
|
23
|
-
this.writeMutex = new _asyncMutex.Mutex();
|
|
24
21
|
this.readConnections = null;
|
|
25
22
|
this.writeConnection = null;
|
|
26
23
|
this.abortController = new AbortController();
|
|
@@ -36,14 +33,14 @@ class OPSQLiteDBAdapter extends _common.BaseObserver {
|
|
|
36
33
|
temporaryStorage
|
|
37
34
|
} = this.options.sqliteOptions;
|
|
38
35
|
const dbFilename = this.options.name;
|
|
39
|
-
|
|
36
|
+
const underlyingWriteConnection = await this.openConnection(dbFilename);
|
|
40
37
|
const baseStatements = [`PRAGMA busy_timeout = ${lockTimeoutMs}`, `PRAGMA cache_size = -${cacheSizeKb}`, `PRAGMA temp_store = ${temporaryStorage}`];
|
|
41
38
|
const writeConnectionStatements = [...baseStatements, `PRAGMA journal_mode = ${journalMode}`, `PRAGMA journal_size_limit = ${journalSizeLimit}`, `PRAGMA synchronous = ${synchronous}`];
|
|
42
39
|
const readConnectionStatements = [...baseStatements, 'PRAGMA query_only = true'];
|
|
43
40
|
for (const statement of writeConnectionStatements) {
|
|
44
41
|
for (let tries = 0; tries < 30; tries++) {
|
|
45
42
|
try {
|
|
46
|
-
await
|
|
43
|
+
await underlyingWriteConnection.execute(statement);
|
|
47
44
|
break;
|
|
48
45
|
} catch (e) {
|
|
49
46
|
if (e instanceof Error && e.message.includes('database is locked') && tries < 29) {
|
|
@@ -56,20 +53,19 @@ class OPSQLiteDBAdapter extends _common.BaseObserver {
|
|
|
56
53
|
}
|
|
57
54
|
|
|
58
55
|
// Changes should only occur in the write connection
|
|
59
|
-
|
|
56
|
+
underlyingWriteConnection.registerListener({
|
|
60
57
|
tablesUpdated: notification => this.iterateListeners(cb => cb.tablesUpdated?.(notification))
|
|
61
58
|
});
|
|
62
|
-
|
|
59
|
+
const underlyingReadConnections = [];
|
|
63
60
|
for (let i = 0; i < READ_CONNECTIONS; i++) {
|
|
64
61
|
const conn = await this.openConnection(dbFilename);
|
|
65
62
|
for (let statement of readConnectionStatements) {
|
|
66
63
|
await conn.execute(statement);
|
|
67
64
|
}
|
|
68
|
-
|
|
69
|
-
busy: false,
|
|
70
|
-
connection: conn
|
|
71
|
-
});
|
|
65
|
+
underlyingReadConnections.push(conn);
|
|
72
66
|
}
|
|
67
|
+
this.writeConnection = new _common.Semaphore([underlyingWriteConnection]);
|
|
68
|
+
this.readConnections = new _common.Semaphore(underlyingReadConnections);
|
|
73
69
|
}
|
|
74
70
|
async openConnection(filenameOverride) {
|
|
75
71
|
const dbFilename = filenameOverride ?? this.options.name;
|
|
@@ -116,146 +112,102 @@ class OPSQLiteDBAdapter extends _common.BaseObserver {
|
|
|
116
112
|
await this.initialized;
|
|
117
113
|
// Abort any pending operations
|
|
118
114
|
this.abortController.abort();
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
115
|
+
const {
|
|
116
|
+
item: writeConnection,
|
|
117
|
+
release: returnWrite
|
|
118
|
+
} = await this.writeConnection.requestOne();
|
|
119
|
+
const {
|
|
120
|
+
items: readers,
|
|
121
|
+
release: returnReaders
|
|
122
|
+
} = await this.readConnections.requestAll();
|
|
123
|
+
try {
|
|
124
|
+
writeConnection.close();
|
|
125
|
+
readers.forEach(c => c.close());
|
|
126
|
+
} finally {
|
|
127
|
+
returnWrite();
|
|
128
|
+
returnReaders();
|
|
129
|
+
}
|
|
122
130
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
resolve(await fn(availableConnection.connection));
|
|
135
|
-
} catch (error) {
|
|
136
|
-
reject(error);
|
|
137
|
-
} finally {
|
|
138
|
-
availableConnection.busy = false;
|
|
139
|
-
// After query execution, process any queued tasks
|
|
140
|
-
this.processQueue();
|
|
141
|
-
}
|
|
142
|
-
} else {
|
|
143
|
-
// If no available connections, add to the queue
|
|
144
|
-
this.readQueue.push(execute);
|
|
145
|
-
}
|
|
131
|
+
generateNestedAbortSignal(options) {
|
|
132
|
+
const outerSignal = this.abortController.signal;
|
|
133
|
+
let signal;
|
|
134
|
+
let cleanUpInnerSignal;
|
|
135
|
+
if (options?.timeoutMs && !outerSignal.aborted) {
|
|
136
|
+
// This is essentially an AbortSignal.any() polyfill.
|
|
137
|
+
const innerController = new AbortController();
|
|
138
|
+
cleanUpInnerSignal = () => {
|
|
139
|
+
innerController.abort();
|
|
140
|
+
outerSignal.removeEventListener('abort', cleanUpInnerSignal);
|
|
141
|
+
timeout.removeEventListener('abort', cleanUpInnerSignal);
|
|
146
142
|
};
|
|
147
|
-
|
|
148
|
-
|
|
143
|
+
outerSignal.addEventListener('abort', cleanUpInnerSignal);
|
|
144
|
+
const timeout = (0, _common.timeoutSignal)(options.timeoutMs);
|
|
145
|
+
timeout.addEventListener('abort', cleanUpInnerSignal);
|
|
146
|
+
signal = innerController.signal;
|
|
147
|
+
} else {
|
|
148
|
+
signal = outerSignal;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
signal,
|
|
152
|
+
cleanUpInnerSignal
|
|
153
|
+
};
|
|
149
154
|
}
|
|
150
|
-
async
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
async readLock(fn, options) {
|
|
156
|
+
await this.initialized;
|
|
157
|
+
const {
|
|
158
|
+
signal,
|
|
159
|
+
cleanUpInnerSignal
|
|
160
|
+
} = this.generateNestedAbortSignal(options);
|
|
161
|
+
const {
|
|
162
|
+
item,
|
|
163
|
+
release
|
|
164
|
+
} = await this.readConnections.requestOne(signal);
|
|
165
|
+
try {
|
|
166
|
+
return await fn(item);
|
|
167
|
+
} finally {
|
|
168
|
+
release();
|
|
169
|
+
cleanUpInnerSignal?.();
|
|
156
170
|
}
|
|
157
171
|
}
|
|
158
172
|
async writeLock(fn, options) {
|
|
159
173
|
await this.initialized;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// Check if operation was aborted before executing
|
|
169
|
-
if (this.abortController.signal.aborted) {
|
|
170
|
-
reject(new Error('Database connection was closed'));
|
|
171
|
-
}
|
|
172
|
-
resolve(await fn(this.writeConnection));
|
|
173
|
-
}, options);
|
|
174
|
-
// flush updates once a write lock has been released
|
|
175
|
-
this.writeConnection.flushUpdates();
|
|
176
|
-
} catch (ex) {
|
|
177
|
-
reject(ex);
|
|
178
|
-
} finally {
|
|
179
|
-
this.abortController.signal.removeEventListener('abort', abortListener);
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
readTransaction(fn, options) {
|
|
184
|
-
return this.readLock(ctx => this.internalTransaction(ctx, fn));
|
|
185
|
-
}
|
|
186
|
-
writeTransaction(fn, options) {
|
|
187
|
-
return this.writeLock(ctx => this.internalTransaction(ctx, fn));
|
|
188
|
-
}
|
|
189
|
-
getAll(sql, parameters) {
|
|
190
|
-
return this.readLock(ctx => ctx.getAll(sql, parameters));
|
|
191
|
-
}
|
|
192
|
-
getOptional(sql, parameters) {
|
|
193
|
-
return this.readLock(ctx => ctx.getOptional(sql, parameters));
|
|
194
|
-
}
|
|
195
|
-
get(sql, parameters) {
|
|
196
|
-
return this.readLock(ctx => ctx.get(sql, parameters));
|
|
197
|
-
}
|
|
198
|
-
execute(query, params) {
|
|
199
|
-
return this.writeLock(ctx => ctx.execute(query, params));
|
|
200
|
-
}
|
|
201
|
-
executeRaw(query, params) {
|
|
202
|
-
return this.writeLock(ctx => ctx.executeRaw(query, params));
|
|
203
|
-
}
|
|
204
|
-
async executeBatch(query, params = []) {
|
|
205
|
-
return this.writeLock(ctx => ctx.executeBatch(query, params));
|
|
206
|
-
}
|
|
207
|
-
async internalTransaction(connection, fn) {
|
|
208
|
-
let finalized = false;
|
|
209
|
-
const commit = async () => {
|
|
210
|
-
if (finalized) {
|
|
211
|
-
return {
|
|
212
|
-
rowsAffected: 0
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
finalized = true;
|
|
216
|
-
return connection.execute('COMMIT');
|
|
217
|
-
};
|
|
218
|
-
const rollback = async () => {
|
|
219
|
-
if (finalized) {
|
|
220
|
-
return {
|
|
221
|
-
rowsAffected: 0
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
finalized = true;
|
|
225
|
-
return connection.execute('ROLLBACK');
|
|
226
|
-
};
|
|
174
|
+
const {
|
|
175
|
+
signal,
|
|
176
|
+
cleanUpInnerSignal
|
|
177
|
+
} = this.generateNestedAbortSignal(options);
|
|
178
|
+
const {
|
|
179
|
+
item,
|
|
180
|
+
release
|
|
181
|
+
} = await this.writeConnection.requestOne(signal);
|
|
227
182
|
try {
|
|
228
|
-
await
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
get: (query, params) => connection.get(query, params),
|
|
233
|
-
getAll: (query, params) => connection.getAll(query, params),
|
|
234
|
-
getOptional: (query, params) => connection.getOptional(query, params),
|
|
235
|
-
commit,
|
|
236
|
-
rollback
|
|
237
|
-
});
|
|
238
|
-
await commit();
|
|
239
|
-
return result;
|
|
240
|
-
} catch (ex) {
|
|
241
|
-
try {
|
|
242
|
-
await rollback();
|
|
243
|
-
} catch (ex2) {
|
|
244
|
-
// In rare cases, a rollback may fail.
|
|
245
|
-
// Safe to ignore.
|
|
246
|
-
}
|
|
247
|
-
throw ex;
|
|
183
|
+
return await fn(item).finally(() => item.flushUpdates());
|
|
184
|
+
} finally {
|
|
185
|
+
release();
|
|
186
|
+
cleanUpInnerSignal?.();
|
|
248
187
|
}
|
|
249
188
|
}
|
|
250
189
|
async refreshSchema() {
|
|
251
190
|
await this.initialized;
|
|
252
|
-
await this.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
191
|
+
await this.writeLock(l => l.refreshSchema());
|
|
192
|
+
const {
|
|
193
|
+
items,
|
|
194
|
+
release
|
|
195
|
+
} = await this.readConnections.requestAll();
|
|
196
|
+
try {
|
|
197
|
+
for (let readConnection of items) {
|
|
198
|
+
await readConnection.refreshSchema();
|
|
256
199
|
}
|
|
200
|
+
} finally {
|
|
201
|
+
release();
|
|
257
202
|
}
|
|
258
203
|
}
|
|
259
204
|
}
|
|
205
|
+
class OPSQLiteDBAdapter extends (0, _common.DBAdapterDefaultMixin)(OPSQLiteConnectionPool) {
|
|
206
|
+
async executeBatch(query, params = []) {
|
|
207
|
+
return await this.writeLock(async tx => {
|
|
208
|
+
return await tx.executeNativeBatch(query, params);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
260
212
|
exports.OPSQLiteDBAdapter = OPSQLiteDBAdapter;
|
|
261
213
|
//# sourceMappingURL=OPSqliteAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_opSqlite","require","_common","
|
|
1
|
+
{"version":3,"names":["_opSqlite","require","_common","_reactNative","_OPSQLiteConnection","READ_CONNECTIONS","OPSQLiteConnectionPool","BaseObserver","constructor","options","name","readConnections","writeConnection","abortController","AbortController","initialized","init","lockTimeoutMs","journalMode","journalSizeLimit","synchronous","cacheSizeKb","temporaryStorage","sqliteOptions","dbFilename","underlyingWriteConnection","openConnection","baseStatements","writeConnectionStatements","readConnectionStatements","statement","tries","execute","e","Error","message","includes","registerListener","tablesUpdated","notification","iterateListeners","cb","underlyingReadConnections","i","conn","push","Semaphore","filenameOverride","DB","openDatabase","encryptionKey","undefined","loadAdditionalExtensions","loadPowerSyncExtension","OPSQLiteConnection","baseDB","openOptions","dbLocation","location","open","extensions","length","extension","loadExtension","path","entryPoint","Platform","OS","libPath","getDylibPath","close","abort","item","release","returnWrite","requestOne","items","readers","returnReaders","requestAll","forEach","c","generateNestedAbortSignal","outerSignal","signal","cleanUpInnerSignal","timeoutMs","aborted","innerController","removeEventListener","timeout","addEventListener","timeoutSignal","readLock","fn","writeLock","finally","flushUpdates","refreshSchema","l","readConnection","OPSQLiteDBAdapter","DBAdapterDefaultMixin","executeBatch","query","params","tx","executeNativeBatch","exports"],"sourceRoot":"../../../src","sources":["db/OPSqliteAdapter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { BaseObserver, RowUpdateType } from '@powersync/common';
|
|
4
|
-
|
|
3
|
+
import { BaseObserver, DBGetUtilsDefaultMixin, RowUpdateType } from '@powersync/common';
|
|
4
|
+
class OPSQLiteExecutor extends BaseObserver {
|
|
5
5
|
constructor(options) {
|
|
6
6
|
super();
|
|
7
7
|
this.options = options;
|
|
@@ -71,7 +71,7 @@ export class OPSQLiteConnection extends BaseObserver {
|
|
|
71
71
|
async executeRaw(query, params) {
|
|
72
72
|
return await this.DB.executeRaw(query, params);
|
|
73
73
|
}
|
|
74
|
-
async
|
|
74
|
+
async executeNativeBatch(query, params = []) {
|
|
75
75
|
const tuple = [[query, params[0]]];
|
|
76
76
|
params.slice(1).forEach(p => tuple.push([query, p]));
|
|
77
77
|
const result = await this.DB.executeBatch(tuple);
|
|
@@ -79,21 +79,8 @@ export class OPSQLiteConnection extends BaseObserver {
|
|
|
79
79
|
rowsAffected: result.rowsAffected ?? 0
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return result.rows ?? [];
|
|
85
|
-
}
|
|
86
|
-
async getOptional(sql, parameters) {
|
|
87
|
-
const result = await this.DB.execute(sql, parameters);
|
|
88
|
-
return result.rows?.[0] ?? null;
|
|
89
|
-
}
|
|
90
|
-
async get(sql, parameters) {
|
|
91
|
-
const result = await this.getOptional(sql, parameters);
|
|
92
|
-
if (!result) {
|
|
93
|
-
throw new Error('Result set is empty');
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
82
|
+
}
|
|
83
|
+
export class OPSQLiteConnection extends DBGetUtilsDefaultMixin(OPSQLiteExecutor) {
|
|
97
84
|
async refreshSchema() {
|
|
98
85
|
await this.get("PRAGMA table_info('sqlite_master')");
|
|
99
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BaseObserver","RowUpdateType","
|
|
1
|
+
{"version":3,"names":["BaseObserver","DBGetUtilsDefaultMixin","RowUpdateType","OPSQLiteExecutor","constructor","options","DB","baseDB","updateBuffer","rollbackHook","updateHook","update","addTableUpdate","opType","operation","SQLITE_INSERT","SQLITE_DELETE","SQLITE_UPDATE","push","table","rowId","flushUpdates","length","groupedUpdates","reduce","grouping","updateGroup","batchedUpdate","rawUpdates","tables","Object","keys","iterateListeners","l","tablesUpdated","close","execute","query","params","res","insertId","rowsAffected","rows","_array","item","index","executeRaw","executeNativeBatch","tuple","slice","forEach","p","result","executeBatch","OPSQLiteConnection","refreshSchema","get"],"sourceRoot":"../../../src","sources":["db/OPSQLiteConnection.ts"],"mappings":"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","ignoreList":[]}
|