@quereus/plugin-leveldb 3.3.0 → 4.1.0

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.
@@ -1,213 +1,363 @@
1
1
  /**
2
- * LevelDB KVStore provider implementation.
2
+ * LevelDB KVStoreProvider — shared-root layout.
3
3
  *
4
- * Manages LevelDB stores for the StoreModule.
4
+ * All of a database's stores live inside ONE physical LevelDB at `basePath`, each
5
+ * as a sublevel keyed by its store name:
5
6
  *
6
- * Storage naming convention:
7
- * {basePath}/{schema}/{table} - Data store (row data)
8
- * {basePath}/{schema}/{table}_idx_{name} - Index store (secondary indexes)
9
- * {basePath}/__stats__ - Unified stats store (row counts for all tables)
10
- * {basePath}/__catalog__ - Catalog store (DDL metadata)
7
+ * {schema}.{table} - table data (buildDataStoreName)
8
+ * {schema}.{table}_idx_{name} - secondary index (buildIndexStoreName)
9
+ * __stats__ - unified stats (STATS_STORE_NAME)
10
+ * __catalog__ - catalog / DDL (CATALOG_STORE_NAME)
11
+ *
12
+ * Because every sublevel shares one physical store, a single chained batch
13
+ * (`root.batch()…write()`) commits across sublevels atomically and durably — see
14
+ * {@link LevelDBProvider.beginAtomicBatch}. This is the crash-safe single commit
15
+ * that the prior per-directory layout (a separate ClassicLevel per table) could
16
+ * not provide: separate physical databases cannot share a write batch.
17
+ *
18
+ * HARD CUTOVER: this is the only LevelDB layout. Databases written by the prior
19
+ * per-directory layout (`{basePath}/{schema}/{table}`) are NOT read here and must
20
+ * be re-created (pre-1.0 dev data). There is no on-disk migration. See README.
11
21
  */
12
- import path from 'node:path';
13
- import fs from 'node:fs';
14
- import { STORE_SUFFIX, CATALOG_STORE_NAME, STATS_STORE_NAME } from '@quereus/store';
22
+ import { ClassicLevel } from 'classic-level';
23
+ import { buildDataStoreName, buildIndexStoreName, CATALOG_STORE_NAME, STATS_STORE_NAME } from '@quereus/store';
24
+ import { QuereusError, StatusCode } from '@quereus/quereus';
15
25
  import { LevelDBStore } from './store.js';
26
+ const textEncoder = new TextEncoder();
16
27
  /**
17
- * LevelDB implementation of KVStoreProvider.
28
+ * Encode a logical store name into a sublevel-safe name.
18
29
  *
19
- * Creates separate LevelDB databases for each table, stored
20
- * in subdirectories under the configured base path.
30
+ * abstract-level requires every byte of a sublevel name to be in `(separator, 127)`
31
+ * — with the default `!` separator that is 35..126. Logical store names are
32
+ * `{schema}.{table}` identifiers that may contain spaces, punctuation, or non-ASCII
33
+ * (e.g. a quoted table name `"Table With Spaces"`), so any byte outside the safe set
34
+ * is percent-encoded. The mapping is deterministic and injective (distinct logical
35
+ * names → distinct sublevel names), which is all the provider's name-keyed caching
36
+ * and the StoreModule's collision checks require; the sublevel name is never decoded
37
+ * back. Common names (lowercase identifiers, `.`, `_`) pass through unchanged.
38
+ */
39
+ function encodeSublevelName(name) {
40
+ let out = '';
41
+ for (const b of textEncoder.encode(name)) {
42
+ // Safe: printable ASCII in (34, 127) except '%' (0x25), which is reserved as
43
+ // the escape introducer so the encoding stays injective.
44
+ if (b > 34 && b < 127 && b !== 0x25) {
45
+ out += String.fromCharCode(b);
46
+ }
47
+ else {
48
+ out += '%' + b.toString(16).toUpperCase().padStart(2, '0');
49
+ }
50
+ }
51
+ return out;
52
+ }
53
+ /**
54
+ * LevelDB implementation of KVStoreProvider over a single shared root with one
55
+ * sublevel per logical store.
21
56
  */
