mongoku 2.4.4 → 2.4.5
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/build/client/_app/immutable/assets/0.CEIWAdGZ.css +1 -0
- package/build/client/_app/immutable/assets/0.CEIWAdGZ.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CEIWAdGZ.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{CI_ovvBu.js → 3LgOwb59.js} +1 -1
- package/build/client/_app/immutable/chunks/3LgOwb59.js.br +0 -0
- package/build/client/_app/immutable/chunks/3LgOwb59.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{0x2tqDge.js → BNF3TSWe.js} +1 -1
- package/build/client/_app/immutable/chunks/BNF3TSWe.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNF3TSWe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CH4IMlv6.js +4 -0
- package/build/client/_app/immutable/chunks/CH4IMlv6.js.br +0 -0
- package/build/client/_app/immutable/chunks/CH4IMlv6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DqFgKUuF.js → CMu1ND4u.js} +1 -1
- package/build/client/_app/immutable/chunks/CMu1ND4u.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMu1ND4u.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CeBnCdu0.js +1 -0
- package/build/client/_app/immutable/chunks/CeBnCdu0.js.br +0 -0
- package/build/client/_app/immutable/chunks/CeBnCdu0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{m9KJhr2i.js → CrvogBCO.js} +1 -1
- package/build/client/_app/immutable/chunks/CrvogBCO.js.br +0 -0
- package/build/client/_app/immutable/chunks/CrvogBCO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{SENhER8Y.js → DL_7eGCj.js} +6 -6
- package/build/client/_app/immutable/chunks/DL_7eGCj.js.br +0 -0
- package/build/client/_app/immutable/chunks/DL_7eGCj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/YVSmS-BO.js +1 -0
- package/build/client/_app/immutable/chunks/YVSmS-BO.js.br +0 -0
- package/build/client/_app/immutable/chunks/YVSmS-BO.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.6kvAGzFx.js → app.Bn63r6jq.js} +2 -2
- package/build/client/_app/immutable/entry/app.Bn63r6jq.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Bn63r6jq.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.D-zzQzHa.js +1 -0
- package/build/client/_app/immutable/entry/start.D-zzQzHa.js.br +2 -0
- package/build/client/_app/immutable/entry/start.D-zzQzHa.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0._Ka7l4G7.js +1 -0
- package/build/client/_app/immutable/nodes/0._Ka7l4G7.js.br +0 -0
- package/build/client/_app/immutable/nodes/0._Ka7l4G7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.C6-lRSct.js → 1.C_RZUfKy.js} +1 -1
- package/build/client/_app/immutable/nodes/1.C_RZUfKy.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C_RZUfKy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.P_2uCVkV.js +3 -0
- package/build/client/_app/immutable/nodes/10.P_2uCVkV.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.P_2uCVkV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.D6PMR4JE.js → 11.B9LD_pR3.js} +1 -1
- package/build/client/_app/immutable/nodes/11.B9LD_pR3.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.B9LD_pR3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{12.BaG9yS23.js → 12.DtrR4t5w.js} +1 -1
- package/build/client/_app/immutable/nodes/12.DtrR4t5w.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.DtrR4t5w.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.ClrBypIt.js → 13.BYagUX2D.js} +1 -1
- package/build/client/_app/immutable/nodes/13.BYagUX2D.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BYagUX2D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.C2cwruWu.js → 7.XwiZ31H4.js} +1 -1
- package/build/client/_app/immutable/nodes/7.XwiZ31H4.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.XwiZ31H4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Cgq8c1Pf.js +1 -0
- package/build/client/_app/immutable/nodes/8.Cgq8c1Pf.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Cgq8c1Pf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.ClN4Gbvd.js +2 -0
- package/build/client/_app/immutable/nodes/9.ClN4Gbvd.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.ClN4Gbvd.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-5-SDX-d2.js → 0-DNH-F5x0.js} +4 -4
- package/build/server/chunks/{0-5-SDX-d2.js.map → 0-DNH-F5x0.js.map} +1 -1
- package/build/server/chunks/{1-Cck2Jrzo.js → 1-1_OQTf0e.js} +2 -2
- package/build/server/chunks/{1-Cck2Jrzo.js.map → 1-1_OQTf0e.js.map} +1 -1
- package/build/server/chunks/{10-BV4HPibI.js → 10-4E_aVzT4.js} +58 -36
- package/build/server/chunks/10-4E_aVzT4.js.map +1 -0
- package/build/server/chunks/{11-iazI-4Kb.js → 11-DTyCG8Xj.js} +3 -3
- package/build/server/chunks/{11-iazI-4Kb.js.map → 11-DTyCG8Xj.js.map} +1 -1
- package/build/server/chunks/{12-B0JxHwKO.js → 12-O3oSmD2o.js} +3 -3
- package/build/server/chunks/{12-B0JxHwKO.js.map → 12-O3oSmD2o.js.map} +1 -1
- package/build/server/chunks/{13-IcujVjLI.js → 13-Drp2sCYG.js} +3 -3
- package/build/server/chunks/{13-IcujVjLI.js.map → 13-Drp2sCYG.js.map} +1 -1
- package/build/server/chunks/{7-uVKBumqv.js → 7-DL7-ZmZ2.js} +3 -3
- package/build/server/chunks/{7-uVKBumqv.js.map → 7-DL7-ZmZ2.js.map} +1 -1
- package/build/server/chunks/{8-eWNgFGi6.js → 8-GUonP2Zy.js} +3 -3
- package/build/server/chunks/{8-eWNgFGi6.js.map → 8-GUonP2Zy.js.map} +1 -1
- package/build/server/chunks/{9-C8GLDx_s.js → 9-DQhrhu5o.js} +3 -3
- package/build/server/chunks/{9-C8GLDx_s.js.map → 9-DQhrhu5o.js.map} +1 -1
- package/build/server/chunks/{JsonValue-DiECF6Zd.js → JsonValue-DoGRvQnG.js} +3 -3
- package/build/server/chunks/{JsonValue-DiECF6Zd.js.map → JsonValue-DoGRvQnG.js.map} +1 -1
- package/build/server/chunks/{Panel-DEP08QXV.js → Panel-BHGtM9Vw.js} +2 -2
- package/build/server/chunks/{Panel-DEP08QXV.js.map → Panel-BHGtM9Vw.js.map} +1 -1
- package/build/server/chunks/{PrettyJson-ElzPxPF4.js → PrettyJson-Bnmo1PGg.js} +5 -5
- package/build/server/chunks/{PrettyJson-ElzPxPF4.js.map → PrettyJson-Bnmo1PGg.js.map} +1 -1
- package/build/server/chunks/{Tooltip-DK6Aok7l.js → Tooltip-DAE2mkm6.js} +2 -2
- package/build/server/chunks/{Tooltip-DK6Aok7l.js.map → Tooltip-DAE2mkm6.js.map} +1 -1
- package/build/server/chunks/TooltipTable-xo_OEG9c.js +64 -0
- package/build/server/chunks/TooltipTable-xo_OEG9c.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-CCi6mq1k.js → _layout.svelte-Dji2JJ9X.js} +29 -20
- package/build/server/chunks/_layout.svelte-Dji2JJ9X.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BvjNfjgw.js → _page.svelte-C4rGFSYL.js} +7 -7
- package/build/server/chunks/{_page.svelte-BvjNfjgw.js.map → _page.svelte-C4rGFSYL.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-B4BL5PJR.js → _page.svelte-CJ5HzoD0.js} +4 -4
- package/build/server/chunks/{_page.svelte-B4BL5PJR.js.map → _page.svelte-CJ5HzoD0.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DJFPwyij.js → _page.svelte-ClvvVxpD.js} +101 -35
- package/build/server/chunks/_page.svelte-ClvvVxpD.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DDe4hyAB.js → _page.svelte-D3jyb8d9.js} +6 -6
- package/build/server/chunks/{_page.svelte-DDe4hyAB.js.map → _page.svelte-D3jyb8d9.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BUheieJ5.js → _page.svelte-D9IvgJO5.js} +6 -6
- package/build/server/chunks/{_page.svelte-BUheieJ5.js.map → _page.svelte-D9IvgJO5.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DEe2Kbbw.js → _page.svelte-be8sxgGt.js} +6 -6
- package/build/server/chunks/{_page.svelte-DEe2Kbbw.js.map → _page.svelte-be8sxgGt.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Bj297hp1.js → _page.svelte-x1L5xjgQ.js} +6 -6
- package/build/server/chunks/{_page.svelte-Bj297hp1.js.map → _page.svelte-x1L5xjgQ.js.map} +1 -1
- package/build/server/chunks/{index2-DzKnqQNM.js → index2-eSFyMQpS.js} +2 -2
- package/build/server/chunks/{index2-DzKnqQNM.js.map → index2-eSFyMQpS.js.map} +1 -1
- package/build/server/chunks/{remote-xxtqbu-DBe3CqEJ.js → remote-xxtqbu-ETLGkdRu.js} +2 -2
- package/build/server/chunks/remote-xxtqbu-ETLGkdRu.js.map +1 -0
- package/build/server/chunks/{servers.remote-HDmNH7n4.js → servers.remote-CGies_Na.js} +85 -6
- package/build/server/chunks/servers.remote-CGies_Na.js.map +1 -0
- package/build/server/index.js +2 -2
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +11 -11
- package/build/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/api/servers.remote.ts +91 -2
- package/src/app.css +5 -0
- package/src/lib/actions/clickOutside.ts +24 -0
- package/src/lib/components/Breadcrumbs.svelte +5 -19
- package/src/lib/components/SearchBox.svelte +161 -62
- package/src/lib/components/TooltipTable.svelte +4 -2
- package/src/lib/icons/IconChevronDown.svelte +20 -0
- package/src/lib/icons/IconCopy.svelte +21 -0
- package/src/lib/icons/IconEdit.svelte +21 -0
- package/src/lib/icons/IconPlus.svelte +20 -0
- package/src/lib/icons/IconSortReverse.svelte +23 -0
- package/src/lib/stores/breadcrumbs.svelte.ts +17 -0
- package/src/lib/types.ts +2 -0
- package/src/routes/+layout.svelte +12 -1
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.server.ts +67 -34
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +259 -44
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css +0 -1
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.br +0 -0
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0x2tqDge.js.br +0 -0
- package/build/client/_app/immutable/chunks/0x2tqDge.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CI_ovvBu.js.br +0 -0
- package/build/client/_app/immutable/chunks/CI_ovvBu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cp0n7wR5.js +0 -4
- package/build/client/_app/immutable/chunks/Cp0n7wR5.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cp0n7wR5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DqFgKUuF.js.br +0 -0
- package/build/client/_app/immutable/chunks/DqFgKUuF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/MW_nrxc3.js +0 -1
- package/build/client/_app/immutable/chunks/MW_nrxc3.js.br +0 -0
- package/build/client/_app/immutable/chunks/MW_nrxc3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/SENhER8Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/SENhER8Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/m9KJhr2i.js.br +0 -0
- package/build/client/_app/immutable/chunks/m9KJhr2i.js.gz +0 -0
- package/build/client/_app/immutable/chunks/vsNApJWQ.js +0 -1
- package/build/client/_app/immutable/chunks/vsNApJWQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/vsNApJWQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.6kvAGzFx.js.br +0 -0
- package/build/client/_app/immutable/entry/app.6kvAGzFx.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CNBjelhv.js +0 -1
- package/build/client/_app/immutable/entry/start.CNBjelhv.js.br +0 -2
- package/build/client/_app/immutable/entry/start.CNBjelhv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.ClgWJHZK.js +0 -1
- package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C6-lRSct.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C6-lRSct.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.DIGWL6eC.js +0 -1
- package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.BaG9yS23.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.BaG9yS23.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.ClrBypIt.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.ClrBypIt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.C2cwruWu.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.C2cwruWu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CRDgVKjB.js +0 -1
- package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js +0 -2
- package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.gz +0 -0
- package/build/server/chunks/10-BV4HPibI.js.map +0 -1
- package/build/server/chunks/TooltipTable-DUYKVtrh.js +0 -60
- package/build/server/chunks/TooltipTable-DUYKVtrh.js.map +0 -1
- package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +0 -1
- package/build/server/chunks/_page.svelte-DJFPwyij.js.map +0 -1
- package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +0 -1
- package/build/server/chunks/servers.remote-HDmNH7n4.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
class?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
let { class: className = "w-4 h-4" }: Props = $props();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<svg
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
fill="none"
|
|
13
|
+
stroke="currentColor"
|
|
14
|
+
stroke-width="2"
|
|
15
|
+
stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round"
|
|
17
|
+
class={className}
|
|
18
|
+
>
|
|
19
|
+
<rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
|
|
20
|
+
<path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
class?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
let { class: className = "w-4 h-4" }: Props = $props();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<svg
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
fill="none"
|
|
13
|
+
stroke="currentColor"
|
|
14
|
+
stroke-width="2"
|
|
15
|
+
stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round"
|
|
17
|
+
class={className}
|
|
18
|
+
>
|
|
19
|
+
<path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"></path>
|
|
20
|
+
<path d="m15 5 4 4"></path>
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
class?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
let { class: className = "w-4 h-4" }: Props = $props();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<svg
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
fill="none"
|
|
13
|
+
stroke="currentColor"
|
|
14
|
+
stroke-width="2"
|
|
15
|
+
stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round"
|
|
17
|
+
class={className}
|
|
18
|
+
>
|
|
19
|
+
<path d="M12 5v14M5 12h14" />
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
class?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
let { class: className = "w-4 h-4" }: Props = $props();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<svg
|
|
10
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
fill="none"
|
|
13
|
+
stroke="currentColor"
|
|
14
|
+
stroke-width="2"
|
|
15
|
+
stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round"
|
|
17
|
+
class={className}
|
|
18
|
+
>
|
|
19
|
+
<path d="M3 6h18" />
|
|
20
|
+
<path d="M7 12h10" />
|
|
21
|
+
<path d="M10 18h4" />
|
|
22
|
+
<path d="m7 16 3 3 3-3" />
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { page } from "$app/state";
|
|
2
|
+
|
|
3
|
+
export interface BreadcrumbItem {
|
|
4
|
+
label: string;
|
|
5
|
+
href?: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const breadcrumbs = {
|
|
9
|
+
get items(): BreadcrumbItem[] {
|
|
10
|
+
const list = (page.data.breadcrumbs ?? []) as Array<{ label: string; path: string }>;
|
|
11
|
+
|
|
12
|
+
return list.reduce<BreadcrumbItem[]>(
|
|
13
|
+
(prev, curr) => [...prev, { label: curr.label, href: `${prev.at(-1)?.href ?? ""}${curr.path}` }],
|
|
14
|
+
[],
|
|
15
|
+
);
|
|
16
|
+
},
|
|
17
|
+
};
|
package/src/lib/types.ts
CHANGED
|
@@ -6,13 +6,24 @@
|
|
|
6
6
|
import OriginWarning from "$lib/components/OriginWarning.svelte";
|
|
7
7
|
import PageSwitcher from "$lib/components/PageSwitcher.svelte";
|
|
8
8
|
import ThemeSwitcher from "$lib/components/ThemeSwitcher.svelte";
|
|
9
|
+
import { breadcrumbs } from "$lib/stores/breadcrumbs.svelte";
|
|
9
10
|
import "../app.css";
|
|
10
11
|
|
|
11
12
|
let { children, data } = $props();
|
|
13
|
+
|
|
14
|
+
const pageTitle = $derived.by(() => {
|
|
15
|
+
const items = breadcrumbs.items.slice(-2).reverse();
|
|
16
|
+
|
|
17
|
+
if (items.length === 0) {
|
|
18
|
+
return "Mongoku";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return items.map((b) => b.label).join(" - ");
|
|
22
|
+
});
|
|
12
23
|
</script>
|
|
13
24
|
|
|
14
25
|
<svelte:head>
|
|
15
|
-
<title>
|
|
26
|
+
<title>{pageTitle}</title>
|
|
16
27
|
</svelte:head>
|
|
17
28
|
|
|
18
29
|
<div style="min-height: 100vh">
|
|
@@ -2,7 +2,7 @@ import { validateAggregationPipeline } from "$lib/server/aggregation";
|
|
|
2
2
|
import JsonEncoder from "$lib/server/JsonEncoder";
|
|
3
3
|
import { logger } from "$lib/server/logger";
|
|
4
4
|
import { getMongo } from "$lib/server/mongo";
|
|
5
|
-
import { type MongoDocument } from "$lib/types";
|
|
5
|
+
import { type MongoDocument, type SearchParams } from "$lib/types";
|
|
6
6
|
import { isEmptyObject } from "$lib/utils/isEmptyObject";
|
|
7
7
|
import { parseJSON } from "$lib/utils/jsonParser";
|
|
8
8
|
import type { Document } from "mongodb";
|
|
@@ -14,6 +14,18 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
|
|
14
14
|
const project = url.searchParams.get("project") || "{}";
|
|
15
15
|
const skip = parseInt(url.searchParams.get("skip") || "0", 10);
|
|
16
16
|
const limit = parseInt(url.searchParams.get("limit") || "20", 10);
|
|
17
|
+
const mode = url.searchParams.get("mode") || "query";
|
|
18
|
+
const field = url.searchParams.get("field") || "";
|
|
19
|
+
|
|
20
|
+
const computedParams = {
|
|
21
|
+
query,
|
|
22
|
+
sort,
|
|
23
|
+
project,
|
|
24
|
+
skip,
|
|
25
|
+
limit,
|
|
26
|
+
mode: mode as "query" | "distinct" | "aggregation",
|
|
27
|
+
field,
|
|
28
|
+
} satisfies SearchParams;
|
|
17
29
|
|
|
18
30
|
// Parse JSON strings - return error state if invalid instead of throwing
|
|
19
31
|
let queryDoc: unknown;
|
|
@@ -52,14 +64,7 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
|
|
52
64
|
data: 0,
|
|
53
65
|
error: null,
|
|
54
66
|
}),
|
|
55
|
-
params:
|
|
56
|
-
query,
|
|
57
|
-
sort,
|
|
58
|
-
project,
|
|
59
|
-
skip,
|
|
60
|
-
limit,
|
|
61
|
-
},
|
|
62
|
-
isAggregation: false,
|
|
67
|
+
params: computedParams,
|
|
63
68
|
};
|
|
64
69
|
}
|
|
65
70
|
|
|
@@ -70,7 +75,55 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
|
|
70
75
|
const client = mongo.getClient(params.server);
|
|
71
76
|
const collection = client.db(params.database).collection(params.collection);
|
|
72
77
|
|
|
73
|
-
|
|
78
|
+
// Handle distinct mode
|
|
79
|
+
if (mode === "distinct") {
|
|
80
|
+
// Validate distinct field is provided
|
|
81
|
+
if (!field) {
|
|
82
|
+
return {
|
|
83
|
+
results: Promise.resolve({
|
|
84
|
+
data: [],
|
|
85
|
+
error: "Invalid distinct query: field name is required",
|
|
86
|
+
}),
|
|
87
|
+
count: Promise.resolve({
|
|
88
|
+
data: 0,
|
|
89
|
+
error: null,
|
|
90
|
+
}),
|
|
91
|
+
mappings: await client.getMappings(params.database, params.collection),
|
|
92
|
+
params: computedParams,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const resultsPromise = collection
|
|
97
|
+
.distinct(field, JsonEncoder.decode(queryDoc), {
|
|
98
|
+
maxTimeMS: mongo.getQueryTimeout(),
|
|
99
|
+
})
|
|
100
|
+
.then((results) => ({
|
|
101
|
+
data: results.map((value) => JsonEncoder.encode({ value })) as MongoDocument[],
|
|
102
|
+
error: null as string | null,
|
|
103
|
+
}))
|
|
104
|
+
.catch((err) => {
|
|
105
|
+
logger.error("Error executing distinct:", err);
|
|
106
|
+
return {
|
|
107
|
+
data: [] as MongoDocument[],
|
|
108
|
+
error: `Failed to execute distinct: ${err instanceof Error ? err.message : String(err)}`,
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const countPromise = resultsPromise.then((result) => ({
|
|
113
|
+
data: result.error ? 0 : result.data.length,
|
|
114
|
+
error: null,
|
|
115
|
+
}));
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
results: resultsPromise,
|
|
119
|
+
count: countPromise,
|
|
120
|
+
mappings: await client.getMappings(params.database, params.collection),
|
|
121
|
+
params: computedParams,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Handle aggregation mode
|
|
126
|
+
if (mode === "aggregation" && Array.isArray(queryDoc)) {
|
|
74
127
|
// Validate aggregation pipeline
|
|
75
128
|
try {
|
|
76
129
|
validateAggregationPipeline(queryDoc);
|
|
@@ -85,14 +138,7 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
|
|
85
138
|
data: 0,
|
|
86
139
|
error: null,
|
|
87
140
|
}),
|
|
88
|
-
params:
|
|
89
|
-
query,
|
|
90
|
-
sort,
|
|
91
|
-
project,
|
|
92
|
-
skip,
|
|
93
|
-
limit,
|
|
94
|
-
},
|
|
95
|
-
isAggregation: true,
|
|
141
|
+
params: computedParams,
|
|
96
142
|
};
|
|
97
143
|
}
|
|
98
144
|
// Execute aggregation
|
|
@@ -144,14 +190,8 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
|
|
144
190
|
return {
|
|
145
191
|
results: resultsPromise,
|
|
146
192
|
count: countPromise,
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
sort,
|
|
150
|
-
project,
|
|
151
|
-
skip,
|
|
152
|
-
limit,
|
|
153
|
-
},
|
|
154
|
-
isAggregation: true,
|
|
193
|
+
mappings: await client.getMappings(params.database, params.collection),
|
|
194
|
+
params: computedParams,
|
|
155
195
|
};
|
|
156
196
|
}
|
|
157
197
|
|
|
@@ -205,13 +245,6 @@ export const load: PageServerLoad = async ({ params, url }) => {
|
|
|
205
245
|
results: resultsPromise,
|
|
206
246
|
count: countPromise,
|
|
207
247
|
mappings: await client.getMappings(params.database, params.collection),
|
|
208
|
-
params:
|
|
209
|
-
query,
|
|
210
|
-
sort,
|
|
211
|
-
project,
|
|
212
|
-
skip,
|
|
213
|
-
limit,
|
|
214
|
-
},
|
|
215
|
-
isAggregation: false,
|
|
248
|
+
params: computedParams,
|
|
216
249
|
};
|
|
217
250
|
};
|