@fireproof/core 0.19.5-dev → 0.19.8-dev-alldocs

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 (55) hide show
  1. package/{chunk-QHSXUST7.js → chunk-5UFCF36O.js} +3 -3
  2. package/{chunk-HCXR2M5B.js → chunk-DG6XSV44.js} +175 -7
  3. package/chunk-DG6XSV44.js.map +1 -0
  4. package/{chunk-H3A2HMMM.js → chunk-OWQAHX2V.js} +2 -2
  5. package/chunk-OWQAHX2V.js.map +1 -0
  6. package/{chunk-7OGPZSGT.js → chunk-PRQHQG4I.js} +2 -2
  7. package/index.cjs +248 -191
  8. package/index.cjs.map +1 -1
  9. package/index.d.cts +174 -68
  10. package/index.d.ts +174 -68
  11. package/index.global.js +24688 -0
  12. package/index.global.js.map +1 -0
  13. package/index.js +60 -127
  14. package/index.js.map +1 -1
  15. package/metafile-cjs.json +1 -1
  16. package/metafile-esm.json +1 -1
  17. package/metafile-iife.json +1 -0
  18. package/{node-sys-container-E7LADX2Z.js → node-sys-container-TTGEC66A.js} +2 -2
  19. package/package.json +1 -1
  20. package/{sqlite-data-store-YS4U7AQ4.js → sqlite-data-store-MA55LVQE.js} +4 -4
  21. package/{sqlite-meta-store-FJZSZG4R.js → sqlite-meta-store-UNQKVYRM.js} +4 -4
  22. package/{sqlite-wal-store-6JZ4URNS.js → sqlite-wal-store-KVUOC4PO.js} +4 -4
  23. package/{store-file-HMHPQTUV.js → store-file-WD746RSY.js} +3 -3
  24. package/{store-indexdb-MRVZG4OG.js → store-indexdb-NG45BU3Q.js} +4 -4
  25. package/{store-sql-5XMJ5OWJ.js → store-sql-QVFNIGND.js} +7 -69
  26. package/store-sql-QVFNIGND.js.map +1 -0
  27. package/tests/blockstore/loader.test.ts +265 -0
  28. package/tests/blockstore/store.test.ts +164 -0
  29. package/tests/blockstore/transaction.test.ts +121 -0
  30. package/tests/fireproof/config.test.ts +212 -0
  31. package/tests/fireproof/crdt.test.ts +434 -0
  32. package/tests/fireproof/database.test.ts +466 -0
  33. package/tests/fireproof/fireproof.test.ts +602 -0
  34. package/tests/fireproof/hello.test.ts +54 -0
  35. package/tests/fireproof/indexer.test.ts +389 -0
  36. package/tests/helpers.ts +81 -0
  37. package/tests/react/useFireproof.test.tsx +19 -0
  38. package/tests/www/gallery.html +132 -0
  39. package/tests/www/iife.html +42 -0
  40. package/tests/www/todo-aws.html +232 -0
  41. package/tests/www/todo-ipfs.html +213 -0
  42. package/tests/www/todo-local.html +214 -0
  43. package/tests/www/todo-netlify.html +227 -0
  44. package/tests/www/todo.html +236 -0
  45. package/chunk-H3A2HMMM.js.map +0 -1
  46. package/chunk-HCXR2M5B.js.map +0 -1
  47. package/store-sql-5XMJ5OWJ.js.map +0 -1
  48. /package/{chunk-QHSXUST7.js.map → chunk-5UFCF36O.js.map} +0 -0
  49. /package/{chunk-7OGPZSGT.js.map → chunk-PRQHQG4I.js.map} +0 -0
  50. /package/{node-sys-container-E7LADX2Z.js.map → node-sys-container-TTGEC66A.js.map} +0 -0
  51. /package/{sqlite-data-store-YS4U7AQ4.js.map → sqlite-data-store-MA55LVQE.js.map} +0 -0
  52. /package/{sqlite-meta-store-FJZSZG4R.js.map → sqlite-meta-store-UNQKVYRM.js.map} +0 -0
  53. /package/{sqlite-wal-store-6JZ4URNS.js.map → sqlite-wal-store-KVUOC4PO.js.map} +0 -0
  54. /package/{store-file-HMHPQTUV.js.map → store-file-WD746RSY.js.map} +0 -0
  55. /package/{store-indexdb-MRVZG4OG.js.map → store-indexdb-NG45BU3Q.js.map} +0 -0
