@framers/sql-storage-adapter 0.4.2 → 0.5.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.
Files changed (135) hide show
  1. package/README.md +94 -2
  2. package/dist/adapters/electron/electronMainAdapter.d.ts +241 -0
  3. package/dist/adapters/electron/electronMainAdapter.d.ts.map +1 -0
  4. package/dist/adapters/electron/electronMainAdapter.js +442 -0
  5. package/dist/adapters/electron/electronMainAdapter.js.map +1 -0
  6. package/dist/adapters/electron/electronRendererAdapter.d.ts +177 -0
  7. package/dist/adapters/electron/electronRendererAdapter.d.ts.map +1 -0
  8. package/dist/adapters/electron/electronRendererAdapter.js +339 -0
  9. package/dist/adapters/electron/electronRendererAdapter.js.map +1 -0
  10. package/dist/adapters/electron/index.d.ts +74 -0
  11. package/dist/adapters/electron/index.d.ts.map +1 -0
  12. package/dist/adapters/electron/index.js +96 -0
  13. package/dist/adapters/electron/index.js.map +1 -0
  14. package/dist/adapters/electron/ipc/channels.d.ts +196 -0
  15. package/dist/adapters/electron/ipc/channels.d.ts.map +1 -0
  16. package/dist/adapters/electron/ipc/channels.js +121 -0
  17. package/dist/adapters/electron/ipc/channels.js.map +1 -0
  18. package/dist/adapters/electron/ipc/index.d.ts +11 -0
  19. package/dist/adapters/electron/ipc/index.d.ts.map +1 -0
  20. package/dist/adapters/electron/ipc/index.js +11 -0
  21. package/dist/adapters/electron/ipc/index.js.map +1 -0
  22. package/dist/adapters/electron/ipc/protocol.d.ts +78 -0
  23. package/dist/adapters/electron/ipc/protocol.d.ts.map +1 -0
  24. package/dist/adapters/electron/ipc/protocol.js +347 -0
  25. package/dist/adapters/electron/ipc/protocol.js.map +1 -0
  26. package/dist/adapters/electron/ipc/types.d.ts +248 -0
  27. package/dist/adapters/electron/ipc/types.d.ts.map +1 -0
  28. package/dist/adapters/electron/ipc/types.js +8 -0
  29. package/dist/adapters/electron/ipc/types.js.map +1 -0
  30. package/dist/adapters/electron/migration/autoMigrator.d.ts +184 -0
  31. package/dist/adapters/electron/migration/autoMigrator.d.ts.map +1 -0
  32. package/dist/adapters/electron/migration/autoMigrator.js +478 -0
  33. package/dist/adapters/electron/migration/autoMigrator.js.map +1 -0
  34. package/dist/adapters/electron/migration/index.d.ts +9 -0
  35. package/dist/adapters/electron/migration/index.d.ts.map +1 -0
  36. package/dist/adapters/electron/migration/index.js +9 -0
  37. package/dist/adapters/electron/migration/index.js.map +1 -0
  38. package/dist/adapters/electron/preload.d.ts +126 -0
  39. package/dist/adapters/electron/preload.d.ts.map +1 -0
  40. package/dist/adapters/electron/preload.js +254 -0
  41. package/dist/adapters/electron/preload.js.map +1 -0
  42. package/dist/adapters/electron/recovery/corruptionDetector.d.ts +214 -0
  43. package/dist/adapters/electron/recovery/corruptionDetector.d.ts.map +1 -0
  44. package/dist/adapters/electron/recovery/corruptionDetector.js +410 -0
  45. package/dist/adapters/electron/recovery/corruptionDetector.js.map +1 -0
  46. package/dist/adapters/electron/recovery/index.d.ts +11 -0
  47. package/dist/adapters/electron/recovery/index.d.ts.map +1 -0
  48. package/dist/adapters/electron/recovery/index.js +11 -0
  49. package/dist/adapters/electron/recovery/index.js.map +1 -0
  50. package/dist/adapters/electron/recovery/walCheckpoint.d.ts +186 -0
  51. package/dist/adapters/electron/recovery/walCheckpoint.d.ts.map +1 -0
  52. package/dist/adapters/electron/recovery/walCheckpoint.js +302 -0
  53. package/dist/adapters/electron/recovery/walCheckpoint.js.map +1 -0
  54. package/dist/adapters/electron/window/index.d.ts +9 -0
  55. package/dist/adapters/electron/window/index.d.ts.map +1 -0
  56. package/dist/adapters/electron/window/index.js +9 -0
  57. package/dist/adapters/electron/window/index.js.map +1 -0
  58. package/dist/adapters/electron/window/windowManager.d.ts +190 -0
  59. package/dist/adapters/electron/window/windowManager.d.ts.map +1 -0
  60. package/dist/adapters/electron/window/windowManager.js +358 -0
  61. package/dist/adapters/electron/window/windowManager.js.map +1 -0
  62. package/dist/core/contracts/context.d.ts +2 -2
  63. package/dist/core/contracts/context.d.ts.map +1 -1
  64. package/dist/core/database.d.ts +19 -0
  65. package/dist/core/database.d.ts.map +1 -1
  66. package/dist/core/database.js +4 -0
  67. package/dist/core/database.js.map +1 -1
  68. package/dist/core/resolver.d.ts +3 -0
  69. package/dist/core/resolver.d.ts.map +1 -1
  70. package/dist/core/resolver.js +39 -3
  71. package/dist/core/resolver.js.map +1 -1
  72. package/dist/features/sync/conflicts/conflictResolver.d.ts +222 -0
  73. package/dist/features/sync/conflicts/conflictResolver.d.ts.map +1 -0
  74. package/dist/features/sync/conflicts/conflictResolver.js +396 -0
  75. package/dist/features/sync/conflicts/conflictResolver.js.map +1 -0
  76. package/dist/features/sync/conflicts/index.d.ts +9 -0
  77. package/dist/features/sync/conflicts/index.d.ts.map +1 -0
  78. package/dist/features/sync/conflicts/index.js +9 -0
  79. package/dist/features/sync/conflicts/index.js.map +1 -0
  80. package/dist/features/sync/crossPlatformSync.d.ts +281 -0
  81. package/dist/features/sync/crossPlatformSync.d.ts.map +1 -0
  82. package/dist/features/sync/crossPlatformSync.js +623 -0
  83. package/dist/features/sync/crossPlatformSync.js.map +1 -0
  84. package/dist/features/sync/devices/deviceManager.d.ts +243 -0
  85. package/dist/features/sync/devices/deviceManager.d.ts.map +1 -0
  86. package/dist/features/sync/devices/deviceManager.js +494 -0
  87. package/dist/features/sync/devices/deviceManager.js.map +1 -0
  88. package/dist/features/sync/devices/index.d.ts +10 -0
  89. package/dist/features/sync/devices/index.d.ts.map +1 -0
  90. package/dist/features/sync/devices/index.js +10 -0
  91. package/dist/features/sync/devices/index.js.map +1 -0
  92. package/dist/features/sync/index.d.ts +37 -0
  93. package/dist/features/sync/index.d.ts.map +1 -0
  94. package/dist/features/sync/index.js +47 -0
  95. package/dist/features/sync/index.js.map +1 -0
  96. package/dist/features/sync/protocol/index.d.ts +11 -0
  97. package/dist/features/sync/protocol/index.d.ts.map +1 -0
  98. package/dist/features/sync/protocol/index.js +11 -0
  99. package/dist/features/sync/protocol/index.js.map +1 -0
  100. package/dist/features/sync/protocol/messages.d.ts +348 -0
  101. package/dist/features/sync/protocol/messages.d.ts.map +1 -0
  102. package/dist/features/sync/protocol/messages.js +216 -0
  103. package/dist/features/sync/protocol/messages.js.map +1 -0
  104. package/dist/features/sync/protocol/vectorClock.d.ts +164 -0
  105. package/dist/features/sync/protocol/vectorClock.d.ts.map +1 -0
  106. package/dist/features/sync/protocol/vectorClock.js +286 -0
  107. package/dist/features/sync/protocol/vectorClock.js.map +1 -0
  108. package/dist/features/sync/tables/index.d.ts +10 -0
  109. package/dist/features/sync/tables/index.d.ts.map +1 -0
  110. package/dist/features/sync/tables/index.js +10 -0
  111. package/dist/features/sync/tables/index.js.map +1 -0
  112. package/dist/features/sync/tables/syncLogManager.d.ts +216 -0
  113. package/dist/features/sync/tables/syncLogManager.d.ts.map +1 -0
  114. package/dist/features/sync/tables/syncLogManager.js +456 -0
  115. package/dist/features/sync/tables/syncLogManager.js.map +1 -0
  116. package/dist/features/sync/transport/httpTransport.d.ts +123 -0
  117. package/dist/features/sync/transport/httpTransport.d.ts.map +1 -0
  118. package/dist/features/sync/transport/httpTransport.js +380 -0
  119. package/dist/features/sync/transport/httpTransport.js.map +1 -0
  120. package/dist/features/sync/transport/index.d.ts +12 -0
  121. package/dist/features/sync/transport/index.d.ts.map +1 -0
  122. package/dist/features/sync/transport/index.js +12 -0
  123. package/dist/features/sync/transport/index.js.map +1 -0
  124. package/dist/features/sync/transport/transport.d.ts +259 -0
  125. package/dist/features/sync/transport/transport.d.ts.map +1 -0
  126. package/dist/features/sync/transport/transport.js +153 -0
  127. package/dist/features/sync/transport/transport.js.map +1 -0
  128. package/dist/features/sync/transport/websocketTransport.d.ts +126 -0
  129. package/dist/features/sync/transport/websocketTransport.d.ts.map +1 -0
  130. package/dist/features/sync/transport/websocketTransport.js +374 -0
  131. package/dist/features/sync/transport/websocketTransport.js.map +1 -0
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +6 -0
  134. package/dist/index.js.map +1 -1
  135. package/package.json +21 -1
