@hardkas/query 0.5.4-alpha → 0.6.0-alpha

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/index.d.ts CHANGED
@@ -334,7 +334,12 @@ interface QueryBackend {
334
334
  migrate(): Promise<{
335
335
  applied: number;
336
336
  }>;
337
- /** Execute raw SQL (if supported). */
337
+ /**
338
+ * Execute raw SQL (if supported).
339
+ * @deprecated BOUNDARY DINÁMICO: Este es el ÚNICO boundary dinámico aceptado en el sistema
340
+ * que puede retornar `any[]` de forma intencional (SQLite devuelve filas genéricas).
341
+ * Todos los llamadores DEBEN validar el output estrictamente en runtime mediante guards.
342
+ */
338
343
  executeRawSql(sql: string): Promise<any[]>;
339
344
  /** Find all transaction receipts (for replay analysis). */
340
345
  findReceipts(filters?: {
package/dist/index.js CHANGED
@@ -686,13 +686,16 @@ var ArtifactQueryAdapter = class {
686
686
  sorted.sort((a, b) => {
687
687
  const aVal = String(a[sort.field] ?? "");
688
688
  const bVal = String(b[sort.field] ?? "");
689
- const cmp = aVal.localeCompare(bVal);
689
+ const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
690
690
  return sort.direction === "desc" ? -cmp : cmp;
691
691
  });
692
692
  } else {
693
693
  sorted.sort((a, b) => {
694
- const cmp = (b.createdAt ?? "").localeCompare(a.createdAt ?? "");
695
- return cmp !== 0 ? cmp : a.schema.localeCompare(b.schema);
694
+ const dateA = b.createdAt ?? "";
695
+ const dateB = a.createdAt ?? "";
696
+ const cmp = dateA < dateB ? -1 : dateA > dateB ? 1 : 0;
697
+ if (cmp !== 0) return cmp;
698
+ return a.schema < b.schema ? -1 : a.schema > b.schema ? 1 : 0;
696
699
  });
697
700
  }
698
701
  return sorted;
@@ -731,6 +734,7 @@ function classifyStaleness(hours) {
731
734
  // src/adapters/lineage-adapter.ts
732
735
  import fs3 from "fs/promises";
733
736
  import path3 from "path";
737
+ import { deterministicCompare } from "@hardkas/core";
734
738
  var VALID_TRANSITIONS2 = {
735
739
  "hardkas.snapshot": ["hardkas.txPlan"],
736
740
  "hardkas.txPlan": ["hardkas.signedTx"],
@@ -834,7 +838,7 @@ var LineageQueryAdapter = class {
834
838
  const seqA = a.from.sequence ?? 0;
835
839
  const seqB = b.from.sequence ?? 0;
836
840
  if (seqA !== seqB) return seqA - seqB;
837
- return a.from.contentHash.localeCompare(b.from.contentHash);
841
+ return deterministicCompare(a.from.contentHash, b.from.contentHash);
838
842
  });
839
843
  const paged = transitions.slice(request.offset, request.offset + request.limit);
840
844
  let why;
@@ -875,7 +879,7 @@ var LineageQueryAdapter = class {
875
879
  });
876
880
  }
877
881
  }
878
- orphans.sort((a, b) => a.node.contentHash.localeCompare(b.node.contentHash));
882
+ orphans.sort((a, b) => deterministicCompare(a.node.contentHash, b.node.contentHash));
879
883
  const paged = orphans.slice(request.offset, request.offset + request.limit);
880
884
  let why;
881
885
  if (request.explain) {
@@ -1016,6 +1020,7 @@ var LineageQueryAdapter = class {
1016
1020
  // src/adapters/replay-adapter.ts
1017
1021
  import fs4 from "fs/promises";
1018
1022
  import { calculateContentHash as calculateContentHash2 } from "@hardkas/artifacts";
1023
+ import { deterministicCompare as deterministicCompare2 } from "@hardkas/core";
1019
1024
  var ReplayQueryAdapter = class {
1020
1025
  domain = "replay";
1021
1026
  rootDir;
@@ -1063,8 +1068,8 @@ var ReplayQueryAdapter = class {
1063
1068
  }
1064
1069
  }
1065
1070
  items.sort((a, b) => {
1066
- const cmp = b.daaScore.localeCompare(a.daaScore);
1067
- return cmp !== 0 ? cmp : a.txId.localeCompare(b.txId);
1071
+ const cmp = deterministicCompare2(b.daaScore, a.daaScore);
1072
+ return cmp !== 0 ? cmp : deterministicCompare2(a.txId, b.txId);
1068
1073
  });
1069
1074
  const total = items.length;
1070
1075
  const paged = items.slice(request.offset, request.offset + request.limit);
@@ -1174,7 +1179,7 @@ var ReplayQueryAdapter = class {
1174
1179
  });
1175
1180
  }
1176
1181
  }
1177
- divergences.sort((a, b) => a.txId.localeCompare(b.txId));
1182
+ divergences.sort((a, b) => deterministicCompare2(a.txId, b.txId));
1178
1183
  const paged = divergences.slice(request.offset, request.offset + request.limit);
1179
1184
  let why;
