@push.rocks/smartmongo 2.0.14 → 2.1.0
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/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/congodb/congodb.plugins.d.ts +10 -0
- package/dist_ts/congodb/congodb.plugins.js +14 -0
- package/dist_ts/congodb/engine/AggregationEngine.d.ts +66 -0
- package/dist_ts/congodb/engine/AggregationEngine.js +189 -0
- package/dist_ts/congodb/engine/IndexEngine.d.ts +77 -0
- package/dist_ts/congodb/engine/IndexEngine.js +376 -0
- package/dist_ts/congodb/engine/QueryEngine.d.ts +54 -0
- package/dist_ts/congodb/engine/QueryEngine.js +271 -0
- package/dist_ts/congodb/engine/TransactionEngine.d.ts +85 -0
- package/dist_ts/congodb/engine/TransactionEngine.js +287 -0
- package/dist_ts/congodb/engine/UpdateEngine.d.ts +47 -0
- package/dist_ts/congodb/engine/UpdateEngine.js +461 -0
- package/dist_ts/congodb/errors/CongoErrors.d.ts +100 -0
- package/dist_ts/congodb/errors/CongoErrors.js +155 -0
- package/dist_ts/congodb/index.d.ts +19 -0
- package/dist_ts/congodb/index.js +26 -0
- package/dist_ts/congodb/server/CommandRouter.d.ts +51 -0
- package/dist_ts/congodb/server/CommandRouter.js +132 -0
- package/dist_ts/congodb/server/CongoServer.d.ts +95 -0
- package/dist_ts/congodb/server/CongoServer.js +227 -0
- package/dist_ts/congodb/server/WireProtocol.d.ts +117 -0
- package/dist_ts/congodb/server/WireProtocol.js +298 -0
- package/dist_ts/congodb/server/handlers/AdminHandler.d.ts +100 -0
- package/dist_ts/congodb/server/handlers/AdminHandler.js +568 -0
- package/dist_ts/congodb/server/handlers/AggregateHandler.d.ts +31 -0
- package/dist_ts/congodb/server/handlers/AggregateHandler.js +277 -0
- package/dist_ts/congodb/server/handlers/DeleteHandler.d.ts +8 -0
- package/dist_ts/congodb/server/handlers/DeleteHandler.js +83 -0
- package/dist_ts/congodb/server/handlers/FindHandler.d.ts +31 -0
- package/dist_ts/congodb/server/handlers/FindHandler.js +261 -0
- package/dist_ts/congodb/server/handlers/HelloHandler.d.ts +11 -0
- package/dist_ts/congodb/server/handlers/HelloHandler.js +62 -0
- package/dist_ts/congodb/server/handlers/IndexHandler.d.ts +20 -0
- package/dist_ts/congodb/server/handlers/IndexHandler.js +183 -0
- package/dist_ts/congodb/server/handlers/InsertHandler.d.ts +8 -0
- package/dist_ts/congodb/server/handlers/InsertHandler.js +76 -0
- package/dist_ts/congodb/server/handlers/UpdateHandler.d.ts +24 -0
- package/dist_ts/congodb/server/handlers/UpdateHandler.js +270 -0
- package/dist_ts/congodb/server/handlers/index.d.ts +8 -0
- package/dist_ts/congodb/server/handlers/index.js +10 -0
- package/dist_ts/congodb/server/index.d.ts +6 -0
- package/dist_ts/congodb/server/index.js +7 -0
- package/dist_ts/congodb/storage/FileStorageAdapter.d.ts +61 -0
- package/dist_ts/congodb/storage/FileStorageAdapter.js +396 -0
- package/dist_ts/congodb/storage/IStorageAdapter.d.ts +140 -0
- package/dist_ts/congodb/storage/IStorageAdapter.js +2 -0
- package/dist_ts/congodb/storage/MemoryStorageAdapter.d.ts +66 -0
- package/dist_ts/congodb/storage/MemoryStorageAdapter.js +367 -0
- package/dist_ts/congodb/storage/OpLog.d.ts +93 -0
- package/dist_ts/congodb/storage/OpLog.js +221 -0
- package/dist_ts/congodb/types/interfaces.d.ts +363 -0
- package/dist_ts/congodb/types/interfaces.js +2 -0
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +8 -6
- package/npmextra.json +17 -7
- package/package.json +20 -12
- package/readme.hints.md +79 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/congodb/congodb.plugins.ts +17 -0
- package/ts/congodb/engine/AggregationEngine.ts +283 -0
- package/ts/congodb/engine/IndexEngine.ts +479 -0
- package/ts/congodb/engine/QueryEngine.ts +301 -0
- package/ts/congodb/engine/TransactionEngine.ts +351 -0
- package/ts/congodb/engine/UpdateEngine.ts +506 -0
- package/ts/congodb/errors/CongoErrors.ts +181 -0
- package/ts/congodb/index.ts +37 -0
- package/ts/congodb/server/CommandRouter.ts +180 -0
- package/ts/congodb/server/CongoServer.ts +298 -0
- package/ts/congodb/server/WireProtocol.ts +416 -0
- package/ts/congodb/server/handlers/AdminHandler.ts +614 -0
- package/ts/congodb/server/handlers/AggregateHandler.ts +342 -0
- package/ts/congodb/server/handlers/DeleteHandler.ts +100 -0
- package/ts/congodb/server/handlers/FindHandler.ts +301 -0
- package/ts/congodb/server/handlers/HelloHandler.ts +78 -0
- package/ts/congodb/server/handlers/IndexHandler.ts +207 -0
- package/ts/congodb/server/handlers/InsertHandler.ts +91 -0
- package/ts/congodb/server/handlers/UpdateHandler.ts +315 -0
- package/ts/congodb/server/handlers/index.ts +10 -0
- package/ts/congodb/server/index.ts +10 -0
- package/ts/congodb/storage/FileStorageAdapter.ts +479 -0
- package/ts/congodb/storage/IStorageAdapter.ts +202 -0
- package/ts/congodb/storage/MemoryStorageAdapter.ts +443 -0
- package/ts/congodb/storage/OpLog.ts +282 -0
- package/ts/congodb/types/interfaces.ts +433 -0
- package/ts/index.ts +3 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for all CongoDB errors
|
|
3
|
+
* Mirrors MongoDB driver error hierarchy
|
|
4
|
+
*/
|
|
5
|
+
export class CongoError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
codeName;
|
|
8
|
+
constructor(message, code, codeName) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'CongoError';
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.codeName = codeName;
|
|
13
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown during connection issues
|
|
18
|
+
*/
|
|
19
|
+
export class CongoConnectionError extends CongoError {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'CongoConnectionError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Error thrown when an operation times out
|
|
27
|
+
*/
|
|
28
|
+
export class CongoTimeoutError extends CongoError {
|
|
29
|
+
constructor(message) {
|
|
30
|
+
super(message, 50, 'MaxTimeMSExpired');
|
|
31
|
+
this.name = 'CongoTimeoutError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Error thrown during write operations
|
|
36
|
+
*/
|
|
37
|
+
export class CongoWriteError extends CongoError {
|
|
38
|
+
writeErrors;
|
|
39
|
+
result;
|
|
40
|
+
constructor(message, code, writeErrors) {
|
|
41
|
+
super(message, code);
|
|
42
|
+
this.name = 'CongoWriteError';
|
|
43
|
+
this.writeErrors = writeErrors;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Error thrown for duplicate key violations
|
|
48
|
+
*/
|
|
49
|
+
export class CongoDuplicateKeyError extends CongoWriteError {
|
|
50
|
+
keyPattern;
|
|
51
|
+
keyValue;
|
|
52
|
+
constructor(message, keyPattern, keyValue) {
|
|
53
|
+
super(message, 11000);
|
|
54
|
+
this.name = 'CongoDuplicateKeyError';
|
|
55
|
+
this.codeName = 'DuplicateKey';
|
|
56
|
+
this.keyPattern = keyPattern;
|
|
57
|
+
this.keyValue = keyValue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Error thrown for bulk write failures
|
|
62
|
+
*/
|
|
63
|
+
export class CongoBulkWriteError extends CongoError {
|
|
64
|
+
writeErrors;
|
|
65
|
+
result;
|
|
66
|
+
constructor(message, writeErrors, result) {
|
|
67
|
+
super(message, 65);
|
|
68
|
+
this.name = 'CongoBulkWriteError';
|
|
69
|
+
this.writeErrors = writeErrors;
|
|
70
|
+
this.result = result;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Error thrown during transaction operations
|
|
75
|
+
*/
|
|
76
|
+
export class CongoTransactionError extends CongoError {
|
|
77
|
+
constructor(message, code) {
|
|
78
|
+
super(message, code);
|
|
79
|
+
this.name = 'CongoTransactionError';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Error thrown when a transaction is aborted due to conflict
|
|
84
|
+
*/
|
|
85
|
+
export class CongoWriteConflictError extends CongoTransactionError {
|
|
86
|
+
constructor(message = 'Write conflict during transaction') {
|
|
87
|
+
super(message, 112);
|
|
88
|
+
this.name = 'CongoWriteConflictError';
|
|
89
|
+
this.codeName = 'WriteConflict';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Error thrown for invalid arguments
|
|
94
|
+
*/
|
|
95
|
+
export class CongoArgumentError extends CongoError {
|
|
96
|
+
constructor(message) {
|
|
97
|
+
super(message);
|
|
98
|
+
this.name = 'CongoArgumentError';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Error thrown when an operation is not supported
|
|
103
|
+
*/
|
|
104
|
+
export class CongoNotSupportedError extends CongoError {
|
|
105
|
+
constructor(message) {
|
|
106
|
+
super(message, 115);
|
|
107
|
+
this.name = 'CongoNotSupportedError';
|
|
108
|
+
this.codeName = 'CommandNotSupported';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Error thrown when cursor is exhausted or closed
|
|
113
|
+
*/
|
|
114
|
+
export class CongoCursorError extends CongoError {
|
|
115
|
+
constructor(message) {
|
|
116
|
+
super(message);
|
|
117
|
+
this.name = 'CongoCursorError';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Error thrown when a namespace (database.collection) is invalid
|
|
122
|
+
*/
|
|
123
|
+
export class CongoNamespaceError extends CongoError {
|
|
124
|
+
constructor(message) {
|
|
125
|
+
super(message, 73);
|
|
126
|
+
this.name = 'CongoNamespaceError';
|
|
127
|
+
this.codeName = 'InvalidNamespace';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Error thrown when an index operation fails
|
|
132
|
+
*/
|
|
133
|
+
export class CongoIndexError extends CongoError {
|
|
134
|
+
constructor(message, code) {
|
|
135
|
+
super(message, code || 86);
|
|
136
|
+
this.name = 'CongoIndexError';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Convert any error to a CongoError
|
|
141
|
+
*/
|
|
142
|
+
export function toCongoError(error) {
|
|
143
|
+
if (error instanceof CongoError) {
|
|
144
|
+
return error;
|
|
145
|
+
}
|
|
146
|
+
const congoError = new CongoError(error.message || String(error));
|
|
147
|
+
if (error.code) {
|
|
148
|
+
congoError.code = error.code;
|
|
149
|
+
}
|
|
150
|
+
if (error.codeName) {
|
|
151
|
+
congoError.codeName = error.codeName;
|
|
152
|
+
}
|
|
153
|
+
return congoError;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZ29FcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25nb2RiL2Vycm9ycy9Db25nb0Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLEtBQUs7SUFDNUIsSUFBSSxDQUFVO0lBQ2QsUUFBUSxDQUFVO0lBRXpCLFlBQVksT0FBZSxFQUFFLElBQWEsRUFBRSxRQUFpQjtRQUMzRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFVBQVU7SUFDbEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsVUFBVTtJQUMvQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsVUFBVTtJQUN0QyxXQUFXLENBQWlCO0lBQzVCLE1BQU0sQ0FBTztJQUVwQixZQUFZLE9BQWUsRUFBRSxJQUFhLEVBQUUsV0FBMkI7UUFDckUsS0FBSyxD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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as plugins from './congodb.plugins.js';
|
|
2
|
+
export { plugins };
|
|
3
|
+
export { ObjectId, Binary, Timestamp, Long, Decimal128, UUID } from 'bson';
|
|
4
|
+
export * from './types/interfaces.js';
|
|
5
|
+
export * from './errors/CongoErrors.js';
|
|
6
|
+
export type { IStorageAdapter } from './storage/IStorageAdapter.js';
|
|
7
|
+
export { MemoryStorageAdapter } from './storage/MemoryStorageAdapter.js';
|
|
8
|
+
export { FileStorageAdapter } from './storage/FileStorageAdapter.js';
|
|
9
|
+
export { OpLog } from './storage/OpLog.js';
|
|
10
|
+
export { QueryEngine } from './engine/QueryEngine.js';
|
|
11
|
+
export { UpdateEngine } from './engine/UpdateEngine.js';
|
|
12
|
+
export { AggregationEngine } from './engine/AggregationEngine.js';
|
|
13
|
+
export { IndexEngine } from './engine/IndexEngine.js';
|
|
14
|
+
export { TransactionEngine } from './engine/TransactionEngine.js';
|
|
15
|
+
export { CongoServer } from './server/CongoServer.js';
|
|
16
|
+
export type { ICongoServerOptions } from './server/CongoServer.js';
|
|
17
|
+
export { WireProtocol } from './server/WireProtocol.js';
|
|
18
|
+
export { CommandRouter } from './server/CommandRouter.js';
|
|
19
|
+
export type { ICommandHandler, IHandlerContext, ICursorState } from './server/CommandRouter.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// CongoDB - MongoDB Wire Protocol compatible in-memory database server
|
|
2
|
+
// Use the official MongoDB driver to connect to CongoServer
|
|
3
|
+
// Re-export plugins for external use
|
|
4
|
+
import * as plugins from './congodb.plugins.js';
|
|
5
|
+
export { plugins };
|
|
6
|
+
// Export BSON types for convenience
|
|
7
|
+
export { ObjectId, Binary, Timestamp, Long, Decimal128, UUID } from 'bson';
|
|
8
|
+
// Export all types
|
|
9
|
+
export * from './types/interfaces.js';
|
|
10
|
+
// Export errors
|
|
11
|
+
export * from './errors/CongoErrors.js';
|
|
12
|
+
export { MemoryStorageAdapter } from './storage/MemoryStorageAdapter.js';
|
|
13
|
+
export { FileStorageAdapter } from './storage/FileStorageAdapter.js';
|
|
14
|
+
export { OpLog } from './storage/OpLog.js';
|
|
15
|
+
// Export engines
|
|
16
|
+
export { QueryEngine } from './engine/QueryEngine.js';
|
|
17
|
+
export { UpdateEngine } from './engine/UpdateEngine.js';
|
|
18
|
+
export { AggregationEngine } from './engine/AggregationEngine.js';
|
|
19
|
+
export { IndexEngine } from './engine/IndexEngine.js';
|
|
20
|
+
export { TransactionEngine } from './engine/TransactionEngine.js';
|
|
21
|
+
// Export server (the main entry point for using CongoDB)
|
|
22
|
+
export { CongoServer } from './server/CongoServer.js';
|
|
23
|
+
// Export wire protocol utilities (for advanced usage)
|
|
24
|
+
export { WireProtocol } from './server/WireProtocol.js';
|
|
25
|
+
export { CommandRouter } from './server/CommandRouter.js';
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb25nb2RiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSw0REFBNEQ7QUFFNUQscUNBQXFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBRW5CLG9DQUFvQztBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0UsbUJBQW1CO0FBQ25CLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsZ0JBQWdCO0FBQ2hCLGNBQWMseUJBQXlCLENBQUM7QUFJeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNDLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3RELHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDIn0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as plugins from '../congodb.plugins.js';
|
|
2
|
+
import type { IStorageAdapter } from '../storage/IStorageAdapter.js';
|
|
3
|
+
import type { IParsedCommand } from './WireProtocol.js';
|
|
4
|
+
import type { CongoServer } from './CongoServer.js';
|
|
5
|
+
/**
|
|
6
|
+
* Handler context passed to command handlers
|
|
7
|
+
*/
|
|
8
|
+
export interface IHandlerContext {
|
|
9
|
+
storage: IStorageAdapter;
|
|
10
|
+
server: CongoServer;
|
|
11
|
+
database: string;
|
|
12
|
+
command: plugins.bson.Document;
|
|
13
|
+
documentSequences?: Map<string, plugins.bson.Document[]>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Command handler interface
|
|
17
|
+
*/
|
|
18
|
+
export interface ICommandHandler {
|
|
19
|
+
handle(context: IHandlerContext): Promise<plugins.bson.Document>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* CommandRouter - Routes incoming commands to appropriate handlers
|
|
23
|
+
*/
|
|
24
|
+
export declare class CommandRouter {
|
|
25
|
+
private storage;
|
|
26
|
+
private server;
|
|
27
|
+
private handlers;
|
|
28
|
+
private cursors;
|
|
29
|
+
private cursorIdCounter;
|
|
30
|
+
constructor(storage: IStorageAdapter, server: CongoServer);
|
|
31
|
+
/**
|
|
32
|
+
* Register all command handlers
|
|
33
|
+
*/
|
|
34
|
+
private registerHandlers;
|
|
35
|
+
/**
|
|
36
|
+
* Route a command to its handler
|
|
37
|
+
*/
|
|
38
|
+
route(parsedCommand: IParsedCommand): Promise<plugins.bson.Document>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Cursor state for multi-batch queries
|
|
42
|
+
*/
|
|
43
|
+
export interface ICursorState {
|
|
44
|
+
id: bigint;
|
|
45
|
+
database: string;
|
|
46
|
+
collection: string;
|
|
47
|
+
documents: plugins.bson.Document[];
|
|
48
|
+
position: number;
|
|
49
|
+
batchSize: number;
|
|
50
|
+
createdAt: Date;
|
|
51
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import * as plugins from '../congodb.plugins.js';
|
|
2
|
+
// Import handlers
|
|
3
|
+
import { HelloHandler } from './handlers/HelloHandler.js';
|
|
4
|
+
import { InsertHandler } from './handlers/InsertHandler.js';
|
|
5
|
+
import { FindHandler } from './handlers/FindHandler.js';
|
|
6
|
+
import { UpdateHandler } from './handlers/UpdateHandler.js';
|
|
7
|
+
import { DeleteHandler } from './handlers/DeleteHandler.js';
|
|
8
|
+
import { AggregateHandler } from './handlers/AggregateHandler.js';
|
|
9
|
+
import { IndexHandler } from './handlers/IndexHandler.js';
|
|
10
|
+
import { AdminHandler } from './handlers/AdminHandler.js';
|
|
11
|
+
/**
|
|
12
|
+
* CommandRouter - Routes incoming commands to appropriate handlers
|
|
13
|
+
*/
|
|
14
|
+
export class CommandRouter {
|
|
15
|
+
storage;
|
|
16
|
+
server;
|
|
17
|
+
handlers = new Map();
|
|
18
|
+
// Cursor state for getMore operations
|
|
19
|
+
cursors = new Map();
|
|
20
|
+
cursorIdCounter = BigInt(1);
|
|
21
|
+
constructor(storage, server) {
|
|
22
|
+
this.storage = storage;
|
|
23
|
+
this.server = server;
|
|
24
|
+
this.registerHandlers();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Register all command handlers
|
|
28
|
+
*/
|
|
29
|
+
registerHandlers() {
|
|
30
|
+
// Create handler instances with shared state
|
|
31
|
+
const helloHandler = new HelloHandler();
|
|
32
|
+
const findHandler = new FindHandler(this.cursors, () => this.cursorIdCounter++);
|
|
33
|
+
const insertHandler = new InsertHandler();
|
|
34
|
+
const updateHandler = new UpdateHandler();
|
|
35
|
+
const deleteHandler = new DeleteHandler();
|
|
36
|
+
const aggregateHandler = new AggregateHandler(this.cursors, () => this.cursorIdCounter++);
|
|
37
|
+
const indexHandler = new IndexHandler();
|
|
38
|
+
const adminHandler = new AdminHandler();
|
|
39
|
+
// Handshake commands
|
|
40
|
+
this.handlers.set('hello', helloHandler);
|
|
41
|
+
this.handlers.set('ismaster', helloHandler);
|
|
42
|
+
this.handlers.set('isMaster', helloHandler);
|
|
43
|
+
// CRUD commands
|
|
44
|
+
this.handlers.set('find', findHandler);
|
|
45
|
+
this.handlers.set('insert', insertHandler);
|
|
46
|
+
this.handlers.set('update', updateHandler);
|
|
47
|
+
this.handlers.set('delete', deleteHandler);
|
|
48
|
+
this.handlers.set('findAndModify', updateHandler);
|
|
49
|
+
this.handlers.set('getMore', findHandler);
|
|
50
|
+
this.handlers.set('killCursors', findHandler);
|
|
51
|
+
// Aggregation
|
|
52
|
+
this.handlers.set('aggregate', aggregateHandler);
|
|
53
|
+
this.handlers.set('count', findHandler);
|
|
54
|
+
this.handlers.set('distinct', findHandler);
|
|
55
|
+
// Index operations
|
|
56
|
+
this.handlers.set('createIndexes', indexHandler);
|
|
57
|
+
this.handlers.set('dropIndexes', indexHandler);
|
|
58
|
+
this.handlers.set('listIndexes', indexHandler);
|
|
59
|
+
// Admin/Database operations
|
|
60
|
+
this.handlers.set('ping', adminHandler);
|
|
61
|
+
this.handlers.set('listDatabases', adminHandler);
|
|
62
|
+
this.handlers.set('listCollections', adminHandler);
|
|
63
|
+
this.handlers.set('drop', adminHandler);
|
|
64
|
+
this.handlers.set('dropDatabase', adminHandler);
|
|
65
|
+
this.handlers.set('create', adminHandler);
|
|
66
|
+
this.handlers.set('serverStatus', adminHandler);
|
|
67
|
+
this.handlers.set('buildInfo', adminHandler);
|
|
68
|
+
this.handlers.set('whatsmyuri', adminHandler);
|
|
69
|
+
this.handlers.set('getLog', adminHandler);
|
|
70
|
+
this.handlers.set('hostInfo', adminHandler);
|
|
71
|
+
this.handlers.set('replSetGetStatus', adminHandler);
|
|
72
|
+
this.handlers.set('isMaster', helloHandler);
|
|
73
|
+
this.handlers.set('saslStart', adminHandler);
|
|
74
|
+
this.handlers.set('saslContinue', adminHandler);
|
|
75
|
+
this.handlers.set('endSessions', adminHandler);
|
|
76
|
+
this.handlers.set('abortTransaction', adminHandler);
|
|
77
|
+
this.handlers.set('commitTransaction', adminHandler);
|
|
78
|
+
this.handlers.set('collStats', adminHandler);
|
|
79
|
+
this.handlers.set('dbStats', adminHandler);
|
|
80
|
+
this.handlers.set('connectionStatus', adminHandler);
|
|
81
|
+
this.handlers.set('currentOp', adminHandler);
|
|
82
|
+
this.handlers.set('collMod', adminHandler);
|
|
83
|
+
this.handlers.set('renameCollection', adminHandler);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Route a command to its handler
|
|
87
|
+
*/
|
|
88
|
+
async route(parsedCommand) {
|
|
89
|
+
const { commandName, command, database, documentSequences } = parsedCommand;
|
|
90
|
+
// Create handler context
|
|
91
|
+
const context = {
|
|
92
|
+
storage: this.storage,
|
|
93
|
+
server: this.server,
|
|
94
|
+
database,
|
|
95
|
+
command,
|
|
96
|
+
documentSequences,
|
|
97
|
+
};
|
|
98
|
+
// Find handler
|
|
99
|
+
const handler = this.handlers.get(commandName);
|
|
100
|
+
if (!handler) {
|
|
101
|
+
// Unknown command
|
|
102
|
+
return {
|
|
103
|
+
ok: 0,
|
|
104
|
+
errmsg: `no such command: '${commandName}'`,
|
|
105
|
+
code: 59,
|
|
106
|
+
codeName: 'CommandNotFound',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return await handler.handle(context);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
// Handle known error types
|
|
114
|
+
if (error.code) {
|
|
115
|
+
return {
|
|
116
|
+
ok: 0,
|
|
117
|
+
errmsg: error.message,
|
|
118
|
+
code: error.code,
|
|
119
|
+
codeName: error.codeName || 'UnknownError',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Generic error
|
|
123
|
+
return {
|
|
124
|
+
ok: 0,
|
|
125
|
+
errmsg: error.message || 'Internal error',
|
|
126
|
+
code: 1,
|
|
127
|
+
codeName: 'InternalError',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZFJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvbmdvZGIvc2VydmVyL0NvbW1hbmRSb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUtqRCxrQkFBa0I7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBb0IxRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2hCLE9BQU8sQ0FBa0I7SUFDekIsTUFBTSxDQUFjO0lBQ3BCLFFBQVEsR0FBaUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzRCxzQ0FBc0M7SUFDOUIsT0FBTyxHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9DLGVBQWUsR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFNUMsWUFBWSxPQUF3QixFQUFFLE1BQW1CO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0Qiw2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
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { IStorageAdapter } from '../storage/IStorageAdapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Server configuration options
|
|
4
|
+
*/
|
|
5
|
+
export interface ICongoServerOptions {
|
|
6
|
+
/** Port to listen on (default: 27017) */
|
|
7
|
+
port?: number;
|
|
8
|
+
/** Host to bind to (default: 127.0.0.1) */
|
|
9
|
+
host?: string;
|
|
10
|
+
/** Storage type: 'memory' or 'file' (default: 'memory') */
|
|
11
|
+
storage?: 'memory' | 'file';
|
|
12
|
+
/** Path for file storage (required if storage is 'file') */
|
|
13
|
+
storagePath?: string;
|
|
14
|
+
/** Enable persistence for memory storage */
|
|
15
|
+
persistPath?: string;
|
|
16
|
+
/** Persistence interval in ms (default: 60000) */
|
|
17
|
+
persistIntervalMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* CongoServer - MongoDB Wire Protocol compatible server
|
|
21
|
+
*
|
|
22
|
+
* This server implements the MongoDB wire protocol (OP_MSG) to allow
|
|
23
|
+
* official MongoDB drivers to connect and perform operations.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { CongoServer } from '@push.rocks/smartmongo/congodb';
|
|
28
|
+
* import { MongoClient } from 'mongodb';
|
|
29
|
+
*
|
|
30
|
+
* const server = new CongoServer({ port: 27017 });
|
|
31
|
+
* await server.start();
|
|
32
|
+
*
|
|
33
|
+
* const client = new MongoClient('mongodb://127.0.0.1:27017');
|
|
34
|
+
* await client.connect();
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class CongoServer {
|
|
38
|
+
private options;
|
|
39
|
+
private server;
|
|
40
|
+
private storage;
|
|
41
|
+
private commandRouter;
|
|
42
|
+
private connections;
|
|
43
|
+
private connectionIdCounter;
|
|
44
|
+
private isRunning;
|
|
45
|
+
private startTime;
|
|
46
|
+
constructor(options?: ICongoServerOptions);
|
|
47
|
+
/**
|
|
48
|
+
* Get the storage adapter (for testing/debugging)
|
|
49
|
+
*/
|
|
50
|
+
getStorage(): IStorageAdapter;
|
|
51
|
+
/**
|
|
52
|
+
* Get server uptime in seconds
|
|
53
|
+
*/
|
|
54
|
+
getUptime(): number;
|
|
55
|
+
/**
|
|
56
|
+
* Get current connection count
|
|
57
|
+
*/
|
|
58
|
+
getConnectionCount(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Start the server
|
|
61
|
+
*/
|
|
62
|
+
start(): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Stop the server
|
|
65
|
+
*/
|
|
66
|
+
stop(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Handle a new client connection
|
|
69
|
+
*/
|
|
70
|
+
private handleConnection;
|
|
71
|
+
/**
|
|
72
|
+
* Handle incoming data from a client
|
|
73
|
+
*/
|
|
74
|
+
private handleData;
|
|
75
|
+
/**
|
|
76
|
+
* Process complete messages from the buffer
|
|
77
|
+
*/
|
|
78
|
+
private processMessages;
|
|
79
|
+
/**
|
|
80
|
+
* Get the connection URI for this server
|
|
81
|
+
*/
|
|
82
|
+
getConnectionUri(): string;
|
|
83
|
+
/**
|
|
84
|
+
* Check if the server is running
|
|
85
|
+
*/
|
|
86
|
+
get running(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Get the port the server is listening on
|
|
89
|
+
*/
|
|
90
|
+
get port(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Get the host the server is bound to
|
|
93
|
+
*/
|
|
94
|
+
get host(): string;
|
|
95
|
+
}
|