@@ -0,0 +1,374 @@
1
+ /**
2
+ * WebSocket Transport Implementation.
3
+ *
4
+ * Real-time bidirectional sync transport using WebSockets.
5
+ * Supports automatic reconnection, heartbeats, and message compression.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { BaseTransport, TransportError, TransportErrorCodes, } from './transport.js';
10
+ import { isSyncMessage, createHeartbeatMessage, createAckMessage } from '../protocol/messages.js';
11
+ /**
12
+ * WebSocket transport for real-time sync.
13
+ *
14
+ * Provides low-latency bidirectional communication with:
15
+ * - Automatic reconnection with exponential backoff
16
+ * - Request/response correlation
17
+ * - Heartbeat keep-alive
18
+ * - Message compression (gzip)
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const transport = new WebSocketTransport({
23
+ * endpoint: 'wss://sync.example.com/v1/sync',
24
+ * authToken: 'bearer-token',
25
+ * autoReconnect: true,
26
+ * heartbeatInterval: 30000,
27
+ * });
28
+ *
29
+ * transport.on('message', ({ message }) => {
30
+ * handleSyncMessage(message);
31
+ * });
32
+ *
33
+ * await transport.connect();
34
+ * ```
35
+ */
36
+ export class WebSocketTransport extends BaseTransport {
37
+ constructor(options) {
38
+ super(options);
39
+ this.type = 'websocket';
40
+ this._ws = null;
41
+ this._heartbeatTimer = null;
42
+ this._reconnectTimer = null;
43
+ this._pendingRequests = new Map();
44
+ this._lastPongAt = 0;
45
+ this._shouldReconnect = false;
46
+ this._wsOptions = {
47
+ ...this._options,
48
+ protocols: options.protocols ?? ['sync-v1'],
49
+ binaryType: options.binaryType ?? 'arraybuffer',
50
+ pingPong: options.pingPong ?? true,
51
+ };
52
+ }
53
+ /**
54
+ * Connect to the WebSocket server.
55
+ */
56
+ async connect() {
57
+ this.checkDisposed();
58
+ if (this._state === 'connected' || this._state === 'connecting') {
59
+ return;
60
+ }
61
+ this.setState('connecting');
62
+ this._shouldReconnect = this._options.autoReconnect;
63
+ try {
64
+ await this._createConnection();
65
+ }
66
+ catch (error) {
67
+ this.setState('error');
68
+ throw error;
69
+ }
70
+ }
71
+ /**
72
+ * Disconnect from the WebSocket server.
73
+ */
74
+ async disconnect(reason = 'client disconnect') {
75
+ this._shouldReconnect = false;
76
+ this._clearTimers();
77
+ this._rejectAllPending(new TransportError('Disconnected', TransportErrorCodes.DISPOSED, { recoverable: false }));
78
+ if (this._ws) {
79
+ try {
80
+ this._ws.close(1000, reason);
81
+ }
82
+ catch {
83
+ // Ignore close errors
84
+ }
85
+ this._ws = null;
86
+ }
87
+ this.setState('disconnected');
88
+ this.emit('disconnected', { reason, wasClean: true });
89
+ }
90
+ /**
91
+ * Send a sync message.
92
+ */
93
+ async send(message) {
94
+ this.checkDisposed();
95
+ if (!this._ws || this._state !== 'connected') {
96
+ throw new TransportError('Not connected', TransportErrorCodes.SEND_FAILED, { recoverable: true });
97
+ }
98
+ const data = this._serialize(message);
99
+ try {
100
+ this._ws.send(data);
101
+ this._stats.messagesSent++;
102
+ this._stats.bytesSent += data.length;
103
+ }
104
+ catch (error) {
105
+ throw new TransportError('Failed to send message', TransportErrorCodes.SEND_FAILED, { recoverable: true, cause: error });
106
+ }
107
+ }
108
+ /**
109
+ * Send a message and wait for a response.
110
+ */
111
+ async request(message, timeout) {
112
+ this.checkDisposed();
113
+ const requestId = message.messageId;
114
+ const timeoutMs = timeout ?? this._options.requestTimeout;
115
+ return new Promise((resolve, reject) => {
116
+ const timer = setTimeout(() => {
117
+ this._pendingRequests.delete(requestId);
118
+ reject(new TransportError('Request timed out', TransportErrorCodes.REQUEST_TIMEOUT, { recoverable: true }));
119
+ }, timeoutMs);
120
+ this._pendingRequests.set(requestId, { resolve, reject, timer });
121
+ this.send(message).catch((error) => {
122
+ clearTimeout(timer);
123
+ this._pendingRequests.delete(requestId);
124
+ reject(error);
125
+ });
126
+ });
127
+ }
128
+ /**
129
+ * Create WebSocket connection.
130
+ */
131
+ _createConnection() {
132
+ return new Promise((resolve, reject) => {
133
+ const url = this._buildUrl();
134
+ const timeout = setTimeout(() => {
135
+ reject(new TransportError('Connection timed out', TransportErrorCodes.CONNECTION_TIMEOUT, { recoverable: true }));
136
+ }, this._options.connectionTimeout);
137
+ try {
138
+ this._ws = new WebSocket(url, this._wsOptions.protocols);
139
+ this._ws.binaryType = this._wsOptions.binaryType;
140
+ }
141
+ catch (error) {
142
+ clearTimeout(timeout);
143
+ reject(new TransportError('Failed to create WebSocket', TransportErrorCodes.CONNECTION_FAILED, { recoverable: true, cause: error }));
144
+ return;
145
+ }
146
+ this._ws.onopen = () => {
147
+ clearTimeout(timeout);
148
+ this.setState('connected');
149
+ this._stats.connectedAt = Date.now();
150
+ this._stats.reconnectAttempts = 0;
151
+ this._startHeartbeat();
152
+ this.emit('connected', { timestamp: Date.now() });
153
+ resolve();
154
+ };
155
+ this._ws.onclose = (event) => {
156
+ clearTimeout(timeout);
157
+ this._handleClose(event);
158
+ if (this._state === 'connecting') {
159
+ reject(new TransportError(`Connection closed: ${event.reason || 'unknown'}`, TransportErrorCodes.CONNECTION_FAILED, { recoverable: true }));
160
+ }
161
+ };
162
+ this._ws.onerror = (event) => {
163
+ const error = new TransportError('WebSocket error', TransportErrorCodes.NETWORK_ERROR, { recoverable: true });
164
+ this.emit('error', { error, recoverable: true });
165
+ // Note: onclose will be called after onerror
166
+ console.error('[WebSocketTransport] Connection error:', event);
167
+ };
168
+ this._ws.onmessage = (event) => {
169
+ this._handleMessage(event);
170
+ };
171
+ });
172
+ }
173
+ /**
174
+ * Build WebSocket URL with auth token.
175
+ */
176
+ _buildUrl() {
177
+ const url = new URL(this._options.endpoint);
178
+ // Add auth token as query parameter if provided
179
+ if (this._options.authToken) {
180
+ url.searchParams.set('token', this._options.authToken);
181
+ }
182
+ return url.toString();
183
+ }
184
+ /**
185
+ * Handle incoming WebSocket message.
186
+ */
187
+ _handleMessage(event) {
188
+ try {
189
+ const message = this._deserialize(event.data);
190
+ if (!isSyncMessage(message)) {
191
+ console.warn('[WebSocketTransport] Received invalid message:', message);
192
+ return;
193
+ }
194
+ this._stats.messagesReceived++;
195
+ this._stats.bytesReceived += typeof event.data === 'string'
196
+ ? event.data.length
197
+ : event.data.byteLength;
198
+ // Handle heartbeat responses
199
+ if (message.type === 'heartbeat') {
200
+ this._lastPongAt = Date.now();
201
+ // Send ack for heartbeat
202
+ this.send(createAckMessage(message.messageId, this._options.authToken || 'device'))
203
+ .catch(() => { });
204
+ return;
205
+ }
206
+ // Handle ack messages - resolve pending requests
207
+ if (message.type === 'ack') {
208
+ const pending = this._pendingRequests.get(message.ackMessageId);
209
+ if (pending) {
210
+ clearTimeout(pending.timer);
211
+ this._pendingRequests.delete(message.ackMessageId);
212
+ pending.resolve(message);
213
+ }
214
+ return;
215
+ }
216
+ // Check if this is a response to a pending request
217
+ if ('inResponseTo' in message && message.inResponseTo) {
218
+ const pending = this._pendingRequests.get(message.inResponseTo);
219
+ if (pending) {
220
+ clearTimeout(pending.timer);
221
+ this._pendingRequests.delete(message.inResponseTo);
222
+ pending.resolve(message);
223
+ return;
224
+ }
225
+ }
226
+ // Emit message for general handling
227
+ this.emit('message', { message, receivedAt: Date.now() });
228
+ }
229
+ catch (error) {
230
+ console.error('[WebSocketTransport] Failed to process message:', error);
231
+ this.emit('error', {
232
+ error: new TransportError('Failed to process message', TransportErrorCodes.PROTOCOL_ERROR, { recoverable: true, cause: error }),
233
+ recoverable: true,
234
+ });
235
+ }
236
+ }
237
+ /**
238
+ * Handle WebSocket close event.
239
+ */
240
+ _handleClose(event) {
241
+ this._stopHeartbeat();
242
+ const wasConnected = this._state === 'connected';
243
+ const wasClean = event.wasClean;
244
+ const reason = event.reason || `Code: ${event.code}`;
245
+ this.emit('disconnected', { reason, wasClean });
246
+ // Reject all pending requests
247
+ this._rejectAllPending(new TransportError('Connection closed', TransportErrorCodes.NETWORK_ERROR, { recoverable: this._shouldReconnect }));
248
+ // Attempt reconnection if enabled
249
+ if (this._shouldReconnect && wasConnected) {
250
+ this._scheduleReconnect();
251
+ }
252
+ else {
253
+ this.setState('disconnected');
254
+ }
255
+ }
256
+ /**
257
+ * Schedule reconnection attempt.
258
+ */
259
+ _scheduleReconnect() {
260
+ if (!this._shouldReconnect || this._disposed)
261
+ return;
262
+ const maxAttempts = this._options.maxReconnectAttempts;
263
+ if (maxAttempts > 0 && this._stats.reconnectAttempts >= maxAttempts) {
264
+ console.warn('[WebSocketTransport] Max reconnection attempts reached');
265
+ this.setState('error');
266
+ return;
267
+ }
268
+ this._stats.reconnectAttempts++;
269
+ const delay = this.calculateReconnectDelay(this._stats.reconnectAttempts);
270
+ this.setState('reconnecting');
271
+ this.emit('reconnecting', {
272
+ attempt: this._stats.reconnectAttempts,
273
+ delay,
274
+ });
275
+ this._reconnectTimer = setTimeout(async () => {
276
+ if (!this._shouldReconnect || this._disposed)
277
+ return;
278
+ try {
279
+ await this._createConnection();
280
+ }
281
+ catch (error) {
282
+ console.warn('[WebSocketTransport] Reconnection failed:', error);
283
+ this._scheduleReconnect();
284
+ }
285
+ }, delay);
286
+ }
287
+ /**
288
+ * Start heartbeat timer.
289
+ */
290
+ _startHeartbeat() {
291
+ if (!this._wsOptions.pingPong || this._options.heartbeatInterval <= 0) {
292
+ return;
293
+ }
294
+ this._lastPongAt = Date.now();
295
+ this._heartbeatTimer = setInterval(() => {
296
+ if (!this._ws || this._state !== 'connected')
297
+ return;
298
+ // Check if we missed too many heartbeats
299
+ const missedTime = Date.now() - this._lastPongAt;
300
+ if (missedTime > this._options.heartbeatInterval * 3) {
301
+ console.warn('[WebSocketTransport] Heartbeat timeout, reconnecting...');
302
+ this._ws.close(4000, 'Heartbeat timeout');
303
+ return;
304
+ }
305
+ // Send heartbeat
306
+ const heartbeat = createHeartbeatMessage(this._options.authToken || 'device');
307
+ this.send(heartbeat).catch((error) => {
308
+ console.warn('[WebSocketTransport] Failed to send heartbeat:', error);
309
+ });
310
+ }, this._options.heartbeatInterval);
311
+ }
312
+ /**
313
+ * Stop heartbeat timer.
314
+ */
315
+ _stopHeartbeat() {
316
+ if (this._heartbeatTimer) {
317
+ clearInterval(this._heartbeatTimer);
318
+ this._heartbeatTimer = null;
319
+ }
320
+ }
321
+ /**
322
+ * Clear all timers.
323
+ */
324
+ _clearTimers() {
325
+ this._stopHeartbeat();
326
+ if (this._reconnectTimer) {
327
+ clearTimeout(this._reconnectTimer);
328
+ this._reconnectTimer = null;
329
+ }
330
+ }
331
+ /**
332
+ * Reject all pending requests.
333
+ */
334
+ _rejectAllPending(error) {
335
+ for (const [id, pending] of this._pendingRequests) {
336
+ clearTimeout(pending.timer);
337
+ pending.reject(error);
338
+ }
339
+ this._pendingRequests.clear();
340
+ }
341
+ /**
342
+ * Serialize message for transmission.
343
+ */
344
+ _serialize(message) {
345
+ // For now, use JSON. Could add compression/binary later.
346
+ return JSON.stringify(message);
347
+ }
348
+ /**
349
+ * Deserialize received message.
350
+ */
351
+ _deserialize(data) {
352
+ if (typeof data === 'string') {
353
+ return JSON.parse(data);
354
+ }
355
+ // Handle binary (ArrayBuffer)
356
+ const decoder = new TextDecoder();
357
+ const text = decoder.decode(data);
358
+ return JSON.parse(text);
359
+ }
360
+ /**
361
+ * Dispose of the transport.
362
+ */
363
+ async dispose() {
364
+ this._shouldReconnect = false;
365
+ await super.dispose();
366
+ }
367
+ }
368
+ /**
369
+ * Create a WebSocket transport instance.
370
+ */
371
+ export const createWebSocketTransport = (options) => {
372
+ return new WebSocketTransport(options);
373
+ };
374
+ //# sourceMappingURL=websocketTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocketTransport.js","sourceRoot":"","sources":["../../../../src/features/sync/transport/websocketTransport.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAG9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAG5C,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAQ9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAM5C,cAAc,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -11,12 +11,18 @@ export * from './adapters/capacitorSqliteAdapter.js';
11
11
  export * from './adapters/postgresAdapter.js';