1180
1185
  if (request.explain) {
@@ -1355,6 +1360,7 @@ function explainInvariants(result) {
1355
1360
  // src/adapters/dag-adapter.ts
1356
1361
  import fs5 from "fs/promises";
1357
1362
  import path4 from "path";
1363
+ import { deterministicCompare as deterministicCompare3 } from "@hardkas/core";
1358
1364
  var DagQueryAdapter = class {
1359
1365
  domain = "dag";
1360
1366
  rootDir;
@@ -1399,7 +1405,7 @@ var DagQueryAdapter = class {
1399
1405
  winnerTxId: c.winnerTxId,
1400
1406
  loserTxIds: c.loserTxIds
1401
1407
  }));
1402
- items.sort((a, b) => a.outpoint.localeCompare(b.outpoint));
1408
+ items.sort((a, b) => deterministicCompare3(a.outpoint, b.outpoint));
1403
1409
  const paged = items.slice(request.offset, request.offset + request.limit);
1404
1410
  let why;
1405
1411
  if (request.explain) {
@@ -1435,7 +1441,7 @@ var DagQueryAdapter = class {
1435
1441
  currentlyAccepted: dag.acceptedTxIds.includes(txId)
1436
1442
  };
1437
1443
  });
1438
- items.sort((a, b) => a.txId.localeCompare(b.txId));
1444
+ items.sort((a, b) => deterministicCompare3(a.txId, b.txId));
1439
1445
  const paged = items.slice(request.offset, request.offset + request.limit);
1440
1446
  let why;
1441
1447
  if (request.explain) {
@@ -1488,7 +1494,7 @@ var DagQueryAdapter = class {
1488
1494
  });
1489
1495
  }
1490
1496
  }
1491
- entries.sort((a, b) => a.daaScore.localeCompare(b.daaScore));
1497
+ entries.sort((a, b) => deterministicCompare3(a.daaScore, b.daaScore));
1492
1498
  let why;
1493
1499
  if (request.explain) {
1494
1500
  why = entries.map((e) => explainTxHistory(e, dag));
@@ -1587,7 +1593,7 @@ var DagQueryAdapter = class {
1587
1593
  });
1588
1594
  }
1589
1595
  }
1590
- anomalies.sort((a, b) => a.kind.localeCompare(b.kind));
1596
+ anomalies.sort((a, b) => deterministicCompare3(a.kind, b.kind));
1591
1597
  const paged = anomalies.slice(request.offset, request.offset + request.limit);
1592
1598
  let why;
1593
1599
  if (request.explain) {
@@ -1719,6 +1725,7 @@ function explainAnomaly(a, _dag) {
1719
1725
 
1720
1726
  // src/adapters/events-adapter.ts
1721
1727
  import path5 from "path";
1728
+ import { deterministicCompare as deterministicCompare4 } from "@hardkas/core";
1722
1729
  var EventsQueryAdapter = class {
1723
1730
  domain = "events";
1724
1731
  rootDir;
@@ -1758,9 +1765,9 @@ var EventsQueryAdapter = class {
1758
1765
  }
1759
1766
  }
1760
1767
  const sorted = [...filtered].sort((a, b) => {
1761
- const cmp = a.timestamp.localeCompare(b.timestamp);
1768
+ const cmp = deterministicCompare4(a.timestamp, b.timestamp);
1762
1769
  if (cmp !== 0) return cmp;
1763
- return a.eventId.localeCompare(b.eventId);
1770
+ return deterministicCompare4(a.eventId, b.eventId);
1764
1771
  });
1765
1772
  const total = sorted.length;
1766
1773
  const paged = sorted.slice(request.offset, request.offset + request.limit);
@@ -1814,6 +1821,7 @@ var EventsQueryAdapter = class {
1814
1821
  };
1815
1822
 
1816
1823
  // src/adapters/tx-adapter.ts
1824
+ import { deterministicCompare as deterministicCompare5 } from "@hardkas/core";
1817
1825
  var TxQueryAdapter = class {
1818
1826
  domain = "tx";
1819
1827
  rootDir;
@@ -1853,7 +1861,7 @@ var TxQueryAdapter = class {
1853
1861
  const result = {
1854
1862
  txId,
1855
1863
  artifacts,
1856
- events: events.sort((a, b) => a.timestamp.localeCompare(b.timestamp) || a.eventId.localeCompare(b.eventId)),
1864
+ events: events.sort((a, b) => deterministicCompare5(a.timestamp, b.timestamp) || deterministicCompare5(a.eventId, b.eventId)),
1857
1865
  warnings,
1858
1866
  complete
1859
1867
  };
@@ -1906,7 +1914,7 @@ var TxQueryAdapter = class {
1906
1914
  role
1907
1915
  });
1908
1916
  }
1909
- return results.sort((a, b) => a.filePath.localeCompare(b.filePath));
1917
+ return results.sort((a, b) => deterministicCompare5(a.filePath, b.filePath));
1910
1918
  }
1911
1919
  async findEventsByTxId(txId) {
1912
1920
  const docs = await this.backend.getEvents({ txId });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hardkas/query",
3
- "version": "0.5.4-alpha",
3
+ "version": "0.6.0-alpha",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -14,9 +14,9 @@
14
14
  ],
15
15
  "dependencies": {
16
16
  "picocolors": "^1.1.1",
17
- "@hardkas/core": "0.5.4-alpha",
18
- "@hardkas/artifacts": "0.5.4-alpha",
19
- "@hardkas/query-store": "0.5.4-alpha"
17
+ "@hardkas/core": "0.6.0-alpha",
18
+ "@hardkas/query-store": "0.6.0-alpha",
19
+ "@hardkas/artifacts": "0.6.0-alpha"
20
20
  },
21
21
  "devDependencies": {
22
22
  "tsup": "^8.3.5",