@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,339 @@
1
+ /**
2
+ * Electron Renderer Process Storage Adapter.
3
+ *
4
+ * Provides the same StorageAdapter interface to renderer processes
5
+ * by proxying all operations to the main process via IPC.
6
+ *
7
+ * ## Architecture
8
+ * This adapter runs in renderer processes and communicates with
9
+ * ElectronMainAdapter in the main process via the preload script API.
10
+ *
11
+ * ## Requirements
12
+ * - Preload script must be loaded and expose `window.sqlStorage`
13
+ * - Main process must have ElectronMainAdapter initialized
14
+ *
15
+ * ## Usage
16
+ * ```typescript
17
+ * import { createElectronRendererAdapter } from '@framers/sql-storage-adapter/electron';
18
+ *
19
+ * const db = createElectronRendererAdapter({
20
+ * onDatabaseChange: (change) => {
21
+ * console.log('Database changed:', change);
22
+ * // React to changes from other windows
23
+ * },
24
+ * });
25
+ *
26
+ * await db.open();
27
+ * const users = await db.all('SELECT * FROM users');
28
+ * ```
29
+ */
30
+ // ============================================================================
31
+ // Electron Renderer Adapter
32
+ // ============================================================================
33
+ /**
34
+ * Storage adapter for Electron renderer processes.
35
+ *
36
+ * Proxies all database operations to the main process via IPC.
37
+ * Implements the same StorageAdapter interface as other adapters.
38
+ */
39
+ export class ElectronRendererAdapter {
40
+ constructor(options = {}) {
41
+ this.kind = 'electron-renderer';
42
+ this.eventUnsubscribers = [];
43
+ this.isInitialized = false;
44
+ this.cachedCapabilities = [];
45
+ this.options = options;
46
+ // Default capabilities - will be updated after connecting to main process
47
+ this.capabilities = new Set([
48
+ 'transactions',
49
+ 'persistence',
50
+ 'batch',
51
+ ]);
52
+ }
53
+ // ============================================================================
54
+ // Private Helpers
55
+ // ============================================================================
56
+ /**
57
+ * Get the preload API, throwing if not available.
58
+ */
59
+ getApi() {
60
+ if (typeof window === 'undefined' || !window.sqlStorage) {
61
+ throw new Error('[ElectronRendererAdapter] window.sqlStorage not available. ' +
62
+ 'Ensure the preload script is loaded and contextBridge is properly configured.');
63
+ }
64
+ return window.sqlStorage;
65
+ }
66
+ /**
67
+ * Log a message if verbose mode is enabled.
68
+ */
69
+ log(message) {
70
+ if (this.options.verbose) {
71
+ console.log(`[ElectronRendererAdapter] ${message}`);
72
+ }
73
+ }
74
+ // ============================================================================
75
+ // Lifecycle Methods
76
+ // ============================================================================
77
+ /**
78
+ * Open connection to the database via main process.
79
+ */
80
+ async open(options) {
81
+ if (this.isInitialized) {
82
+ this.log('Already initialized, skipping open()');
83
+ return;
84
+ }
85
+ const api = this.getApi();
86
+ // Open connection
87
+ await api.open(options);
88
+ // Fetch actual capabilities from main process
89
+ this.cachedCapabilities = await api.getCapabilities();
90
+ this.capabilities = new Set(this.cachedCapabilities);
91
+ // Subscribe to events
92
+ this.subscribeToEvents();
93
+ this.isInitialized = true;
94
+ this.log('Connected to main process');
95
+ }
96
+ /**
97
+ * Close connection.
98
+ */
99
+ async close() {
100
+ if (!this.isInitialized) {
101
+ return;
102
+ }
103
+ // Unsubscribe from events
104
+ for (const unsubscribe of this.eventUnsubscribers) {
105
+ unsubscribe();
106
+ }
107
+ this.eventUnsubscribers = [];
108
+ // Note: We don't actually close the database here since that would
109
+ // affect all other renderer processes. The main process owns the connection.
110
+ this.isInitialized = false;
111
+ this.log('Disconnected from main process');
112
+ }
113
+ /**
114
+ * Subscribe to database events from main process.
115
+ */
116
+ subscribeToEvents() {
117
+ const api = this.getApi();
118
+ // Database change events
119
+ if (this.options.onDatabaseChange) {
120
+ const unsubscribe = api.onDatabaseChange(this.options.onDatabaseChange);
121
+ this.eventUnsubscribers.push(unsubscribe);
122
+ }
123
+ // Sync events
124
+ if (this.options.onSyncProgress) {
125
+ const unsubscribe = api.onSyncProgress(this.options.onSyncProgress);
126
+ this.eventUnsubscribers.push(unsubscribe);
127
+ }
128
+ if (this.options.onSyncComplete) {
129
+ const unsubscribe = api.onSyncComplete(this.options.onSyncComplete);
130
+ this.eventUnsubscribers.push(unsubscribe);
131
+ }
132
+ if (this.options.onSyncError) {
133
+ const unsubscribe = api.onSyncError(this.options.onSyncError);
134
+ this.eventUnsubscribers.push(unsubscribe);
135
+ }
136
+ }
137
+ // ============================================================================
138
+ // Storage Adapter Interface
139
+ // ============================================================================
140
+ /**
141
+ * Execute a mutation statement (INSERT, UPDATE, DELETE).
142
+ */
143
+ async run(statement, parameters) {
144
+ this.assertOpen();
145
+ return this.getApi().run(statement, parameters);
146
+ }
147
+ /**
148
+ * Get a single row.
149
+ */
150
+ async get(statement, parameters) {
151
+ this.assertOpen();
152
+ return this.getApi().get(statement, parameters);
153
+ }
154
+ /**
155
+ * Get all matching rows.
156
+ */
157
+ async all(statement, parameters) {
158
+ this.assertOpen();
159
+ return this.getApi().all(statement, parameters);
160
+ }
161
+ /**
162
+ * Execute a SQL script.
163
+ */
164
+ async exec(script) {
165
+ this.assertOpen();
166
+ return this.getApi().exec(script);
167
+ }
168
+ /**
169
+ * Execute operations within a transaction.
170
+ */
171
+ async transaction(fn) {
172
+ this.assertOpen();
173
+ // Create a transaction proxy adapter
174
+ const trxAdapter = new TransactionProxyAdapter(this.getApi());
175
+ return this.getApi().transaction(async (trx) => {
176
+ // The trx object from preload provides run/get/all
177
+ // We need to wrap it to match StorageAdapter interface
178
+ const wrappedTrx = {
179
+ kind: 'electron-renderer-transaction',
180
+ capabilities: this.capabilities,
181
+ open: async () => { },
182
+ close: async () => { },
183
+ run: trx.run,
184
+ get: trx.get,
185
+ all: trx.all,
186
+ exec: async () => { throw new Error('exec not supported in transaction'); },
187
+ transaction: async () => { throw new Error('Nested transactions not supported'); },
188
+ };
189
+ return fn(wrappedTrx);
190
+ });
191
+ }
192
+ /**
193
+ * Execute batch operations.
194
+ */
195
+ async batch(operations) {
196
+ this.assertOpen();
197
+ return this.getApi().batch(operations);
198
+ }
199
+ /**
200
+ * Prepared statements are not directly supported in renderer.
201
+ * Use the main process adapter for prepared statements.
202
+ */
203
+ prepare(_statement) {
204
+ throw new Error('Prepared statements not supported in renderer process. Use transactions instead.');
205
+ }
206
+ // ============================================================================
207
+ // Sync Operations
208
+ // ============================================================================
209
+ /**
210
+ * Get current sync status.
211
+ */
212
+ async getSyncStatus() {
213
+ this.assertOpen();
214
+ return this.getApi().getSyncStatus();
215
+ }
216
+ /**
217
+ * Trigger a manual sync.
218
+ */
219
+ async triggerSync() {
220
+ this.assertOpen();
221
+ return this.getApi().triggerSync();
222
+ }
223
+ // ============================================================================
224
+ // Utility Methods
225
+ // ============================================================================
226
+ /**
227
+ * Assert that the adapter is open.
228
+ */
229
+ assertOpen() {
230
+ if (!this.isInitialized) {
231
+ throw new Error('[ElectronRendererAdapter] Adapter not open. Call open() first.');
232
+ }
233
+ }
234
+ /**
235
+ * Check if the adapter is open.
236
+ */
237
+ isOpen() {
238
+ return this.isInitialized;
239
+ }
240
+ /**
241
+ * Check if the main process database is open.
242
+ */
243
+ async isMainProcessOpen() {
244
+ try {
245
+ return await this.getApi().isOpen();
246
+ }
247
+ catch {
248
+ return false;
249
+ }
250
+ }
251
+ /**
252
+ * Add an event listener for database changes.
253
+ */
254
+ onDatabaseChange(callback) {
255
+ const unsubscribe = this.getApi().onDatabaseChange(callback);
256
+ this.eventUnsubscribers.push(unsubscribe);
257
+ return unsubscribe;
258
+ }
259
+ }
260
+ // ============================================================================
261
+ // Transaction Proxy Adapter
262
+ // ============================================================================
263
+ /**
264
+ * Internal adapter used during transactions.
265
+ */
266
+ class TransactionProxyAdapter {
267
+ constructor(api) {
268
+ this.api = api;
269
+ this.kind = 'electron-renderer-transaction';
270
+ this.capabilities = new Set();
271
+ }
272
+ async open() {
273
+ // No-op: Transaction doesn't need to be opened
274
+ }
275
+ async close() {
276
+ // No-op: Transaction is closed by commit/rollback
277
+ }
278
+ async run(statement, parameters) {
279
+ return this.api.run(statement, parameters);
280
+ }
281
+ async get(statement, parameters) {
282
+ return this.api.get(statement, parameters);
283
+ }
284
+ async all(statement, parameters) {
285
+ return this.api.all(statement, parameters);
286
+ }
287
+ async exec(_script) {
288
+ throw new Error('exec not supported within transactions from renderer');
289
+ }
290
+ async transaction(_fn) {
291
+ throw new Error('Nested transactions not supported');
292
+ }
293
+ async batch(_operations) {
294
+ throw new Error('Batch operations not supported within transactions from renderer');
295
+ }
296
+ }
297
+ // ============================================================================
298
+ // Factory Function
299
+ // ============================================================================
300
+ /**
301
+ * Create an Electron Renderer Process Storage Adapter.
302
+ *
303
+ * This adapter proxies all database operations to the main process
304
+ * via IPC. Use it in renderer processes to access the shared database.
305
+ *
306
+ * @param options - Adapter configuration
307
+ * @returns ElectronRendererAdapter instance
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * const db = createElectronRendererAdapter({
312
+ * onDatabaseChange: (change) => {
313
+ * console.log('Database changed:', change);
314
+ * // Refresh data or invalidate caches
315
+ * },
316
+ * });
317
+ *
318
+ * await db.open();
319
+ * const users = await db.all('SELECT * FROM users');
320
+ * ```
321
+ */
322
+ export function createElectronRendererAdapter(options = {}) {
323
+ return new ElectronRendererAdapter(options);
324
+ }
325
+ /**
326
+ * Helper to detect if running in Electron renderer.
327
+ */
328
+ export function isElectronRenderer() {
329
+ return typeof window !== 'undefined' &&
330
+ typeof window.process === 'object' &&
331
+ window.process?.type === 'renderer';
332
+ }
333
+ /**
334
+ * Helper to check if preload API is available.
335
+ */
336
+ export function isPreloadApiAvailable() {
337
+ return typeof window !== 'undefined' && !!window.sqlStorage;
338
+ }
339
+ //# sourceMappingURL=electronRendererAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electronRendererAdapter.js","sourceRoot":"","sources":["../../../src/adapters/electron/electronRendererAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Electron Storage Adapter Module.
3
+ *
4
+ * Provides database access for Electron applications with:
5
+ * - Main process adapter (owns the database connection)
6
+ * - Renderer process adapter (IPC proxy to main)
7
+ * - Preload script for secure IPC bridge
8
+ * - WAL management and crash recovery
9
+ * - Multi-window change broadcasting
10
+ *
11
+ * ## Quick Start
12
+ *
13
+ * ### Main Process (main.ts)
14
+ * ```typescript
15
+ * import { createElectronMainAdapter } from '@framers/sql-storage-adapter/electron';
16
+ * import { app } from 'electron';
17
+ * import path from 'path';
18
+ *
19
+ * const db = createElectronMainAdapter({
20
+ * filePath: path.join(app.getPath('userData'), 'app.db'),
21
+ * wal: { enabled: true },
22
+ * recovery: { checkOnOpen: true },
23
+ * });
24
+ *
25
+ * app.whenReady().then(async () => {
26
+ * await db.open();
27
+ * // Database ready for use
28
+ * });
29
+ * ```
30
+ *
31
+ * ### BrowserWindow Configuration
32
+ * ```typescript
33
+ * new BrowserWindow({
34
+ * webPreferences: {
35
+ * preload: path.join(__dirname, 'preload.js'),
36
+ * contextIsolation: true,
37
+ * nodeIntegration: false,
38
+ * }
39
+ * });
40
+ * ```
41
+ *
42
+ * ### Preload Script (preload.ts)
43
+ * ```typescript
44
+ * // Just import the preload module - it auto-registers
45
+ * import '@framers/sql-storage-adapter/electron/preload';
46
+ * ```
47
+ *
48
+ * ### Renderer Process
49
+ * ```typescript
50
+ * import { createElectronRendererAdapter } from '@framers/sql-storage-adapter/electron';
51
+ *
52
+ * const db = createElectronRendererAdapter({
53
+ * onDatabaseChange: (change) => {
54
+ * console.log('Database changed:', change);
55
+ * },
56
+ * });
57
+ *
58
+ * await db.open();
59
+ * const users = await db.all('SELECT * FROM users');
60
+ * ```
61
+ *
62
+ * @packageDocumentation
63
+ */
64
+ export { ElectronMainAdapter, createElectronMainAdapter, type ElectronMainAdapterOptions, type WalConfig, type RecoveryConfig, type MigrationConfig, type BackupConfig, type CloudBackupProvider, type MultiWindowConfig, } from './electronMainAdapter';
65
+ export { ElectronRendererAdapter, createElectronRendererAdapter, isElectronRenderer, isPreloadApiAvailable, type ElectronRendererAdapterOptions, } from './electronRendererAdapter';
66
+ export { sqlStorageApi, type SqlStorageApi, } from './preload';
67
+ export { IPC_CHANNELS, DB_CHANNELS, TRANSACTION_CHANNELS, SYNC_CHANNELS, BACKUP_CHANNELS, RECOVERY_CHANNELS, MIGRATION_CHANNELS, BROADCAST_CHANNELS, type IpcChannel, } from './ipc/channels';
68
+ export type { IpcRequest, IpcResponse, IpcError, SqlOperationPayload, ExecPayload, BatchPayload, OpenPayload, TransactionContext, TransactionOperationPayload, SyncStatus, BackupInfo, DbChangeEvent, ConnectionStateEvent, IntegrityCheckResult, WalCheckpointResult, MigrationStatus, } from './ipc/types';
69
+ export { IpcProtocolManager, protocolManager, initializeIpcProtocol, disposeIpcProtocol, } from './ipc/protocol';
70
+ export { WalCheckpointManager, createWalCheckpointManager, type WalCheckpointConfig, type CheckpointStrategy, type CheckpointResult, type WalStatus, CorruptionDetector, createCorruptionDetector, type CorruptionDetectorConfig, type IntegrityCheckLevel, type IntegrityCheckResult as RecoveryIntegrityCheckResult, type CorruptionIssue, type RepairStrategy, type RepairResult, } from './recovery';
71
+ export { AutoMigrator, createAutoMigrator, type AutoMigratorConfig, type MigrationFile, type AppliedMigration, type MigrationResult, } from './migration';
72
+ export { WindowManager, createWindowManager, type WindowManagerConfig, type WindowManagerCallbacks, type RegisteredWindow, } from './window';
73
+ export type { StorageAdapter, StorageCapability, StorageOpenOptions, StorageParameters, StorageRunResult, BatchOperation, BatchResult, } from '../../core/contracts';
74
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/electron/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAMH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,8BAA8B,GACpC,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EACL,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAMnB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,2BAA2B,EAC3B,UAAU,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,IAAI,4BAA4B,EACzD,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAMlB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Electron Storage Adapter Module.
3
+ *
4
+ * Provides database access for Electron applications with:
5
+ * - Main process adapter (owns the database connection)
6
+ * - Renderer process adapter (IPC proxy to main)
7
+ * - Preload script for secure IPC bridge
8
+ * - WAL management and crash recovery
9
+ * - Multi-window change broadcasting
10
+ *
11
+ * ## Quick Start
12
+ *
13
+ * ### Main Process (main.ts)
14
+ * ```typescript
15
+ * import { createElectronMainAdapter } from '@framers/sql-storage-adapter/electron';
16
+ * import { app } from 'electron';
17
+ * import path from 'path';
18
+ *
19
+ * const db = createElectronMainAdapter({
20
+ * filePath: path.join(app.getPath('userData'), 'app.db'),
21
+ * wal: { enabled: true },
22
+ * recovery: { checkOnOpen: true },
23
+ * });
24
+ *
25
+ * app.whenReady().then(async () => {
26
+ * await db.open();
27
+ * // Database ready for use
28
+ * });
29
+ * ```
30
+ *
31
+ * ### BrowserWindow Configuration
32
+ * ```typescript
33
+ * new BrowserWindow({
34
+ * webPreferences: {
35
+ * preload: path.join(__dirname, 'preload.js'),
36
+ * contextIsolation: true,
37
+ * nodeIntegration: false,
38
+ * }
39
+ * });
40
+ * ```
41
+ *
42
+ * ### Preload Script (preload.ts)
43
+ * ```typescript
44
+ * // Just import the preload module - it auto-registers
45
+ * import '@framers/sql-storage-adapter/electron/preload';
46
+ * ```
47
+ *
48
+ * ### Renderer Process
49
+ * ```typescript
50
+ * import { createElectronRendererAdapter } from '@framers/sql-storage-adapter/electron';
51
+ *
52
+ * const db = createElectronRendererAdapter({
53
+ * onDatabaseChange: (change) => {
54
+ * console.log('Database changed:', change);
55
+ * },
56
+ * });
57
+ *
58
+ * await db.open();
59
+ * const users = await db.all('SELECT * FROM users');
60
+ * ```
61
+ *
62
+ * @packageDocumentation
63
+ */
64
+ // ============================================================================
65
+ // Main Process Exports
66
+ // ============================================================================
67
+ export { ElectronMainAdapter, createElectronMainAdapter, } from './electronMainAdapter.js';
68
+ // ============================================================================
69
+ // Renderer Process Exports
70
+ // ============================================================================
71
+ export { ElectronRendererAdapter, createElectronRendererAdapter, isElectronRenderer, isPreloadApiAvailable, } from './electronRendererAdapter.js';
72
+ // ============================================================================
73
+ // Preload Script Exports
74
+ // ============================================================================
75
+ export { sqlStorageApi, } from './preload.js';
76
+ // ============================================================================
77
+ // IPC Types & Channels
78
+ // ============================================================================
79
+ export { IPC_CHANNELS, DB_CHANNELS, TRANSACTION_CHANNELS, SYNC_CHANNELS, BACKUP_CHANNELS, RECOVERY_CHANNELS, MIGRATION_CHANNELS, BROADCAST_CHANNELS, } from './ipc/channels.js';
80
+ // ============================================================================
81
+ // Protocol (Main Process Only)
82
+ // ============================================================================
83
+ export { IpcProtocolManager, protocolManager, initializeIpcProtocol, disposeIpcProtocol, } from './ipc/protocol.js';
84
+ // ============================================================================
85
+ // Recovery Module
86
+ // ============================================================================
87
+ export { WalCheckpointManager, createWalCheckpointManager, CorruptionDetector, createCorruptionDetector, } from './recovery/index.js';
88
+ // ============================================================================
89
+ // Migration Module
90
+ // ============================================================================
91
+ export { AutoMigrator, createAutoMigrator, } from './migration/index.js';
92
+ // ============================================================================
93
+ // Window Management Module
94
+ // ============================================================================
95
+ export { WindowManager, createWindowManager, } from './window/index.js';
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/electron/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAQ1B,MAAM,uBAAuB,CAAC;AAE/B,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,GAEtB,MAAM,2BAA2B,CAAC;AAEnC,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,OAAO,EACL,aAAa,GAEd,MAAM,WAAW,CAAC;AAEnB,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AAqBxB,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAK1B,kBAAkB,EAClB,wBAAwB,GAOzB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,OAAO,EACL,YAAY,EACZ,kBAAkB,GAKnB,MAAM,aAAa,CAAC;AAErB,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,OAAO,EACL,aAAa,EACb,mBAAmB,GAIpB,MAAM,UAAU,CAAC"}