package/index.cjs CHANGED
@@ -225,10 +225,6 @@ var init_sys_container = __esm({
225
225
 
226
226
  // src/runtime/data-dir.ts
227
227
  function dataDir(name, base) {
228
- const dataDir2 = _dataDir(name, base);
229
- return dataDir2;
230
- }
231
- function _dataDir(name, base) {
232
228
  if (!base) {
233
229
  if (import_std_env.isNode || import_std_env.isDeno) {
234
230
  base = SysContainer.env.get("FP_STORAGE_URL") || `file://${SysContainer.join(SysContainer.homedir(), ".fireproof")}`;
@@ -298,6 +294,203 @@ var init_store_file_utils = __esm({
298
294
  }
299
295
  });
300
296
 
297
+ // src/runtime/store-sql/types.ts
298
+ var DefaultSQLTableNames;
299
+ var init_types2 = __esm({
300
+ "src/runtime/store-sql/types.ts"() {
301
+ "use strict";
302
+ DefaultSQLTableNames = {
303
+ data: "Datas",
304
+ meta: "Metas",
305
+ wal: "Wals"
306
+ };
307
+ }
308
+ });
309
+
310
+ // src/runtime/store-sql/ensurer.ts
311
+ function sqlTableName(...names) {
312
+ return names.map((name) => name.replace(/^[^a-zA-Z0-9]+/, "").replace(/[^a-zA-Z0-9]+/g, "_")).filter((i) => i.length).join("_");
313
+ }
314
+ function ensureTableNames(url, opts) {
315
+ let isIndex = "";
316
+ if (url.searchParams.has("index")) {
317
+ isIndex = url.searchParams.get("index") || ".idx";
318
+ }
319
+ const ret = opts?.tableNames || DefaultSQLTableNames;
320
+ if (isIndex.length) {
321
+ return {
322
+ data: sqlTableName(isIndex, ret.data),
323
+ meta: sqlTableName(isIndex, ret.meta),
324
+ wal: sqlTableName(isIndex, ret.wal)
325
+ };
326
+ }
327
+ return {
328
+ data: sqlTableName(ret.data),
329
+ meta: sqlTableName(ret.meta),
330
+ wal: sqlTableName(ret.wal)
331
+ };
332
+ }
333
+ function ensureTextEncoder(opts) {
334
+ return opts?.textEncoder || textEncoder;
335
+ }
336
+ function ensureTextDecoder(opts) {
337
+ return opts?.textDecoder || textDecoder;
338
+ }
339
+ function url2sqlFlavor(url, logger) {
340
+ const flavor = url.protocol.replace(/:.*$/, "");
341
+ switch (flavor) {
342
+ case "sqlite":
343
+ case "mysql":
344
+ case "postgres":
345
+ return flavor;
346
+ default:
347
+ throw logger.Error().Str("flavor", flavor).Msg("unsupported protocol").AsError();
348
+ }
349
+ }
350
+ function ensureSQLOpts(url, opts, componentName, ctx) {
351
+ const logger = ensureLogger(opts, componentName, ctx);
352
+ return {
353
+ url,
354
+ sqlFlavor: url2sqlFlavor(url, logger),
355
+ tableNames: ensureTableNames(url, opts),
356
+ logger,
357
+ textEncoder: ensureTextEncoder(opts),
358
+ textDecoder: ensureTextDecoder(opts)
359
+ };
360
+ }
361
+ var textEncoder, textDecoder;
362
+ var init_ensurer = __esm({
363
+ "src/runtime/store-sql/ensurer.ts"() {
364
+ "use strict";
365
+ init_utils();
366
+ init_types2();
367
+ textEncoder = new TextEncoder();
368
+ textDecoder = new TextDecoder();
369
+ }
370
+ });
371
+
372
+ // src/runtime/store-sql/index.ts
373
+ var store_sql_exports = {};
374
+ __export(store_sql_exports, {
375
+ DefaultSQLTableNames: () => DefaultSQLTableNames,
376
+ ensureSQLOpts: () => ensureSQLOpts
377
+ });
378
+ var init_store_sql = __esm({
379
+ "src/runtime/store-sql/index.ts"() {
380
+ "use strict";
381
+ init_types2();
382
+ init_ensurer();
383
+ }
384
+ });
385
+
386
+ // src/runtime/crypto.ts
387
+ var crypto_exports = {};
388
+ __export(crypto_exports, {
389
+ toCryptoOpts: () => toCryptoOpts
390
+ });
391
+ function randomBytes(size) {
392
+ const bytes = new Uint8Array(size);
393
+ if (size > 0) {
394
+ crypto.getRandomValues(bytes);
395
+ }
396
+ return bytes;
397
+ }
398
+ function digestSHA256(data) {
399
+ return Promise.resolve(crypto.subtle.digest("SHA-256", data));
400
+ }
401
+ function toCryptoOpts(cryptoOpts = {}) {
402
+ const opts = {
403
+ importKey: cryptoOpts.importKey || crypto.subtle.importKey.bind(crypto.subtle),
404
+ encrypt: cryptoOpts.encrypt || crypto.subtle.encrypt.bind(crypto.subtle),
405
+ decrypt: cryptoOpts.decrypt || crypto.subtle.decrypt.bind(crypto.subtle),
406
+ randomBytes: cryptoOpts.randomBytes || randomBytes,
407
+ digestSHA256: cryptoOpts.digestSHA256 || digestSHA256
408
+ };
409
+ return opts;
410
+ }
411
+ var init_crypto = __esm({
412
+ "src/runtime/crypto.ts"() {
413
+ "use strict";
414
+ }
415
+ });
416
+
417
+ // src/runtime/files.ts
418
+ var files_exports = {};
419
+ __export(files_exports, {
420
+ decodeFile: () => decodeFile,
421
+ encodeFile: () => encodeFile
422
+ });
423
+ async function collect(collectable) {
424
+ const chunks = [];
425
+ await collectable.pipeTo(
426
+ new WritableStream({
427
+ write(chunk) {
428
+ chunks.push(chunk);
429
+ }
430
+ })
431
+ );
432
+ return chunks;
433
+ }
434
+ async function encodeFile(blob) {
435
+ const readable = createFileEncoderStream(blob);
436
+ const blocks = await collect(readable);
437
+ return { cid: blocks.at(-1).cid, blocks };
438
+ }
439
+ async function decodeFile(blocks, cid, meta) {
440
+ const entry = await (0, import_ipfs_unixfs_exporter.exporter)(cid.toString(), blocks, { length: meta.size });
441
+ const chunks = [];
442
+ for await (const chunk of entry.content()) {
443
+ chunks.push(chunk);
444
+ }
445
+ return new File(chunks, entry.name, { type: meta.type, lastModified: 0 });
446
+ }
447
+ function createFileEncoderStream(blob) {
448
+ const { readable, writable } = new TransformStream({}, queuingStrategy);
449
+ const unixfsWriter = UnixFS.createWriter({ writable, settings });
450
+ const fileBuilder = new UnixFSFileBuilder("", blob);
451
+ void (async () => {
452
+ await fileBuilder.finalize(unixfsWriter);
453
+ await unixfsWriter.close();
454
+ })();
455
+ return readable;
456
+ }
457
+ var UnixFS, raw, import_fixed, import_balanced, import_ipfs_unixfs_exporter, queuingStrategy, settings, UnixFSFileBuilder;
458
+ var init_files = __esm({
459
+ "src/runtime/files.ts"() {
460
+ "use strict";
461
+ UnixFS = __toESM(require("@ipld/unixfs"), 1);
462
+ raw = __toESM(require("multiformats/codecs/raw"), 1);
463
+ import_fixed = require("@ipld/unixfs/file/chunker/fixed");
464
+ import_balanced = require("@ipld/unixfs/file/layout/balanced");
465
+ import_ipfs_unixfs_exporter = require("ipfs-unixfs-exporter");
466
+ queuingStrategy = UnixFS.withCapacity();
467
+ settings = UnixFS.configure({
468
+ fileChunkEncoder: raw,
469
+ smallFileEncoder: raw,
470
+ chunker: (0, import_fixed.withMaxChunkSize)(1024 * 1024),
471
+ fileLayout: (0, import_balanced.withWidth)(1024)
472
+ });
473
+ UnixFSFileBuilder = class {
474
+ #file;
475
+ constructor(name, file) {
476
+ this.name = name;
477
+ this.#file = file;
478
+ }
479
+ async finalize(writer) {
480
+ const unixfsFileWriter = UnixFS.createFileWriter(writer);
481
+ await this.#file.stream().pipeTo(
482
+ new WritableStream({
483
+ async write(chunk) {
484
+ await unixfsFileWriter.write(chunk);
485
+ }
486
+ })
487
+ );
488
+ return await unixfsFileWriter.close();
489
+ }
490
+ };
491
+ }
492
+ });
493
+
301
494
  // src/runtime/store-file-version.ts
302
495
  var FILESTORE_VERSION;
303
496
  var init_store_file_version = __esm({
@@ -332,11 +525,14 @@ __export(runtime_exports, {
332
525
  INDEXDB_VERSION: () => INDEXDB_VERSION,
333
526
  SQLITE_VERSION: () => SQLITE_VERSION,
334
527
  SysContainer: () => SysContainer,
528
+ crypto: () => crypto_exports,
335
529
  dataDir: () => dataDir,
336
530
  ensureIndexName: () => ensureIndexName,
531
+ files: () => files_exports,
337
532
  getFileName: () => getFileName,
338
533
  getPath: () => getPath,
339
- join: () => join
534
+ join: () => join,
535
+ sql: () => store_sql_exports
340
536
  });
341
537
  var init_runtime = __esm({
342
538
  "src/runtime/index.ts"() {
@@ -344,6 +540,9 @@ var init_runtime = __esm({
344
540
  init_sys_container();
345
541
  init_data_dir();
346
542
  init_store_file_utils();
543
+ init_store_sql();
544
+ init_crypto();
545
+ init_files();
347
546
  init_store_file_version();
348
547
  init_store_indexdb_version();
349
548
  init_version();
@@ -863,81 +1062,6 @@ var init_store_file = __esm({
863
1062
  }
864
1063
  });
865
1064
 
866
- // src/runtime/store-sql/types.ts
867
- var DefaultSQLTableNames;
868
- var init_types2 = __esm({
869
- "src/runtime/store-sql/types.ts"() {
870
- "use strict";
871
- DefaultSQLTableNames = {
872
- data: "Datas",
873
- meta: "Metas",
874
- wal: "Wals"
875
- };
876
- }
877
- });
878
-
879
- // src/runtime/store-sql/ensurer.ts
880
- function sqlTableName(...names) {
881
- return names.map((name) => name.replace(/^[^a-zA-Z0-9]+/, "").replace(/[^a-zA-Z0-9]+/g, "_")).filter((i) => i.length).join("_");
882
- }
883
- function ensureTableNames(url, opts) {
884
- let isIndex = "";
885
- if (url.searchParams.has("index")) {
886
- isIndex = url.searchParams.get("index") || ".idx";
887
- }
888
- const ret = opts?.tableNames || DefaultSQLTableNames;
889
- if (isIndex.length) {
890
- return {
891
- data: sqlTableName(isIndex, ret.data),
892
- meta: sqlTableName(isIndex, ret.meta),
893
- wal: sqlTableName(isIndex, ret.wal)
894
- };
895
- }
896
- return {
897
- data: sqlTableName(ret.data),
898
- meta: sqlTableName(ret.meta),
899
- wal: sqlTableName(ret.wal)
900
- };
901
- }
902
- function ensureTextEncoder(opts) {
903
- return opts?.textEncoder || textEncoder2;
904
- }
905
- function ensureTextDecoder(opts) {
906
- return opts?.textDecoder || textDecoder2;
907
- }
908
- function url2sqlFlavor(url, logger) {
909
- const flavor = url.protocol.replace(/:.*$/, "");
910
- switch (flavor) {
911
- case "sqlite":
912
- case "mysql":
913
- case "postgres":
914
- return flavor;
915
- default:
916
- throw logger.Error().Str("flavor", flavor).Msg("unsupported protocol").AsError();
917
- }
918
- }
919
- function ensureSQLOpts(url, opts, componentName, ctx) {
920
- const logger = ensureLogger(opts, componentName, ctx);
921
- return {
922
- url,
923
- sqlFlavor: url2sqlFlavor(url, logger),
924
- tableNames: ensureTableNames(url, opts),
925
- logger,
926
- textEncoder: ensureTextEncoder(opts),
927
- textDecoder: ensureTextDecoder(opts)
928
- };
929
- }
930
- var textEncoder2, textDecoder2;
931
- var init_ensurer = __esm({
932
- "src/runtime/store-sql/ensurer.ts"() {
933
- "use strict";
934
- init_utils();
935
- init_types2();
936
- textEncoder2 = new TextEncoder();
937
- textDecoder2 = new TextDecoder();
938
- }
939
- });
940
-
941
1065
  // src/runtime/store-sql/sqlite-adapter-better-sqlite3.ts
942
1066
  var import_cement8, onceSQLiteConnections, SQLiteConnection;
943
1067
  var init_sqlite_adapter_better_sqlite3 = __esm({
@@ -1479,15 +1603,15 @@ var init_store_version_factory = __esm({
1479
1603
  });
1480
1604
 
1481
1605
  // src/runtime/store-sql/store-sql.ts
1482
- var store_sql_exports = {};
1483
- __export(store_sql_exports, {
1606
+ var store_sql_exports2 = {};
1607
+ __export(store_sql_exports2, {
1484
1608
  SQLDataGateway: () => SQLDataGateway,
1485
1609
  SQLMetaGateway: () => SQLMetaGateway,
1486
1610
  SQLTestStore: () => SQLTestStore,
1487
1611
  SQLWalGateway: () => SQLWalGateway
1488
1612
  });
1489
1613
  var import_cement13, SQLWalGateway, SQLMetaGateway, SQLDataGateway, SQLTestStore;
1490
- var init_store_sql = __esm({
1614
+ var init_store_sql2 = __esm({
1491
1615
  "src/runtime/store-sql/store-sql.ts"() {
1492
1616
  "use strict";
1493
1617
  import_cement13 = require("@adviser/cement");
@@ -1733,6 +1857,7 @@ __export(src_exports, {
1733
1857
  index: () => index,
1734
1858
  isFalsy: () => isFalsy,
1735
1859
  rt: () => runtime_exports,
1860
+ runtime: () => runtime_exports,
1736
1861
  throwFalsy: () => throwFalsy
1737
1862
  });
1738
1863
  module.exports = __toCommonJS(src_exports);
@@ -1992,72 +2117,7 @@ var ConnectREST = class extends ConnectionBase {
1992
2117
  // src/blockstore/store-factory.ts
1993
2118
  var import_cement14 = require("@adviser/cement");
1994
2119
  init_data_dir();
1995
-
1996
- // src/runtime/files.ts
1997
- var UnixFS = __toESM(require("@ipld/unixfs"), 1);
1998
- var raw = __toESM(require("multiformats/codecs/raw"), 1);
1999
- var import_fixed = require("@ipld/unixfs/file/chunker/fixed");
2000
- var import_balanced = require("@ipld/unixfs/file/layout/balanced");
2001
- var import_ipfs_unixfs_exporter = require("ipfs-unixfs-exporter");
2002
- var queuingStrategy = UnixFS.withCapacity();
2003
- var settings = UnixFS.configure({
2004
- fileChunkEncoder: raw,
2005
- smallFileEncoder: raw,
2006
- chunker: (0, import_fixed.withMaxChunkSize)(1024 * 1024),
2007
- fileLayout: (0, import_balanced.withWidth)(1024)
2008
- });
2009
- async function collect(collectable) {
2010
- const chunks = [];
2011
- await collectable.pipeTo(
2012
- new WritableStream({
2013
- write(chunk) {
2014
- chunks.push(chunk);
2015
- }
2016
- })
2017
- );
2018
- return chunks;
2019
- }
2020
- async function encodeFile(blob) {
2021
- const readable = createFileEncoderStream(blob);
2022
- const blocks = await collect(readable);
2023
- return { cid: blocks.at(-1).cid, blocks };
2024
- }
2025
- async function decodeFile(blocks, cid, meta) {
2026
- const entry = await (0, import_ipfs_unixfs_exporter.exporter)(cid.toString(), blocks, { length: meta.size });
2027
- const chunks = [];
2028
- for await (const chunk of entry.content()) {
2029
- chunks.push(chunk);
2030
- }
2031
- return new File(chunks, entry.name, { type: meta.type, lastModified: 0 });
2032
- }
2033
- function createFileEncoderStream(blob) {
2034
- const { readable, writable } = new TransformStream({}, queuingStrategy);
2035
- const unixfsWriter = UnixFS.createWriter({ writable, settings });
2036
- const fileBuilder = new UnixFSFileBuilder("", blob);
2037
- void (async () => {
2038
- await fileBuilder.finalize(unixfsWriter);
2039
- await unixfsWriter.close();
2040
- })();
2041
- return readable;
2042
- }
2043
- var UnixFSFileBuilder = class {
2044
- #file;
2045
- constructor(name, file) {
2046
- this.name = name;
2047
- this.#file = file;
2048
- }
2049
- async finalize(writer) {
2050
- const unixfsFileWriter = UnixFS.createFileWriter(writer);
2051
- await this.#file.stream().pipeTo(
2052
- new WritableStream({
2053
- async write(chunk) {
2054
- await unixfsFileWriter.write(chunk);
2055
- }
2056
- })
2057
- );
2058
- return await unixfsFileWriter.close();
2059
- }
2060
- };
2120
+ init_files();
2061
2121
 
2062
2122
  // src/blockstore/store.ts
2063
2123
  var import_p_limit2 = __toESM(require("p-limit"), 1);
@@ -2127,7 +2187,7 @@ var import_multiformats2 = require("multiformats");
2127
2187
  var import_block3 = require("multiformats/block");
2128
2188
  var dagcbor = __toESM(require("@ipld/dag-cbor"), 1);
2129
2189
  var import_block4 = require("@web3-storage/pail/block");
2130
- var import_utils7 = require("prolly-trees/utils");
2190
+ var import_utils8 = require("prolly-trees/utils");
2131
2191
  var import_cache = require("prolly-trees/cache");
2132
2192
  var import_cid_set = require("prolly-trees/cid-set");
2133
2193
 
@@ -2315,7 +2375,7 @@ function makeEncDec(logger, crypto2, randomBytes2) {
2315
2375
  };
2316
2376
  return { encrypt, decrypt };
2317
2377
  }
2318
- var chunker = (0, import_utils7.bf)(30);
2378
+ var chunker = (0, import_utils8.bf)(30);
2319
2379
  function hexStringToUint8Array(hexString) {
2320
2380
  const length = hexString.length;
2321
2381
  const uint8Array = new Uint8Array(length / 2);
@@ -2380,30 +2440,7 @@ async function decodeCarBlocks(logger, crypto2, root3, get2, keyMaterial) {
2380
2440
  // src/blockstore/transaction.ts
2381
2441
  var import_block5 = require("@web3-storage/pail/block");
2382
2442
  init_types();
2383
-
2384
- // src/runtime/crypto.ts
2385
- function randomBytes(size) {
2386
- const bytes = new Uint8Array(size);
2387
- if (size > 0) {
2388
- crypto.getRandomValues(bytes);
2389
- }
2390
- return bytes;
2391
- }
2392
- function digestSHA256(data) {
2393
- return Promise.resolve(crypto.subtle.digest("SHA-256", data));
2394
- }
2395
- function toCryptoOpts(cryptoOpts = {}) {
2396
- const opts = {
2397
- importKey: cryptoOpts.importKey || crypto.subtle.importKey.bind(crypto.subtle),
2398
- encrypt: cryptoOpts.encrypt || crypto.subtle.encrypt.bind(crypto.subtle),
2399
- decrypt: cryptoOpts.decrypt || crypto.subtle.decrypt.bind(crypto.subtle),
2400
- randomBytes: cryptoOpts.randomBytes || randomBytes,
2401
- digestSHA256: cryptoOpts.digestSHA256 || digestSHA256
2402
- };
2403
- return opts;
2404
- }
2405
-
2406
- // src/blockstore/transaction.ts
2443
+ init_crypto();
2407
2444
  init_utils();
2408
2445
  var CarTransaction = class extends import_block5.MemoryBlockstore {
2409
2446
  constructor(parent, opts = { add: true }) {
@@ -3071,8 +3108,8 @@ var VersionedStore = class {
3071
3108
  this._onClosed.push(fn);
3072
3109
  }
3073
3110
  };
3074
- var textEncoder = new TextEncoder();
3075
- var textDecoder = new TextDecoder();
3111
+ var textEncoder2 = new TextEncoder();
3112
+ var textDecoder2 = new TextDecoder();
3076
3113
  var MetaStore = class extends VersionedStore {
3077
3114
  constructor(name, url, logger, gateway) {
3078
3115
  super(name, url, ensureLogger(logger, "MetaStore", {}));
@@ -3111,7 +3148,7 @@ var MetaStore = class extends VersionedStore {
3111
3148
  throw this.logger.Error().Err(bytes.Err()).Msg("gateway get").AsError();
3112
3149
  }
3113
3150
  try {
3114
- return [this.parseHeader(textDecoder.decode(bytes.Ok()))];
3151
+ return [this.parseHeader(textDecoder2.decode(bytes.Ok()))];
3115
3152
  } catch (e) {
3116
3153
  throw this.logger.Error().Err(e).Msg("parseHeader").AsError();
3117
3154
  }
@@ -3123,7 +3160,7 @@ var MetaStore = class extends VersionedStore {
3123
3160
  if (url.isErr()) {
3124
3161
  throw this.logger.Error().Err(url.Err()).Str("branch", branch).Url(this.url).Msg("got error from gateway.buildUrl").AsError();
3125
3162
  }
3126
- const res = await this.gateway.put(url.Ok(), textEncoder.encode(bytes));
3163
+ const res = await this.gateway.put(url.Ok(), textEncoder2.encode(bytes));
3127
3164
  if (res.isErr()) {
3128
3165
  throw this.logger.Error().Err(res.Err()).Msg("got error from gateway.put").AsError();
3129
3166
  }
@@ -3363,7 +3400,7 @@ var RemoteWAL = class extends VersionedStore {
3363
3400
  throw this.logger.Error().Err(bytes.Err()).Msg("error get").AsError();
3364
3401
  }
3365
3402
  try {
3366
- return bytes && (0, import_dag_json.parse)(textDecoder.decode(bytes.Ok()));
3403
+ return bytes && (0, import_dag_json.parse)(textDecoder2.decode(bytes.Ok()));
3367
3404
  } catch (e) {
3368
3405
  throw this.logger.Error().Err(e).Msg("error parse").AsError();
3369
3406
  }
@@ -3379,7 +3416,7 @@ var RemoteWAL = class extends VersionedStore {
3379
3416
  } catch (e) {
3380
3417
  throw this.logger.Error().Err(e).Any("state", state).Msg("error format").AsError();
3381
3418
  }
3382
- const res = await this.gateway.put(filepath.Ok(), textEncoder.encode(encoded));
3419
+ const res = await this.gateway.put(filepath.Ok(), textEncoder2.encode(encoded));
3383
3420
  if (res.isErr()) {
3384
3421
  throw this.logger.Error().Err(res.Err()).Str("filePath", filepath.Ok().toString()).Msg("error saving").AsError();
3385
3422
  }
@@ -3415,16 +3452,34 @@ function toURL(pathOrUrl, isIndex) {
3415
3452
  return ensureIsIndex(url, isIndex);
3416
3453
  }
3417
3454
  }
3455
+ var storeFactory = /* @__PURE__ */ new Map();
3456
+ function ensureName(name, url) {
3457
+ if (!url.searchParams.has("name")) {
3458
+ url.searchParams.set("name", name);
3459
+ }
3460
+ }
3418
3461
  function buildURL(optURL, loader) {
3419
3462
  const storeOpts = loader.ebOpts.store;
3420
- return toURL(optURL || dataDir(loader.name, storeOpts.stores?.base), storeOpts.isIndex);
3463
+ const obuItem = Array.from(storeFactory.values()).find((items) => items.overrideBaseURL);
3464
+ let obuUrl;
3465
+ if (obuItem && obuItem.overrideBaseURL) {
3466
+ obuUrl = new URL(obuItem.overrideBaseURL);
3467
+ }
3468
+ return toURL(optURL || obuUrl || dataDir(loader.name, storeOpts.stores?.base), storeOpts.isIndex);
3421
3469
  }
3422
- var storeFactory = /* @__PURE__ */ new Map();
3423
3470
  function registerStoreProtocol(item) {
3424
3471
  if (storeFactory.has(item.protocol)) {
3425
3472
  throw new Error(`protocol ${item.protocol} already registered`);
3426
3473
  }
3474
+ if (item.overrideBaseURL) {
3475
+ Array.from(storeFactory.values()).forEach((items) => {
3476
+ items.overrideBaseURL = void 0;
3477
+ });
3478
+ }
3427
3479
  storeFactory.set(item.protocol, item);
3480
+ return () => {
3481
+ storeFactory.delete(item.protocol);
3482
+ };
3428
3483
  }
3429
3484
  function runStoreFactory(url, logger, run) {
3430
3485
  const item = storeFactory.get(url.protocol);
@@ -3443,6 +3498,7 @@ function loadDataGateway(url, logger) {
3443
3498
  var onceDataStoreFactory = new import_cement14.KeyedResolvOnce();
3444
3499
  async function dataStoreFactory(loader) {
3445
3500
  const url = buildURL(loader.ebOpts.store.stores?.data, loader);
3501
+ ensureName(loader.name, url);
3446
3502
  const logger = ensureLogger(loader.logger, "dataStoreFactory", { url: url.toString() });
3447
3503
  url.searchParams.set("store", "data");
3448
3504
  return onceDataStoreFactory.get(url.toString()).once(async () => {
@@ -3462,15 +3518,14 @@ function loadMetaGateway(url, logger) {
3462
3518
  var onceMetaStoreFactory = new import_cement14.KeyedResolvOnce();
3463
3519
  async function metaStoreFactory(loader) {
3464
3520
  const url = buildURL(loader.ebOpts.store.stores?.meta, loader);
3521
+ ensureName(loader.name, url);
3465
3522
  const logger = ensureLogger(loader.logger, "metaStoreFactory", { url: () => url.toString() });
3466
3523
  url.searchParams.set("store", "meta");
3467
3524
  return onceMetaStoreFactory.get(url.toString()).once(async () => {
3468
3525
  logger.Debug().Str("protocol", url.protocol).Msg("pre-protocol switch");
3469
3526
  const gateway = await loadMetaGateway(url, logger);
3470
3527
  const store = new MetaStore(loader.name, url, loader.logger, gateway);
3471
- logger.Debug().Msg("pre-start");
3472
3528
  await store.start();
3473
- logger.Debug().Msg("post-start");
3474
3529
  return store;
3475
3530
  });
3476
3531
  }
@@ -3483,6 +3538,7 @@ function loadWalGateway(url, logger) {
3483
3538
  var onceRemoteWalFactory = new import_cement14.KeyedResolvOnce();
3484
3539
  async function remoteWalFactory(loader) {
3485
3540
  const url = buildURL(loader.ebOpts.store.stores?.meta, loader);
3541
+ ensureName(loader.name, url);
3486
3542
  const logger = ensureLogger(loader.logger, "remoteWalFactory", { url: url.toString() });
3487
3543
  url.searchParams.set("store", "wal");
3488
3544
  return onceRemoteWalFactory.get(url.toString()).once(async () => {
@@ -3562,19 +3618,19 @@ registerStoreProtocol({
3562
3618
  registerStoreProtocol({
3563
3619
  protocol: "sqlite:",
3564
3620
  data: async (logger) => {
3565
- const { SQLDataGateway: SQLDataGateway2 } = await Promise.resolve().then(() => (init_store_sql(), store_sql_exports));
3621
+ const { SQLDataGateway: SQLDataGateway2 } = await Promise.resolve().then(() => (init_store_sql2(), store_sql_exports2));
3566
3622
  return new SQLDataGateway2(logger);
3567
3623
  },
3568
3624
  meta: async (logger) => {
3569
- const { SQLMetaGateway: SQLMetaGateway2 } = await Promise.resolve().then(() => (init_store_sql(), store_sql_exports));
3625
+ const { SQLMetaGateway: SQLMetaGateway2 } = await Promise.resolve().then(() => (init_store_sql2(), store_sql_exports2));
3570
3626
  return new SQLMetaGateway2(logger);
3571
3627
  },
3572
3628
  wal: async (logger) => {
3573
- const { SQLWalGateway: SQLWalGateway2 } = await Promise.resolve().then(() => (init_store_sql(), store_sql_exports));
3629
+ const { SQLWalGateway: SQLWalGateway2 } = await Promise.resolve().then(() => (init_store_sql2(), store_sql_exports2));
3574
3630
  return new SQLWalGateway2(logger);
3575
3631
  },
3576
3632
  test: async (logger) => {
3577
- const { SQLTestStore: SQLTestStore2 } = await Promise.resolve().then(() => (init_store_sql(), store_sql_exports));
3633
+ const { SQLTestStore: SQLTestStore2 } = await Promise.resolve().then(() => (init_store_sql2(), store_sql_exports2));
3578
3634
  return new SQLTestStore2(logger);
3579
3635
  }
3580
3636
  });
@@ -4536,7 +4592,7 @@ var Database = class {
4536
4592
  }));
4537
4593
  return { rows, clock: head };
4538
4594
  }
4539
- async allDocs() {
4595
+ async allDocs(opts = {}) {
4540
4596
  await this.ready();
4541
4597
  const { result, head } = await this._crdt.allDocs();
4542
4598
  const rows = result.map(({ id: key, value, del }) => ({
@@ -4640,10 +4696,11 @@ function makeName(fnString) {
4640
4696
  // src/index.ts
4641
4697
  init_types();
4642
4698
  init_runtime();
4699
+ init_runtime();
4643
4700
  init_utils();
4644
4701
 
4645
4702
  // src/version.ts
4646
4703
  var PACKAGE_VERSION = Object.keys({
4647
- "0.19.5-dev": "xxxx"
4704
+ "0.0.0-dev": "xxxx"
4648
4705
  })[0];
4649
4706
  //# sourceMappingURL=index.cjs.map