@topgunbuild/core 0.2.0 → 0.3.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.
- package/dist/index.d.mts +707 -59
- package/dist/index.d.ts +707 -59
- package/dist/index.js +223 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +207 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -4
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
+
});
|
|
7
|
+
|
|
1
8
|
// src/HLC.ts
|
|
2
9
|
var _HLC = class _HLC {
|
|
3
10
|
constructor(nodeId) {
|
|
@@ -87,7 +94,17 @@ _HLC.MAX_DRIFT = 6e4;
|
|
|
87
94
|
var HLC = _HLC;
|
|
88
95
|
|
|
89
96
|
// src/utils/hash.ts
|
|
90
|
-
|
|
97
|
+
var nativeHash = null;
|
|
98
|
+
var nativeLoadAttempted = false;
|
|
99
|
+
function tryLoadNative() {
|
|
100
|
+
if (nativeLoadAttempted) return;
|
|
101
|
+
nativeLoadAttempted = true;
|
|
102
|
+
try {
|
|
103
|
+
nativeHash = __require("@topgunbuild/native");
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function fnv1aHash(str) {
|
|
91
108
|
let hash = 2166136261;
|
|
92
109
|
for (let i = 0; i < str.length; i++) {
|
|
93
110
|
hash ^= str.charCodeAt(i);
|
|
@@ -95,6 +112,13 @@ function hashString(str) {
|
|
|
95
112
|
}
|
|
96
113
|
return hash >>> 0;
|
|
97
114
|
}
|
|
115
|
+
function hashString(str) {
|
|
116
|
+
tryLoadNative();
|
|
117
|
+
if (nativeHash && nativeHash.isNativeHashAvailable()) {
|
|
118
|
+
return nativeHash.hashString(str);
|
|
119
|
+
}
|
|
120
|
+
return fnv1aHash(str);
|
|
121
|
+
}
|
|
98
122
|
function combineHashes(hashes) {
|
|
99
123
|
let result = 0;
|
|
100
124
|
for (const h of hashes) {
|
|
@@ -102,6 +126,18 @@ function combineHashes(hashes) {
|
|
|
102
126
|
}
|
|
103
127
|
return result >>> 0;
|
|
104
128
|
}
|
|
129
|
+
function isUsingNativeHash() {
|
|
130
|
+
tryLoadNative();
|
|
131
|
+
return nativeHash?.isNativeHashAvailable() === true;
|
|
132
|
+
}
|
|
133
|
+
function disableNativeHash() {
|
|
134
|
+
nativeHash = null;
|
|
135
|
+
nativeLoadAttempted = true;
|
|
136
|
+
}
|
|
137
|
+
function resetNativeHash() {
|
|
138
|
+
nativeHash = null;
|
|
139
|
+
nativeLoadAttempted = false;
|
|
140
|
+
}
|
|
105
141
|
|
|
106
142
|
// src/MerkleTree.ts
|
|
107
143
|
var MerkleTree = class {
|
|
@@ -925,12 +961,13 @@ var ORMap = class {
|
|
|
925
961
|
};
|
|
926
962
|
|
|
927
963
|
// src/serializer.ts
|
|
928
|
-
import {
|
|
964
|
+
import { pack, unpack } from "msgpackr";
|
|
929
965
|
function serialize(data) {
|
|
930
|
-
return
|
|
966
|
+
return pack(data);
|
|
931
967
|
}
|
|
932
968
|
function deserialize(data) {
|
|
933
|
-
|
|
969
|
+
const buffer = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
|
|
970
|
+
return unpack(buffer);
|
|
934
971
|
}
|
|
935
972
|
|
|
936
973
|
// src/predicate.ts
|
|
@@ -1021,9 +1058,16 @@ function evaluatePredicate(predicate, data) {
|
|
|
1021
1058
|
|
|
1022
1059
|
// src/schemas.ts
|
|
1023
1060
|
import { z } from "zod";
|
|
1061
|
+
var WriteConcernSchema = z.enum([
|
|
1062
|
+
"FIRE_AND_FORGET",
|
|
1063
|
+
"MEMORY",
|
|
1064
|
+
"APPLIED",
|
|
1065
|
+
"REPLICATED",
|
|
1066
|
+
"PERSISTED"
|
|
1067
|
+
]);
|
|
1024
1068
|
var TimestampSchema = z.object({
|
|
1025
|
-
millis: z.number(),
|
|
1026
|
-
counter: z.number(),
|
|
1069
|
+
millis: z.union([z.number(), z.bigint()]).transform(Number),
|
|
1070
|
+
counter: z.union([z.number(), z.bigint()]).transform(Number),
|
|
1027
1071
|
nodeId: z.string()
|
|
1028
1072
|
});
|
|
1029
1073
|
var LWWRecordSchema = z.object({
|
|
@@ -1072,7 +1116,10 @@ var ClientOpSchema = z.object({
|
|
|
1072
1116
|
opType: z.string().optional(),
|
|
1073
1117
|
record: LWWRecordSchema.nullable().optional(),
|
|
1074
1118
|
orRecord: ORMapRecordSchema.nullable().optional(),
|
|
1075
|
-
orTag: z.string().nullable().optional()
|
|
1119
|
+
orTag: z.string().nullable().optional(),
|
|
1120
|
+
// Write Concern fields (Phase 5.01)
|
|
1121
|
+
writeConcern: WriteConcernSchema.optional(),
|
|
1122
|
+
timeout: z.number().optional()
|
|
1076
1123
|
});
|
|
1077
1124
|
var AuthMessageSchema = z.object({
|
|
1078
1125
|
type: z.literal("AUTH"),
|
|
@@ -1099,7 +1146,10 @@ var ClientOpMessageSchema = z.object({
|
|
|
1099
1146
|
var OpBatchMessageSchema = z.object({
|
|
1100
1147
|
type: z.literal("OP_BATCH"),
|
|
1101
1148
|
payload: z.object({
|
|
1102
|
-
ops: z.array(ClientOpSchema)
|
|
1149
|
+
ops: z.array(ClientOpSchema),
|
|
1150
|
+
// Batch-level Write Concern (can be overridden per-op)
|
|
1151
|
+
writeConcern: WriteConcernSchema.optional(),
|
|
1152
|
+
timeout: z.number().optional()
|
|
1103
1153
|
})
|
|
1104
1154
|
});
|
|
1105
1155
|
var SyncInitMessageSchema = z.object({
|
|
@@ -1197,6 +1247,11 @@ var PongMessageSchema = z.object({
|
|
|
1197
1247
|
serverTime: z.number()
|
|
1198
1248
|
// Server's Date.now() (for clock skew detection)
|
|
1199
1249
|
});
|
|
1250
|
+
var BatchMessageSchema = z.object({
|
|
1251
|
+
type: z.literal("BATCH"),
|
|
1252
|
+
count: z.number(),
|
|
1253
|
+
data: z.instanceof(Uint8Array)
|
|
1254
|
+
});
|
|
1200
1255
|
var ORMapSyncInitSchema = z.object({
|
|
1201
1256
|
type: z.literal("ORMAP_SYNC_INIT"),
|
|
1202
1257
|
mapName: z.string(),
|
|
@@ -1270,6 +1325,40 @@ var ORMapPushDiffSchema = z.object({
|
|
|
1270
1325
|
}))
|
|
1271
1326
|
})
|
|
1272
1327
|
});
|
|
1328
|
+
var PartitionMapRequestSchema = z.object({
|
|
1329
|
+
type: z.literal("PARTITION_MAP_REQUEST"),
|
|
1330
|
+
payload: z.object({
|
|
1331
|
+
currentVersion: z.number().optional()
|
|
1332
|
+
}).optional()
|
|
1333
|
+
});
|
|
1334
|
+
var OpResultSchema = z.object({
|
|
1335
|
+
opId: z.string(),
|
|
1336
|
+
success: z.boolean(),
|
|
1337
|
+
achievedLevel: WriteConcernSchema,
|
|
1338
|
+
error: z.string().optional()
|
|
1339
|
+
});
|
|
1340
|
+
var OpAckMessageSchema = z.object({
|
|
1341
|
+
type: z.literal("OP_ACK"),
|
|
1342
|
+
payload: z.object({
|
|
1343
|
+
/** ID of the last operation in the batch (for backwards compatibility) */
|
|
1344
|
+
lastId: z.string(),
|
|
1345
|
+
/** Write Concern level achieved (for simple ACKs) */
|
|
1346
|
+
achievedLevel: WriteConcernSchema.optional(),
|
|
1347
|
+
/** Per-operation results (for batch operations with mixed Write Concern) */
|
|
1348
|
+
results: z.array(OpResultSchema).optional()
|
|
1349
|
+
})
|
|
1350
|
+
});
|
|
1351
|
+
var OpRejectedMessageSchema = z.object({
|
|
1352
|
+
type: z.literal("OP_REJECTED"),
|
|
1353
|
+
payload: z.object({
|
|
1354
|
+
/** Operation ID that was rejected */
|
|
1355
|
+
opId: z.string(),
|
|
1356
|
+
/** Reason for rejection */
|
|
1357
|
+
reason: z.string(),
|
|
1358
|
+
/** Error code */
|
|
1359
|
+
code: z.number().optional()
|
|
1360
|
+
})
|
|
1361
|
+
});
|
|
1273
1362
|
var MessageSchema = z.discriminatedUnion("type", [
|
|
1274
1363
|
AuthMessageSchema,
|
|
1275
1364
|
QuerySubMessageSchema,
|
|
@@ -1296,12 +1385,107 @@ var MessageSchema = z.discriminatedUnion("type", [
|
|
|
1296
1385
|
ORMapSyncRespLeafSchema,
|
|
1297
1386
|
ORMapDiffRequestSchema,
|
|
1298
1387
|
ORMapDiffResponseSchema,
|
|
1299
|
-
ORMapPushDiffSchema
|
|
1388
|
+
ORMapPushDiffSchema,
|
|
1389
|
+
// Phase 4: Partition Map
|
|
1390
|
+
PartitionMapRequestSchema
|
|
1300
1391
|
]);
|
|
1392
|
+
|
|
1393
|
+
// src/types/WriteConcern.ts
|
|
1394
|
+
var WriteConcern = /* @__PURE__ */ ((WriteConcern2) => {
|
|
1395
|
+
WriteConcern2["FIRE_AND_FORGET"] = "FIRE_AND_FORGET";
|
|
1396
|
+
WriteConcern2["MEMORY"] = "MEMORY";
|
|
1397
|
+
WriteConcern2["APPLIED"] = "APPLIED";
|
|
1398
|
+
WriteConcern2["REPLICATED"] = "REPLICATED";
|
|
1399
|
+
WriteConcern2["PERSISTED"] = "PERSISTED";
|
|
1400
|
+
return WriteConcern2;
|
|
1401
|
+
})(WriteConcern || {});
|
|
1402
|
+
var DEFAULT_WRITE_CONCERN_TIMEOUT = 5e3;
|
|
1403
|
+
var WRITE_CONCERN_ORDER = [
|
|
1404
|
+
"FIRE_AND_FORGET" /* FIRE_AND_FORGET */,
|
|
1405
|
+
"MEMORY" /* MEMORY */,
|
|
1406
|
+
"APPLIED" /* APPLIED */,
|
|
1407
|
+
"REPLICATED" /* REPLICATED */,
|
|
1408
|
+
"PERSISTED" /* PERSISTED */
|
|
1409
|
+
];
|
|
1410
|
+
function isWriteConcernAchieved(achieved, target) {
|
|
1411
|
+
const targetIndex = WRITE_CONCERN_ORDER.indexOf(target);
|
|
1412
|
+
const achievedIndex = Math.max(
|
|
1413
|
+
...Array.from(achieved).map((l) => WRITE_CONCERN_ORDER.indexOf(l))
|
|
1414
|
+
);
|
|
1415
|
+
return achievedIndex >= targetIndex;
|
|
1416
|
+
}
|
|
1417
|
+
function getHighestWriteConcernLevel(achieved) {
|
|
1418
|
+
for (let i = WRITE_CONCERN_ORDER.length - 1; i >= 0; i--) {
|
|
1419
|
+
if (achieved.has(WRITE_CONCERN_ORDER[i])) {
|
|
1420
|
+
return WRITE_CONCERN_ORDER[i];
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
return "FIRE_AND_FORGET" /* FIRE_AND_FORGET */;
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
// src/types/cluster.ts
|
|
1427
|
+
var DEFAULT_CONNECTION_POOL_CONFIG = {
|
|
1428
|
+
maxConnectionsPerNode: 1,
|
|
1429
|
+
connectionTimeoutMs: 5e3,
|
|
1430
|
+
healthCheckIntervalMs: 1e4,
|
|
1431
|
+
reconnectDelayMs: 1e3,
|
|
1432
|
+
maxReconnectDelayMs: 3e4,
|
|
1433
|
+
maxReconnectAttempts: 5
|
|
1434
|
+
};
|
|
1435
|
+
var DEFAULT_PARTITION_ROUTER_CONFIG = {
|
|
1436
|
+
fallbackMode: "forward",
|
|
1437
|
+
mapRefreshIntervalMs: 3e4,
|
|
1438
|
+
maxMapStalenessMs: 6e4
|
|
1439
|
+
};
|
|
1440
|
+
var DEFAULT_CIRCUIT_BREAKER_CONFIG = {
|
|
1441
|
+
failureThreshold: 5,
|
|
1442
|
+
resetTimeoutMs: 3e4
|
|
1443
|
+
};
|
|
1444
|
+
var PartitionState = /* @__PURE__ */ ((PartitionState2) => {
|
|
1445
|
+
PartitionState2["STABLE"] = "STABLE";
|
|
1446
|
+
PartitionState2["MIGRATING"] = "MIGRATING";
|
|
1447
|
+
PartitionState2["SYNC"] = "SYNC";
|
|
1448
|
+
PartitionState2["FAILED"] = "FAILED";
|
|
1449
|
+
return PartitionState2;
|
|
1450
|
+
})(PartitionState || {});
|
|
1451
|
+
var DEFAULT_MIGRATION_CONFIG = {
|
|
1452
|
+
batchSize: 10,
|
|
1453
|
+
batchIntervalMs: 5e3,
|
|
1454
|
+
transferChunkSize: 65536,
|
|
1455
|
+
// 64KB
|
|
1456
|
+
maxRetries: 3,
|
|
1457
|
+
syncTimeoutMs: 3e4,
|
|
1458
|
+
parallelTransfers: 4
|
|
1459
|
+
};
|
|
1460
|
+
var ConsistencyLevel = /* @__PURE__ */ ((ConsistencyLevel2) => {
|
|
1461
|
+
ConsistencyLevel2["STRONG"] = "STRONG";
|
|
1462
|
+
ConsistencyLevel2["QUORUM"] = "QUORUM";
|
|
1463
|
+
ConsistencyLevel2["EVENTUAL"] = "EVENTUAL";
|
|
1464
|
+
return ConsistencyLevel2;
|
|
1465
|
+
})(ConsistencyLevel || {});
|
|
1466
|
+
var DEFAULT_REPLICATION_CONFIG = {
|
|
1467
|
+
defaultConsistency: "EVENTUAL" /* EVENTUAL */,
|
|
1468
|
+
queueSizeLimit: 1e4,
|
|
1469
|
+
batchSize: 100,
|
|
1470
|
+
batchIntervalMs: 50,
|
|
1471
|
+
ackTimeoutMs: 5e3,
|
|
1472
|
+
maxRetries: 3
|
|
1473
|
+
};
|
|
1474
|
+
var PARTITION_COUNT = 271;
|
|
1475
|
+
var DEFAULT_BACKUP_COUNT = 1;
|
|
1301
1476
|
export {
|
|
1302
1477
|
AuthMessageSchema,
|
|
1478
|
+
BatchMessageSchema,
|
|
1303
1479
|
ClientOpMessageSchema,
|
|
1304
1480
|
ClientOpSchema,
|
|
1481
|
+
ConsistencyLevel,
|
|
1482
|
+
DEFAULT_BACKUP_COUNT,
|
|
1483
|
+
DEFAULT_CIRCUIT_BREAKER_CONFIG,
|
|
1484
|
+
DEFAULT_CONNECTION_POOL_CONFIG,
|
|
1485
|
+
DEFAULT_MIGRATION_CONFIG,
|
|
1486
|
+
DEFAULT_PARTITION_ROUTER_CONFIG,
|
|
1487
|
+
DEFAULT_REPLICATION_CONFIG,
|
|
1488
|
+
DEFAULT_WRITE_CONCERN_TIMEOUT,
|
|
1305
1489
|
HLC,
|
|
1306
1490
|
LWWMap,
|
|
1307
1491
|
LWWRecordSchema,
|
|
@@ -1321,7 +1505,13 @@ export {
|
|
|
1321
1505
|
ORMapSyncRespBucketsSchema,
|
|
1322
1506
|
ORMapSyncRespLeafSchema,
|
|
1323
1507
|
ORMapSyncRespRootSchema,
|
|
1508
|
+
OpAckMessageSchema,
|
|
1324
1509
|
OpBatchMessageSchema,
|
|
1510
|
+
OpRejectedMessageSchema,
|
|
1511
|
+
OpResultSchema,
|
|
1512
|
+
PARTITION_COUNT,
|
|
1513
|
+
PartitionMapRequestSchema,
|
|
1514
|
+
PartitionState,
|
|
1325
1515
|
PingMessageSchema,
|
|
1326
1516
|
PongMessageSchema,
|
|
1327
1517
|
PredicateNodeSchema,
|
|
@@ -1339,13 +1529,21 @@ export {
|
|
|
1339
1529
|
TopicPubSchema,
|
|
1340
1530
|
TopicSubSchema,
|
|
1341
1531
|
TopicUnsubSchema,
|
|
1532
|
+
WRITE_CONCERN_ORDER,
|
|
1533
|
+
WriteConcern,
|
|
1534
|
+
WriteConcernSchema,
|
|
1342
1535
|
combineHashes,
|
|
1343
1536
|
compareTimestamps,
|
|
1344
1537
|
deserialize,
|
|
1538
|
+
disableNativeHash,
|
|
1345
1539
|
evaluatePredicate,
|
|
1540
|
+
getHighestWriteConcernLevel,
|
|
1346
1541
|
hashORMapEntry,
|
|
1347
1542
|
hashORMapRecord,
|
|
1348
1543
|
hashString,
|
|
1544
|
+
isUsingNativeHash,
|
|
1545
|
+
isWriteConcernAchieved,
|
|
1546
|
+
resetNativeHash,
|
|
1349
1547
|
serialize,
|
|
1350
1548
|
timestampToString
|
|
1351
1549
|
};
|