@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.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
- function hashString(str) {
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 { encode, decode } from "@msgpack/msgpack";
964
+ import { pack, unpack } from "msgpackr";
929
965
  function serialize(data) {
930
- return encode(data);
966
+ return pack(data);
931
967
  }
932
968
  function deserialize(data) {
933
- return decode(data);
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
  };