@peerbit/indexer-sqlite3 3.0.0-e6ea5c0 → 3.0.1

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 (47) hide show
  1. package/dist/assets/sqlite3/sqlite3.worker.min.js +168 -52
  2. package/dist/index.min.js +277 -53
  3. package/dist/index.min.js.map +3 -3
  4. package/dist/src/engine.d.ts +9 -3
  5. package/dist/src/engine.d.ts.map +1 -1
  6. package/dist/src/engine.js +75 -9
  7. package/dist/src/engine.js.map +1 -1
  8. package/dist/src/index.d.ts +7 -3
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +5 -4
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/schema.d.ts +5 -1
  13. package/dist/src/schema.d.ts.map +1 -1
  14. package/dist/src/schema.js +42 -12
  15. package/dist/src/schema.js.map +1 -1
  16. package/dist/src/sqlite3-messages.worker.d.ts +47 -8
  17. package/dist/src/sqlite3-messages.worker.d.ts.map +1 -1
  18. package/dist/src/sqlite3-messages.worker.js +42 -3
  19. package/dist/src/sqlite3-messages.worker.js.map +1 -1
  20. package/dist/src/sqlite3.browser.d.ts +22 -1
  21. package/dist/src/sqlite3.browser.d.ts.map +1 -1
  22. package/dist/src/sqlite3.browser.js +138 -31
  23. package/dist/src/sqlite3.browser.js.map +1 -1
  24. package/dist/src/sqlite3.d.ts +4 -1
  25. package/dist/src/sqlite3.d.ts.map +1 -1
  26. package/dist/src/sqlite3.js +14 -5
  27. package/dist/src/sqlite3.js.map +1 -1
  28. package/dist/src/sqlite3.wasm.d.ts +4 -1
  29. package/dist/src/sqlite3.wasm.d.ts.map +1 -1
  30. package/dist/src/sqlite3.wasm.js +15 -3
  31. package/dist/src/sqlite3.wasm.js.map +1 -1
  32. package/dist/src/sqlite3.worker.js +146 -53
  33. package/dist/src/sqlite3.worker.js.map +1 -1
  34. package/dist/src/utils.d.ts +1 -0
  35. package/dist/src/utils.d.ts.map +1 -1
  36. package/dist/src/utils.js +11 -0
  37. package/dist/src/utils.js.map +1 -1
  38. package/package.json +10 -9
  39. package/src/engine.ts +99 -11
  40. package/src/index.ts +39 -4
  41. package/src/schema.ts +67 -11
  42. package/src/sqlite3-messages.worker.ts +104 -10
  43. package/src/sqlite3.browser.ts +246 -88
  44. package/src/sqlite3.ts +19 -5
  45. package/src/sqlite3.wasm.ts +25 -3
  46. package/src/sqlite3.worker.ts +170 -49
  47. package/src/utils.ts +14 -0
@@ -17458,7 +17458,12 @@ var fromBase64 = (base64) => {
17458
17458
  };
17459
17459
 
17460
17460
  // src/sqlite3-messages.worker.ts
17461
- var resolveValue = (value) => value.type === "simple" ? value.value : fromBase64(value.base64);
17461
+ var resolveValue = (value) => {
17462
+ if (value.type === "simple") {
17463
+ return value.value;
17464
+ }
17465
+ return value.encoding === "clone" ? value.value : fromBase64(value.base64);
17466
+ };
17462
17467
 
17463
17468
  // src/sqlite3.wasm.ts
17464
17469
  init_sqlite_wasm();
@@ -17625,7 +17630,20 @@ var getSqlite3 = async () => {
17625
17630
  }
17626
17631
  return sqlite3Promise;
17627
17632
  };
