@elaraai/east-node-io 0.0.1-beta.1 → 0.0.1-beta.3

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 (110) hide show
  1. package/dist/compression/gzip.d.ts +108 -0
  2. package/dist/compression/gzip.d.ts.map +1 -0
  3. package/dist/compression/gzip.js +153 -0
  4. package/dist/compression/gzip.js.map +1 -0
  5. package/dist/compression/index.d.ts +308 -0
  6. package/dist/compression/index.d.ts.map +1 -0
  7. package/dist/compression/index.js +289 -0
  8. package/dist/compression/index.js.map +1 -0
  9. package/dist/compression/tar.d.ts +115 -0
  10. package/dist/compression/tar.d.ts.map +1 -0
  11. package/dist/compression/tar.js +254 -0
  12. package/dist/compression/tar.js.map +1 -0
  13. package/dist/compression/types.d.ts +124 -0
  14. package/dist/compression/types.d.ts.map +1 -0
  15. package/dist/compression/types.js +106 -0
  16. package/dist/compression/types.js.map +1 -0
  17. package/dist/compression/zip.d.ts +121 -0
  18. package/dist/compression/zip.d.ts.map +1 -0
  19. package/dist/compression/zip.js +200 -0
  20. package/dist/compression/zip.js.map +1 -0
  21. package/dist/connection/index.d.ts +78 -0
  22. package/dist/connection/index.d.ts.map +1 -0
  23. package/dist/connection/index.js +134 -0
  24. package/dist/connection/index.js.map +1 -0
  25. package/dist/format/index.d.ts +421 -0
  26. package/dist/format/index.d.ts.map +1 -0
  27. package/dist/format/index.js +326 -0
  28. package/dist/format/index.js.map +1 -0
  29. package/dist/format/types.d.ts +176 -0
  30. package/dist/format/types.d.ts.map +1 -0
  31. package/dist/format/types.js +122 -0
  32. package/dist/format/types.js.map +1 -0
  33. package/dist/format/xlsx.d.ts +178 -0
  34. package/dist/format/xlsx.d.ts.map +1 -0
  35. package/dist/format/xlsx.js +313 -0
  36. package/dist/format/xlsx.js.map +1 -0
  37. package/dist/format/xml.d.ts +302 -0
  38. package/dist/format/xml.d.ts.map +1 -0
  39. package/dist/format/xml.js +602 -0
  40. package/dist/format/xml.js.map +1 -0
  41. package/dist/index.d.ts +25 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +32 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/nosql/index.d.ts +503 -0
  46. package/dist/nosql/index.d.ts.map +1 -0
  47. package/dist/nosql/index.js +483 -0
  48. package/dist/nosql/index.js.map +1 -0
  49. package/dist/nosql/mongodb.d.ts +306 -0
  50. package/dist/nosql/mongodb.d.ts.map +1 -0
  51. package/dist/nosql/mongodb.js +552 -0
  52. package/dist/nosql/mongodb.js.map +1 -0
  53. package/dist/nosql/redis.d.ts +268 -0
  54. package/dist/nosql/redis.d.ts.map +1 -0
  55. package/dist/nosql/redis.js +371 -0
  56. package/dist/nosql/redis.js.map +1 -0
  57. package/dist/nosql/types.d.ts +70 -0
  58. package/dist/nosql/types.d.ts.map +1 -0
  59. package/dist/nosql/types.js +79 -0
  60. package/dist/nosql/types.js.map +1 -0
  61. package/dist/sql/index.d.ts +777 -0
  62. package/dist/sql/index.d.ts.map +1 -0
  63. package/dist/sql/index.js +515 -0
  64. package/dist/sql/index.js.map +1 -0
  65. package/dist/sql/mysql.d.ts +238 -0
  66. package/dist/sql/mysql.d.ts.map +1 -0
  67. package/dist/sql/mysql.js +396 -0
  68. package/dist/sql/mysql.js.map +1 -0
  69. package/dist/sql/postgres.d.ts +237 -0
  70. package/dist/sql/postgres.d.ts.map +1 -0
  71. package/dist/sql/postgres.js +381 -0
  72. package/dist/sql/postgres.js.map +1 -0
  73. package/dist/sql/sqlite.d.ts +217 -0
  74. package/dist/sql/sqlite.d.ts.map +1 -0
  75. package/dist/sql/sqlite.js +366 -0
  76. package/dist/sql/sqlite.js.map +1 -0
  77. package/dist/sql/types.d.ts +205 -0
  78. package/dist/sql/types.d.ts.map +1 -0
  79. package/dist/sql/types.js +175 -0
  80. package/dist/sql/types.js.map +1 -0
  81. package/dist/storage/index.d.ts +304 -0
  82. package/dist/storage/index.d.ts.map +1 -0
  83. package/dist/storage/index.js +234 -0
  84. package/dist/storage/index.js.map +1 -0
  85. package/dist/storage/s3.d.ts +373 -0
  86. package/dist/storage/s3.d.ts.map +1 -0
  87. package/dist/storage/s3.js +502 -0
  88. package/dist/storage/s3.js.map +1 -0
  89. package/dist/storage/types.d.ts +117 -0
  90. package/dist/storage/types.d.ts.map +1 -0
  91. package/dist/storage/types.js +94 -0
  92. package/dist/storage/types.js.map +1 -0
  93. package/dist/transfer/ftp.d.ts +333 -0
  94. package/dist/transfer/ftp.d.ts.map +1 -0
  95. package/dist/transfer/ftp.js +437 -0
  96. package/dist/transfer/ftp.js.map +1 -0
  97. package/dist/transfer/index.d.ts +456 -0
  98. package/dist/transfer/index.d.ts.map +1 -0
  99. package/dist/transfer/index.js +414 -0
  100. package/dist/transfer/index.js.map +1 -0
  101. package/dist/transfer/sftp.d.ts +333 -0
  102. package/dist/transfer/sftp.d.ts.map +1 -0
  103. package/dist/transfer/sftp.js +436 -0
  104. package/dist/transfer/sftp.js.map +1 -0
  105. package/dist/transfer/types.d.ts +108 -0
  106. package/dist/transfer/types.d.ts.map +1 -0
  107. package/dist/transfer/types.js +110 -0
  108. package/dist/transfer/types.js.map +1 -0
  109. package/dist/tsconfig.tsbuildinfo +1 -0
  110. package/package.json +7 -7
