mongoku
Version:
[](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml)
188 lines (185 loc) • 11.7 kB
JavaScript
import './async-DUoD1OpG.js';
import { s as stringify, a as attr, e as escape_html, b as ensure_array_like } from './root-otUAnOAR.js';
import './servers.remote-CGenkEHX.js';
import { r as resolve } from './server2-D_y4YbpC.js';
import { P as Panel } from './Panel-C6VWd6JD.js';
import './shared-server-BmU87nph.js';
import './utils-BQzn9ikS.js';
import './shared-DlqhoNLb.js';
import './index-NcxaM188.js';
import './jsonParser-C3QUcODD.js';
import 'esprima';
import './JsonEncoder-Dgtqxb_U.js';
import 'mongodb';
import './logger-PfH_grbh.js';
import 'async_hooks';
import 'node:util';
import './mongo-B92d7zNj.js';
import 'dns/promises';
import 'url';
import 'node:fs';
import 'node:os';
import 'node:path';
import './schema-BZonjzNJ.js';
import 'zod';
import './server-Crjo4w1q.js';
import './routing-EDfUNu8L.js';
function _page($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let { data } = $$props;
function normalizeMappingTarget(target) {
if ("type" in target) {
return target;
}
return {
type: "document",
collection: target.collection,
on: target.on
};
}
let mappingsArray = Object.entries(data.mappings).map(([fieldPath, targets]) => ({
fieldPath,
targets: (Array.isArray(targets) ? targets : [targets]).map(normalizeMappingTarget)
}));
{
let actions = function($$renderer3) {
$$renderer3.push(`<button class="btn btn-outline-light btn-sm -my-2 hover:bg-[var(--color-3)]">🤖 AI Helper</button> `);
if (!data.readOnly) {
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<button class="btn btn-success btn-sm -my-2">Save</button>`);
} else {
$$renderer3.push("<!--[-1-->");
}
$$renderer3.push(`<!--]-->`);
};
Panel($$renderer2, {
title: `Mappings for ${stringify(data.collection)}`,
titleClass: "py-2",
actions,
children: ($$renderer3) => {
$$renderer3.push(`<div class="p-4"><div class="mb-4"><p class="mb-3">Define relationships between collections or external URLs to enable hover tooltips, navigation on foreign key
fields, and clickable external links. This will be stored in the <code class="px-1 bg-[var(--light-background)] rounded">mongoku.mappings</code> collection as a document with <a${attr("href", resolve(`/servers/${data.server}/databases/${data.database}/collections/mongoku.mappings/documents/${data.collection}`))} class="text-blue-500">_id: "${escape_html(data.collection)}"</a>.</p> <details class="mb-2" style="color: var(--text-secondary);"><summary class="cursor-pointer font-medium mb-2">Examples</summary> <div class="mt-2 space-y-3"><div><div class="font-medium mb-1">Document Mapping Example:</div> <div class="mb-1">Document in collection <code class="px-1 bg-[var(--light-background)] rounded">posts</code>:</div> <code class="block px-2 py-1 bg-[var(--light-background)] rounded text-xs mb-2">{ _id: "post1", title: "Hello", authorId: "user123", comments: [{authorId: "user456", text:
"Nice!"}] }</code> <div class="text space-y-1"><div>→ Mapping 1: Field path <code class="px-1 bg-[var(--light-background)] rounded">authorId</code>, type <strong>document</strong>, target collection <code class="px-1 bg-[var(--light-background)] rounded">users</code>, target field <code class="px-1 bg-[var(--light-background)] rounded">_id</code></div> <div>→ Mapping 2: Field path <code class="px-1 bg-[var(--light-background)] rounded">comments.authorId</code>, type <strong>document</strong>, target collection <code class="px-1 bg-[var(--light-background)] rounded">users</code>, target field <code class="px-1 bg-[var(--light-background)] rounded">_id</code></div></div></div> <div><div class="font-medium mb-1">URL Mapping Example:</div> <div class="mb-1">Document in collection <code class="px-1 bg-[var(--light-background)] rounded">dataset_info_cache</code>:</div> <code class="block px-2 py-1 bg-[var(--light-background)] rounded text-xs mb-2">{ _id: "abc/glue", name: "GLUE Benchmark", ... }</code> <div class="text space-y-1"><div>→ Mapping: Field path <code class="px-1 bg-[var(--light-background)] rounded">_id</code>, type <strong>URL</strong>, template <code class="px-1 bg-[var(--light-background)] rounded">https://hf.co/datasets/{value}</code></div> <div class="ml-4">Result: Clicking the _id will open "https://hf.co/datasets/abc/glue" in a new tab</div></div></div></div></details></div> `);
if (mappingsArray.length > 0) {
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<div class="space-y-4"><!--[-->`);
const each_array = ensure_array_like(mappingsArray);
for (let entryIndex = 0, $$length = each_array.length; entryIndex < $$length; entryIndex++) {
let entry = each_array[entryIndex];
$$renderer3.push(`<div class="border border-[var(--border-color)] rounded p-4"><div class="flex items-start gap-4 mb-3"><div class="flex-1"><label class="block text-sm font-medium mb-1">Field Path <input type="text"${attr("value", entry.fieldPath)} placeholder="e.g., authorId or comments.authorId" class="w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm mt-1"${attr("disabled", data.readOnly, true)}/></label></div> `);
if (!data.readOnly) {
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<button class="btn btn-outline-danger btn-sm mt-6 hover:bg-[rgba(255,59,48,0.1)]">Remove Mapping</button>`);
} else {
$$renderer3.push("<!--[-1-->");
}
$$renderer3.push(`<!--]--></div> <div class="space-y-2"><!--[-->`);
const each_array_1 = ensure_array_like(entry.targets);
for (let targetIndex = 0, $$length2 = each_array_1.length; targetIndex < $$length2; targetIndex++) {
let target = each_array_1[targetIndex];
const targetType = "type" in target ? target.type : "document";
$$renderer3.push(`<div class="flex items-start gap-2 pl-4 border-l-2 border-[var(--color-3)]"><div class="flex-1"><label class="block text-xs mb-1">Type `);
$$renderer3.select(
{
value: targetType,
onchange: (e) => {
const newType = e.currentTarget.value;
if (newType === "document") {
entry.targets[targetIndex] = { type: "document", collection: "", on: "_id" };
} else {
entry.targets[targetIndex] = { type: "url", template: "" };
}
},
class: "w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm mt-1",
disabled: data.readOnly
},
($$renderer4) => {
$$renderer4.option({ value: "document" }, ($$renderer5) => {
$$renderer5.push(`Document`);
});
$$renderer4.option({ value: "url" }, ($$renderer5) => {
$$renderer5.push(`URL`);
});
}
);
$$renderer3.push(`</label></div> `);
if (targetType === "document") {
$$renderer3.push("<!--[0-->");
const collectionTarget = target;
$$renderer3.push(`<div class="flex-1"><label class="block text-xs mb-1">Target Collection `);
$$renderer3.select(
{
value: collectionTarget.collection,
class: "w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm mt-1",
disabled: data.readOnly
},
($$renderer4) => {
$$renderer4.option({ value: "" }, ($$renderer5) => {
$$renderer5.push(`Select collection...`);
});
$$renderer4.push(`<!--[-->`);
const each_array_2 = ensure_array_like(data.availableCollections);
for (let $$index = 0, $$length3 = each_array_2.length; $$index < $$length3; $$index++) {
let col = each_array_2[$$index];
$$renderer4.option({ value: col }, ($$renderer5) => {
$$renderer5.push(`${escape_html(col)}`);
});
}
$$renderer4.push(`<!--]-->`);
}
);
$$renderer3.push(`</label></div> <div class="flex-1"><label class="block text-xs mb-1">Target Field <input type="text"${attr("value", collectionTarget.on)} placeholder="_id" class="w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm mt-1"${attr("disabled", data.readOnly, true)}/></label></div>`);
} else {
$$renderer3.push("<!--[-1-->");
const urlTarget = target;
$$renderer3.push(`<div class="flex-[2]"><label class="block text-xs mb-1">URL Template (use {value} for interpolation) <input type="text"${attr("value", urlTarget.template)} placeholder="https://example.com/{value}" class="w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm mt-1"${attr("disabled", data.readOnly, true)}/></label></div>`);
}
$$renderer3.push(`<!--]--> `);
if (!data.readOnly) {
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<button class="btn btn-outline-danger btn-sm mt-5 hover:bg-[rgba(255,59,48,0.1)]"${attr("disabled", entry.targets.length === 1, true)}>×</button>`);
} else {
$$renderer3.push("<!--[-1-->");
}
$$renderer3.push(`<!--]--></div>`);
}
$$renderer3.push(`<!--]--></div> `);
if (!data.readOnly) {
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<div class="flex gap-2 mt-2 ml-4"><button class="btn btn-outline-light btn-sm hover:bg-[var(--color-3)]">+ Add Document Target</button> <button class="btn btn-outline-light btn-sm hover:bg-[var(--color-3)]">+ Add URL Target</button></div>`);
} else {
$$renderer3.push("<!--[-1-->");
}
$$renderer3.push(`<!--]--></div>`);
}
$$renderer3.push(`<!--]--></div>`);
} else {
$$renderer3.push("<!--[-1-->");
$$renderer3.push(`<div class="text-center py-8" style="color: var(--text-secondary);">No mappings defined yet.</div>`);
}
$$renderer3.push(`<!--]--> `);
if (!data.readOnly) {
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<div class="mt-4">`);
{
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<button class="btn btn-success">+ Add New Mapping</button>`);
}
$$renderer3.push(`<!--]--></div>`);
} else {
$$renderer3.push("<!--[-1-->");
}
$$renderer3.push(`<!--]--></div>`);
},
$$slots: { actions: true, default: true }
});
}
$$renderer2.push(`<!----> `);
{
$$renderer2.push("<!--[-1-->");
}
$$renderer2.push(`<!--]-->`);
});
}
export { _page as default };
//# sourceMappingURL=_page.svelte-CkZUu9Wh.js.map