@push.rocks/smartmongo 2.2.0 → 3.0.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 (109) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/index.d.ts +1 -1
  3. package/dist_ts/index.js +3 -3
  4. package/dist_ts/tsmdb/engine/AggregationEngine.js +189 -0
  5. package/dist_ts/tsmdb/engine/IndexEngine.js +376 -0
  6. package/dist_ts/tsmdb/engine/QueryEngine.js +271 -0
  7. package/dist_ts/{congodb → tsmdb}/engine/TransactionEngine.d.ts +1 -1
  8. package/dist_ts/tsmdb/engine/TransactionEngine.js +287 -0
  9. package/dist_ts/tsmdb/engine/UpdateEngine.js +461 -0
  10. package/dist_ts/{congodb/errors/CongoErrors.d.ts → tsmdb/errors/TsmdbErrors.d.ts} +16 -16
  11. package/dist_ts/tsmdb/errors/TsmdbErrors.js +155 -0
  12. package/dist_ts/{congodb → tsmdb}/index.d.ts +4 -4
  13. package/dist_ts/tsmdb/index.js +26 -0
  14. package/dist_ts/{congodb → tsmdb}/server/CommandRouter.d.ts +4 -4
  15. package/dist_ts/tsmdb/server/CommandRouter.js +132 -0
  16. package/dist_ts/{congodb/server/CongoServer.d.ts → tsmdb/server/TsmdbServer.d.ts} +6 -6
  17. package/dist_ts/tsmdb/server/TsmdbServer.js +227 -0
  18. package/dist_ts/{congodb → tsmdb}/server/WireProtocol.d.ts +1 -1
  19. package/dist_ts/tsmdb/server/WireProtocol.js +298 -0
  20. package/dist_ts/{congodb → tsmdb}/server/handlers/AdminHandler.d.ts +1 -1
  21. package/dist_ts/tsmdb/server/handlers/AdminHandler.js +568 -0
  22. package/dist_ts/{congodb → tsmdb}/server/handlers/AggregateHandler.d.ts +1 -1
  23. package/dist_ts/tsmdb/server/handlers/AggregateHandler.js +277 -0
  24. package/dist_ts/{congodb → tsmdb}/server/handlers/DeleteHandler.d.ts +1 -1
  25. package/dist_ts/tsmdb/server/handlers/DeleteHandler.js +83 -0
  26. package/dist_ts/{congodb → tsmdb}/server/handlers/FindHandler.d.ts +1 -1
  27. package/dist_ts/tsmdb/server/handlers/FindHandler.js +261 -0
  28. package/dist_ts/{congodb → tsmdb}/server/handlers/HelloHandler.d.ts +1 -1
  29. package/dist_ts/{congodb → tsmdb}/server/handlers/HelloHandler.js +2 -2
  30. package/dist_ts/{congodb → tsmdb}/server/handlers/IndexHandler.d.ts +1 -1
  31. package/dist_ts/tsmdb/server/handlers/IndexHandler.js +183 -0
  32. package/dist_ts/{congodb → tsmdb}/server/handlers/InsertHandler.d.ts +1 -1
  33. package/dist_ts/tsmdb/server/handlers/InsertHandler.js +76 -0
  34. package/dist_ts/{congodb → tsmdb}/server/handlers/UpdateHandler.d.ts +1 -1
  35. package/dist_ts/tsmdb/server/handlers/UpdateHandler.js +270 -0
  36. package/dist_ts/tsmdb/server/handlers/index.js +10 -0
  37. package/dist_ts/{congodb → tsmdb}/server/index.d.ts +2 -2
  38. package/dist_ts/tsmdb/server/index.js +7 -0
  39. package/dist_ts/{congodb → tsmdb}/storage/FileStorageAdapter.d.ts +2 -2
  40. package/dist_ts/tsmdb/storage/FileStorageAdapter.js +396 -0
  41. package/dist_ts/{congodb → tsmdb}/storage/IStorageAdapter.d.ts +2 -2
  42. package/dist_ts/{congodb → tsmdb}/storage/IStorageAdapter.js +1 -1
  43. package/dist_ts/{congodb → tsmdb}/storage/MemoryStorageAdapter.d.ts +2 -2
  44. package/dist_ts/tsmdb/storage/MemoryStorageAdapter.js +367 -0
  45. package/dist_ts/{congodb → tsmdb}/storage/OpLog.d.ts +1 -1
  46. package/dist_ts/tsmdb/storage/OpLog.js +221 -0
  47. package/dist_ts/tsmdb/tsmdb.plugins.js +14 -0
  48. package/dist_ts/{congodb → tsmdb}/types/interfaces.d.ts +3 -3
  49. package/dist_ts/{congodb → tsmdb}/types/interfaces.js +1 -1
  50. package/package.json +1 -1
  51. package/readme.hints.md +7 -12
  52. package/readme.md +25 -25
  53. package/ts/00_commitinfo_data.ts +1 -1
  54. package/ts/index.ts +2 -2
  55. package/ts/{congodb → tsmdb}/engine/AggregationEngine.ts +1 -1
  56. package/ts/{congodb → tsmdb}/engine/IndexEngine.ts +7 -7
  57. package/ts/{congodb → tsmdb}/engine/QueryEngine.ts +1 -1
  58. package/ts/{congodb → tsmdb}/engine/TransactionEngine.ts +12 -12
  59. package/ts/{congodb → tsmdb}/engine/UpdateEngine.ts +1 -1
  60. package/ts/{congodb/errors/CongoErrors.ts → tsmdb/errors/TsmdbErrors.ts} +34 -34
  61. package/ts/{congodb → tsmdb}/index.ts +7 -7
  62. package/ts/{congodb → tsmdb}/server/CommandRouter.ts +5 -5
  63. package/ts/{congodb/server/CongoServer.ts → tsmdb/server/TsmdbServer.ts} +8 -8
  64. package/ts/{congodb → tsmdb}/server/WireProtocol.ts +1 -1
  65. package/ts/{congodb → tsmdb}/server/handlers/AdminHandler.ts +6 -6
  66. package/ts/{congodb → tsmdb}/server/handlers/AggregateHandler.ts +1 -1
  67. package/ts/{congodb → tsmdb}/server/handlers/DeleteHandler.ts +1 -1
  68. package/ts/{congodb → tsmdb}/server/handlers/FindHandler.ts +1 -1
  69. package/ts/{congodb → tsmdb}/server/handlers/HelloHandler.ts +1 -1
  70. package/ts/{congodb → tsmdb}/server/handlers/IndexHandler.ts +1 -1
  71. package/ts/{congodb → tsmdb}/server/handlers/InsertHandler.ts +1 -1
  72. package/ts/{congodb → tsmdb}/server/handlers/UpdateHandler.ts +1 -1
  73. package/ts/{congodb → tsmdb}/server/index.ts +2 -2
  74. package/ts/{congodb → tsmdb}/storage/FileStorageAdapter.ts +2 -2
  75. package/ts/{congodb → tsmdb}/storage/IStorageAdapter.ts +2 -2
  76. package/ts/{congodb → tsmdb}/storage/MemoryStorageAdapter.ts +2 -2
  77. package/ts/{congodb → tsmdb}/storage/OpLog.ts +1 -1
  78. package/ts/{congodb → tsmdb}/types/interfaces.ts +3 -3
  79. package/dist_ts/congodb/congodb.plugins.js +0 -14
  80. package/dist_ts/congodb/engine/AggregationEngine.js +0 -189
  81. package/dist_ts/congodb/engine/IndexEngine.js +0 -376
  82. package/dist_ts/congodb/engine/QueryEngine.js +0 -271
  83. package/dist_ts/congodb/engine/TransactionEngine.js +0 -287
  84. package/dist_ts/congodb/engine/UpdateEngine.js +0 -461
  85. package/dist_ts/congodb/errors/CongoErrors.js +0 -155
  86. package/dist_ts/congodb/index.js +0 -26
  87. package/dist_ts/congodb/server/CommandRouter.js +0 -132
  88. package/dist_ts/congodb/server/CongoServer.js +0 -227
  89. package/dist_ts/congodb/server/WireProtocol.js +0 -298
  90. package/dist_ts/congodb/server/handlers/AdminHandler.js +0 -568
  91. package/dist_ts/congodb/server/handlers/AggregateHandler.js +0 -277
  92. package/dist_ts/congodb/server/handlers/DeleteHandler.js +0 -83
  93. package/dist_ts/congodb/server/handlers/FindHandler.js +0 -261
  94. package/dist_ts/congodb/server/handlers/IndexHandler.js +0 -183
  95. package/dist_ts/congodb/server/handlers/InsertHandler.js +0 -76
  96. package/dist_ts/congodb/server/handlers/UpdateHandler.js +0 -270
  97. package/dist_ts/congodb/server/handlers/index.js +0 -10
  98. package/dist_ts/congodb/server/index.js +0 -7
  99. package/dist_ts/congodb/storage/FileStorageAdapter.js +0 -396
  100. package/dist_ts/congodb/storage/MemoryStorageAdapter.js +0 -367
  101. package/dist_ts/congodb/storage/OpLog.js +0 -221
  102. /package/dist_ts/{congodb → tsmdb}/engine/AggregationEngine.d.ts +0 -0
  103. /package/dist_ts/{congodb → tsmdb}/engine/IndexEngine.d.ts +0 -0
  104. /package/dist_ts/{congodb → tsmdb}/engine/QueryEngine.d.ts +0 -0
  105. /package/dist_ts/{congodb → tsmdb}/engine/UpdateEngine.d.ts +0 -0
  106. /package/dist_ts/{congodb → tsmdb}/server/handlers/index.d.ts +0 -0
  107. /package/dist_ts/{congodb/congodb.plugins.d.ts → tsmdb/tsmdb.plugins.d.ts} +0 -0
  108. /package/ts/{congodb → tsmdb}/server/handlers/index.ts +0 -0
  109. /package/ts/{congodb/congodb.plugins.ts → tsmdb/tsmdb.plugins.ts} +0 -0
