@absolutejs/sync 1.9.0 → 1.9.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.
- package/dist/engine/cdc.d.ts +2 -2
- package/dist/engine/index.js +69 -59
- package/dist/engine/index.js.map +3 -3
- package/dist/index.js +71 -63
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -437,9 +437,6 @@ var syncSocket = ({
|
|
|
437
437
|
}
|
|
438
438
|
});
|
|
439
439
|
};
|
|
440
|
-
// src/engine/cdc.ts
|
|
441
|
-
import { Elysia as Elysia3 } from "elysia";
|
|
442
|
-
|
|
443
440
|
// src/engine/equiJoin.ts
|
|
444
441
|
var shallowEqual = (a, b) => {
|
|
445
442
|
if (a === b) {
|
|
@@ -2343,6 +2340,14 @@ var createSyncEngine = (options = {}) => {
|
|
|
2343
2340
|
};
|
|
2344
2341
|
|
|
2345
2342
|
// src/engine/cdc.ts
|
|
2343
|
+
var cachedElysia;
|
|
2344
|
+
var loadElysia = () => {
|
|
2345
|
+
if (cachedElysia !== undefined)
|
|
2346
|
+
return cachedElysia;
|
|
2347
|
+
const mod = __require("elysia");
|
|
2348
|
+
cachedElysia = mod.Elysia;
|
|
2349
|
+
return cachedElysia;
|
|
2350
|
+
};
|
|
2346
2351
|
var parseSince = (query, lastEventId) => {
|
|
2347
2352
|
const raw = query.since ?? lastEventId ?? "0";
|
|
2348
2353
|
const parsed = Number(raw);
|
|
@@ -2364,70 +2369,73 @@ var syncCdc = ({
|
|
|
2364
2369
|
path = "/sync/cdc",
|
|
2365
2370
|
heartbeatMs = 25000,
|
|
2366
2371
|
maxBuffer = 1e4
|
|
2367
|
-
}) =>
|
|
2368
|
-
const
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2372
|
+
}) => {
|
|
2373
|
+
const Elysia3 = loadElysia();
|
|
2374
|
+
return new Elysia3({ name: "@absolutejs/sync/cdc" }).get(path, (context) => {
|
|
2375
|
+
const lastEventId = context.request.headers.get("last-event-id");
|
|
2376
|
+
const since = parseSince(context.query, lastEventId);
|
|
2377
|
+
const encoder = new TextEncoder;
|
|
2378
|
+
const stream = new ReadableStream({
|
|
2379
|
+
async start(controller) {
|
|
2380
|
+
const write = (chunk) => {
|
|
2381
|
+
try {
|
|
2382
|
+
controller.enqueue(encoder.encode(chunk));
|
|
2383
|
+
} catch {}
|
|
2384
|
+
};
|
|
2385
|
+
write(encodeEvent("open", null, {
|
|
2386
|
+
since,
|
|
2387
|
+
at: Date.now()
|
|
2388
|
+
}));
|
|
2389
|
+
const heartbeat = setInterval(() => write(`: ping
|
|
2383
2390
|
|
|
2384
2391
|
`), heartbeatMs);
|
|
2385
|
-
try {
|
|
2386
|
-
for await (const entry of engine.streamChanges({
|
|
2387
|
-
since,
|
|
2388
|
-
signal: context.request.signal,
|
|
2389
|
-
maxBuffer
|
|
2390
|
-
})) {
|
|
2391
|
-
write(encodeEvent("change", entry.version, entry));
|
|
2392
|
-
}
|
|
2393
|
-
} catch (error) {
|
|
2394
|
-
if (error instanceof MissedChangesError) {
|
|
2395
|
-
write(encodeEvent("error", null, {
|
|
2396
|
-
name: "MissedChangesError",
|
|
2397
|
-
message: error.message,
|
|
2398
|
-
requestedSince: error.requestedSince,
|
|
2399
|
-
availableSince: error.availableSince
|
|
2400
|
-
}));
|
|
2401
|
-
} else if (error instanceof CdcConsumerSlowError) {
|
|
2402
|
-
write(encodeEvent("error", null, {
|
|
2403
|
-
name: "CdcConsumerSlowError",
|
|
2404
|
-
message: error.message,
|
|
2405
|
-
lastDeliveredVersion: error.lastDeliveredVersion
|
|
2406
|
-
}));
|
|
2407
|
-
} else {
|
|
2408
|
-
write(encodeEvent("error", null, {
|
|
2409
|
-
name: error instanceof Error ? error.name : "Error",
|
|
2410
|
-
message: error instanceof Error ? error.message : String(error)
|
|
2411
|
-
}));
|
|
2412
|
-
}
|
|
2413
|
-
} finally {
|
|
2414
|
-
clearInterval(heartbeat);
|
|
2415
2392
|
try {
|
|
2416
|
-
|
|
2417
|
-
|
|
2393
|
+
for await (const entry of engine.streamChanges({
|
|
2394
|
+
since,
|
|
2395
|
+
signal: context.request.signal,
|
|
2396
|
+
maxBuffer
|
|
2397
|
+
})) {
|
|
2398
|
+
write(encodeEvent("change", entry.version, entry));
|
|
2399
|
+
}
|
|
2400
|
+
} catch (error) {
|
|
2401
|
+
if (error instanceof MissedChangesError) {
|
|
2402
|
+
write(encodeEvent("error", null, {
|
|
2403
|
+
name: "MissedChangesError",
|
|
2404
|
+
message: error.message,
|
|
2405
|
+
requestedSince: error.requestedSince,
|
|
2406
|
+
availableSince: error.availableSince
|
|
2407
|
+
}));
|
|
2408
|
+
} else if (error instanceof CdcConsumerSlowError) {
|
|
2409
|
+
write(encodeEvent("error", null, {
|
|
2410
|
+
name: "CdcConsumerSlowError",
|
|
2411
|
+
message: error.message,
|
|
2412
|
+
lastDeliveredVersion: error.lastDeliveredVersion
|
|
2413
|
+
}));
|
|
2414
|
+
} else {
|
|
2415
|
+
write(encodeEvent("error", null, {
|
|
2416
|
+
name: error instanceof Error ? error.name : "Error",
|
|
2417
|
+
message: error instanceof Error ? error.message : String(error)
|
|
2418
|
+
}));
|
|
2419
|
+
}
|
|
2420
|
+
} finally {
|
|
2421
|
+
clearInterval(heartbeat);
|
|
2422
|
+
try {
|
|
2423
|
+
controller.close();
|
|
2424
|
+
} catch {}
|
|
2425
|
+
}
|
|
2418
2426
|
}
|
|
2419
|
-
}
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
}
|
|
2427
|
+
});
|
|
2428
|
+
return new Response(stream, {
|
|
2429
|
+
headers: {
|
|
2430
|
+
"cache-control": "no-cache, no-transform",
|
|
2431
|
+
connection: "keep-alive",
|
|
2432
|
+
"content-type": "text/event-stream"
|
|
2433
|
+
}
|
|
2434
|
+
});
|
|
2427
2435
|
});
|
|
2428
|
-
}
|
|
2436
|
+
};
|
|
2429
2437
|
// src/devtools.ts
|
|
2430
|
-
import { Elysia as
|
|
2438
|
+
import { Elysia as Elysia3 } from "elysia";
|
|
2431
2439
|
var dashboardHtml = (streamPath) => `<!doctype html>
|
|
2432
2440
|
<html lang="en"><head><meta charset="utf-8" />
|
|
2433
2441
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
@@ -2497,7 +2505,7 @@ var syncDevtools = ({
|
|
|
2497
2505
|
snapshotMs = 2000
|
|
2498
2506
|
}) => {
|
|
2499
2507
|
const streamPath = `${path}/stream`;
|
|
2500
|
-
return new
|
|
2508
|
+
return new Elysia3({ name: "@absolutejs/sync/devtools" }).get(path, () => new Response(dashboardHtml(streamPath), {
|
|
2501
2509
|
headers: { "content-type": "text/html; charset=utf-8" }
|
|
2502
2510
|
})).get(streamPath, (context) => {
|
|
2503
2511
|
const encoder = new TextEncoder;
|
|
@@ -2618,5 +2626,5 @@ export {
|
|
|
2618
2626
|
createPresenceHub
|
|
2619
2627
|
};
|
|
2620
2628
|
|
|
2621
|
-
//# debugId=
|
|
2629
|
+
//# debugId=2C8AB0508E99C22364756E2164756E21
|
|
2622
2630
|
//# sourceMappingURL=index.js.map
|