mongoku
Version:
[](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml)
241 lines (234 loc) • 8.41 kB
JavaScript
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