22
57
  export class LevelDBProvider {
23
58
  basePath;
24
59
  createIfMissing;
60
+ syncCommits;
61
+ /** The shared physical root, once opened. */
62
+ root = null;
63
+ /** Memoized in-flight root open so concurrent first-opens share one handle. */
64
+ rootOpening = null;
65
+ /** Cached store handles, keyed by store (sublevel) name. */
25
66
  stores = new Map();
26
- storePaths = new Map();
27
- catalogStore = null;
28
- statsStore = null;
67
+ /** In-flight sublevel opens, keyed by store name, so concurrent callers dedupe. */
68
+ storeOpening = new Map();
69
+ /**
70
+ * Sublevel + ownership proof for every store this provider produced. Used by the
71
+ * atomic batch to map a {@link KVStore} handle back to its sublevel and to reject
72
+ * a foreign handle (a non-LevelDB store, or one from another provider, is absent).
73
+ */
74
+ sublevelByStore = new WeakMap();
29
75
  constructor(options) {
30
76
  this.basePath = options.basePath;
31
77
  this.createIfMissing = options.createIfMissing ?? true;
78
+ this.syncCommits = options.syncCommits ?? true;
32
79
  }
33
- async getStore(schemaName, tableName, options) {
34
- const storeName = `${schemaName}.${tableName}`.toLowerCase();
35
- const storePath = options?.path || path.join(this.basePath, schemaName, tableName);
36
- return this.getOrCreateStore(storeName, storePath);
80
+ async getStore(schemaName, tableName, _options) {
81
+ // NOTE: the prior per-directory layout honored an `options.path` override to
82
+ // place a table's database elsewhere. With one shared root there is no
83
+ // per-table path, so the override is gone (the engine never passed it).
84
+ return this.getOrCreateStore(buildDataStoreName(schemaName, tableName));
37
85
  }
38
86
  async getIndexStore(schemaName, tableName, indexName) {
39
- const storeName = `${schemaName}.${tableName}${STORE_SUFFIX.INDEX}${indexName}`.toLowerCase();
40
- const storePath = path.join(this.basePath, schemaName, `${tableName}${STORE_SUFFIX.INDEX}${indexName}`);
41
- return this.getOrCreateStore(storeName, storePath);
87
+ return this.getOrCreateStore(buildIndexStoreName(schemaName, tableName, indexName));
42
88
  }
43
89
  async getStatsStore(_schemaName, _tableName) {
44
- // Use the unified __stats__ store for all tables
45
- if (!this.statsStore) {
46
- const statsPath = path.join(this.basePath, STATS_STORE_NAME);
47
- this.statsStore = await LevelDBStore.open({
48
- path: statsPath,
49
- createIfMissing: this.createIfMissing,
50
- });
51
- }
52
- return this.statsStore;
90
+ // Unified __stats__ store for all tables.
91
+ return this.getOrCreateStore(STATS_STORE_NAME);
53
92
  }
54
93
  async getCatalogStore() {
55
- if (!this.catalogStore) {
56
- const catalogPath = path.join(this.basePath, CATALOG_STORE_NAME);
57
- this.catalogStore = await LevelDBStore.open({
58
- path: catalogPath,
59
- createIfMissing: this.createIfMissing,
60
- });
61
- }
62
- return this.catalogStore;
94
+ return this.getOrCreateStore(CATALOG_STORE_NAME);
63
95
  }
64
96
  async closeStore(schemaName, tableName) {
65
- const storeName = `${schemaName}.${tableName}`.toLowerCase();
66
- await this.closeStoreByName(storeName);
97
+ await this.closeStoreByName(buildDataStoreName(schemaName, tableName));
67
98
  }
68
99
  async closeIndexStore(schemaName, tableName, indexName) {
69
- const storeName = `${schemaName}.${tableName}${STORE_SUFFIX.INDEX}${indexName}`.toLowerCase();
70
- await this.closeStoreByName(storeName);
100
+ await this.closeStoreByName(buildIndexStoreName(schemaName, tableName, indexName));
71
101
  }
72
102
  async closeAll() {
103
+ // Await any in-flight opens (stores + root) first so we don't strand a
104
+ // freshly-opened sublevel/root after clearing the caches and closing the root.
105
+ await Promise.allSettled([
106
+ ...this.storeOpening.values(),
107
+ this.rootOpening,
108
+ ].filter(Boolean));
109
+ // Close each cached sublevel handle, then close the root. Closing the root
110
+ // would itself cascade to attached sublevels, but closing handles first
111
+ // marks our store wrappers closed and keeps the close ordering explicit.
73
112
  for (const store of this.stores.values()) {
74
113
  await store.close();
75
114
  }
76
115
  this.stores.clear();
77
- if (this.catalogStore) {
78
- await this.catalogStore.close();
79
- this.catalogStore = null;
80
- }
81
- if (this.statsStore) {
82
- await this.statsStore.close();
83
- this.statsStore = null;
116
+ this.storeOpening.clear();
117
+ if (this.root) {
118
+ await this.root.close();
119
+ this.root = null;
84
120
  }
121
+ this.rootOpening = null;
85
122
  }
86
123
  async deleteIndexStore(schemaName, tableName, indexName) {
87
- const storeName = `${schemaName}.${tableName}${STORE_SUFFIX.INDEX}${indexName}`.toLowerCase();
88
- const storePath = this.storePaths.get(storeName)
89
- ?? path.join(this.basePath, schemaName, `${tableName}${STORE_SUFFIX.INDEX}${indexName}`);
90
- await this.closeStoreByName(storeName);
91
- await removeDir(storePath);
124
+ await this.clearAndDropStore(buildIndexStoreName(schemaName, tableName, indexName));
92
125
  }
93
- async renameTableStores(schemaName, oldName, newName) {
94
- const oldDataStoreName = `${schemaName}.${oldName}`.toLowerCase();
95
- const newDataStoreName = `${schemaName}.${newName}`.toLowerCase();
126
+ async renameTableStores(schemaName, oldName, newName, indexNames) {
127
+ const root = await this.getRoot();
128
+ const oldDataStoreName = buildDataStoreName(schemaName, oldName);
129
+ const newDataStoreName = buildDataStoreName(schemaName, newName);
96
130
  if (this.stores.has(newDataStoreName)) {
97
131
  throw new Error(`Cannot rename '${oldName}' to '${newName}': store already open under the new name`);
98
132
  }
99
- // Close all open handles for the old table (data + indexes) so LevelDB
100
- // releases its file locks before we move the directories.
101
- await this.closeStoreByName(oldDataStoreName);
102
- const oldIndexPrefix = `${schemaName}.${oldName}${STORE_SUFFIX.INDEX}`.toLowerCase();
103
- const indexStoreNames = [];
104
- for (const name of this.stores.keys()) {
105
- if (name.startsWith(oldIndexPrefix))
106
- indexStoreNames.push(name);
107
- }
108
- for (const name of indexStoreNames) {
109
- await this.closeStoreByName(name);
110
- }
111
- // Move data directory, if present.
112
- const schemaDir = path.join(this.basePath, schemaName);
113
- const oldDataPath = path.join(schemaDir, oldName);
114
- const newDataPath = path.join(schemaDir, newName);
115
- if (await pathExists(oldDataPath)) {
116
- if (await pathExists(newDataPath)) {
117
- throw new Error(`Cannot rename '${oldName}' to '${newName}': destination path '${newDataPath}' already exists`);
118
- }
119
- await fs.promises.rename(oldDataPath, newDataPath);
133
+ // (old → new) store-name pairs: data store + each schema index, built
134
+ // exact-by-name via buildIndexStoreName — never a `${oldName}_idx_` prefix
135
+ // scan, which would also match a sibling table literally named
136
+ // `${oldName}_idx_<x>` (its data store) and relocate its keys.
137
+ const pairs = [
138
+ { old: oldDataStoreName, new: newDataStoreName },
139
+ ];
140
+ for (const indexName of indexNames) {
141
+ pairs.push({
142
+ old: buildIndexStoreName(schemaName, oldName, indexName),
143
+ new: buildIndexStoreName(schemaName, newName, indexName),
144
+ });
120
145
  }
121
- // Move each index directory under the new table name.
122
- const oldIndexDirPrefix = `${oldName}${STORE_SUFFIX.INDEX}`;
146
+ // Open destination sublevels and assert each is empty BEFORE moving anything.
147
+ // A non-empty (or already-open) destination is a silent clobber/merge — this
148
+ // is the backstop equivalent of the prior fs "destination already exists"
149
+ // guard (e.g. an index relocating onto a sibling table's data store).
150
+ const destSublevels = new Map();
123
151
  try {
124
- const entries = await fs.promises.readdir(schemaDir);
125
- for (const entry of entries) {
126
- if (!entry.startsWith(oldIndexDirPrefix))
127
- continue;
128
- const indexSuffix = entry.substring(oldIndexDirPrefix.length);
129
- const renamed = `${newName}${STORE_SUFFIX.INDEX}${indexSuffix}`;
130
- await fs.promises.rename(path.join(schemaDir, entry), path.join(schemaDir, renamed));
152
+ for (const pair of pairs) {
153
+ if (this.stores.has(pair.new)) {
154
+ throw new Error(`Cannot rename '${oldName}' to '${newName}': destination store '${pair.new}' already open`);
155
+ }
156
+ const dest = this.openSublevel(root, pair.new);
157
+ await dest.open();
158
+ if (await sublevelHasAnyKey(dest)) {
159
+ throw new Error(`Cannot rename '${oldName}' to '${newName}': destination store '${pair.new}' already exists`);
160
+ }
161
+ destSublevels.set(pair.new, dest);
162
+ }
163
+ // Relocate every pair's keys in ONE chained batch over the shared root:
164
+ // put → new sublevel, del → old sublevel. A single write() is atomic and
165
+ // durable, so the rename is all-or-nothing across data + every index.
166
+ const batch = root.batch();
167
+ for (const pair of pairs) {
168
+ const oldStore = await this.getOrCreateStore(pair.old);
169
+ const oldSublevel = this.sublevelByStore.get(oldStore);
170
+ const dest = destSublevels.get(pair.new);
171
+ for await (const { key, value } of oldStore.iterate()) {
172
+ batch.put(key, value, { sublevel: dest });
173
+ batch.del(key, { sublevel: oldSublevel });
174
+ }
175
+ }
176
+ if (batch.length > 0) {
177
+ await batch.write({ sync: this.syncCommits });
178
+ }
179
+ else {
180
+ await batch.close();
181
+ }
182
+ // Drop old handles so subsequent getStore/getIndexStore open fresh
183
+ // sublevels under the new name (the old keyspaces are now empty).
184
+ for (const pair of pairs) {
185
+ await this.closeStoreByName(pair.old);
131
186
  }
132
187
  }
133
- catch (e) {
134
- // readdir can fail if the schema directory doesn't exist (pre-creation);
135
- // that just means there's nothing to move.
136
- if (e.code !== 'ENOENT')
137
- throw e;
188
+ finally {
189
+ // Close the temporary destination handles; the next getStore(newName)
190
+ // opens and caches a fresh sublevel over the now-populated keyspace.
191
+ for (const dest of destSublevels.values()) {
192
+ await dest.close().catch(() => { });
193
+ }
138
194
  }
139
195
  }
140
- async deleteTableStores(schemaName, tableName) {
141
- // Close and remove data store directory
142
- const dataStoreName = `${schemaName}.${tableName}`.toLowerCase();
143
- const dataStorePath = this.storePaths.get(dataStoreName)
144
- ?? path.join(this.basePath, schemaName, tableName);
145
- await this.closeStoreByName(dataStoreName);
146
- await removeDir(dataStorePath);
147
- // Stats are in the unified __stats__ store, so no need to close a separate store
148
- // The individual stats entry will be removed by the calling code if needed
149
- // Close and remove all index store directories for this table
150
- const indexPrefix = `${schemaName}.${tableName}${STORE_SUFFIX.INDEX}`.toLowerCase();
151
- const indexStoreNames = [];
152
- for (const name of this.stores.keys()) {
153
- if (name.startsWith(indexPrefix))
154
- indexStoreNames.push(name);
155
- }
156
- for (const name of indexStoreNames) {
157
- const indexPath = this.storePaths.get(name);
158
- await this.closeStoreByName(name);
159
- if (indexPath)
160
- await removeDir(indexPath);
161
- }
162
- // Also sweep any on-disk index directories for this table that were never opened
163
- // in this session (e.g. after a process restart followed by a DROP).
164
- const schemaDir = path.join(this.basePath, schemaName);
165
- const indexDirPrefix = `${tableName}${STORE_SUFFIX.INDEX}`;
166
- try {
167
- const entries = await fs.promises.readdir(schemaDir);
168
- for (const entry of entries) {
169
- if (entry.startsWith(indexDirPrefix)) {
170
- await removeDir(path.join(schemaDir, entry));
171
- }
172
- }
196
+ async deleteTableStores(schemaName, tableName, indexNames) {
197
+ // Clear and drop the data store's keyspace.
198
+ await this.clearAndDropStore(buildDataStoreName(schemaName, tableName));
199
+ // Stats live in the unified __stats__ store; the individual stats entry is
200
+ // removed by the calling code (StoreModule), not by clearing a store.
201
+ // Clear exactly the table's index stores (by name). Built via
202
+ // buildIndexStoreName from the authoritative schema index list — never a
203
+ // `${tableName}_idx_` prefix scan, which would also match a sibling table
204
+ // literally named `${tableName}_idx_<x>` and destroy its data.
205
+ for (const indexName of indexNames) {
206
+ await this.clearAndDropStore(buildIndexStoreName(schemaName, tableName, indexName));
173
207
  }
174
- catch {
175
- // Schema directory may not exist; nothing to sweep.
208
+ }
209
+ /**
210
+ * Open an atomic batch across this provider's sublevels, or undefined when the
211
+ * shared root has not been opened yet (no stores exist → nothing to commit).
212
+ *
213
+ * All sublevels share one physical LevelDB, so a single chained batch
214
+ * (`root.batch()…write()`) with each op targeting its sublevel commits them
215
+ * atomically and durably. The transaction coordinator uses this to commit a
216
+ * table's data + secondary-index stores in one physical batch, closing the
217
+ * crash window where a per-store loop could leave them divergent.
218
+ *
219
+ * In practice the coordinator only calls this once it has pending ops — which
220
+ * means stores (hence the root) were already opened — so the undefined branch
221
+ * is defensive (the coordinator falls back to per-store `batch()`).
222
+ */
223
+ beginAtomicBatch() {
224
+ const root = this.root;
225
+ if (!root)
226
+ return undefined;
227
+ return new LevelDBAtomicBatch(root, (store) => this.resolveSublevel(store), this.syncCommits);
228
+ }
229
+ /**
230
+ * Map a {@link KVStore} handle this provider handed out back to its sublevel.
231
+ * A handle not produced by this provider (wrong type, or from another provider)
232
+ * is absent from the ownership map — a programming error.
233
+ */
234
+ resolveSublevel(store) {
235
+ const sublevel = this.sublevelByStore.get(store);
236
+ if (!sublevel) {
237
+ throw new QuereusError('AtomicBatch received a KVStore handle not produced by this provider', StatusCode.MISUSE);
176
238
  }
239
+ return sublevel;
177
240
  }
178
- async getOrCreateStore(storeName, storePath) {
179
- let store = this.stores.get(storeName);
180
- if (!store) {
181
- store = await LevelDBStore.open({
182
- path: storePath,
241
+ /** Open (memoized) the shared physical root database. */
242
+ async getRoot() {
243
+ if (this.root)
244
+ return this.root;
245
+ if (!this.rootOpening) {
246
+ const db = new ClassicLevel(this.basePath, {
247
+ keyEncoding: 'view',
248
+ valueEncoding: 'view',
183
249
  createIfMissing: this.createIfMissing,
184
250
  });
185
- this.stores.set(storeName, store);
186
- this.storePaths.set(storeName, storePath);
251
+ this.rootOpening = db.open().then(() => {
252
+ this.root = db;
253
+ this.rootOpening = null;
254
+ return db;
255
+ }).catch(err => {
256
+ this.rootOpening = null;
257
+ throw err;
258
+ });
259
+ }
260
+ return this.rootOpening;
261
+ }
262
+ /** Create a sublevel handle over the shared root, with the store's byte encodings. */
263
+ openSublevel(root, storeName) {
264
+ return root.sublevel(encodeSublevelName(storeName), {
265
+ keyEncoding: 'view',
266
+ valueEncoding: 'view',
267
+ });
268
+ }
269
+ async getOrCreateStore(storeName) {
270
+ const existing = this.stores.get(storeName);
271
+ if (existing && !existing.isClosed())
272
+ return existing;
273
+ if (existing) {
274
+ // A handle handed out earlier was closed out-of-band (e.g. the StoreTable's
275
+ // releaseIndexStore closes the index handle before dropIndex calls
276
+ // deleteIndexStore). Evict the stale entry and reopen a fresh sublevel.
277
+ this.stores.delete(storeName);
278
+ }
279
+ // Share a single in-flight open across concurrent callers for the same store
280
+ // name so we cache exactly one handle (and one sublevel) per name.
281
+ let opening = this.storeOpening.get(storeName);
282
+ if (!opening) {
283
+ opening = this.openSublevelStore(storeName).then(store => {
284
+ this.stores.set(storeName, store);
285
+ this.storeOpening.delete(storeName);
286
+ return store;
287
+ }).catch(err => {
288
+ this.storeOpening.delete(storeName);
289
+ throw err;
290
+ });
291
+ this.storeOpening.set(storeName, opening);
187
292
  }
293
+ return opening;
294
+ }
295
+ async openSublevelStore(storeName) {
296
+ const root = await this.getRoot();
297
+ const sublevel = this.openSublevel(root, storeName);
298
+ await sublevel.open();
299
+ const store = LevelDBStore.overSublevel(sublevel);
300
+ this.sublevelByStore.set(store, sublevel);
188
301
  return store;
189
302
  }
190
303
  async closeStoreByName(storeName) {
191
304
  const store = this.stores.get(storeName);
192
305
  if (store) {
193
- // Remove from maps before awaiting close, so a concurrent
306
+ // Remove from the map before awaiting close, so a concurrent
194
307
  // getOrCreateStore cannot observe a store that is about to be closed.
195
308
  this.stores.delete(storeName);
196
- this.storePaths.delete(storeName);
197
- await store.close();
309
+ await store.close(); // drops the sublevel handle; the shared root stays open
198
310
  }
199
311
  }
312
+ /** Clear a store's keyspace (sublevel.clear) and drop its cached handle. */
313
+ async clearAndDropStore(storeName) {
314
+ const store = await this.getOrCreateStore(storeName);
315
+ await store.clear();
316
+ await this.closeStoreByName(storeName);
317
+ }
200
318
  }
201
- async function removeDir(dirPath) {
202
- await fs.promises.rm(dirPath, { recursive: true, force: true });
203
- }
204
- async function pathExists(p) {
205
- try {
206
- await fs.promises.access(p);
319
+ /** True if the sublevel has at least one key. */
320
+ async function sublevelHasAnyKey(sublevel) {
321
+ for await (const _key of sublevel.keys({ limit: 1 })) {
207
322
  return true;
208
323
  }
209
- catch {
210
- return false;
324
+ return false;
325
+ }
326
+ /**
327
+ * {@link AtomicBatch} over the shared root's chained batch.
328
+ *
329
+ * Every op targets its store's sublevel via the chained-batch `{ sublevel }`
330
+ * option, so a single `write()` commits across all referenced sublevels in one
331
+ * atomic, durable physical commit. Handles are mapped to sublevels by the
332
+ * provider's `resolveSublevel`.
333
+ */
334
+ class LevelDBAtomicBatch {
335
+ resolveSublevel;
336
+ sync;
337
+ batch;
338
+ constructor(root, resolveSublevel, sync) {
339
+ this.resolveSublevel = resolveSublevel;
340
+ this.sync = sync;
341
+ this.batch = root.batch();
342
+ }
343
+ put(store, key, value) {
344
+ this.batch.put(key, value, { sublevel: this.resolveSublevel(store) });
345
+ }
346
+ delete(store, key) {
347
+ this.batch.del(key, { sublevel: this.resolveSublevel(store) });
348
+ }
349
+ async write() {
350
+ if (this.batch.length === 0) {
351
+ // Free the chained batch's resources without a no-op commit.
352
+ await this.batch.close();
353
+ return;
354
+ }
355
+ // sync=true → fsync the commit so a committed transaction survives power loss
356
+ // (the crash-safe commit this layout exists to provide). One fsync per commit.
357
+ await this.batch.write({ sync: this.sync });
358
+ }
359
+ clear() {
360
+ this.batch.clear();
211
361
  }
212
362
  }
213
363
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}