@@ -0,0 +1,552 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * MongoDB platform functions for East Node IO.
7
+ *
8
+ * Provides MongoDB document database operations for East programs,
9
+ * including find, insert, update, and delete operations with BSON-compatible values.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { East, DictType, StringType, IntegerType, ArrayType, OptionType, NullType, BooleanType, FloatType, DateTimeType, SortedMap, variant, match, isValueOf } from "@elaraai/east";
14
+ import { EastError } from "@elaraai/east/internal";
15
+ import { MongoClient, Db, ObjectId } from "mongodb";
16
+ import { createHandle, getConnection, closeHandle, closeAllHandles } from '../connection/index.js';
17
+ import { MongoConfigType, BsonValueType, MongoFindOptionsType, ConnectionHandleType } from "./types.js";
18
+ /**
19
+ * BSON document type (dictionary mapping strings to BSON values).
20
+ *
21
+ * Used for MongoDB documents in queries, inserts, and updates.
22
+ */
23
+ export const BsonDocumentType = DictType(StringType, BsonValueType);
24
+ /**
25
+ * Connects to a MongoDB server.
26
+ *
27
+ * Creates a connection to a MongoDB server and returns an opaque handle
28
+ * for use in document operations.
29
+ *
30
+ * @param config - MongoDB connection configuration
31
+ * @returns Connection handle (opaque string)
32
+ *
33
+ * @throws {EastError} When connection fails (location: "mongodb_connect")
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { East, StringType } from "@elaraai/east";
38
+ * import { NoSQL } from "@elaraai/east-node-io";
39
+ *
40
+ * const testConnect = East.function([], StringType, $ => {
41
+ * const config = $.let({
42
+ * uri: "mongodb://localhost:27017",
43
+ * database: "myapp",
44
+ * collection: "users",
45
+ * });
46
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
47
+ * $(NoSQL.MongoDB.close(conn));
48
+ * return $.return(conn);
49
+ * });
50
+ *
51
+ * const compiled = East.compileAsync(testConnect.toIR(), NoSQL.MongoDB.Implementation);
52
+ * const handle = await compiled(); // Returns connection handle string
53
+ * ```
54
+ */
55
+ export const mongodb_connect = East.asyncPlatform("mongodb_connect", [MongoConfigType], ConnectionHandleType);
56
+ /**
57
+ * Finds a single document in MongoDB.
58
+ *
59
+ * Searches for a document matching the query object.
60
+ * Returns None if no document is found.
61
+ *
62
+ * @param handle - Connection handle from mongodb_connect()
63
+ * @param query - Query object to match documents
64
+ * @returns Option containing the document, or None if not found
65
+ *
66
+ * @throws {EastError} When operation fails (location: "mongodb_find_one")
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import { East, StringType, OptionType, variant } from "@elaraai/east";
71
+ * import { NoSQL } from "@elaraai/east-node-io";
72
+ *
73
+ * const findUser = East.function([StringType], OptionType(NoSQL.MongoDB.Types.BsonDocument), ($, username) => {
74
+ * const config = $.let({
75
+ * uri: "mongodb://localhost:27017",
76
+ * database: "myapp",
77
+ * collection: "users",
78
+ * });
79
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
80
+ * const query = $.let(new Map([["username", variant('String', username)]]), NoSQL.MongoDB.Types.BsonDocument);
81
+ * const user = $.let(NoSQL.MongoDB.findOne(conn, query));
82
+ * $(NoSQL.MongoDB.close(conn));
83
+ * return $.return(user);
84
+ * });
85
+ *
86
+ * const compiled = East.compileAsync(findUser.toIR(), NoSQL.MongoDB.Implementation);
87
+ * await compiled("alice"); // variant('some', document) or variant('none', null)
88
+ * ```
89
+ */
90
+ export const mongodb_find_one = East.asyncPlatform("mongodb_find_one", [ConnectionHandleType, BsonDocumentType], OptionType(BsonDocumentType));
91
+ /**
92
+ * Finds multiple documents in MongoDB.
93
+ *
94
+ * Searches for documents matching the query object with optional
95
+ * limit and skip for pagination.
96
+ *
97
+ * @param handle - Connection handle from mongodb_connect()
98
+ * @param query - Query object to match documents
99
+ * @param options - Find options (limit, skip)
100
+ * @returns Array of matching documents
101
+ *
102
+ * @throws {EastError} When operation fails (location: "mongodb_find_many")
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * import { East, ArrayType, variant } from "@elaraai/east";
107
+ * import { NoSQL } from "@elaraai/east-node-io";
108
+ *
109
+ * const findAllUsers = East.function([], ArrayType(NoSQL.MongoDB.Types.BsonDocument), $ => {
110
+ * const config = $.let({
111
+ * uri: "mongodb://localhost:27017",
112
+ * database: "myapp",
113
+ * collection: "users",
114
+ * });
115
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
116
+ * const query = $.let(new Map(), NoSQL.MongoDB.Types.BsonDocument);
117
+ * const options = $.let({ limit: variant('some', 10n), skip: variant('none', null) });
118
+ * const users = $.let(NoSQL.MongoDB.findMany(conn, query, options));
119
+ * $(NoSQL.MongoDB.close(conn));
120
+ * return $.return(users);
121
+ * });
122
+ *
123
+ * const compiled = East.compileAsync(findAllUsers.toIR(), NoSQL.MongoDB.Implementation);
124
+ * await compiled(); // [doc1, doc2, ...]
125
+ * ```
126
+ */
127
+ export const mongodb_find_many = East.asyncPlatform("mongodb_find_many", [ConnectionHandleType, BsonDocumentType, MongoFindOptionsType], ArrayType(BsonDocumentType));
128
+ /**
129
+ * Inserts a document into MongoDB.
130
+ *
131
+ * Inserts a new document into the collection.
132
+ * Returns the inserted document's _id as a string.
133
+ *
134
+ * @param handle - Connection handle from mongodb_connect()
135
+ * @param document - Document to insert
136
+ * @returns The inserted document's _id
137
+ *
138
+ * @throws {EastError} When operation fails (location: "mongodb_insert_one")
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * import { East, StringType, variant } from "@elaraai/east";
143
+ * import { NoSQL } from "@elaraai/east-node-io";
144
+ *
145
+ * const createUser = East.function([StringType, StringType], StringType, ($, username, email) => {
146
+ * const config = $.let({
147
+ * uri: "mongodb://localhost:27017",
148
+ * database: "myapp",
149
+ * collection: "users",
150
+ * });
151
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
152
+ * const document = $.let(new Map([
153
+ * ["username", variant('String', username)],
154
+ * ["email", variant('String', email)],
155
+ * ]), NoSQL.MongoDB.Types.BsonDocument);
156
+ * const id = $.let(NoSQL.MongoDB.insertOne(conn, document));
157
+ * $(NoSQL.MongoDB.close(conn));
158
+ * return $.return(id);
159
+ * });
160
+ *
161
+ * const compiled = East.compileAsync(createUser.toIR(), NoSQL.MongoDB.Implementation);
162
+ * await compiled("alice", "alice@example.com"); // "507f1f77bcf86cd799439011"
163
+ * ```
164
+ */
165
+ export const mongodb_insert_one = East.asyncPlatform("mongodb_insert_one", [ConnectionHandleType, BsonDocumentType], StringType);
166
+ /**
167
+ * Updates a document in MongoDB.
168
+ *
169
+ * Updates a single document matching the query with the update operations.
170
+ * Returns the number of documents modified (0 or 1).
171
+ *
172
+ * @param handle - Connection handle from mongodb_connect()
173
+ * @param query - Query object to match document
174
+ * @param update - Update operations object
175
+ * @returns Number of documents modified
176
+ *
177
+ * @throws {EastError} When operation fails (location: "mongodb_update_one")
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * import { East, StringType, IntegerType, variant } from "@elaraai/east";
182
+ * import { NoSQL } from "@elaraai/east-node-io";
183
+ *
184
+ * const updateEmail = East.function([StringType, StringType], IntegerType, ($, username, newEmail) => {
185
+ * const config = $.let({
186
+ * uri: "mongodb://localhost:27017",
187
+ * database: "myapp",
188
+ * collection: "users",
189
+ * });
190
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
191
+ * const query = $.let(new Map([["username", variant('String', username)]]), NoSQL.MongoDB.Types.BsonDocument);
192
+ * const update = $.let(new Map([["email", variant('String', newEmail)]]), NoSQL.MongoDB.Types.BsonDocument);
193
+ * const modified = $.let(NoSQL.MongoDB.updateOne(conn, query, update));
194
+ * $(NoSQL.MongoDB.close(conn));
195
+ * return $.return(modified);
196
+ * });
197
+ *
198
+ * const compiled = East.compileAsync(updateEmail.toIR(), NoSQL.MongoDB.Implementation);
199
+ * await compiled("alice", "newemail@example.com"); // 1n (updated) or 0n (not found)
200
+ * ```
201
+ */
202
+ export const mongodb_update_one = East.asyncPlatform("mongodb_update_one", [ConnectionHandleType, BsonDocumentType, BsonDocumentType], IntegerType);
203
+ /**
204
+ * Deletes a document from MongoDB.
205
+ *
206
+ * Deletes a single document matching the query object.
207
+ * Returns the number of documents deleted (0 or 1).
208
+ *
209
+ * @param handle - Connection handle from mongodb_connect()
210
+ * @param query - Query object to match document
211
+ * @returns Number of documents deleted
212
+ *
213
+ * @throws {EastError} When operation fails (location: "mongodb_delete_one")
214
+ *
215
+ * @example
216
+ * ```ts
217
+ * import { East, StringType, IntegerType, variant } from "@elaraai/east";
218
+ * import { NoSQL } from "@elaraai/east-node-io";
219
+ *
220
+ * const deleteUser = East.function([StringType], IntegerType, ($, username) => {
221
+ * const config = $.let({
222
+ * uri: "mongodb://localhost:27017",
223
+ * database: "myapp",
224
+ * collection: "users",
225
+ * });
226
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
227
+ * const query = $.let(new Map([["username", variant('String', username)]]), NoSQL.MongoDB.Types.BsonDocument);
228
+ * const deleted = $.let(NoSQL.MongoDB.deleteOne(conn, query));
229
+ * $(NoSQL.MongoDB.close(conn));
230
+ * return $.return(deleted);
231
+ * });
232
+ *
233
+ * const compiled = East.compileAsync(deleteUser.toIR(), NoSQL.MongoDB.Implementation);
234
+ * await compiled("alice"); // 1n (deleted) or 0n (not found)
235
+ * ```
236
+ */
237
+ export const mongodb_delete_one = East.asyncPlatform("mongodb_delete_one", [ConnectionHandleType, BsonDocumentType], IntegerType);
238
+ /**
239
+ * Deletes multiple documents from MongoDB.
240
+ *
241
+ * Deletes all documents matching the query object.
242
+ * Returns the number of documents deleted.
243
+ *
244
+ * @param handle - Connection handle from mongodb_connect()
245
+ * @param query - Query object to match documents (empty query matches all)
246
+ * @returns Number of documents deleted
247
+ *
248
+ * @throws {EastError} When operation fails (location: "mongodb_delete_many")
249
+ *
250
+ * @internal
251
+ */
252
+ export const mongodb_delete_many = East.asyncPlatform("mongodb_delete_many", [ConnectionHandleType, BsonDocumentType], IntegerType);
253
+ /**
254
+ * Closes a MongoDB connection.
255
+ *
256
+ * Closes the MongoDB connection and releases all resources.
257
+ *
258
+ * @param handle - Connection handle from mongodb_connect()
259
+ * @returns Null on success
260
+ *
261
+ * @throws {EastError} When handle is invalid (location: "mongodb_close")
262
+ *
263
+ * @example
264
+ * ```ts
265
+ * import { East, NullType } from "@elaraai/east";
266
+ * import { NoSQL } from "@elaraai/east-node-io";
267
+ *
268
+ * const cleanup = East.function([], NullType, $ => {
269
+ * const config = $.let({
270
+ * uri: "mongodb://localhost:27017",
271
+ * database: "myapp",
272
+ * collection: "users",
273
+ * });
274
+ * const conn = $.let(NoSQL.MongoDB.connect(config));
275
+ * // ... do work ...
276
+ * $(NoSQL.MongoDB.close(conn));
277
+ * return $.return(null);
278
+ * });
279
+ *
280
+ * const compiled = East.compileAsync(cleanup.toIR(), NoSQL.MongoDB.Implementation);
281
+ * await compiled();
282
+ * ```
283
+ */
284
+ export const mongodb_close = East.asyncPlatform("mongodb_close", [ConnectionHandleType], NullType);
285
+ /**
286
+ * Closes all active MongoDB connections.
287
+ *
288
+ * Utility function for test cleanup. Closes all open connection handles,
289
+ * useful for ensuring cleanup even when tests fail.
290
+ *
291
+ * @returns Null on success
292
+ *
293
+ * @internal
294
+ */
295
+ export const mongodb_close_all = East.asyncPlatform("mongodb_close_all", [], NullType);
296
+ /**
297
+ * Converts East BsonValue to native MongoDB value.
298
+ *
299
+ * @param value - East BsonValue variant
300
+ * @returns JavaScript value for MongoDB
301
+ * @internal
302
+ */
303
+ function bsonValueToNative(value) {
304
+ return match(value, {
305
+ String: (v) => v,
306
+ Integer: (v) => Number(v), // MongoDB uses Numbers, not BigInt
307
+ Float: (v) => v,
308
+ Boolean: (v) => v,
309
+ Null: () => null,
310
+ Array: (arr) => arr.map(bsonValueToNative),
311
+ Object: (obj) => {
312
+ const result = {};
313
+ for (const [key, val] of obj.entries()) {
314
+ result[key] = bsonValueToNative(val);
315
+ }
316
+ return result;
317
+ },
318
+ });
319
+ }
320
+ /**
321
+ * Converts native MongoDB value to East BsonValue variant.
322
+ *
323
+ * @param value - Native JavaScript value from MongoDB
324
+ * @returns East BsonValue variant
325
+ * @internal
326
+ */
327
+ function nativeToBsonValue(value) {
328
+ if (isValueOf(value, NullType)) {
329
+ return variant('Null', null);
330
+ }
331
+ else if (isValueOf(value, BooleanType)) {
332
+ return variant('Boolean', value);
333
+ }
334
+ else if (isValueOf(value, IntegerType)) {
335
+ return variant('Integer', value);
336
+ }
337
+ else if (isValueOf(value, FloatType)) {
338
+ // MongoDB returns numbers - check if integer or float
339
+ if (Number.isInteger(value)) {
340
+ return variant('Integer', BigInt(value));
341
+ }
342
+ else {
343
+ return variant('Float', value);
344
+ }
345
+ }
346
+ else if (isValueOf(value, StringType)) {
347
+ return variant('String', value);
348
+ }
349
+ else if (isValueOf(value, DateTimeType)) {
350
+ // MongoDB may return Date objects - convert to Integer (Unix timestamp)
351
+ return variant('Integer', BigInt(Math.floor(value.getTime() / 1000)));
352
+ }
353
+ else if (value instanceof ObjectId) {
354
+ // MongoDB ObjectId - convert to string
355
+ return variant('String', value.toString());
356
+ }
357
+ else if (Array.isArray(value)) {
358
+ return variant('Array', value.map(nativeToBsonValue));
359
+ }
360
+ else if (typeof value === 'object' && value !== null) {
361
+ const result = new SortedMap();
362
+ for (const [key, val] of Object.entries(value)) {
363
+ result.set(key, nativeToBsonValue(val));
364
+ }
365
+ return variant('Object', result);
366
+ }
367
+ else {
368
+ return variant('Null', null);
369
+ }
370
+ }
371
+ /**
372
+ * Node.js implementation of MongoDB platform functions.
373
+ *
374
+ * Pass this to East.compileAsync() to enable MongoDB operations.
375
+ */
376
+ export const MongoDBImpl = [
377
+ mongodb_connect.implement(async (config) => {
378
+ try {
379
+ const client = new MongoClient(config.uri);
380
+ await client.connect();
381
+ // Store the database and collection context with the client
382
+ const db = client.db(config.database);
383
+ const collection = db.collection(config.collection);
384
+ // Store both client and collection for later use, with cleanup function
385
+ const conn = { client, db, collection };
386
+ const handle = createHandle(conn, async () => await client.close());
387
+ return handle;
388
+ }
389
+ catch (err) {
390
+ throw new EastError(`MongoDB connection failed: ${err.message}`, {
391
+ location: { filename: "mongodb_connect", line: 0n, column: 0n },
392
+ cause: err
393
+ });
394
+ }
395
+ }),
396
+ mongodb_find_one.implement(async (handle, query) => {
397
+ try {
398
+ const { collection } = getConnection(handle);
399
+ // Convert query SortedMap to native object
400
+ const nativeQuery = {};
401
+ for (const [key, value] of query.entries()) {
402
+ nativeQuery[key] = bsonValueToNative(value);
403
+ }
404
+ const doc = await collection.findOne(nativeQuery);
405
+ if (doc === null) {
406
+ return variant('none', null);
407
+ }
408
+ // Convert MongoDB document to East BsonValue SortedMap
409
+ const bsonDict = new SortedMap();
410
+ for (const [key, val] of Object.entries(doc)) {
411
+ bsonDict.set(key, nativeToBsonValue(val));
412
+ }
413
+ return variant('some', bsonDict);
414
+ }
415
+ catch (err) {
416
+ throw new EastError(`MongoDB findOne failed: ${err.message}`, {
417
+ location: { filename: "mongodb_find_one", line: 0n, column: 0n },
418
+ cause: err
419
+ });
420
+ }
421
+ }),
422
+ mongodb_find_many.implement(async (handle, query, options) => {
423
+ try {
424
+ const { collection } = getConnection(handle);
425
+ // Convert query SortedMap to native object
426
+ const nativeQuery = {};
427
+ for (const [key, value] of query.entries()) {
428
+ nativeQuery[key] = bsonValueToNative(value);
429
+ }
430
+ let cursor = collection.find(nativeQuery);
431
+ if (options.limit?.type === 'some') {
432
+ cursor = cursor.limit(Number(options.limit.value));
433
+ }
434
+ if (options.skip?.type === 'some') {
435
+ cursor = cursor.skip(Number(options.skip.value));
436
+ }
437
+ const docs = await cursor.toArray();
438
+ // Convert MongoDB documents to East BsonValue SortedMap array
439
+ const result = [];
440
+ for (const doc of docs) {
441
+ const bsonDict = new SortedMap();
442
+ for (const [key, val] of Object.entries(doc)) {
443
+ bsonDict.set(key, nativeToBsonValue(val));
444
+ }
445
+ result.push(bsonDict);
446
+ }
447
+ return result;
448
+ }
449
+ catch (err) {
450
+ throw new EastError(`MongoDB findMany failed: ${err.message}`, {
451
+ location: { filename: "mongodb_find_many", line: 0n, column: 0n },
452
+ cause: err
453
+ });
454
+ }
455
+ }),
456
+ mongodb_insert_one.implement(async (handle, document) => {
457
+ try {
458
+ const { collection } = getConnection(handle);
459
+ // Convert document SortedMap to native object
460
+ const nativeDoc = {};
461
+ for (const [key, value] of document.entries()) {
462
+ nativeDoc[key] = bsonValueToNative(value);
463
+ }
464
+ const result = await collection.insertOne(nativeDoc);
465
+ return result.insertedId.toString();
466
+ }
467
+ catch (err) {
468
+ throw new EastError(`MongoDB insertOne failed: ${err.message}`, {
469
+ location: { filename: "mongodb_insert_one", line: 0n, column: 0n },
470
+ cause: err
471
+ });
472
+ }
473
+ }),
474
+ mongodb_update_one.implement(async (handle, query, update) => {
475
+ try {
476
+ const { collection } = getConnection(handle);
477
+ // Convert query SortedMap to native object
478
+ const nativeQuery = {};
479
+ for (const [key, value] of query.entries()) {
480
+ nativeQuery[key] = bsonValueToNative(value);
481
+ }
482
+ // Convert update SortedMap to native object
483
+ const nativeUpdate = {};
484
+ for (const [key, value] of update.entries()) {
485
+ nativeUpdate[key] = bsonValueToNative(value);
486
+ }
487
+ const result = await collection.updateOne(nativeQuery, nativeUpdate);
488
+ return BigInt(result.modifiedCount);
489
+ }
490
+ catch (err) {
491
+ throw new EastError(`MongoDB updateOne failed: ${err.message}`, {
492
+ location: { filename: "mongodb_update_one", line: 0n, column: 0n },
493
+ cause: err
494
+ });
495
+ }
496
+ }),
497
+ mongodb_delete_one.implement(async (handle, query) => {
498
+ try {
499
+ const { collection } = getConnection(handle);
500
+ // Convert query SortedMap to native object
501
+ const nativeQuery = {};
502
+ for (const [key, value] of query.entries()) {
503
+ nativeQuery[key] = bsonValueToNative(value);
504
+ }
505
+ const result = await collection.deleteOne(nativeQuery);
506
+ return BigInt(result.deletedCount);
507
+ }
508
+ catch (err) {
509
+ throw new EastError(`MongoDB deleteOne failed: ${err.message}`, {
510
+ location: { filename: "mongodb_delete_one", line: 0n, column: 0n },
511
+ cause: err
512
+ });
513
+ }
514
+ }),
515
+ mongodb_delete_many.implement(async (handle, query) => {
516
+ try {
517
+ const { collection } = getConnection(handle);
518
+ // Convert query SortedMap to native object
519
+ const nativeQuery = {};
520
+ for (const [key, value] of query.entries()) {
521
+ nativeQuery[key] = bsonValueToNative(value);
522
+ }
523
+ const result = await collection.deleteMany(nativeQuery);
524
+ return BigInt(result.deletedCount);
525
+ }
526
+ catch (err) {
527
+ throw new EastError(`MongoDB deleteMany failed: ${err.message}`, {
528
+ location: { filename: "mongodb_delete_many", line: 0n, column: 0n },
529
+ cause: err
530
+ });
531
+ }
532
+ }),
533
+ mongodb_close.implement(async (handle) => {
534
+ try {
535
+ const { client } = getConnection(handle);
536
+ await client.close();
537
+ closeHandle(handle);
538
+ return null;
539
+ }
540
+ catch (err) {
541
+ throw new EastError(`MongoDB close failed: ${err.message}`, {
542
+ location: { filename: "mongodb_close", line: 0n, column: 0n },
543
+ cause: err
544
+ });
545
+ }
546
+ }),
547
+ mongodb_close_all.implement(async () => {
548
+ await closeAllHandles();
549
+ return null;
550
+ }),
551
+ ];
552
+ //# sourceMappingURL=mongodb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/nosql/mongodb.ts"],"names":[],"mappings":"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"}