@@ -1,183 +0,0 @@
1
- import * as plugins from '../../congodb.plugins.js';
2
- import { IndexEngine } from '../../engine/IndexEngine.js';
3
- // Cache of index engines per collection
4
- const indexEngines = new Map();
5
- /**
6
- * Get or create an IndexEngine for a collection
7
- */
8
- function getIndexEngine(storage, database, collection) {
9
- const key = `${database}.${collection}`;
10
- let engine = indexEngines.get(key);
11
- if (!engine) {
12
- engine = new IndexEngine(database, collection, storage);
13
- indexEngines.set(key, engine);
14
- }
15
- return engine;
16
- }
17
- /**
18
- * IndexHandler - Handles createIndexes, dropIndexes, listIndexes commands
19
- */
20
- export class IndexHandler {
21
- async handle(context) {
22
- const { command } = context;
23
- if (command.createIndexes) {
24
- return this.handleCreateIndexes(context);
25
- }
26
- else if (command.dropIndexes) {
27
- return this.handleDropIndexes(context);
28
- }
29
- else if (command.listIndexes) {
30
- return this.handleListIndexes(context);
31
- }
32
- return {
33
- ok: 0,
34
- errmsg: 'Unknown index command',
35
- code: 59,
36
- codeName: 'CommandNotFound',
37
- };
38
- }
39
- /**
40
- * Handle createIndexes command
41
- */
42
- async handleCreateIndexes(context) {
43
- const { storage, database, command } = context;
44
- const collection = command.createIndexes;
45
- const indexes = command.indexes || [];
46
- if (!Array.isArray(indexes)) {
47
- return {
48
- ok: 0,
49
- errmsg: 'indexes must be an array',
50
- code: 2,
51
- codeName: 'BadValue',
52
- };
53
- }
54
- // Ensure collection exists
55
- await storage.createCollection(database, collection);
56
- const indexEngine = getIndexEngine(storage, database, collection);
57
- const createdNames = [];
58
- let numIndexesBefore = 0;
59
- let numIndexesAfter = 0;
60
- try {
61
- const existingIndexes = await indexEngine.listIndexes();
62
- numIndexesBefore = existingIndexes.length;
63
- for (const indexSpec of indexes) {
64
- const key = indexSpec.key;
65
- const options = {
66
- name: indexSpec.name,
67
- unique: indexSpec.unique,
68
- sparse: indexSpec.sparse,
69
- expireAfterSeconds: indexSpec.expireAfterSeconds,
70
- background: indexSpec.background,
71
- partialFilterExpression: indexSpec.partialFilterExpression,
72
- };
73
- const name = await indexEngine.createIndex(key, options);
74
- createdNames.push(name);
75
- }
76
- const finalIndexes = await indexEngine.listIndexes();
77
- numIndexesAfter = finalIndexes.length;
78
- }
79
- catch (error) {
80
- return {
81
- ok: 0,
82
- errmsg: error.message || 'Failed to create index',
83
- code: error.code || 1,
84
- codeName: error.codeName || 'InternalError',
85
- };
86
- }
87
- return {
88
- ok: 1,
89
- numIndexesBefore,
90
- numIndexesAfter,
91
- createdCollectionAutomatically: false,
92
- commitQuorum: 'votingMembers',
93
- };
94
- }
95
- /**
96
- * Handle dropIndexes command
97
- */
98
- async handleDropIndexes(context) {
99
- const { storage, database, command } = context;
100
- const collection = command.dropIndexes;
101
- const indexName = command.index;
102
- // Check if collection exists
103
- const exists = await storage.collectionExists(database, collection);
104
- if (!exists) {
105
- return {
106
- ok: 0,
107
- errmsg: `ns not found ${database}.${collection}`,
108
- code: 26,
109
- codeName: 'NamespaceNotFound',
110
- };
111
- }
112
- const indexEngine = getIndexEngine(storage, database, collection);
113
- try {
114
- if (indexName === '*') {
115
- // Drop all indexes except _id
116
- await indexEngine.dropAllIndexes();
117
- }
118
- else if (typeof indexName === 'string') {
119
- // Drop specific index by name
120
- await indexEngine.dropIndex(indexName);
121
- }
122
- else if (typeof indexName === 'object') {
123
- // Drop index by key specification
124
- const indexes = await indexEngine.listIndexes();
125
- const keyStr = JSON.stringify(indexName);
126
- for (const idx of indexes) {
127
- if (JSON.stringify(idx.key) === keyStr) {
128
- await indexEngine.dropIndex(idx.name);
129
- break;
130
- }
131
- }
132
- }
133
- return { ok: 1, nIndexesWas: 1 };
134
- }
135
- catch (error) {
136
- return {
137
- ok: 0,
138
- errmsg: error.message || 'Failed to drop index',
139
- code: error.code || 27,
140
- codeName: error.codeName || 'IndexNotFound',
141
- };
142
- }
143
- }
144
- /**
145
- * Handle listIndexes command
146
- */
147
- async handleListIndexes(context) {
148
- const { storage, database, command } = context;
149
- const collection = command.listIndexes;
150
- const cursor = command.cursor || {};
151
- const batchSize = cursor.batchSize || 101;
152
- // Check if collection exists
153
- const exists = await storage.collectionExists(database, collection);
154
- if (!exists) {
155
- return {
156
- ok: 0,
157
- errmsg: `ns not found ${database}.${collection}`,
158
- code: 26,
159
- codeName: 'NamespaceNotFound',
160
- };
161
- }
162
- const indexEngine = getIndexEngine(storage, database, collection);
163
- const indexes = await indexEngine.listIndexes();
164
- // Format indexes for response
165
- const indexDocs = indexes.map(idx => ({
166
- v: idx.v || 2,
167
- key: idx.key,
168
- name: idx.name,
169
- ...(idx.unique ? { unique: idx.unique } : {}),
170
- ...(idx.sparse ? { sparse: idx.sparse } : {}),
171
- ...(idx.expireAfterSeconds !== undefined ? { expireAfterSeconds: idx.expireAfterSeconds } : {}),
172
- }));
173
- return {
174
- ok: 1,
175
- cursor: {
176
- id: plugins.bson.Long.fromNumber(0),
177
- ns: `${database}.${collection}`,
178
- firstBatch: indexDocs,
179
- },
180
- };
181
- }
182
- }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvY29uZ29kYi9zZXJ2ZXIvaGFuZGxlcnMvSW5kZXhIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELHdDQUF3QztBQUN4QyxNQUFNLFlBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUV6RDs7R0FFRztBQUNILFNBQVMsY0FBYyxDQUFDLE9BQVksRUFBRSxRQUFnQixFQUFFLFVBQWtCO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLEdBQUcsUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3hDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBd0I7UUFDbkMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUU1QixJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENB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
@@ -1,76 +0,0 @@
1
- import * as plugins from '../../congodb.plugins.js';
2
- /**
3
- * InsertHandler - Handles insert commands
4
- */
5
- export class InsertHandler {
6
- async handle(context) {
7
- const { storage, database, command, documentSequences } = context;
8
- const collection = command.insert;
9
- if (typeof collection !== 'string') {
10
- return {
11
- ok: 0,
12
- errmsg: 'insert command requires a collection name',
13
- code: 2,
14
- codeName: 'BadValue',
15
- };
16
- }
17
- // Get documents from command or document sequences
18
- let documents = command.documents || [];
19
- // Check for OP_MSG document sequences (for bulk inserts)
20
- if (documentSequences && documentSequences.has('documents')) {
21
- documents = documentSequences.get('documents');
22
- }
23
- if (!Array.isArray(documents) || documents.length === 0) {
24
- return {
25
- ok: 0,
26
- errmsg: 'insert command requires documents array',
27
- code: 2,
28
- codeName: 'BadValue',
29
- };
30
- }
31
- const ordered = command.ordered !== false;
32
- const writeErrors = [];
33
- let insertedCount = 0;
34
- // Ensure collection exists
35
- await storage.createCollection(database, collection);
36
- // Insert documents
37
- for (let i = 0; i < documents.length; i++) {
38
- const doc = documents[i];
39
- try {
40
- // Ensure _id exists
41
- if (!doc._id) {
42
- doc._id = new plugins.bson.ObjectId();
43
- }
44
- await storage.insertOne(database, collection, doc);
45
- insertedCount++;
46
- }
47
- catch (error) {
48
- const writeError = {
49
- index: i,
50
- code: error.code || 11000,
51
- errmsg: error.message || 'Insert failed',
52
- };
53
- // Check for duplicate key error
54
- if (error.message?.includes('Duplicate key')) {
55
- writeError.code = 11000;
56
- writeError.keyPattern = { _id: 1 };
57
- writeError.keyValue = { _id: doc._id };
58
- }
59
- writeErrors.push(writeError);
60
- if (ordered) {
61
- // Stop on first error for ordered inserts
62
- break;
63
- }
64
- }
65
- }
66
- const response = {
67
- ok: 1,
68
- n: insertedCount,
69
- };
70
- if (writeErrors.length > 0) {
71
- response.writeErrors = writeErrors;
72
- }
73
- return response;
74
- }
75
- }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zZXJ0SGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2NvbmdvZGIvc2VydmVyL2hhbmRsZXJzL0luc2VydEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUdwRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBd0I7UUFDbkMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWxFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxPQUFPO2dCQUNMLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE1BQU0sRUFBRSwyQ0FBMkM7Z0JBQ25ELElBQUksRUFBRSxDQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2FBQ3JCLENBQUM7UUFDSixDQUFDO1FBRUQsbURBQW1EO1FBQ25ELElBQUksU0FBUyxHQUE0QixPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUVqRSx5REFBeUQ7UUFDekQsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxTQUFTLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hELE9BQU87Z0JBQ0wsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsTUFBTSxFQUFFLHlDQUF5QztnQkFDakQsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsUUFBUSxFQUFFLFVBQVU7YUFDckIsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBNEIsRUFBRSxDQUFDO1FBQ2hELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUV0QiwyQkFBMkI7UUFDM0IsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJELG1CQUFtQjtRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6QixJQUFJLENBQUM7Z0JBQ0gsb0JBQW9CO2dCQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNiLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QyxDQUFDO2dCQUVELE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRCxhQUFhLEVBQUUsQ0FBQztZQUNsQixDQUFDO1lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxVQUFVLEdBQTBCO29CQUN4QyxLQUFLLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLO29CQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO2lCQUN6QyxDQUFDO2dCQUVGLGdDQUFnQztnQkFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUM3QyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDeEIsVUFBVSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pDLENBQUM7Z0JBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFN0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWiwwQ0FBMEM7b0JBQzFDLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQTBCO1lBQ3RDLEVBQUUsRUFBRSxDQUFDO1lBQ0wsQ0FBQyxFQUFFLGFBQWE7U0FDakIsQ0FBQztRQUVGLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIn0=
@@ -1,270 +0,0 @@
1
- import * as plugins from '../../congodb.plugins.js';
2
- import { QueryEngine } from '../../engine/QueryEngine.js';
3
- import { UpdateEngine } from '../../engine/UpdateEngine.js';
4
- /**
5
- * UpdateHandler - Handles update, findAndModify commands
6
- */
7
- export class UpdateHandler {
8
- async handle(context) {
9
- const { command } = context;
10
- // Check findAndModify first since it also has an 'update' field
11
- if (command.findAndModify) {
12
- return this.handleFindAndModify(context);
13
- }
14
- else if (command.update && typeof command.update === 'string') {
15
- // 'update' command has collection name as the value
16
- return this.handleUpdate(context);
17
- }
18
- return {
19
- ok: 0,
20
- errmsg: 'Unknown update-related command',
21
- code: 59,
22
- codeName: 'CommandNotFound',
23
- };
24
- }
25
- /**
26
- * Handle update command
27
- */
28
- async handleUpdate(context) {
29
- const { storage, database, command, documentSequences } = context;
30
- const collection = command.update;
31
- if (typeof collection !== 'string') {
32
- return {
33
- ok: 0,
34
- errmsg: 'update command requires a collection name',
35
- code: 2,
36
- codeName: 'BadValue',
37
- };
38
- }
39
- // Get updates from command or document sequences
40
- let updates = command.updates || [];
41
- // Check for OP_MSG document sequences
42
- if (documentSequences && documentSequences.has('updates')) {
43
- updates = documentSequences.get('updates');
44
- }
45
- if (!Array.isArray(updates) || updates.length === 0) {
46
- return {
47
- ok: 0,
48
- errmsg: 'update command requires updates array',
49
- code: 2,
50
- codeName: 'BadValue',
51
- };
52
- }
53
- const ordered = command.ordered !== false;
54
- const writeErrors = [];
55
- let totalMatched = 0;
56
- let totalModified = 0;
57
- let totalUpserted = 0;
58
- const upserted = [];
59
- // Ensure collection exists
60
- await storage.createCollection(database, collection);
61
- for (let i = 0; i < updates.length; i++) {
62
- const updateSpec = updates[i];
63
- const filter = updateSpec.q || updateSpec.filter || {};
64
- const update = updateSpec.u || updateSpec.update || {};
65
- const multi = updateSpec.multi || false;
66
- const upsert = updateSpec.upsert || false;
67
- const arrayFilters = updateSpec.arrayFilters;
68
- try {
69
- // Get all documents
70
- let documents = await storage.findAll(database, collection);
71
- // Apply filter
72
- let matchingDocs = QueryEngine.filter(documents, filter);
73
- if (matchingDocs.length === 0 && upsert) {
74
- // Upsert: create new document
75
- const newDoc = { _id: new plugins.bson.ObjectId() };
76
- // Apply filter fields to the new document
77
- this.applyFilterToDoc(newDoc, filter);
78
- // Apply update
79
- const updatedDoc = UpdateEngine.applyUpdate(newDoc, update, arrayFilters);
80
- // Handle $setOnInsert
81
- if (update.$setOnInsert) {
82
- Object.assign(updatedDoc, update.$setOnInsert);
83
- }
84
- await storage.insertOne(database, collection, updatedDoc);
85
- totalUpserted++;
86
- upserted.push({ index: i, _id: updatedDoc._id });
87
- }
88
- else {
89
- // Update existing documents
90
- const docsToUpdate = multi ? matchingDocs : matchingDocs.slice(0, 1);
91
- totalMatched += docsToUpdate.length;
92
- for (const doc of docsToUpdate) {
93
- const updatedDoc = UpdateEngine.applyUpdate(doc, update, arrayFilters);
94
- // Check if document actually changed
95
- const changed = JSON.stringify(doc) !== JSON.stringify(updatedDoc);
96
- if (changed) {
97
- await storage.updateById(database, collection, doc._id, updatedDoc);
98
- totalModified++;
99
- }
100
- }
101
- }
102
- }
103
- catch (error) {
104
- writeErrors.push({
105
- index: i,
106
- code: error.code || 1,
107
- errmsg: error.message || 'Update failed',
108
- });
109
- if (ordered) {
110
- break;
111
- }
112
- }
113
- }
114
- const response = {
115
- ok: 1,
116
- n: totalMatched + totalUpserted,
117
- nModified: totalModified,
118
- };
119
- if (upserted.length > 0) {
120
- response.upserted = upserted;
121
- }
122
- if (writeErrors.length > 0) {
123
- response.writeErrors = writeErrors;
124
- }
125
- return response;
126
- }
127
- /**
128
- * Handle findAndModify command
129
- */
130
- async handleFindAndModify(context) {
131
- const { storage, database, command } = context;
132
- const collection = command.findAndModify;
133
- const query = command.query || {};
134
- const update = command.update;
135
- const remove = command.remove || false;
136
- const returnNew = command.new || false;
137
- const upsert = command.upsert || false;
138
- const sort = command.sort;
139
- const fields = command.fields;
140
- const arrayFilters = command.arrayFilters;
141
- // Validate - either update or remove, not both
142
- if (update && remove) {
143
- return {
144
- ok: 0,
145
- errmsg: 'cannot specify both update and remove',
146
- code: 2,
147
- codeName: 'BadValue',
148
- };
149
- }
150
- if (!update && !remove) {
151
- return {
152
- ok: 0,
153
- errmsg: 'either update or remove is required',
154
- code: 2,
155
- codeName: 'BadValue',
156
- };
157
- }
158
- // Ensure collection exists
159
- await storage.createCollection(database, collection);
160
- // Get matching documents
161
- let documents = await storage.findAll(database, collection);
162
- let matchingDocs = QueryEngine.filter(documents, query);
163
- // Apply sort if specified
164
- if (sort) {
165
- matchingDocs = QueryEngine.sort(matchingDocs, sort);
166
- }
167
- const doc = matchingDocs[0];
168
- if (remove) {
169
- // Delete operation
170
- if (!doc) {
171
- return { ok: 1, value: null };
172
- }
173
- await storage.deleteById(database, collection, doc._id);
174
- let result = doc;
175
- if (fields) {
176
- result = QueryEngine.project([doc], fields)[0];
177
- }
178
- return {
179
- ok: 1,
180
- value: result,
181
- lastErrorObject: {
182
- n: 1,
183
- },
184
- };
185
- }
186
- else {
187
- // Update operation
188
- if (!doc && !upsert) {
189
- return { ok: 1, value: null };
190
- }
191
- let resultDoc;
192
- let originalDoc = null;
193
- let isUpsert = false;
194
- if (doc) {
195
- // Update existing
196
- originalDoc = { ...doc };
197
- resultDoc = UpdateEngine.applyUpdate(doc, update, arrayFilters);
198
- await storage.updateById(database, collection, doc._id, resultDoc);
199
- }
200
- else {
201
- // Upsert
202
- isUpsert = true;
203
- const newDoc = { _id: new plugins.bson.ObjectId() };
204
- this.applyFilterToDoc(newDoc, query);
205
- resultDoc = UpdateEngine.applyUpdate(newDoc, update, arrayFilters);
206
- if (update.$setOnInsert) {
207
- Object.assign(resultDoc, update.$setOnInsert);
208
- }
209
- await storage.insertOne(database, collection, resultDoc);
210
- }
211
- // Apply projection
212
- let returnValue = returnNew ? resultDoc : (originalDoc || null);
213
- if (returnValue && fields) {
214
- returnValue = QueryEngine.project([returnValue], fields)[0];
215
- }
216
- const response = {
217
- ok: 1,
218
- value: returnValue,
219
- lastErrorObject: {
220
- n: 1,
221
- updatedExisting: !isUpsert && doc !== undefined,
222
- },
223
- };
224
- if (isUpsert) {
225
- response.lastErrorObject.upserted = resultDoc._id;
226
- }
227
- return response;
228
- }
229
- }
230
- /**
231
- * Apply filter equality conditions to a new document (for upsert)
232
- */
233
- applyFilterToDoc(doc, filter) {
234
- for (const [key, value] of Object.entries(filter)) {
235
- // Skip operators
236
- if (key.startsWith('$'))
237
- continue;
238
- // Handle nested paths
239
- if (typeof value === 'object' && value !== null) {
240
- // Check if it's an operator
241
- const valueKeys = Object.keys(value);
242
- if (valueKeys.some(k => k.startsWith('$'))) {
243
- // Extract equality value from $eq if present
244
- if ('$eq' in value) {
245
- this.setNestedValue(doc, key, value.$eq);
246
- }
247
- continue;
248
- }
249
- }
250
- // Direct value assignment
251
- this.setNestedValue(doc, key, value);
252
- }
253
- }
254
- /**
255
- * Set a nested value using dot notation
256
- */
257
- setNestedValue(obj, path, value) {
258
- const parts = path.split('.');
259
- let current = obj;
260
- for (let i = 0; i < parts.length - 1; i++) {
261
- const part = parts[i];
262
- if (!(part in current)) {
263
- current[part] = {};
264
- }
265
- current = current[part];
266
- }
267
- current[parts[parts.length - 1]] = value;
268
- }
269
- }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBkYXRlSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2NvbmdvZGIvc2VydmVyL2hhbmRsZXJzL1VwZGF0ZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUF3QjtRQUNuQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTVCLGdFQUFnRTtRQUNoRSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoRSxvREFBb0Q7WUFDcEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxNQUFNLEVBQUUsZ0NBQWdDO1lBQ3hDLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLGlCQUFpQjtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUF3QjtRQUNqRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFbEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNs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
@@ -1,10 +0,0 @@
1
- // Export all command handlers
2
- export { HelloHandler } from './HelloHandler.js';
3
- export { InsertHandler } from './InsertHandler.js';
4
- export { FindHandler } from './FindHandler.js';
5
- export { UpdateHandler } from './UpdateHandler.js';
6
- export { DeleteHandler } from './DeleteHandler.js';
7
- export { AggregateHandler } from './AggregateHandler.js';
8
- export { IndexHandler } from './IndexHandler.js';
9
- export { AdminHandler } from './AdminHandler.js';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9jb25nb2RiL3NlcnZlci9oYW5kbGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFFOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDIn0=
@@ -1,7 +0,0 @@
1
- // Server module exports
2
- export { CongoServer } from './CongoServer.js';
3
- export { WireProtocol } from './WireProtocol.js';
4
- export { CommandRouter } from './CommandRouter.js';
5
- // Export handlers
6
- export * from './handlers/index.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25nb2RiL3NlcnZlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFFeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsa0JBQWtCO0FBQ2xCLGNBQWMscUJBQXFCLENBQUMifQ==