17628
- var create = async (directory) => {
17633
+ var applyPragmas = (db, pragmas) => {
17634
+ db.exec("PRAGMA journal_mode = WAL");
17635
+ db.exec("PRAGMA foreign_keys = on");
17636
+ db.exec(
17637
+ `PRAGMA synchronous = ${(pragmas?.synchronous ?? "NORMAL").toUpperCase()}`
17638
+ );
17639
+ if (pragmas?.lockingMode) {
17640
+ db.exec(`PRAGMA locking_mode = ${pragmas.lockingMode.toUpperCase()}`);
17641
+ }
17642
+ if (pragmas?.tempStore && pragmas.tempStore !== "DEFAULT") {
17643
+ db.exec(`PRAGMA temp_store = ${pragmas.tempStore.toUpperCase()}`);
17644
+ }
17645
+ };
17646
+ var create = async (directory, options) => {
17629
17647
  let statements = /* @__PURE__ */ new Map();
17630
17648
  const sqlite32 = await getSqlite3();
17631
17649
  let sqliteDb = void 0;
@@ -17720,8 +17738,7 @@ var create = async (directory) => {
17720
17738
  if (!sqliteDb) {
17721
17739
  throw new Error("Failed to open sqlite database");
17722
17740
  }
17723
- sqliteDb.exec("PRAGMA journal_mode = WAL");
17724
- sqliteDb.exec("PRAGMA foreign_keys = on");
17741
+ applyPragmas(sqliteDb, options?.pragmas);
17725
17742
  };
17726
17743
  return {
17727
17744
  close,
@@ -17756,24 +17773,64 @@ var create = async (directory) => {
17756
17773
  };
17757
17774
 
17758
17775
  // src/sqlite3.worker.ts
17776
+ var resolveValues = (values, profile = false) => {
17777
+ if (!values || values.length === 0) {
17778
+ return {
17779
+ values: void 0,
17780
+ timing: profile ? {
17781
+ decodeMs: 0,
17782
+ valueCount: 0,
17783
+ blobValueCount: 0,
17784
+ blobBytes: 0
17785
+ } : void 0
17786
+ };
17787
+ }
17788
+ let blobBytes = 0;
17789
+ let blobValueCount = 0;
17790
+ const startedAt = profile ? performance.now() : 0;
17791
+ const resolvedValues = values.map((value) => {
17792
+ const resolved = resolveValue(value);
17793
+ if (profile && resolved instanceof Uint8Array) {
17794
+ blobValueCount++;
17795
+ blobBytes += resolved.byteLength;
17796
+ }
17797
+ return resolved;
17798
+ });
17799
+ return {
17800
+ values: resolvedValues,
17801
+ timing: profile ? {
17802
+ decodeMs: performance.now() - startedAt,
17803
+ valueCount: values.length,
17804
+ blobValueCount,
17805
+ blobBytes
17806
+ } : void 0
17807
+ };
17808
+ };
17759
17809
  var SqliteWorkerHandler = class {
17760
17810
  databases = /* @__PURE__ */ new Map();
17761
- async create(databaseId, directory) {
17762
- const db = await create(directory);
17811
+ async create(databaseId, directory, options) {
17812
+ const db = await create(directory, options);
17763
17813
  this.databases.set(databaseId, db);
17764
17814
  return db;
17765
17815
  }
17766
17816
  async onMessage(message) {
17767
- if (message.type === "create") {
17768
- await this.create(message.databaseId, message.directory);
17769
- } else {
17817
+ const profile = Boolean(message.profile);
17818
+ const startedAt = profile ? performance.now() : 0;
17819
+ let decodeMs = 0;
17820
+ let valueCount = 0;
17821
+ let blobValueCount = 0;
17822
+ let blobBytes = 0;
17823
+ const execute = async () => {
17824
+ if (message.type === "create") {
17825
+ await this.create(message.databaseId, message.directory, {
17826
+ pragmas: message.pragmas
17827
+ });
17828
+ return void 0;
17829
+ }
17770
17830
  const db = this.databases.get(message.databaseId);
17771
17831
  if (!db) {
17772
- if (message.type === "close") {
17773
- return;
17774
- }
17775
- if (message.type === "drop") {
17776
- return;
17832
+ if (message.type === "close" || message.type === "drop") {
17833
+ return void 0;
17777
17834
  }
17778
17835
  if (message.type === "status") {
17779
17836
  return "closed";
@@ -17784,67 +17841,126 @@ var SqliteWorkerHandler = class {
17784
17841
  }
17785
17842
  if (message.type === "exec") {
17786
17843
  return db.exec(message.sql);
17787
- } else if (message.type === "status") {
17844
+ }
17845
+ if (message.type === "status") {
17788
17846
  return db.status();
17789
- } else if (message.type === "prepare") {
17847
+ }
17848
+ if (message.type === "prepare") {
17790
17849
  const statementId = message.id;
17791
17850
  await db.prepare(message.sql, message.id);
17792
17851
  return statementId;
17793
- } else if (message.type === "close") {
17852
+ }
17853
+ if (message.type === "close") {
17794
17854
  await db.close();
17795
17855
  this.databases.delete(message.databaseId);
17796
- } else if (message.type === "drop") {
17856
+ return void 0;
17857
+ }
17858
+ if (message.type === "drop") {
17797
17859
  await db.drop();
17798
17860
  this.databases.delete(message.databaseId);
17799
- } else if (message.type === "open") {
17861
+ return void 0;
17862
+ }
17863
+ if (message.type === "open") {
17800
17864
  await db.open();
17801
17865
  this.databases.set(message.databaseId, db);
17802
- } else if (message.type === "run") {
17803
- return db.run(message.sql, message.values.map(resolveValue));
17804
- } else {
17805
- const statement = db.statements.get(message.statementId);
17806
- if (!statement) {
17807
- throw new Error(
17808
- "Statement not found with id: " + message.statementId
17809
- );
17810
- }
17811
- if (message.type === "bind") {
17812
- return statement.bind(message.values.map(resolveValue));
17813
- } else if (message.type === "finalize") {
17814
- return statement.finalize();
17815
- } else if (message.type === "reset") {
17816
- return statement.reset();
17817
- } else if (message.type === "get") {
17818
- return statement.get(
17819
- message.values ? message.values.map(resolveValue) : void 0
17820
- );
17821
- } else if (message.type === "step") {
17822
- return statement.step();
17823
- } else if (message.type === "run-statement") {
17824
- return statement.run(message.values.map(resolveValue));
17825
- } else if (message.type === "all") {
17826
- return statement.all(message.values.map(resolveValue));
17827
- } else {
17828
- throw new Error("Unknown statement message type: " + message["type"]);
17829
- }
17830
- }
17831
- }
17866
+ return void 0;
17867
+ }
17868
+ if (message.type === "run") {
17869
+ const resolved = resolveValues(message.values, profile);
17870
+ decodeMs = resolved.timing?.decodeMs ?? 0;
17871
+ valueCount = resolved.timing?.valueCount ?? 0;
17872
+ blobValueCount = resolved.timing?.blobValueCount ?? 0;
17873
+ blobBytes = resolved.timing?.blobBytes ?? 0;
17874
+ return db.run(message.sql, resolved.values ?? []);
17875
+ }
17876
+ const statement = db.statements.get(message.statementId);
17877
+ if (!statement) {
17878
+ throw new Error("Statement not found with id: " + message.statementId);
17879
+ }
17880
+ if (message.type === "bind") {
17881
+ const resolved = resolveValues(message.values, profile);
17882
+ decodeMs = resolved.timing?.decodeMs ?? 0;
17883
+ valueCount = resolved.timing?.valueCount ?? 0;
17884
+ blobValueCount = resolved.timing?.blobValueCount ?? 0;
17885
+ blobBytes = resolved.timing?.blobBytes ?? 0;
17886
+ return statement.bind(resolved.values ?? []);
17887
+ }
17888
+ if (message.type === "finalize") {
17889
+ return statement.finalize();
17890
+ }
17891
+ if (message.type === "reset") {
17892
+ return statement.reset();
17893
+ }
17894
+ if (message.type === "get") {
17895
+ const resolved = resolveValues(message.values, profile);
17896
+ decodeMs = resolved.timing?.decodeMs ?? 0;
17897
+ valueCount = resolved.timing?.valueCount ?? 0;
17898
+ blobValueCount = resolved.timing?.blobValueCount ?? 0;
17899
+ blobBytes = resolved.timing?.blobBytes ?? 0;
17900
+ return statement.get(resolved.values);
17901
+ }
17902
+ if (message.type === "step") {
17903
+ return statement.step();
17904
+ }
17905
+ if (message.type === "run-statement") {
17906
+ const resolved = resolveValues(message.values, profile);
17907
+ decodeMs = resolved.timing?.decodeMs ?? 0;
17908
+ valueCount = resolved.timing?.valueCount ?? 0;
17909
+ blobValueCount = resolved.timing?.blobValueCount ?? 0;
17910
+ blobBytes = resolved.timing?.blobBytes ?? 0;
17911
+ return statement.run(resolved.values ?? []);
17912
+ }
17913
+ if (message.type === "all") {
17914
+ const resolved = resolveValues(message.values, profile);
17915
+ decodeMs = resolved.timing?.decodeMs ?? 0;
17916
+ valueCount = resolved.timing?.valueCount ?? 0;
17917
+ blobValueCount = resolved.timing?.blobValueCount ?? 0;
17918
+ blobBytes = resolved.timing?.blobBytes ?? 0;
17919
+ return statement.all(resolved.values ?? []);
17920
+ }
17921
+ throw new Error("Unknown statement message type: " + message["type"]);
17922
+ };
17923
+ const execStart = profile ? performance.now() : 0;
17924
+ const result = await execute();
17925
+ const execMs = profile ? performance.now() - execStart - decodeMs : 0;
17926
+ return {
17927
+ result,
17928
+ timing: profile ? {
17929
+ decodeMs,
17930
+ execMs,
17931
+ totalMs: performance.now() - startedAt,
17932
+ valueCount,
17933
+ blobValueCount,
17934
+ blobBytes
17935
+ } : void 0
17936
+ };
17832
17937
  }
17833
17938
  };
17834
17939
  var worker = new SqliteWorkerHandler();
17835
17940
  self.onmessage = async (messageEvent) => {
17941
+ const profile = Boolean(messageEvent.data.profile);
17942
+ const startedAt = profile ? performance.now() : 0;
17836
17943
  try {
17837
- const results = await worker.onMessage(messageEvent.data);
17944
+ const response = await worker.onMessage(messageEvent.data);
17838
17945
  self.postMessage({
17839
17946
  type: "response",
17840
17947
  id: messageEvent.data.id,
17841
- result: results
17948
+ result: response.result,
17949
+ timing: response.timing
17842
17950
  });
17843
17951
  } catch (error2) {
17844
17952
  self.postMessage({
17845
17953
  type: "error",
17846
17954
  id: messageEvent.data.id,
17847
- message: error2?.message
17955
+ message: error2?.message,
17956
+ timing: profile ? {
17957
+ decodeMs: 0,
17958
+ execMs: 0,
17959
+ totalMs: performance.now() - startedAt,
17960
+ valueCount: 0,
17961
+ blobValueCount: 0,
17962
+ blobBytes: 0
17963
+ } : void 0
17848
17964
  });
17849
17965
  }
17850
17966
  };