@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.
- package/README.md +94 -2
- package/dist/adapters/electron/electronMainAdapter.d.ts +241 -0
- package/dist/adapters/electron/electronMainAdapter.d.ts.map +1 -0
- package/dist/adapters/electron/electronMainAdapter.js +442 -0
- package/dist/adapters/electron/electronMainAdapter.js.map +1 -0
- package/dist/adapters/electron/electronRendererAdapter.d.ts +177 -0
- package/dist/adapters/electron/electronRendererAdapter.d.ts.map +1 -0
- package/dist/adapters/electron/electronRendererAdapter.js +339 -0
- package/dist/adapters/electron/electronRendererAdapter.js.map +1 -0
- package/dist/adapters/electron/index.d.ts +74 -0
- package/dist/adapters/electron/index.d.ts.map +1 -0
- package/dist/adapters/electron/index.js +96 -0
- package/dist/adapters/electron/index.js.map +1 -0
- package/dist/adapters/electron/ipc/channels.d.ts +196 -0
- package/dist/adapters/electron/ipc/channels.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/channels.js +121 -0
- package/dist/adapters/electron/ipc/channels.js.map +1 -0
- package/dist/adapters/electron/ipc/index.d.ts +11 -0
- package/dist/adapters/electron/ipc/index.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/index.js +11 -0
- package/dist/adapters/electron/ipc/index.js.map +1 -0
- package/dist/adapters/electron/ipc/protocol.d.ts +78 -0
- package/dist/adapters/electron/ipc/protocol.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/protocol.js +347 -0
- package/dist/adapters/electron/ipc/protocol.js.map +1 -0
- package/dist/adapters/electron/ipc/types.d.ts +248 -0
- package/dist/adapters/electron/ipc/types.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/types.js +8 -0
- package/dist/adapters/electron/ipc/types.js.map +1 -0
- package/dist/adapters/electron/migration/autoMigrator.d.ts +184 -0
- package/dist/adapters/electron/migration/autoMigrator.d.ts.map +1 -0
- package/dist/adapters/electron/migration/autoMigrator.js +478 -0
- package/dist/adapters/electron/migration/autoMigrator.js.map +1 -0
- package/dist/adapters/electron/migration/index.d.ts +9 -0
- package/dist/adapters/electron/migration/index.d.ts.map +1 -0
- package/dist/adapters/electron/migration/index.js +9 -0
- package/dist/adapters/electron/migration/index.js.map +1 -0
- package/dist/adapters/electron/preload.d.ts +126 -0
- package/dist/adapters/electron/preload.d.ts.map +1 -0
- package/dist/adapters/electron/preload.js +254 -0
- package/dist/adapters/electron/preload.js.map +1 -0
- package/dist/adapters/electron/recovery/corruptionDetector.d.ts +214 -0
- package/dist/adapters/electron/recovery/corruptionDetector.d.ts.map +1 -0
- package/dist/adapters/electron/recovery/corruptionDetector.js +410 -0
- package/dist/adapters/electron/recovery/corruptionDetector.js.map +1 -0
- package/dist/adapters/electron/recovery/index.d.ts +11 -0
- package/dist/adapters/electron/recovery/index.d.ts.map +1 -0
- package/dist/adapters/electron/recovery/index.js +11 -0
- package/dist/adapters/electron/recovery/index.js.map +1 -0
- package/dist/adapters/electron/recovery/walCheckpoint.d.ts +186 -0
- package/dist/adapters/electron/recovery/walCheckpoint.d.ts.map +1 -0
- package/dist/adapters/electron/recovery/walCheckpoint.js +302 -0
- package/dist/adapters/electron/recovery/walCheckpoint.js.map +1 -0
- package/dist/adapters/electron/window/index.d.ts +9 -0
- package/dist/adapters/electron/window/index.d.ts.map +1 -0
- package/dist/adapters/electron/window/index.js +9 -0
- package/dist/adapters/electron/window/index.js.map +1 -0
- package/dist/adapters/electron/window/windowManager.d.ts +190 -0
- package/dist/adapters/electron/window/windowManager.d.ts.map +1 -0
- package/dist/adapters/electron/window/windowManager.js +358 -0
- package/dist/adapters/electron/window/windowManager.js.map +1 -0
- package/dist/core/contracts/context.d.ts +2 -2
- package/dist/core/contracts/context.d.ts.map +1 -1
- package/dist/core/database.d.ts +19 -0
- package/dist/core/database.d.ts.map +1 -1
- package/dist/core/database.js +4 -0
- package/dist/core/database.js.map +1 -1
- package/dist/core/resolver.d.ts +3 -0
- package/dist/core/resolver.d.ts.map +1 -1
- package/dist/core/resolver.js +39 -3
- package/dist/core/resolver.js.map +1 -1
- package/dist/features/sync/conflicts/conflictResolver.d.ts +222 -0
- package/dist/features/sync/conflicts/conflictResolver.d.ts.map +1 -0
- package/dist/features/sync/conflicts/conflictResolver.js +396 -0
- package/dist/features/sync/conflicts/conflictResolver.js.map +1 -0
- package/dist/features/sync/conflicts/index.d.ts +9 -0
- package/dist/features/sync/conflicts/index.d.ts.map +1 -0
- package/dist/features/sync/conflicts/index.js +9 -0
- package/dist/features/sync/conflicts/index.js.map +1 -0
- package/dist/features/sync/crossPlatformSync.d.ts +281 -0
- package/dist/features/sync/crossPlatformSync.d.ts.map +1 -0
- package/dist/features/sync/crossPlatformSync.js +623 -0
- package/dist/features/sync/crossPlatformSync.js.map +1 -0
- package/dist/features/sync/devices/deviceManager.d.ts +243 -0
- package/dist/features/sync/devices/deviceManager.d.ts.map +1 -0
- package/dist/features/sync/devices/deviceManager.js +494 -0
- package/dist/features/sync/devices/deviceManager.js.map +1 -0
- package/dist/features/sync/devices/index.d.ts +10 -0
- package/dist/features/sync/devices/index.d.ts.map +1 -0
- package/dist/features/sync/devices/index.js +10 -0
- package/dist/features/sync/devices/index.js.map +1 -0
- package/dist/features/sync/index.d.ts +37 -0
- package/dist/features/sync/index.d.ts.map +1 -0
- package/dist/features/sync/index.js +47 -0
- package/dist/features/sync/index.js.map +1 -0
- package/dist/features/sync/protocol/index.d.ts +11 -0
- package/dist/features/sync/protocol/index.d.ts.map +1 -0
- package/dist/features/sync/protocol/index.js +11 -0
- package/dist/features/sync/protocol/index.js.map +1 -0
- package/dist/features/sync/protocol/messages.d.ts +348 -0
- package/dist/features/sync/protocol/messages.d.ts.map +1 -0
- package/dist/features/sync/protocol/messages.js +216 -0
- package/dist/features/sync/protocol/messages.js.map +1 -0
- package/dist/features/sync/protocol/vectorClock.d.ts +164 -0
- package/dist/features/sync/protocol/vectorClock.d.ts.map +1 -0
- package/dist/features/sync/protocol/vectorClock.js +286 -0
- package/dist/features/sync/protocol/vectorClock.js.map +1 -0
- package/dist/features/sync/tables/index.d.ts +10 -0
- package/dist/features/sync/tables/index.d.ts.map +1 -0
- package/dist/features/sync/tables/index.js +10 -0
- package/dist/features/sync/tables/index.js.map +1 -0
- package/dist/features/sync/tables/syncLogManager.d.ts +216 -0
- package/dist/features/sync/tables/syncLogManager.d.ts.map +1 -0
- package/dist/features/sync/tables/syncLogManager.js +456 -0
- package/dist/features/sync/tables/syncLogManager.js.map +1 -0
- package/dist/features/sync/transport/httpTransport.d.ts +123 -0
- package/dist/features/sync/transport/httpTransport.d.ts.map +1 -0
- package/dist/features/sync/transport/httpTransport.js +380 -0
- package/dist/features/sync/transport/httpTransport.js.map +1 -0
- package/dist/features/sync/transport/index.d.ts +12 -0
- package/dist/features/sync/transport/index.d.ts.map +1 -0
- package/dist/features/sync/transport/index.js +12 -0
- package/dist/features/sync/transport/index.js.map +1 -0
- package/dist/features/sync/transport/transport.d.ts +259 -0
- package/dist/features/sync/transport/transport.d.ts.map +1 -0
- package/dist/features/sync/transport/transport.js +153 -0
- package/dist/features/sync/transport/transport.js.map +1 -0
- package/dist/features/sync/transport/websocketTransport.d.ts +126 -0
- package/dist/features/sync/transport/websocketTransport.d.ts.map +1 -0
- package/dist/features/sync/transport/websocketTransport.js +374 -0
- package/dist/features/sync/transport/websocketTransport.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- 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"}
|