@elaraai/east-node-io 0.0.1-beta.1 → 0.0.1-beta.11
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/README.md +38 -0
- package/dist/compression/gzip.d.ts +108 -0
- package/dist/compression/gzip.d.ts.map +1 -0
- package/dist/compression/gzip.js +153 -0
- package/dist/compression/gzip.js.map +1 -0
- package/dist/compression/index.d.ts +308 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/index.js +289 -0
- package/dist/compression/index.js.map +1 -0
- package/dist/compression/tar.d.ts +115 -0
- package/dist/compression/tar.d.ts.map +1 -0
- package/dist/compression/tar.js +254 -0
- package/dist/compression/tar.js.map +1 -0
- package/dist/compression/types.d.ts +124 -0
- package/dist/compression/types.d.ts.map +1 -0
- package/dist/compression/types.js +106 -0
- package/dist/compression/types.js.map +1 -0
- package/dist/compression/zip.d.ts +121 -0
- package/dist/compression/zip.d.ts.map +1 -0
- package/dist/compression/zip.js +200 -0
- package/dist/compression/zip.js.map +1 -0
- package/dist/connection/index.d.ts +78 -0
- package/dist/connection/index.d.ts.map +1 -0
- package/dist/connection/index.js +134 -0
- package/dist/connection/index.js.map +1 -0
- package/dist/format/index.d.ts +421 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +326 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/types.d.ts +176 -0
- package/dist/format/types.d.ts.map +1 -0
- package/dist/format/types.js +122 -0
- package/dist/format/types.js.map +1 -0
- package/dist/format/xlsx.d.ts +178 -0
- package/dist/format/xlsx.d.ts.map +1 -0
- package/dist/format/xlsx.js +313 -0
- package/dist/format/xlsx.js.map +1 -0
- package/dist/format/xml.d.ts +302 -0
- package/dist/format/xml.d.ts.map +1 -0
- package/dist/format/xml.js +602 -0
- package/dist/format/xml.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/nosql/index.d.ts +503 -0
- package/dist/nosql/index.d.ts.map +1 -0
- package/dist/nosql/index.js +483 -0
- package/dist/nosql/index.js.map +1 -0
- package/dist/nosql/mongodb.d.ts +306 -0
- package/dist/nosql/mongodb.d.ts.map +1 -0
- package/dist/nosql/mongodb.js +552 -0
- package/dist/nosql/mongodb.js.map +1 -0
- package/dist/nosql/redis.d.ts +268 -0
- package/dist/nosql/redis.d.ts.map +1 -0
- package/dist/nosql/redis.js +371 -0
- package/dist/nosql/redis.js.map +1 -0
- package/dist/nosql/types.d.ts +70 -0
- package/dist/nosql/types.d.ts.map +1 -0
- package/dist/nosql/types.js +79 -0
- package/dist/nosql/types.js.map +1 -0
- package/dist/platform.d.ts +12 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +51 -0
- package/dist/platform.js.map +1 -0
- package/dist/sql/index.d.ts +777 -0
- package/dist/sql/index.d.ts.map +1 -0
- package/dist/sql/index.js +515 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/mysql.d.ts +238 -0
- package/dist/sql/mysql.d.ts.map +1 -0
- package/dist/sql/mysql.js +396 -0
- package/dist/sql/mysql.js.map +1 -0
- package/dist/sql/postgres.d.ts +237 -0
- package/dist/sql/postgres.d.ts.map +1 -0
- package/dist/sql/postgres.js +381 -0
- package/dist/sql/postgres.js.map +1 -0
- package/dist/sql/sqlite.d.ts +217 -0
- package/dist/sql/sqlite.d.ts.map +1 -0
- package/dist/sql/sqlite.js +366 -0
- package/dist/sql/sqlite.js.map +1 -0
- package/dist/sql/types.d.ts +205 -0
- package/dist/sql/types.d.ts.map +1 -0
- package/dist/sql/types.js +175 -0
- package/dist/sql/types.js.map +1 -0
- package/dist/storage/index.d.ts +304 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +234 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/s3.d.ts +373 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +502 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/types.d.ts +117 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +94 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/transfer/ftp.d.ts +333 -0
- package/dist/transfer/ftp.d.ts.map +1 -0
- package/dist/transfer/ftp.js +437 -0
- package/dist/transfer/ftp.js.map +1 -0
- package/dist/transfer/index.d.ts +456 -0
- package/dist/transfer/index.d.ts.map +1 -0
- package/dist/transfer/index.js +414 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/transfer/sftp.d.ts +333 -0
- package/dist/transfer/sftp.d.ts.map +1 -0
- package/dist/transfer/sftp.js +436 -0
- package/dist/transfer/sftp.js.map +1 -0
- package/dist/transfer/types.d.ts +108 -0
- package/dist/transfer/types.d.ts.map +1 -0
- package/dist/transfer/types.js +110 -0
- package/dist/transfer/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +17 -9
|
@@ -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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"}
|