UNPKG

mongoku

Version:

[![CI](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml/badge.svg)](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml)

241 lines (234 loc) 8.41 kB
import { p as parseJSON, v as validateAggregationPipeline, i as isEmptyObject } from './jsonParser-C3QUcODD.js'; import { J as JsonEncoder } from './JsonEncoder-Dgtqxb_U.js'; import { l as logger } from './logger-PfH_grbh.js'; import { g as getMongo } from './mongo-B92d7zNj.js'; import 'esprima'; import 'mongodb'; import './shared-server-BmU87nph.js'; import 'async_hooks'; import 'node:util'; import 'dns/promises'; import 'url'; import 'node:fs'; import 'node:os'; import 'node:path'; const load$1 = async (data) => { return { ...data.data, categories: [ { key: "documents", label: "Documents" }, { key: "indexes", label: "Indexes" }, { key: "mappings", label: "Mappings" }, { key: "schema", label: "Schema" } ] }; }; var _page_ts = /*#__PURE__*/Object.freeze({ __proto__: null, load: load$1 }); const load = async ({ params, url }) => { const query = url.searchParams.get("query") || "{}"; const sort = url.searchParams.get("sort") || "{}"; const project = url.searchParams.get("project") || "{}"; const skip = parseInt(url.searchParams.get("skip") || "0", 10); const limit = parseInt(url.searchParams.get("limit") || "20", 10); const mode = url.searchParams.get("mode") || "query"; const field = url.searchParams.get("field") || ""; const computedParams = { query, sort, project, skip, limit, mode, field }; let queryDoc; let parseError = null; try { queryDoc = parseJSON(query, { allowArray: true }); } catch (err) { parseError = `Invalid query: ${err}`; } if (!parseError) { try { parseJSON(sort); } catch (err) { parseError = `Invalid sort: ${err}`; } } if (!parseError) { try { parseJSON(project); } catch (err) { parseError = `Invalid project: ${err}`; } } if (parseError) { return { results: Promise.resolve({ data: [], error: parseError }), count: Promise.resolve({ data: 0, error: null }), params: computedParams }; } const sortDoc = parseJSON(sort); const projectDoc = parseJSON(project); const mongo = await getMongo(); const client = mongo.getClient(params.server); const collection = client.db(params.database).collection(params.collection); if (mode === "distinct") { if (!field) { return { results: Promise.resolve({ data: [], error: "Invalid distinct query: field name is required" }), count: Promise.resolve({ data: 0, error: null }), mappings: await client.getMappings(params.database, params.collection), params: computedParams }; } const resultsPromise2 = collection.distinct(field, JsonEncoder.decode(queryDoc), { maxTimeMS: mongo.getQueryTimeout() }).then((results) => ({ data: results.map((value) => JsonEncoder.encode({ value })), error: null })).catch((err) => { logger.error("Error executing distinct:", err); return { data: [], error: `Failed to execute distinct: ${err instanceof Error ? err.message : String(err)}` }; }); const countPromise2 = resultsPromise2.then((result) => ({ data: result.error ? 0 : result.data.length, error: null })); return { results: resultsPromise2, count: countPromise2, mappings: await client.getMappings(params.database, params.collection), params: computedParams }; } if (mode === "aggregation" && Array.isArray(queryDoc)) { try { validateAggregationPipeline(queryDoc); } catch (err) { const validationError = `Invalid aggregation pipeline: ${err instanceof Error ? err.message : String(err)}`; return { results: Promise.resolve({ data: [], error: validationError }), count: Promise.resolve({ data: 0, error: null }), params: computedParams }; } const pipeline = JsonEncoder.decode(queryDoc); const resultsPromise2 = collection.aggregate( [ ...pipeline, ...isEmptyObject(projectDoc) ? [] : [{ $project: projectDoc }], ...isEmptyObject(sortDoc) ? [] : [{ $sort: sortDoc }], { $limit: limit }, { $skip: skip } ], { maxTimeMS: mongo.getQueryTimeout() } ).map((obj) => JsonEncoder.encode(obj)).toArray().then((results) => ({ data: results, error: null })).catch((err) => { logger.error("Error executing aggregation:", err); return { data: [], error: `Failed to execute aggregation: ${err instanceof Error ? err.message : String(err)}` }; }); const countPromise2 = collection.aggregate([...pipeline, { $count: "count" }], { maxTimeMS: mongo.getCountTimeout() }).next().then((result) => ({ data: result?.count ?? 0, error: null })).catch((err) => { logger.error("Error counting documents:", err); return { data: 0, error: `Failed to count documents: ${err instanceof Error ? err.message : String(err)}` }; }); return { results: resultsPromise2, count: countPromise2, mappings: await client.getMappings(params.database, params.collection), params: computedParams }; } const resultsPromise = collection.find(JsonEncoder.decode(queryDoc), { maxTimeMS: mongo.getQueryTimeout() }).project(projectDoc).sort(JsonEncoder.decode(sortDoc)).limit(limit).skip(skip).map((obj) => JsonEncoder.encode(obj)).toArray().then((results) => ({ data: results, error: null })).catch((err) => { logger.error("Error fetching query results:", err); return { data: [], error: `Failed to fetch query results: ${err instanceof Error ? err.message : String(err)}` }; }); const countPromise = (async () => { try { if (queryDoc && Object.keys(queryDoc).length > 0) { return { data: await collection.countDocuments(JsonEncoder.decode(queryDoc), { maxTimeMS: mongo.getCountTimeout() }), error: null }; } else { return { data: await collection.estimatedDocumentCount(), error: null }; } } catch (err) { logger.error("Error counting documents:", err); return { data: 0, error: `Failed to count documents: ${err instanceof Error ? err.message : String(err)}` }; } })(); return { // Stream these promises to the client results: resultsPromise, count: countPromise, mappings: await client.getMappings(params.database, params.collection), params: computedParams }; }; var _page_server_ts = /*#__PURE__*/Object.freeze({ __proto__: null, load: load }); const index = 11; let component_cache; const component = async () => component_cache ??= (await import('./_page.svelte-C_GX0K8M.js')).default; const universal_id = "src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.ts"; const server_id = "src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.server.ts"; const imports = ["_app/immutable/nodes/11.fvrVbout.js","_app/immutable/chunks/DaMh_eeB.js","_app/immutable/chunks/IwGwbOe7.js","_app/immutable/chunks/BDGd1aqF.js","_app/immutable/chunks/DFXj4NOH.js","_app/immutable/chunks/951V-MIZ.js","_app/immutable/chunks/CCOVnadf.js","_app/immutable/chunks/DqxUmOYD.js","_app/immutable/chunks/CKvueigk.js","_app/immutable/chunks/CmI1igJD.js","_app/immutable/chunks/Dzt_TFtX.js","_app/immutable/chunks/C6P2UOyZ.js","_app/immutable/chunks/ChWGK2Ce.js","_app/immutable/chunks/YMZQSnF3.js","_app/immutable/chunks/v8XDA7ui.js","_app/immutable/chunks/BUO1EOQu.js","_app/immutable/chunks/CkMoyTwc.js","_app/immutable/chunks/DCAtHodH.js","_app/immutable/chunks/8tf5Lvl3.js","_app/immutable/chunks/Z7BFksgg.js","_app/immutable/chunks/IixngxlS.js","_app/immutable/chunks/CTk2PBcX.js","_app/immutable/chunks/BN_N9-2s.js"]; const stylesheets = ["_app/immutable/assets/JsonValue.D87iuwcT.css","_app/immutable/assets/Modal.CZgFKXkP.css","_app/immutable/assets/11.Wc4MTSzM.css"]; const fonts = []; export { component, fonts, imports, index, _page_server_ts as server, server_id, stylesheets, _page_ts as universal, universal_id }; //# sourceMappingURL=11-BEDQUU1_.js.map