@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.
Files changed (86) hide show
  1. package/dist_ts/00_commitinfo_data.js +2 -2
  2. package/dist_ts/congodb/congodb.plugins.d.ts +10 -0
  3. package/dist_ts/congodb/congodb.plugins.js +14 -0
  4. package/dist_ts/congodb/engine/AggregationEngine.d.ts +66 -0
  5. package/dist_ts/congodb/engine/AggregationEngine.js +189 -0
  6. package/dist_ts/congodb/engine/IndexEngine.d.ts +77 -0
  7. package/dist_ts/congodb/engine/IndexEngine.js +376 -0
  8. package/dist_ts/congodb/engine/QueryEngine.d.ts +54 -0
  9. package/dist_ts/congodb/engine/QueryEngine.js +271 -0
  10. package/dist_ts/congodb/engine/TransactionEngine.d.ts +85 -0
  11. package/dist_ts/congodb/engine/TransactionEngine.js +287 -0
  12. package/dist_ts/congodb/engine/UpdateEngine.d.ts +47 -0
  13. package/dist_ts/congodb/engine/UpdateEngine.js +461 -0
  14. package/dist_ts/congodb/errors/CongoErrors.d.ts +100 -0
  15. package/dist_ts/congodb/errors/CongoErrors.js +155 -0
  16. package/dist_ts/congodb/index.d.ts +19 -0
  17. package/dist_ts/congodb/index.js +26 -0
  18. package/dist_ts/congodb/server/CommandRouter.d.ts +51 -0
  19. package/dist_ts/congodb/server/CommandRouter.js +132 -0
  20. package/dist_ts/congodb/server/CongoServer.d.ts +95 -0
  21. package/dist_ts/congodb/server/CongoServer.js +227 -0
  22. package/dist_ts/congodb/server/WireProtocol.d.ts +117 -0
  23. package/dist_ts/congodb/server/WireProtocol.js +298 -0
  24. package/dist_ts/congodb/server/handlers/AdminHandler.d.ts +100 -0
  25. package/dist_ts/congodb/server/handlers/AdminHandler.js +568 -0
  26. package/dist_ts/congodb/server/handlers/AggregateHandler.d.ts +31 -0
  27. package/dist_ts/congodb/server/handlers/AggregateHandler.js +277 -0
  28. package/dist_ts/congodb/server/handlers/DeleteHandler.d.ts +8 -0
  29. package/dist_ts/congodb/server/handlers/DeleteHandler.js +83 -0
  30. package/dist_ts/congodb/server/handlers/FindHandler.d.ts +31 -0
  31. package/dist_ts/congodb/server/handlers/FindHandler.js +261 -0
  32. package/dist_ts/congodb/server/handlers/HelloHandler.d.ts +11 -0
  33. package/dist_ts/congodb/server/handlers/HelloHandler.js +62 -0
  34. package/dist_ts/congodb/server/handlers/IndexHandler.d.ts +20 -0
  35. package/dist_ts/congodb/server/handlers/IndexHandler.js +183 -0
  36. package/dist_ts/congodb/server/handlers/InsertHandler.d.ts +8 -0
  37. package/dist_ts/congodb/server/handlers/InsertHandler.js +76 -0
  38. package/dist_ts/congodb/server/handlers/UpdateHandler.d.ts +24 -0
  39. package/dist_ts/congodb/server/handlers/UpdateHandler.js +270 -0
  40. package/dist_ts/congodb/server/handlers/index.d.ts +8 -0
  41. package/dist_ts/congodb/server/handlers/index.js +10 -0
  42. package/dist_ts/congodb/server/index.d.ts +6 -0
  43. package/dist_ts/congodb/server/index.js +7 -0
  44. package/dist_ts/congodb/storage/FileStorageAdapter.d.ts +61 -0
  45. package/dist_ts/congodb/storage/FileStorageAdapter.js +396 -0
  46. package/dist_ts/congodb/storage/IStorageAdapter.d.ts +140 -0
  47. package/dist_ts/congodb/storage/IStorageAdapter.js +2 -0
  48. package/dist_ts/congodb/storage/MemoryStorageAdapter.d.ts +66 -0
  49. package/dist_ts/congodb/storage/MemoryStorageAdapter.js +367 -0
  50. package/dist_ts/congodb/storage/OpLog.d.ts +93 -0
  51. package/dist_ts/congodb/storage/OpLog.js +221 -0
  52. package/dist_ts/congodb/types/interfaces.d.ts +363 -0
  53. package/dist_ts/congodb/types/interfaces.js +2 -0
  54. package/dist_ts/index.d.ts +1 -0
  55. package/dist_ts/index.js +8 -6
  56. package/npmextra.json +17 -7
  57. package/package.json +20 -12
  58. package/readme.hints.md +79 -0
  59. package/ts/00_commitinfo_data.ts +1 -1
  60. package/ts/congodb/congodb.plugins.ts +17 -0
  61. package/ts/congodb/engine/AggregationEngine.ts +283 -0
  62. package/ts/congodb/engine/IndexEngine.ts +479 -0
  63. package/ts/congodb/engine/QueryEngine.ts +301 -0
  64. package/ts/congodb/engine/TransactionEngine.ts +351 -0
  65. package/ts/congodb/engine/UpdateEngine.ts +506 -0
  66. package/ts/congodb/errors/CongoErrors.ts +181 -0
  67. package/ts/congodb/index.ts +37 -0
  68. package/ts/congodb/server/CommandRouter.ts +180 -0
  69. package/ts/congodb/server/CongoServer.ts +298 -0
  70. package/ts/congodb/server/WireProtocol.ts +416 -0
  71. package/ts/congodb/server/handlers/AdminHandler.ts +614 -0
  72. package/ts/congodb/server/handlers/AggregateHandler.ts +342 -0
  73. package/ts/congodb/server/handlers/DeleteHandler.ts +100 -0
  74. package/ts/congodb/server/handlers/FindHandler.ts +301 -0
  75. package/ts/congodb/server/handlers/HelloHandler.ts +78 -0
  76. package/ts/congodb/server/handlers/IndexHandler.ts +207 -0
  77. package/ts/congodb/server/handlers/InsertHandler.ts +91 -0
  78. package/ts/congodb/server/handlers/UpdateHandler.ts +315 -0
  79. package/ts/congodb/server/handlers/index.ts +10 -0
  80. package/ts/congodb/server/index.ts +10 -0
  81. package/ts/congodb/storage/FileStorageAdapter.ts +479 -0
  82. package/ts/congodb/storage/IStorageAdapter.ts +202 -0
  83. package/ts/congodb/storage/MemoryStorageAdapter.ts +443 -0
  84. package/ts/congodb/storage/OpLog.ts +282 -0
  85. package/ts/congodb/types/interfaces.ts +433 -0
  86. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZ29FcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25nb2RiL2Vycm9ycy9Db25nb0Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLEtBQUs7SUFDNUIsSUFBSSxDQUFVO0lBQ2QsUUFBUSxDQUFVO0lBRXpCLFlBQVksT0FBZSxFQUFFLElBQWEsRUFBRSxRQUFpQjtRQUMzRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFVBQVU7SUFDbEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsVUFBVTtJQUMvQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsVUFBVTtJQUN0QyxXQUFXLENBQWlCO0lBQzVCLE1BQU0sQ0FBTztJQUVwQixZQUFZLE9BQWUsRUFBRSxJQUFhLEVBQUUsV0FBMkI7UUFDckUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGVBQWU7SUFDbEQsVUFBVSxDQUFxQjtJQUMvQixRQUFRLENBQXVCO0lBRXRDLFlBQVksT0FBZSxFQUFFLFVBQThCLEVBQUUsUUFBOEI7UUFDekYsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFVBQVU7SUFDMUMsV0FBVyxDQUFnQjtJQUMzQixNQUFNLENBQU07SUFFbkIsWUFBWSxPQUFlLEVBQUUsV0FBMEIsRUFBRSxNQUFXO1FBQ2xFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxVQUFVO0lBQ25ELFlBQVksT0FBZSxFQUFFLElBQWE7UUFDeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHFCQUFxQjtJQUNoRSxZQUFZLFVBQWtCLG1DQUFtQztRQUMvRCxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsVUFBVTtJQUNoRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxVQUFVO0lBQ3BELFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxVQUFVO0lBQzlDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFVBQVU7SUFDakQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsVUFBVTtJQUM3QyxZQUFZLE9BQWUsRUFBRSxJQUFhO1FBQ3hDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBWUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVU7SUFDckMsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsVUFBVSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIn0=
@@ -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
+ }