@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 +6 -1
- package/dist/index.js +24 -16
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -334,7 +334,12 @@ interface QueryBackend {
|
|
|
334
334
|
migrate(): Promise<{
|
|
335
335
|
applied: number;
|
|
336
336
|
}>;
|
|
337
|
-
/**
|
|
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
|
|
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
|
|
695
|
-
|
|
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
|
|
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
|
|
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
|
|
1067
|
-
return cmp !== 0 ? cmp : a.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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1768
|
+
const cmp = deterministicCompare4(a.timestamp, b.timestamp);
|
|
1762
1769
|
if (cmp !== 0) return cmp;
|
|
1763
|
-
return a.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
|
|
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
|
|
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.
|
|
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.
|
|
18
|
-
"@hardkas/
|
|
19
|
-
"@hardkas/
|
|
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",
|