mongolite-ts 0.6.0 → 0.7.2

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.
@@ -1,128 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- import { DocumentWithId, Filter, UpdateFilter, InsertOneResult, UpdateResult, DeleteResult } from '../types.js';
3
- /**
4
- * Interface for MongoDB operations that can be performed
5
- */
6
- interface MongoDBOperation<T extends DocumentWithId = DocumentWithId> {
7
- type: 'insert' | 'update' | 'delete' | 'find';
8
- collection: string;
9
- data?: Partial<T> | Partial<T>[];
10
- filter?: Filter<T>;
11
- update?: UpdateFilter<T>;
12
- options?: Record<string, unknown>;
13
- timestamp: Date;
14
- localId?: string;
15
- }
16
- /**
17
- * Configuration options for the MongoDB sync plugin
18
- */
19
- export interface MongoDBSyncOptions {
20
- /** MongoDB connection string */
21
- connectionString: string;
22
- /** Database name to sync to (if different from local) */
23
- databaseName?: string;
24
- /** Whether to enable dirty reads from MongoDB */
25
- enableDirtyReads?: boolean;
26
- /** Retry configuration for failed operations */
27
- retryConfig?: {
28
- maxRetries?: number;
29
- initialDelayMs?: number;
30
- maxDelayMs?: number;
31
- };
32
- /** Whether to enable verbose logging */
33
- verbose?: boolean;
34
- /** Batch size for operations */
35
- batchSize?: number;
36
- /** Queue timeout for batching operations */
37
- queueTimeoutMs?: number;
38
- }
39
- /**
40
- * Result of a sync operation
41
- */
42
- export interface SyncResult {
43
- success: boolean;
44
- operation: MongoDBOperation;
45
- error?: Error;
46
- mongodbResult?: unknown;
47
- }
48
- /**
49
- * MongoDB Cloud Sync Plugin
50
- *
51
- * This plugin provides optional synchronization between MongoLite and MongoDB Cloud.
52
- * It hooks into MongoLite operations and replicates them to a MongoDB instance.
53
- */
54
- export declare class MongoDBSyncPlugin extends EventEmitter {
55
- private options;
56
- private operationQueue;
57
- private isProcessing;
58
- private queueTimer;
59
- private mongoClient;
60
- private mongoDb;
61
- private isConnected;
62
- constructor(options: MongoDBSyncOptions);
63
- /**
64
- * Initialize connection to MongoDB Cloud
65
- */
66
- initialize(): Promise<void>;
67
- /**
68
- * Disconnect from MongoDB
69
- */
70
- disconnect(): Promise<void>;
71
- /**
72
- * Check if the plugin is connected to MongoDB
73
- */
74
- get connected(): boolean;
75
- /**
76
- * Hook for insert operations
77
- */
78
- onInsert<T extends DocumentWithId>(collection: string, document: Partial<T>, result: InsertOneResult): Promise<void>;
79
- /**
80
- * Hook for update operations
81
- */
82
- onUpdate<T extends DocumentWithId>(collection: string, filter: Filter<T>, update: UpdateFilter<T>, _result: UpdateResult): Promise<void>;
83
- /**
84
- * Hook for delete operations
85
- */
86
- onDelete<T extends DocumentWithId>(collection: string, filter: Filter<T>, _result: DeleteResult): Promise<void>;
87
- /**
88
- * Perform a dirty read from MongoDB (optional functionality)
89
- */
90
- getDirtyRead<T>(collection: string, filter?: Record<string, unknown>): Promise<T[]>;
91
- /**
92
- * Queue an operation for batch processing
93
- */
94
- private queueOperation;
95
- /**
96
- * Process the operation queue
97
- */
98
- private processQueue;
99
- /**
100
- * Process a batch of operations
101
- */
102
- private processBatch;
103
- /**
104
- * Execute a single operation on MongoDB
105
- */
106
- private executeOperation;
107
- /**
108
- * Get queue status
109
- */
110
- getQueueStatus(): {
111
- queueLength: number;
112
- isProcessing: boolean;
113
- isConnected: boolean;
114
- };
115
- /**
116
- * Flush the queue (process immediately)
117
- */
118
- flush(): Promise<void>;
119
- /**
120
- * Log messages if verbose mode is enabled
121
- */
122
- private log;
123
- }
124
- /**
125
- * Factory function to create and initialize a MongoDB sync plugin
126
- */
127
- export declare function createMongoDBSyncPlugin(options: MongoDBSyncOptions): Promise<MongoDBSyncPlugin>;
128
- export {};
@@ -1,339 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- /**
3
- * MongoDB Cloud Sync Plugin
4
- *
5
- * This plugin provides optional synchronization between MongoLite and MongoDB Cloud.
6
- * It hooks into MongoLite operations and replicates them to a MongoDB instance.
7
- */
8
- export class MongoDBSyncPlugin extends EventEmitter {
9
- constructor(options) {
10
- super();
11
- this.operationQueue = [];
12
- this.isProcessing = false;
13
- this.queueTimer = null;
14
- this.mongoClient = null;
15
- this.mongoDb = null;
16
- this.isConnected = false;
17
- this.options = {
18
- connectionString: options.connectionString,
19
- databaseName: options.databaseName || 'mongolite_sync',
20
- enableDirtyReads: options.enableDirtyReads || false,
21
- retryConfig: {
22
- maxRetries: 3,
23
- initialDelayMs: 1000,
24
- maxDelayMs: 10000,
25
- ...options.retryConfig,
26
- },
27
- verbose: options.verbose || false,
28
- batchSize: options.batchSize || 100,
29
- queueTimeoutMs: options.queueTimeoutMs || 1000,
30
- };
31
- this.log('MongoDB Sync Plugin initialized');
32
- }
33
- /**
34
- * Initialize connection to MongoDB Cloud
35
- */
36
- async initialize() {
37
- try {
38
- // Dynamically import MongoDB driver to avoid making it a required dependency
39
- let mongodb;
40
- try {
41
- // Use eval to avoid TypeScript module resolution at compile time
42
- mongodb = await eval('import("mongodb")');
43
- }
44
- catch (error) {
45
- throw new Error('MongoDB driver not found. Install it with: npm install mongodb');
46
- }
47
- const mongoModule = mongodb;
48
- const MongoClient = mongoModule.MongoClient;
49
- this.mongoClient = new MongoClient(this.options.connectionString);
50
- await this.mongoClient.connect();
51
- this.mongoDb = this.mongoClient.db(this.options.databaseName);
52
- this.isConnected = true;
53
- this.log('Connected to MongoDB Cloud');
54
- this.emit('connected');
55
- }
56
- catch (error) {
57
- this.log('Failed to connect to MongoDB:', error);
58
- this.emit('error', {
59
- type: 'connection_error',
60
- error: error instanceof Error ? error.message : 'Unknown error',
61
- });
62
- throw error;
63
- }
64
- }
65
- /**
66
- * Disconnect from MongoDB
67
- */
68
- async disconnect() {
69
- if (this.queueTimer) {
70
- clearTimeout(this.queueTimer);
71
- this.queueTimer = null;
72
- }
73
- // Process any remaining operations
74
- if (this.operationQueue.length > 0) {
75
- await this.processQueue();
76
- }
77
- if (this.mongoClient) {
78
- await this.mongoClient.close();
79
- this.mongoClient = null;
80
- this.mongoDb = null;
81
- this.isConnected = false;
82
- this.log('Disconnected from MongoDB Cloud');
83
- this.emit('disconnected');
84
- }
85
- }
86
- /**
87
- * Check if the plugin is connected to MongoDB
88
- */
89
- get connected() {
90
- return this.isConnected;
91
- }
92
- /**
93
- * Hook for insert operations
94
- */
95
- async onInsert(collection, document, result) {
96
- const operation = {
97
- type: 'insert',
98
- collection,
99
- data: { ...document, _id: result.insertedId },
100
- timestamp: new Date(),
101
- localId: result.insertedId,
102
- };
103
- await this.queueOperation(operation);
104
- }
105
- /**
106
- * Hook for update operations
107
- */
108
- async onUpdate(collection, filter, update, _result) {
109
- const operation = {
110
- type: 'update',
111
- collection,
112
- filter,
113
- update,
114
- timestamp: new Date(),
115
- };
116
- await this.queueOperation(operation);
117
- }
118
- /**
119
- * Hook for delete operations
120
- */
121
- async onDelete(collection, filter, _result) {
122
- const operation = {
123
- type: 'delete',
124
- collection,
125
- filter,
126
- timestamp: new Date(),
127
- };
128
- await this.queueOperation(operation);
129
- }
130
- /**
131
- * Perform a dirty read from MongoDB (optional functionality)
132
- */
133
- async getDirtyRead(collection, filter) {
134
- if (!this.isConnected || !this.mongoDb) {
135
- throw new Error('MongoDB sync is not initialized or not connected');
136
- }
137
- try {
138
- const mongoCollection = this.mongoDb.collection(collection);
139
- const results = await mongoCollection.find(filter || {}).toArray();
140
- // Transform results and type cast with validation
141
- return results;
142
- }
143
- catch (error) {
144
- this.emit('error', {
145
- type: 'dirty_read_error',
146
- error: error instanceof Error ? error.message : 'Unknown error',
147
- details: { collection, filter },
148
- });
149
- throw error;
150
- }
151
- }
152
- /**
153
- * Queue an operation for batch processing
154
- */
155
- async queueOperation(operation) {
156
- if (!this.isConnected) {
157
- this.log('Not connected to MongoDB, skipping operation:', operation.type);
158
- return;
159
- }
160
- this.operationQueue.push(operation);
161
- this.log(`Queued ${operation.type} operation for collection ${operation.collection}`);
162
- // Start queue timer if not already running
163
- if (!this.queueTimer) {
164
- this.queueTimer = setTimeout(() => {
165
- this.processQueue().catch((error) => {
166
- this.log('Error processing queue:', error);
167
- this.emit('error', error);
168
- });
169
- }, this.options.queueTimeoutMs);
170
- }
171
- // Process immediately if queue is full
172
- if (this.operationQueue.length >= this.options.batchSize) {
173
- if (this.queueTimer) {
174
- clearTimeout(this.queueTimer);
175
- this.queueTimer = null;
176
- }
177
- await this.processQueue();
178
- }
179
- }
180
- /**
181
- * Process the operation queue
182
- */
183
- async processQueue() {
184
- if (this.isProcessing || this.operationQueue.length === 0) {
185
- return;
186
- }
187
- this.isProcessing = true;
188
- this.queueTimer = null;
189
- const operations = [...this.operationQueue];
190
- this.operationQueue = [];
191
- this.log(`Processing ${operations.length} queued operations`);
192
- try {
193
- const results = await this.processBatch(operations);
194
- // Emit results
195
- for (const result of results) {
196
- if (result.success) {
197
- this.emit('synced', result);
198
- }
199
- else {
200
- this.emit('syncError', result);
201
- }
202
- }
203
- this.log(`Successfully processed ${results.filter((r) => r.success).length}/${results.length} operations`);
204
- }
205
- catch (error) {
206
- this.log('Error processing operation batch:', error);
207
- this.emit('error', error);
208
- // Re-queue failed operations for retry
209
- this.operationQueue.unshift(...operations);
210
- }
211
- finally {
212
- this.isProcessing = false;
213
- }
214
- }
215
- /**
216
- * Process a batch of operations
217
- */
218
- async processBatch(operations) {
219
- if (!this.isConnected || !this.mongoDb) {
220
- throw new Error('MongoDB is not connected');
221
- }
222
- const results = [];
223
- // Group operations by collection for efficiency
224
- const operationsByCollection = new Map();
225
- for (const operation of operations) {
226
- if (!operationsByCollection.has(operation.collection)) {
227
- operationsByCollection.set(operation.collection, []);
228
- }
229
- operationsByCollection.get(operation.collection).push(operation);
230
- }
231
- // Process each collection's operations
232
- for (const [collectionName, collectionOps] of operationsByCollection) {
233
- const mongoCollection = this.mongoDb.collection(collectionName);
234
- for (const operation of collectionOps) {
235
- const result = await this.executeOperation(mongoCollection, operation);
236
- results.push(result);
237
- }
238
- }
239
- return results;
240
- }
241
- /**
242
- * Execute a single operation on MongoDB
243
- */
244
- async executeOperation(mongoCollection, operation) {
245
- const { retryConfig } = this.options;
246
- const maxRetries = retryConfig?.maxRetries ?? 3;
247
- const initialDelayMs = retryConfig?.initialDelayMs ?? 1000;
248
- const maxDelayMs = retryConfig?.maxDelayMs ?? 10000;
249
- let lastError = null;
250
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
251
- try {
252
- let mongodbResult;
253
- switch (operation.type) {
254
- case 'insert':
255
- if (!operation.data) {
256
- throw new Error('Insert operation requires data');
257
- }
258
- if (Array.isArray(operation.data)) {
259
- mongodbResult = await mongoCollection.insertMany(operation.data);
260
- }
261
- else {
262
- mongodbResult = await mongoCollection.insertOne(operation.data);
263
- }
264
- break;
265
- case 'update':
266
- if (!operation.filter || !operation.update) {
267
- throw new Error('Update operation requires filter and update data');
268
- }
269
- mongodbResult = await mongoCollection.updateMany(operation.filter, operation.update);
270
- break;
271
- case 'delete':
272
- if (!operation.filter) {
273
- throw new Error('Delete operation requires filter');
274
- }
275
- mongodbResult = await mongoCollection.deleteMany(operation.filter);
276
- break;
277
- default:
278
- throw new Error(`Unsupported operation type: ${operation.type}`);
279
- }
280
- this.log(`Successfully executed ${operation.type} on MongoDB collection ${operation.collection}`);
281
- return {
282
- success: true,
283
- operation,
284
- mongodbResult,
285
- };
286
- }
287
- catch (error) {
288
- lastError = error;
289
- this.log(`Attempt ${attempt + 1} failed for ${operation.type} operation:`, error);
290
- if (attempt < maxRetries) {
291
- const delay = Math.min(initialDelayMs * Math.pow(2, attempt), maxDelayMs);
292
- await new Promise((resolve) => setTimeout(resolve, delay));
293
- }
294
- }
295
- }
296
- return {
297
- success: false,
298
- operation,
299
- error: lastError || new Error('Unknown error'),
300
- };
301
- }
302
- /**
303
- * Get queue status
304
- */
305
- getQueueStatus() {
306
- return {
307
- queueLength: this.operationQueue.length,
308
- isProcessing: this.isProcessing,
309
- isConnected: this.isConnected,
310
- };
311
- }
312
- /**
313
- * Flush the queue (process immediately)
314
- */
315
- async flush() {
316
- if (this.queueTimer) {
317
- clearTimeout(this.queueTimer);
318
- this.queueTimer = null;
319
- }
320
- await this.processQueue();
321
- }
322
- /**
323
- * Log messages if verbose mode is enabled
324
- */
325
- log(...args) {
326
- if (this.options.verbose) {
327
- console.log('[MongoDBSync]', ...args);
328
- }
329
- }
330
- }
331
- /**
332
- * Factory function to create and initialize a MongoDB sync plugin
333
- */
334
- export async function createMongoDBSyncPlugin(options) {
335
- const plugin = new MongoDBSyncPlugin(options);
336
- await plugin.initialize();
337
- return plugin;
338
- }
339
- //# sourceMappingURL=mongodbSync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongodbSync.js","sourceRoot":"","sources":["../../src/plugins/mongodbSync.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { Filter, DocumentWithId } from './types.js';
2
- export declare class QueryBuilder<T extends DocumentWithId> {
3
- private readonly options;
4
- constructor(options?: {
5
- verbose?: boolean;
6
- });
7
- /**
8
- * Converts a field path to a JSON path for SQLite's json_extract function.
9
- */
10
- parseJsonPath(path: string): string;
11
- /**
12
- * Builds a WHERE clause for a filter object.
13
- * @param filter The filter object.
14
- * @param params An array to collect query parameters.
15
- * @returns A SQL WHERE clause.
16
- */
17
- buildWhereClause(filter: Filter<T>, params: unknown[]): string;
18
- }