12
12
  export * from './adapters/supabase.js';
13
13
  export * from './adapters/baseStorageAdapter.js';
14
+ // Note: Electron adapter is available via separate entry point to avoid
15
+ // bundling Electron dependencies in non-Electron builds.
16
+ // Usage: import { createElectronMainAdapter, createElectronRendererAdapter } from '@framers/sql-storage-adapter/electron';
17
+ // Preload: import '@framers/sql-storage-adapter/electron/preload';
14
18
  // Feature modules ------------------------------------------------------------
15
19
  export * from './features/backup/cloudBackup.js';
16
20
  export * from './features/migrations/dataExport.js';
17
21
  export * from './features/migrations/dataImport.js';
18
22
  export * from './features/migrations/migration.js';
19
23
  export * from './features/sync/syncManager.js';
24
+ // Note: Cross-platform sync is available via separate entry point for cleaner imports.
25
+ // Usage: import { createCrossPlatformSync } from '@framers/sql-storage-adapter/sync';
20
26
  // Shared utilities -----------------------------------------------------------
21
27
  export * from './shared/parameterUtils.js';
22
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,SAAS,CAAC;AAExB,8EAA8E;AAC9E,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,+EAA+E;AAC/E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAE9C,+EAA+E;AAC/E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,SAAS,CAAC;AAExB,8EAA8E;AAC9E,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,+EAA+E;AAC/E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAE9C,wEAAwE;AACxE,yDAAyD;AACzD,2HAA2H;AAC3H,mEAAmE;AAEnE,+EAA+E;AAC/E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,uFAAuF;AACvF,sFAAsF;AAEtF,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/sql-storage-adapter",
3
- "version": "0.4.2",
3
+ "version": "0.5.1",
4
4
  "description": "Robust cross-platform SQL storage abstraction with automatic fallbacks and runtime detection",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -17,6 +17,21 @@
