mongoku 2.4.4-compat → 2.4.5-compat
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/{BLO-Xysl.js → BNXmwc4k.js} +1 -1
- package/build/client/_app/immutable/chunks/BNXmwc4k.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNXmwc4k.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CSUjWnG2.js → BbifzGa9.js} +3 -3
- package/build/client/_app/immutable/chunks/BbifzGa9.js.br +0 -0
- package/build/client/_app/immutable/chunks/BbifzGa9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CKSjYb0E.js +1 -0
- package/build/client/_app/immutable/chunks/CKSjYb0E.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKSjYb0E.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DLQrKb9a.js → CrkT9-hk.js} +1 -1
- package/build/client/_app/immutable/chunks/CrkT9-hk.js.br +0 -0
- package/build/client/_app/immutable/chunks/CrkT9-hk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DFkGPZrY.js +1 -0
- package/build/client/_app/immutable/chunks/DFkGPZrY.js.br +0 -0
- package/build/client/_app/immutable/chunks/DFkGPZrY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DWo1M9PT.js → DR31i7EG.js} +1 -1
- package/build/client/_app/immutable/chunks/DR31i7EG.js.br +0 -0
- package/build/client/_app/immutable/chunks/DR31i7EG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CNdjrDIr.js → DxnOjRla.js} +6 -6
- package/build/client/_app/immutable/chunks/DxnOjRla.js.br +0 -0
- package/build/client/_app/immutable/chunks/DxnOjRla.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CuZ4QjNH.js → XxWxrQDU.js} +1 -1
- package/build/client/_app/immutable/chunks/XxWxrQDU.js.br +0 -0
- package/build/client/_app/immutable/chunks/XxWxrQDU.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BFUjsZq3.js → app.CrFcpgot.js} +2 -2
- package/build/client/_app/immutable/entry/app.CrFcpgot.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CrFcpgot.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B7wwhxxG.js +1 -0
- package/build/client/_app/immutable/entry/start.B7wwhxxG.js.br +2 -0
- package/build/client/_app/immutable/entry/start.B7wwhxxG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BlKp3akb.js +1 -0
- package/build/client/_app/immutable/nodes/0.BlKp3akb.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BlKp3akb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.H-XvWYGk.js → 1.Me--vTAI.js} +1 -1
- package/build/client/_app/immutable/nodes/1.Me--vTAI.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Me--vTAI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js +3 -0
- package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.vMA4hhoy.js → 11.DPl21Acy.js} +1 -1
- package/build/client/_app/immutable/nodes/11.DPl21Acy.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.DPl21Acy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{12.COzBywv-.js → 12.CbirgK_f.js} +1 -1
- package/build/client/_app/immutable/nodes/12.CbirgK_f.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.CbirgK_f.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.QRJ7A_rU.js → 13.B6A3H8ri.js} +1 -1
- package/build/client/_app/immutable/nodes/13.B6A3H8ri.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.B6A3H8ri.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.C7bIylQk.js → 7.Dpuf92PL.js} +1 -1
- package/build/client/_app/immutable/nodes/7.Dpuf92PL.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Dpuf92PL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CUijRgPl.js +1 -0
- package/build/client/_app/immutable/nodes/8.CUijRgPl.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CUijRgPl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js +2 -0
- package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.y4RV8Aeu.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-DelxwAxT.js → 0-BjnfHwPA.js} +4 -4
- package/build/server/chunks/{0-DelxwAxT.js.map → 0-BjnfHwPA.js.map} +1 -1
- package/build/server/chunks/{1-nBFPiJv-.js → 1-DKSoKELu.js} +2 -2
- package/build/server/chunks/{1-nBFPiJv-.js.map → 1-DKSoKELu.js.map} +1 -1
- package/build/server/chunks/{10-BOqdkXG9.js → 10-BvleE1GW.js} +58 -36
- package/build/server/chunks/10-BvleE1GW.js.map +1 -0
- package/build/server/chunks/{11-C7O2lKKw.js → 11-DFqwVyt2.js} +3 -3
- package/build/server/chunks/{11-C7O2lKKw.js.map → 11-DFqwVyt2.js.map} +1 -1
- package/build/server/chunks/{12-CnjlwjUe.js → 12-C_rstTYj.js} +3 -3
- package/build/server/chunks/{12-CnjlwjUe.js.map → 12-C_rstTYj.js.map} +1 -1
- package/build/server/chunks/{13-BBB7kYFh.js → 13-DwHzV1H-.js} +3 -3
- package/build/server/chunks/{13-BBB7kYFh.js.map → 13-DwHzV1H-.js.map} +1 -1
- package/build/server/chunks/{7-qZHKTn_q.js → 7-vWXW_G_a.js} +3 -3
- package/build/server/chunks/{7-qZHKTn_q.js.map → 7-vWXW_G_a.js.map} +1 -1
- package/build/server/chunks/{8-2tY6eHOI.js → 8-BUO0RppY.js} +3 -3
- package/build/server/chunks/{8-2tY6eHOI.js.map → 8-BUO0RppY.js.map} +1 -1
- package/build/server/chunks/{9-DaADq4zG.js → 9-BsD6WORF.js} +3 -3
- package/build/server/chunks/{9-DaADq4zG.js.map → 9-BsD6WORF.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/BLO-Xysl.js.br +0 -0
- package/build/client/_app/immutable/chunks/BLO-Xysl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C4GAdyGu.js +0 -1
- package/build/client/_app/immutable/chunks/C4GAdyGu.js.br +0 -0
- package/build/client/_app/immutable/chunks/C4GAdyGu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CNdjrDIr.js.br +0 -0
- package/build/client/_app/immutable/chunks/CNdjrDIr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CSUjWnG2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CSUjWnG2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CsdvUuIx.js +0 -1
- package/build/client/_app/immutable/chunks/CsdvUuIx.js.br +0 -0
- package/build/client/_app/immutable/chunks/CsdvUuIx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CuZ4QjNH.js.br +0 -0
- package/build/client/_app/immutable/chunks/CuZ4QjNH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DLQrKb9a.js.br +0 -0
- package/build/client/_app/immutable/chunks/DLQrKb9a.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DWo1M9PT.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWo1M9PT.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BFUjsZq3.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BFUjsZq3.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CDVO8_0I.js +0 -1
- package/build/client/_app/immutable/entry/start.CDVO8_0I.js.br +0 -2
- package/build/client/_app/immutable/entry/start.CDVO8_0I.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BCPY5eeH.js +0 -1
- package/build/client/_app/immutable/nodes/0.BCPY5eeH.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BCPY5eeH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.H-XvWYGk.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.H-XvWYGk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BGvNUoHR.js +0 -1
- package/build/client/_app/immutable/nodes/10.BGvNUoHR.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BGvNUoHR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.vMA4hhoy.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.vMA4hhoy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.COzBywv-.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.COzBywv-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.QRJ7A_rU.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.QRJ7A_rU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.C7bIylQk.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.C7bIylQk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.D5IJYp2y.js +0 -1
- package/build/client/_app/immutable/nodes/8.D5IJYp2y.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.D5IJYp2y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.BuR_b88e.js +0 -2
- package/build/client/_app/immutable/nodes/9.BuR_b88e.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BuR_b88e.js.gz +0 -0
- package/build/server/chunks/10-BOqdkXG9.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
|
};
|