@syncular/core 0.0.1 → 0.0.2-127
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/README.md +24 -0
- package/dist/blobs.d.ts +9 -4
- package/dist/blobs.d.ts.map +1 -1
- package/dist/blobs.js +0 -12
- package/dist/blobs.js.map +1 -1
- package/dist/column-codecs.d.ts +55 -0
- package/dist/column-codecs.d.ts.map +1 -0
- package/dist/column-codecs.js +124 -0
- package/dist/column-codecs.js.map +1 -0
- package/dist/index.d.ts +11 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -7
- package/dist/index.js.map +1 -1
- package/dist/kysely-serialize.d.ts +1 -1
- package/dist/kysely-serialize.d.ts.map +1 -1
- package/dist/logger.d.ts +7 -32
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +6 -40
- package/dist/logger.js.map +1 -1
- package/dist/proxy/types.d.ts +0 -9
- package/dist/proxy/types.d.ts.map +1 -1
- package/dist/schemas/index.js +3 -3
- package/dist/schemas/sync.d.ts +120 -6
- package/dist/schemas/sync.d.ts.map +1 -1
- package/dist/schemas/sync.js +17 -3
- package/dist/schemas/sync.js.map +1 -1
- package/dist/scopes/index.d.ts +39 -64
- package/dist/scopes/index.d.ts.map +1 -1
- package/dist/scopes/index.js +9 -154
- package/dist/scopes/index.js.map +1 -1
- package/dist/snapshot-chunks.d.ts +26 -0
- package/dist/snapshot-chunks.d.ts.map +1 -0
- package/dist/snapshot-chunks.js +89 -0
- package/dist/snapshot-chunks.js.map +1 -0
- package/dist/telemetry.d.ts +114 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +113 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +12 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/id.d.ts +2 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +8 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/object.d.ts +2 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/dist/utils/object.js +4 -0
- package/dist/utils/object.js.map +1 -0
- package/package.json +28 -8
- package/src/__tests__/telemetry.test.ts +170 -0
- package/src/__tests__/utils.test.ts +27 -0
- package/src/blobs.ts +15 -14
- package/src/column-codecs.ts +228 -0
- package/src/index.ts +15 -41
- package/src/kysely-serialize.ts +1 -1
- package/src/logger.ts +10 -68
- package/src/proxy/types.ts +0 -10
- package/src/schemas/sync.ts +27 -3
- package/src/scopes/index.ts +72 -200
- package/src/snapshot-chunks.ts +112 -0
- package/src/telemetry.ts +238 -0
- package/src/types.ts +14 -18
- package/src/utils/id.ts +7 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/object.ts +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-chunks.d.ts","sourceRoot":"","sources":["../src/snapshot-chunks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAChE,MAAM,MAAM,yBAAyB,GAAG,OAAO,4BAA4B,CAAC;AAE5E,eAAO,MAAM,+BAA+B,SAAS,CAAC;AACtD,MAAM,MAAM,4BAA4B,GACtC,OAAO,+BAA+B,CAAC;AAWzC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CA2B5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CASvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,EAAE,CAoC/D"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/core - Snapshot chunk encoding helpers
|
|
3
|
+
*/
|
|
4
|
+
export const SYNC_SNAPSHOT_CHUNK_ENCODING = 'json-row-frame-v1';
|
|
5
|
+
export const SYNC_SNAPSHOT_CHUNK_COMPRESSION = 'gzip';
|
|
6
|
+
const SNAPSHOT_ROW_FRAME_MAGIC = new Uint8Array([0x53, 0x52, 0x46, 0x31]); // "SRF1"
|
|
7
|
+
const FRAME_LENGTH_BYTES = 4;
|
|
8
|
+
const MAX_FRAME_BYTE_LENGTH = 0xffff_ffff;
|
|
9
|
+
function normalizeRowJson(row) {
|
|
10
|
+
const serialized = JSON.stringify(row);
|
|
11
|
+
return serialized === undefined ? 'null' : serialized;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Encode rows as framed JSON bytes without the format header.
|
|
15
|
+
*/
|
|
16
|
+
export function encodeSnapshotRowFrames(rows) {
|
|
17
|
+
const encoder = new TextEncoder();
|
|
18
|
+
const payloads = [];
|
|
19
|
+
let totalByteLength = 0;
|
|
20
|
+
for (const row of rows) {
|
|
21
|
+
const payload = encoder.encode(normalizeRowJson(row));
|
|
22
|
+
if (payload.length > MAX_FRAME_BYTE_LENGTH) {
|
|
23
|
+
throw new Error(`Snapshot row payload exceeds ${MAX_FRAME_BYTE_LENGTH} bytes`);
|
|
24
|
+
}
|
|
25
|
+
payloads.push(payload);
|
|
26
|
+
totalByteLength += FRAME_LENGTH_BYTES + payload.length;
|
|
27
|
+
}
|
|
28
|
+
const encoded = new Uint8Array(totalByteLength);
|
|
29
|
+
const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.length);
|
|
30
|
+
let offset = 0;
|
|
31
|
+
for (const payload of payloads) {
|
|
32
|
+
view.setUint32(offset, payload.length, false);
|
|
33
|
+
offset += FRAME_LENGTH_BYTES;
|
|
34
|
+
encoded.set(payload, offset);
|
|
35
|
+
offset += payload.length;
|
|
36
|
+
}
|
|
37
|
+
return encoded;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Encode rows as framed JSON bytes with a format header.
|
|
41
|
+
*
|
|
42
|
+
* Format:
|
|
43
|
+
* - 4-byte magic header ("SRF1")
|
|
44
|
+
* - repeated frames of:
|
|
45
|
+
* - 4-byte big-endian payload byte length
|
|
46
|
+
* - UTF-8 JSON payload
|
|
47
|
+
*/
|
|
48
|
+
export function encodeSnapshotRows(rows) {
|
|
49
|
+
const framedRows = encodeSnapshotRowFrames(rows);
|
|
50
|
+
const totalByteLength = SNAPSHOT_ROW_FRAME_MAGIC.length + framedRows.length;
|
|
51
|
+
const encoded = new Uint8Array(totalByteLength);
|
|
52
|
+
encoded.set(SNAPSHOT_ROW_FRAME_MAGIC, 0);
|
|
53
|
+
encoded.set(framedRows, SNAPSHOT_ROW_FRAME_MAGIC.length);
|
|
54
|
+
return encoded;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Decode framed JSON bytes into rows.
|
|
58
|
+
*/
|
|
59
|
+
export function decodeSnapshotRows(bytes) {
|
|
60
|
+
if (bytes.length < SNAPSHOT_ROW_FRAME_MAGIC.length) {
|
|
61
|
+
throw new Error('Snapshot chunk payload is too small');
|
|
62
|
+
}
|
|
63
|
+
for (let index = 0; index < SNAPSHOT_ROW_FRAME_MAGIC.length; index += 1) {
|
|
64
|
+
const expected = SNAPSHOT_ROW_FRAME_MAGIC[index];
|
|
65
|
+
const actual = bytes[index];
|
|
66
|
+
if (actual !== expected) {
|
|
67
|
+
throw new Error('Unexpected snapshot chunk format');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const rows = [];
|
|
71
|
+
const decoder = new TextDecoder();
|
|
72
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.length);
|
|
73
|
+
let offset = SNAPSHOT_ROW_FRAME_MAGIC.length;
|
|
74
|
+
while (offset < bytes.length) {
|
|
75
|
+
if (offset + FRAME_LENGTH_BYTES > bytes.length) {
|
|
76
|
+
throw new Error('Snapshot chunk payload ended mid-frame header');
|
|
77
|
+
}
|
|
78
|
+
const payloadLength = view.getUint32(offset, false);
|
|
79
|
+
offset += FRAME_LENGTH_BYTES;
|
|
80
|
+
if (offset + payloadLength > bytes.length) {
|
|
81
|
+
throw new Error('Snapshot chunk payload ended mid-frame body');
|
|
82
|
+
}
|
|
83
|
+
const payload = bytes.subarray(offset, offset + payloadLength);
|
|
84
|
+
offset += payloadLength;
|
|
85
|
+
rows.push(JSON.parse(decoder.decode(payload)));
|
|
86
|
+
}
|
|
87
|
+
return rows;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=snapshot-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-chunks.js","sourceRoot":"","sources":["../src/snapshot-chunks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/core - Runtime telemetry abstraction
|
|
3
|
+
*
|
|
4
|
+
* Provides vendor-neutral logging, tracing, and metrics interfaces so
|
|
5
|
+
* Syncular libraries can emit telemetry without coupling to a specific SDK.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Supported log levels.
|
|
9
|
+
*/
|
|
10
|
+
export type SyncTelemetryLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
11
|
+
/**
|
|
12
|
+
* Primitive attribute value used by traces and metrics.
|
|
13
|
+
*/
|
|
14
|
+
export type SyncTelemetryAttributeValue = string | number | boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Attribute bag used by traces and metrics.
|
|
17
|
+
*/
|
|
18
|
+
export type SyncTelemetryAttributes = Record<string, SyncTelemetryAttributeValue>;
|
|
19
|
+
/**
|
|
20
|
+
* Structured sync log event.
|
|
21
|
+
*/
|
|
22
|
+
export interface SyncTelemetryEvent {
|
|
23
|
+
event: string;
|
|
24
|
+
level?: SyncTelemetryLevel;
|
|
25
|
+
userId?: string;
|
|
26
|
+
durationMs?: number;
|
|
27
|
+
rowCount?: number;
|
|
28
|
+
resetRequired?: boolean;
|
|
29
|
+
error?: string;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Span creation options.
|
|
34
|
+
*/
|
|
35
|
+
export interface SyncSpanOptions {
|
|
36
|
+
name: string;
|
|
37
|
+
op?: string;
|
|
38
|
+
attributes?: SyncTelemetryAttributes;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Span API exposed to Syncular internals.
|
|
42
|
+
*/
|
|
43
|
+
export interface SyncSpan {
|
|
44
|
+
setAttribute(name: string, value: SyncTelemetryAttributeValue): void;
|
|
45
|
+
setAttributes(attributes: SyncTelemetryAttributes): void;
|
|
46
|
+
setStatus(status: 'ok' | 'error'): void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Tracing interface.
|
|
50
|
+
*/
|
|
51
|
+
export interface SyncTracer {
|
|
52
|
+
startSpan<T>(options: SyncSpanOptions, callback: (span: SyncSpan) => T): T;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Metric record options.
|
|
56
|
+
*/
|
|
57
|
+
export interface SyncMetricOptions {
|
|
58
|
+
attributes?: SyncTelemetryAttributes;
|
|
59
|
+
unit?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Metrics interface.
|
|
63
|
+
*/
|
|
64
|
+
export interface SyncMetrics {
|
|
65
|
+
count(name: string, value?: number, options?: SyncMetricOptions): void;
|
|
66
|
+
gauge(name: string, value: number, options?: SyncMetricOptions): void;
|
|
67
|
+
distribution(name: string, value: number, options?: SyncMetricOptions): void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Unified telemetry interface.
|
|
71
|
+
*/
|
|
72
|
+
export interface SyncTelemetry {
|
|
73
|
+
log(event: SyncTelemetryEvent): void;
|
|
74
|
+
tracer: SyncTracer;
|
|
75
|
+
metrics: SyncMetrics;
|
|
76
|
+
captureException(error: unknown, context?: Record<string, unknown>): void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create console-backed default telemetry (logs only; no-op tracing/metrics).
|
|
80
|
+
*/
|
|
81
|
+
export declare function createDefaultSyncTelemetry(): SyncTelemetry;
|
|
82
|
+
/**
|
|
83
|
+
* Get currently configured telemetry backend.
|
|
84
|
+
*/
|
|
85
|
+
export declare function getSyncTelemetry(): SyncTelemetry;
|
|
86
|
+
/**
|
|
87
|
+
* Replace active telemetry backend.
|
|
88
|
+
*/
|
|
89
|
+
export declare function configureSyncTelemetry(telemetry: SyncTelemetry): void;
|
|
90
|
+
/**
|
|
91
|
+
* Reset telemetry backend to default console implementation.
|
|
92
|
+
*/
|
|
93
|
+
export declare function resetSyncTelemetry(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Capture an exception through the active telemetry backend.
|
|
96
|
+
*/
|
|
97
|
+
export declare function captureSyncException(error: unknown, context?: Record<string, unknown>): void;
|
|
98
|
+
/**
|
|
99
|
+
* Start a span through the active telemetry backend.
|
|
100
|
+
*/
|
|
101
|
+
export declare function startSyncSpan<T>(options: SyncSpanOptions, callback: (span: SyncSpan) => T): T;
|
|
102
|
+
/**
|
|
103
|
+
* Record a counter metric through the active telemetry backend.
|
|
104
|
+
*/
|
|
105
|
+
export declare function countSyncMetric(name: string, value?: number, options?: SyncMetricOptions): void;
|
|
106
|
+
/**
|
|
107
|
+
* Record a gauge metric through the active telemetry backend.
|
|
108
|
+
*/
|
|
109
|
+
export declare function gaugeSyncMetric(name: string, value: number, options?: SyncMetricOptions): void;
|
|
110
|
+
/**
|
|
111
|
+
* Record a distribution metric through the active telemetry backend.
|
|
112
|
+
*/
|
|
113
|
+
export declare function distributionSyncMetric(name: string, value: number, options?: SyncMetricOptions): void;
|
|
114
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/core - Runtime telemetry abstraction
|
|
3
|
+
*
|
|
4
|
+
* Provides vendor-neutral logging, tracing, and metrics interfaces so
|
|
5
|
+
* Syncular libraries can emit telemetry without coupling to a specific SDK.
|
|
6
|
+
*/
|
|
7
|
+
const noopSpan = {
|
|
8
|
+
setAttribute() { },
|
|
9
|
+
setAttributes() { },
|
|
10
|
+
setStatus() { },
|
|
11
|
+
};
|
|
12
|
+
const noopTracer = {
|
|
13
|
+
startSpan(_options, callback) {
|
|
14
|
+
return callback(noopSpan);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
const noopMetrics = {
|
|
18
|
+
count() { },
|
|
19
|
+
gauge() { },
|
|
20
|
+
distribution() { },
|
|
21
|
+
};
|
|
22
|
+
function createConsoleLogger() {
|
|
23
|
+
const isNode = typeof globalThis !== 'undefined' &&
|
|
24
|
+
typeof globalThis.setImmediate === 'function';
|
|
25
|
+
const defer = isNode
|
|
26
|
+
? (fn) => globalThis.setImmediate(fn)
|
|
27
|
+
: (fn) => setTimeout(fn, 0);
|
|
28
|
+
return (event) => {
|
|
29
|
+
defer(() => {
|
|
30
|
+
const level = event.level ?? (event.error ? 'error' : 'info');
|
|
31
|
+
const payload = {
|
|
32
|
+
timestamp: new Date().toISOString(),
|
|
33
|
+
level,
|
|
34
|
+
...event,
|
|
35
|
+
};
|
|
36
|
+
console.log(JSON.stringify(payload));
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create console-backed default telemetry (logs only; no-op tracing/metrics).
|
|
42
|
+
*/
|
|
43
|
+
export function createDefaultSyncTelemetry() {
|
|
44
|
+
const logger = createConsoleLogger();
|
|
45
|
+
return {
|
|
46
|
+
log(event) {
|
|
47
|
+
logger(event);
|
|
48
|
+
},
|
|
49
|
+
tracer: noopTracer,
|
|
50
|
+
metrics: noopMetrics,
|
|
51
|
+
captureException(error, context) {
|
|
52
|
+
const message = error instanceof Error
|
|
53
|
+
? error.message
|
|
54
|
+
: `Unknown error: ${String(error)}`;
|
|
55
|
+
logger({
|
|
56
|
+
event: 'sync.exception',
|
|
57
|
+
level: 'error',
|
|
58
|
+
error: message,
|
|
59
|
+
...(context ?? {}),
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
let activeSyncTelemetry = createDefaultSyncTelemetry();
|
|
65
|
+
/**
|
|
66
|
+
* Get currently configured telemetry backend.
|
|
67
|
+
*/
|
|
68
|
+
export function getSyncTelemetry() {
|
|
69
|
+
return activeSyncTelemetry;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Replace active telemetry backend.
|
|
73
|
+
*/
|
|
74
|
+
export function configureSyncTelemetry(telemetry) {
|
|
75
|
+
activeSyncTelemetry = telemetry;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reset telemetry backend to default console implementation.
|
|
79
|
+
*/
|
|
80
|
+
export function resetSyncTelemetry() {
|
|
81
|
+
activeSyncTelemetry = createDefaultSyncTelemetry();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Capture an exception through the active telemetry backend.
|
|
85
|
+
*/
|
|
86
|
+
export function captureSyncException(error, context) {
|
|
87
|
+
activeSyncTelemetry.captureException(error, context);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Start a span through the active telemetry backend.
|
|
91
|
+
*/
|
|
92
|
+
export function startSyncSpan(options, callback) {
|
|
93
|
+
return activeSyncTelemetry.tracer.startSpan(options, callback);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Record a counter metric through the active telemetry backend.
|
|
97
|
+
*/
|
|
98
|
+
export function countSyncMetric(name, value, options) {
|
|
99
|
+
activeSyncTelemetry.metrics.count(name, value, options);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Record a gauge metric through the active telemetry backend.
|
|
103
|
+
*/
|
|
104
|
+
export function gaugeSyncMetric(name, value, options) {
|
|
105
|
+
activeSyncTelemetry.metrics.gauge(name, value, options);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Record a distribution metric through the active telemetry backend.
|
|
109
|
+
*/
|
|
110
|
+
export function distributionSyncMetric(name, value, options) {
|
|
111
|
+
activeSyncTelemetry.metrics.distribution(name, value, options);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4FH,MAAM,QAAQ,GAAa;IACzB,YAAY,GAAG,EAAC,CAAC;IACjB,aAAa,GAAG,EAAC,CAAC;IAClB,SAAS,GAAG,EAAC,CAAC;CACf,CAAC;AAEF,MAAM,UAAU,GAAe;IAC7B,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;QAC5B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAAA,CAC3B;CACF,CAAC;AAEF,MAAM,WAAW,GAAgB;IAC/B,KAAK,GAAG,EAAC,CAAC;IACV,KAAK,GAAG,EAAC,CAAC;IACV,YAAY,GAAG,EAAC,CAAC;CAClB,CAAC;AAEF,SAAS,mBAAmB,GAAwC;IAClE,MAAM,MAAM,GACV,OAAO,UAAU,KAAK,WAAW;QACjC,OAAO,UAAU,CAAC,YAAY,KAAK,UAAU,CAAC;IAEhD,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,OAAO,CAAC,KAAyB,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,GAAG,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,KAAK;gBACL,GAAG,KAAK;aACT,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAAA,CACtC,CAAC,CAAC;IAAA,CACJ,CAAC;AAAA,CACH;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,GAAkB;IAC1D,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,OAAO;QACL,GAAG,CAAC,KAAK,EAAE;YACT,MAAM,CAAC,KAAK,CAAC,CAAC;QAAA,CACf;QACD,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,WAAW;QACpB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE;YAC/B,MAAM,OAAO,GACX,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC;gBACL,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,OAAO;gBACd,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;aACnB,CAAC,CAAC;QAAA,CACJ;KACF,CAAC;AAAA,CACH;AAED,IAAI,mBAAmB,GAAkB,0BAA0B,EAAE,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,gBAAgB,GAAkB;IAChD,OAAO,mBAAmB,CAAC;AAAA,CAC5B;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAwB,EAAQ;IACrE,mBAAmB,GAAG,SAAS,CAAC;AAAA,CACjC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,GAAS;IACzC,mBAAmB,GAAG,0BAA0B,EAAE,CAAC;AAAA,CACpD;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAc,EACd,OAAiC,EAC3B;IACN,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAAA,CACtD;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAwB,EACxB,QAA+B,EAC5B;IACH,OAAO,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,CAChE;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,KAAc,EACd,OAA2B,EACrB;IACN,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAAA,CACzD;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,KAAa,EACb,OAA2B,EACrB;IACN,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAAA,CACzD;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,KAAa,EACb,OAA2B,EACrB;IACN,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAAA,CAChE"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Non-protocol types: conflict detection, transport interfaces.
|
|
5
5
|
* Protocol types (SyncOp, SyncPushRequest, etc.) live in ./schemas/sync.ts
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { SyncCombinedRequest, SyncCombinedResponse } from './schemas/sync';
|
|
8
8
|
/**
|
|
9
9
|
* Result of a conflict check - no conflict
|
|
10
10
|
*/
|
|
@@ -102,21 +102,24 @@ export interface SyncTransportBlobs {
|
|
|
102
102
|
*/
|
|
103
103
|
export interface SyncTransport {
|
|
104
104
|
/**
|
|
105
|
-
*
|
|
105
|
+
* Combined push+pull in a single round-trip.
|
|
106
106
|
*/
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Push a client commit to the server.
|
|
110
|
-
*/
|
|
111
|
-
push(request: SyncPushRequest, options?: SyncTransportOptions): Promise<SyncPushResponse>;
|
|
107
|
+
sync(request: SyncCombinedRequest, options?: SyncTransportOptions): Promise<SyncCombinedResponse>;
|
|
112
108
|
/**
|
|
113
109
|
* Download an encoded bootstrap snapshot chunk.
|
|
114
|
-
*
|
|
115
|
-
* The server must validate auth for the chunk.
|
|
116
110
|
*/
|
|
117
111
|
fetchSnapshotChunk(request: {
|
|
118
112
|
chunkId: string;
|
|
119
113
|
}, options?: SyncTransportOptions): Promise<Uint8Array>;
|
|
114
|
+
/**
|
|
115
|
+
* Optional streaming snapshot chunk download.
|
|
116
|
+
*
|
|
117
|
+
* When implemented, clients can decode and apply large bootstrap chunks
|
|
118
|
+
* incrementally without materializing the entire chunk in memory.
|
|
119
|
+
*/
|
|
120
|
+
fetchSnapshotChunkStream?(request: {
|
|
121
|
+
chunkId: string;
|
|
122
|
+
}, options?: SyncTransportOptions): Promise<ReadableStream<Uint8Array>>;
|
|
120
123
|
/**
|
|
121
124
|
* Optional blob operations.
|
|
122
125
|
* When present, enables blob upload/download functionality.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuJH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB,MAAM;IACN,IAAI;IAHtB,YACE,OAAe,EACC,MAAe,EACf,IAAa,EAC7B;QACA,KAAK,CAAC,OAAO,CAAC,CAAC;sBAHC,MAAM;oBACN,IAAI;QAGpB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAAA,CAClC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,IAAI,MAAM,CAMjC"}
|
package/dist/utils/id.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function randomId() {
|
|
2
|
+
const cryptoObj = globalThis.crypto;
|
|
3
|
+
if (cryptoObj && typeof cryptoObj.randomUUID === 'function') {
|
|
4
|
+
return cryptoObj.randomUUID();
|
|
5
|
+
}
|
|
6
|
+
return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,GAAW;IACjC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IACpC,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/utils/object.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAoC;IACzE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAAA,CAC7E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2-127",
|
|
4
|
+
"description": "Core protocol types and shared utilities for the Syncular sync framework",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Benjamin Kniffler",
|
|
7
|
+
"homepage": "https://syncular.dev",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/syncular/syncular.git",
|
|
11
|
+
"directory": "packages/core"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/syncular/syncular/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"sync",
|
|
18
|
+
"offline-first",
|
|
19
|
+
"realtime",
|
|
20
|
+
"database",
|
|
21
|
+
"typescript"
|
|
22
|
+
],
|
|
4
23
|
"private": false,
|
|
5
24
|
"publishConfig": {
|
|
6
25
|
"access": "public"
|
|
@@ -9,6 +28,7 @@
|
|
|
9
28
|
"exports": {
|
|
10
29
|
".": {
|
|
11
30
|
"bun": "./src/index.ts",
|
|
31
|
+
"browser": "./src/index.ts",
|
|
12
32
|
"import": {
|
|
13
33
|
"types": "./dist/index.d.ts",
|
|
14
34
|
"default": "./dist/index.js"
|
|
@@ -18,17 +38,17 @@
|
|
|
18
38
|
"scripts": {
|
|
19
39
|
"test": "bun test src/__tests__",
|
|
20
40
|
"tsgo": "tsgo --noEmit",
|
|
21
|
-
"build": "
|
|
22
|
-
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"zod": "^4.3.6"
|
|
41
|
+
"build": "tsgo",
|
|
42
|
+
"release": "bunx syncular-publish"
|
|
25
43
|
},
|
|
26
44
|
"peerDependencies": {
|
|
27
|
-
"kysely": "^0.28.0"
|
|
45
|
+
"kysely": "^0.28.0",
|
|
46
|
+
"zod": "^4.0.0"
|
|
28
47
|
},
|
|
29
48
|
"devDependencies": {
|
|
30
|
-
"@syncular/config": "
|
|
31
|
-
"kysely": "*"
|
|
49
|
+
"@syncular/config": "0.0.0",
|
|
50
|
+
"kysely": "*",
|
|
51
|
+
"zod": "*"
|
|
32
52
|
},
|
|
33
53
|
"files": [
|
|
34
54
|
"dist",
|