UNPKG

mongoku

Version:

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

188 lines (185 loc) 11.7 kB
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