17
17
  "import": "./dist/types/index.js",
18
18
  "default": "./dist/types/index.js"
19
19
  },
20
+ "./electron": {
21
+ "types": "./dist/adapters/electron/index.d.ts",
22
+ "import": "./dist/adapters/electron/index.js",
23
+ "default": "./dist/adapters/electron/index.js"
24
+ },
25
+ "./electron/preload": {
26
+ "types": "./dist/adapters/electron/preload.d.ts",
27
+ "import": "./dist/adapters/electron/preload.js",
28
+ "default": "./dist/adapters/electron/preload.js"
29
+ },
30
+ "./sync": {
31
+ "types": "./dist/features/sync/index.d.ts",
32
+ "import": "./dist/features/sync/index.js",
33
+ "default": "./dist/features/sync/index.js"
34
+ },
20
35
  "./package.json": "./package.json"
21
36
  },
22
37
  "files": [
@@ -74,6 +89,7 @@
74
89
  "sideEffects": false,
75
90
  "devDependencies": {
76
91
  "@aws-sdk/client-s3": "^3.709.0",
92
+ "electron": "^33.0.0",
77
93
  "@semantic-release/changelog": "^6.0.3",
78
94
  "@semantic-release/commit-analyzer": "^13.0.0",
79
95
  "@semantic-release/git": "^10.0.1",
@@ -106,6 +122,7 @@
106
122
  "@aws-sdk/client-s3": "^3.0.0",
107
123
  "@capacitor-community/sqlite": "^6.0.0",
108
124
  "better-sqlite3": "^12.0.0",
125
+ "electron": ">=20.0.0",
109
126
  "pg": "^8.13.1"
110
127
  },
111
128
  "peerDependenciesMeta": {
@@ -118,6 +135,9 @@
118
135
  "better-sqlite3": {
119
136
  "optional": true
120
137
  },
138
+ "electron": {
139
+ "optional": true
140
+ },
121
141
  "pg": {
122
142
  "optional": true
123
143
  }