mongoku 2.2.4 → 2.4.0
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.C-Y-CVnr.css +1 -0
- 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/assets/10.BrydhPds.css +1 -0
- package/build/client/_app/immutable/assets/10.BrydhPds.css.br +0 -0
- package/build/client/_app/immutable/assets/10.BrydhPds.css.gz +0 -0
- package/build/client/_app/immutable/assets/12.I1sSDJ6i.css +1 -0
- package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.br +0 -0
- package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.gz +0 -0
- package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css +1 -0
- package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.br +0 -0
- package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0oUK0vJa.js +1 -0
- package/build/client/_app/immutable/chunks/0oUK0vJa.js.br +0 -0
- package/build/client/_app/immutable/chunks/0oUK0vJa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/3xIOsPOb.js +16 -0
- package/build/client/_app/immutable/chunks/3xIOsPOb.js.br +0 -0
- package/build/client/_app/immutable/chunks/3xIOsPOb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B83FMsIQ.js +24 -0
- package/build/client/_app/immutable/chunks/B83FMsIQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/B83FMsIQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BGXqurs_.js +1 -0
- package/build/client/_app/immutable/chunks/BGXqurs_.js.br +0 -0
- package/build/client/_app/immutable/chunks/BGXqurs_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BPbCnJEo.js +1 -0
- package/build/client/_app/immutable/chunks/BPbCnJEo.js.br +0 -0
- package/build/client/_app/immutable/chunks/BPbCnJEo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BXUq66wC.js +1 -0
- package/build/client/_app/immutable/chunks/BXUq66wC.js.br +0 -0
- package/build/client/_app/immutable/chunks/BXUq66wC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BZY48V2X.js +14 -0
- package/build/client/_app/immutable/chunks/BZY48V2X.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZY48V2X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bq7qZpXP.js +1 -0
- package/build/client/_app/immutable/chunks/Bq7qZpXP.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bq7qZpXP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BxoAxRg6.js +1 -0
- package/build/client/_app/immutable/chunks/BxoAxRg6.js.br +0 -0
- package/build/client/_app/immutable/chunks/BxoAxRg6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByCRZ7zS.js +2 -0
- package/build/client/_app/immutable/chunks/ByCRZ7zS.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByCRZ7zS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{D4iRRB8h.js → C1g0HmEj.js} +1 -1
- package/build/client/_app/immutable/chunks/C1g0HmEj.js.br +0 -0
- package/build/client/_app/immutable/chunks/C1g0HmEj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DGtnJf56.js +1 -0
- package/build/client/_app/immutable/chunks/DGtnJf56.js.br +0 -0
- package/build/client/_app/immutable/chunks/DGtnJf56.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DR9xdhsg.js → DIw4Wyr4.js} +1 -1
- package/build/client/_app/immutable/chunks/DIw4Wyr4.js.br +0 -0
- package/build/client/_app/immutable/chunks/DIw4Wyr4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dn0_-jEe.js +1 -0
- package/build/client/_app/immutable/chunks/Dn0_-jEe.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dn0_-jEe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UJuWD2W4.js +1 -0
- package/build/client/_app/immutable/chunks/UJuWD2W4.js.br +0 -0
- package/build/client/_app/immutable/chunks/UJuWD2W4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Dx56OlI-.js → _Sxqiax7.js} +1 -1
- package/build/client/_app/immutable/chunks/_Sxqiax7.js.br +0 -0
- package/build/client/_app/immutable/chunks/_Sxqiax7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/_kKBJjiB.js +1 -0
- package/build/client/_app/immutable/chunks/_kKBJjiB.js.br +0 -0
- package/build/client/_app/immutable/chunks/_kKBJjiB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pj4OZpZf.js +4 -0
- package/build/client/_app/immutable/chunks/pj4OZpZf.js.br +0 -0
- package/build/client/_app/immutable/chunks/pj4OZpZf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/reNJcONQ.js +1 -0
- package/build/client/_app/immutable/chunks/reNJcONQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/reNJcONQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DV8my7lq.js +2 -0
- package/build/client/_app/immutable/entry/app.DV8my7lq.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DV8my7lq.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CHeMkIYN.js +1 -0
- package/build/client/_app/immutable/entry/start.CHeMkIYN.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CHeMkIYN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CNNOoOHl.js +1 -0
- package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C-65KEEJ.js +1 -0
- package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js +1 -0
- package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.iU-GIxdi.js +1 -0
- package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.BneOFPb1.js +1 -0
- package/build/client/_app/immutable/nodes/12.BneOFPb1.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.BneOFPb1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.BsUY4XVc.js +66 -0
- package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DwwrLLW4.js → 2.DqvBb3C7.js} +1 -1
- package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.t20GootO.js → 3.27swwcG4.js} +1 -1
- package/build/client/_app/immutable/nodes/3.27swwcG4.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.27swwcG4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.CXHjkPtf.js → 4.CcholrFe.js} +1 -1
- package/build/client/_app/immutable/nodes/4.CcholrFe.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CcholrFe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.C9tcr5B0.js → 5.CzudN9q-.js} +1 -1
- package/build/client/_app/immutable/nodes/5.CzudN9q-.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CzudN9q-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js +1 -0
- package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.aa4EbN0k.js +1 -0
- package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.9dZgqvLb.js +2 -0
- package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.9dZgqvLb.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-BHG1s0_H.js +22 -0
- package/build/server/chunks/0-BHG1s0_H.js.map +1 -0
- package/build/server/chunks/1-Xz1zN5FT.js +9 -0
- package/build/server/chunks/1-Xz1zN5FT.js.map +1 -0
- package/build/server/chunks/{10-DGUQMXHt.js → 10-CaYvpZVK.js} +6 -5
- package/build/server/chunks/10-CaYvpZVK.js.map +1 -0
- package/build/server/chunks/{11-CxBnyyqR.js → 11-uJK96PLt.js} +6 -5
- package/build/server/chunks/11-uJK96PLt.js.map +1 -0
- package/build/server/chunks/{12-K_JVUnsk.js → 12-CvEEILKx.js} +14 -13
- package/build/server/chunks/12-CvEEILKx.js.map +1 -0
- package/build/server/chunks/{13-Cay35aHK.js → 13-Cvk7ClFs.js} +6 -5
- package/build/server/chunks/{13-Cay35aHK.js.map → 13-Cvk7ClFs.js.map} +1 -1
- package/build/server/chunks/{2-ClkERMhY.js → 2-BheEgghx.js} +2 -2
- package/build/server/chunks/{2-ClkERMhY.js.map → 2-BheEgghx.js.map} +1 -1
- package/build/server/chunks/{3-CTpqmxdo.js → 3-BwrTscBH.js} +2 -2
- package/build/server/chunks/{3-CTpqmxdo.js.map → 3-BwrTscBH.js.map} +1 -1
- package/build/server/chunks/{4-CUH4fZn8.js → 4-D28kbpdN.js} +2 -2
- package/build/server/chunks/{4-CUH4fZn8.js.map → 4-D28kbpdN.js.map} +1 -1
- package/build/server/chunks/{5-BSEdxfut.js → 5--wY8V1OC.js} +2 -2
- package/build/server/chunks/{5-BSEdxfut.js.map → 5--wY8V1OC.js.map} +1 -1
- package/build/server/chunks/{7-DvU-_ADW.js → 7-DTmi6ASF.js} +6 -5
- package/build/server/chunks/7-DTmi6ASF.js.map +1 -0
- package/build/server/chunks/{8-CA3-CJtS.js → 8-CHIpUo4j.js} +6 -5
- package/build/server/chunks/8-CHIpUo4j.js.map +1 -0
- package/build/server/chunks/{9-jMOS3lPS.js → 9-C3nw_taL.js} +6 -5
- package/build/server/chunks/9-C3nw_taL.js.map +1 -0
- package/build/server/chunks/{JsonValue-WMdIUvRM.js → JsonValue-DiECF6Zd.js} +11 -4
- package/build/server/chunks/JsonValue-DiECF6Zd.js.map +1 -0
- package/build/server/chunks/{Modal-zVnoAfFx.js → Modal-BzZ9u6V6.js} +3 -3
- package/build/server/chunks/Modal-BzZ9u6V6.js.map +1 -0
- package/build/server/chunks/Panel-DEP08QXV.js +48 -0
- package/build/server/chunks/Panel-DEP08QXV.js.map +1 -0
- package/build/server/chunks/{PrettyJson-D3CylSVd.js → PrettyJson-ElzPxPF4.js} +55 -40
- package/build/server/chunks/PrettyJson-ElzPxPF4.js.map +1 -0
- package/build/server/chunks/Tooltip-DK6Aok7l.js +35 -0
- package/build/server/chunks/Tooltip-DK6Aok7l.js.map +1 -0
- package/build/server/chunks/{TooltipTable-DCu3GLqO.js → TooltipTable-DUYKVtrh.js} +3 -3
- package/build/server/chunks/{TooltipTable-DCu3GLqO.js.map → TooltipTable-DUYKVtrh.js.map} +1 -1
- package/build/server/chunks/_layout.svelte-CCi6mq1k.js +159 -0
- package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C-13GpOe.js → _page.svelte-B4BL5PJR.js} +18 -16
- package/build/server/chunks/_page.svelte-B4BL5PJR.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BRxX_vQR.js → _page.svelte-BUheieJ5.js} +26 -15
- package/build/server/chunks/_page.svelte-BUheieJ5.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BBHqwhWF.js → _page.svelte-Bj297hp1.js} +16 -15
- package/build/server/chunks/_page.svelte-Bj297hp1.js.map +1 -0
- package/build/server/chunks/{_page.svelte-2w3fCax2.js → _page.svelte-BvjNfjgw.js} +14 -14
- package/build/server/chunks/{_page.svelte-2w3fCax2.js.map → _page.svelte-BvjNfjgw.js.map} +1 -1
- package/build/server/chunks/_page.svelte-DDe4hyAB.js +387 -0
- package/build/server/chunks/_page.svelte-DDe4hyAB.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Ca9u_35e.js → _page.svelte-DEe2Kbbw.js} +72 -12
- package/build/server/chunks/_page.svelte-DEe2Kbbw.js.map +1 -0
- package/build/server/chunks/_page.svelte-DJFPwyij.js +323 -0
- package/build/server/chunks/_page.svelte-DJFPwyij.js.map +1 -0
- package/build/server/chunks/client-Cp5ag8tA.js +7 -0
- package/build/server/chunks/{client-BFlyU7ZU.js.map → client-Cp5ag8tA.js.map} +1 -1
- package/build/server/chunks/{client2-DYaMKWrc.js → client2-Dos6p_Xm.js} +3 -4
- package/build/server/chunks/{client2-DYaMKWrc.js.map → client2-Dos6p_Xm.js.map} +1 -1
- package/build/server/chunks/{error.svelte-BENdaVOT.js → error.svelte-BBEhCLUJ.js} +6 -7
- package/build/server/chunks/{error.svelte-BENdaVOT.js.map → error.svelte-BBEhCLUJ.js.map} +1 -1
- package/build/server/chunks/{index2-DBFlGzWV.js → index2-DzKnqQNM.js} +2 -2
- package/build/server/chunks/{index2-DBFlGzWV.js.map → index2-DzKnqQNM.js.map} +1 -1
- package/build/server/chunks/{index3-CoOO2o9t.js → index3-DANRthiW.js} +2 -2
- package/build/server/chunks/{index3-CoOO2o9t.js.map → index3-DANRthiW.js.map} +1 -1
- package/build/server/chunks/{mongo-Db8Vgimy.js → mongo-BHk5yAj9.js} +90 -19
- package/build/server/chunks/mongo-BHk5yAj9.js.map +1 -0
- package/build/server/chunks/{remote-xxtqbu-AjxdDZZ_.js → remote-xxtqbu-DBe3CqEJ.js} +6 -6
- package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +1 -0
- package/build/server/chunks/{server2-_mGVuBoG.js → server2-YmCaJGWy.js} +2 -2
- package/build/server/chunks/{server2-_mGVuBoG.js.map → server2-YmCaJGWy.js.map} +1 -1
- package/build/server/chunks/{servers.remote-DrkuAWHP.js → servers.remote-HDmNH7n4.js} +245 -15
- package/build/server/chunks/servers.remote-HDmNH7n4.js.map +1 -0
- package/build/server/chunks/{shared-Buki-xt5.js → shared-CQd3A1I4.js} +2 -2
- package/build/server/chunks/{shared-Buki-xt5.js.map → shared-CQd3A1I4.js.map} +1 -1
- package/build/server/chunks/{state.svelte-C8IWmp_n.js → state.svelte-Dm0prnTp.js} +2 -2
- package/build/server/chunks/{state.svelte-C8IWmp_n.js.map → state.svelte-Dm0prnTp.js.map} +1 -1
- package/build/server/chunks/{event-DVH-6ISX.js → utils-D1ahxout.js} +39 -2
- package/build/server/chunks/utils-D1ahxout.js.map +1 -0
- package/build/server/index.js +5 -6
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +15 -15
- package/build/server/manifest.js.map +1 -1
- package/package.json +3 -2
- package/src/api/servers.remote.ts +275 -11
- package/src/app.css +178 -135
- package/src/app.html +23 -10
- package/src/lib/actions/portal.ts +42 -0
- package/src/lib/components/Breadcrumbs.svelte +20 -60
- package/src/lib/components/JsonValue.svelte +30 -1
- package/src/lib/components/Modal.svelte +5 -5
- package/src/lib/components/Notifications.svelte +42 -21
- package/src/lib/components/PageSwitcher.svelte +16 -10
- package/src/lib/components/Panel.svelte +19 -15
- package/src/lib/components/PrettyJson.svelte +102 -90
- package/src/lib/components/ReplicaSetSelector.svelte +144 -0
- package/src/lib/components/SearchBox.svelte +117 -96
- package/src/lib/components/ThemeSwitcher.svelte +191 -36
- package/src/lib/components/Tooltip.svelte +23 -14
- package/src/lib/server/mongo.ts +129 -26
- package/src/lib/utils/formatSignificantDigits.ts +30 -0
- package/src/lib/utils/formatTimeAgo.ts +20 -0
- package/src/lib/utils/hostnames.ts +86 -0
- package/src/lib/utils/jsonParser.ts +50 -0
- package/src/lib/utils/longestCommonSuffix.ts +47 -0
- package/src/lib/utils/sum.ts +10 -0
- package/src/routes/+layout.svelte +36 -17
- package/src/routes/servers/+page.svelte +6 -7
- package/src/routes/servers/[server]/databases/+page.svelte +71 -2
- package/src/routes/servers/[server]/databases/[database]/collections/+page.svelte +13 -3
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +292 -57
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.server.ts +8 -8
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.svelte +628 -105
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/mappings/+page.svelte +26 -12
- package/build/client/_app/immutable/assets/0.COnAcXN4.css +0 -1
- package/build/client/_app/immutable/assets/0.COnAcXN4.css.br +0 -0
- package/build/client/_app/immutable/assets/0.COnAcXN4.css.gz +0 -0
- package/build/client/_app/immutable/assets/10.59aTjJn9.css +0 -1
- package/build/client/_app/immutable/assets/10.59aTjJn9.css.br +0 -0
- package/build/client/_app/immutable/assets/10.59aTjJn9.css.gz +0 -0
- package/build/client/_app/immutable/assets/12.BdCOhvz0.css +0 -1
- package/build/client/_app/immutable/assets/12.BdCOhvz0.css.br +0 -0
- package/build/client/_app/immutable/assets/12.BdCOhvz0.css.gz +0 -0
- package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css +0 -1
- package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.br +0 -0
- package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.gz +0 -0
- package/build/client/_app/immutable/assets/Panel.B3aWupye.css +0 -1
- package/build/client/_app/immutable/assets/Panel.B3aWupye.css.br +0 -0
- package/build/client/_app/immutable/assets/Panel.B3aWupye.css.gz +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.Cnibl3-L.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.RKIjpA76.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.CT5q4ZVh.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.iCCFJ4Gn.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-400-normal.Cbwtr8a4.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-400-normal.CjFvNwMJ.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BWTJtpjo.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BZXayy47.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-vietnamese-400-normal.uXRi1gw5.woff +0 -0
- package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.BdIzgbsr.woff +0 -0
- package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.CTuj2HZW.woff2 +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.C6_q4usG.woff +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.CurJOxDW.woff2 +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.DACPYgMx.woff2 +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.Der7ynDE.woff +0 -0
- package/build/client/_app/immutable/chunks/3iRu_dUj.js +0 -2
- package/build/client/_app/immutable/chunks/3iRu_dUj.js.br +0 -0
- package/build/client/_app/immutable/chunks/3iRu_dUj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/5nAxkTTP.js +0 -1
- package/build/client/_app/immutable/chunks/5nAxkTTP.js.br +0 -5
- package/build/client/_app/immutable/chunks/5nAxkTTP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BBg-V8FE.js +0 -1
- package/build/client/_app/immutable/chunks/BBg-V8FE.js.br +0 -0
- package/build/client/_app/immutable/chunks/BBg-V8FE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BE8UzJuY.js +0 -1
- package/build/client/_app/immutable/chunks/BE8UzJuY.js.br +0 -0
- package/build/client/_app/immutable/chunks/BE8UzJuY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQEBQyfZ.js +0 -1
- package/build/client/_app/immutable/chunks/BQEBQyfZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/BQEBQyfZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BUNgwIS0.js +0 -1
- package/build/client/_app/immutable/chunks/BUNgwIS0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BUNgwIS0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BvKY81hz.js +0 -1
- package/build/client/_app/immutable/chunks/BvKY81hz.js.br +0 -0
- package/build/client/_app/immutable/chunks/BvKY81hz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C0PCwpqt.js +0 -23
- package/build/client/_app/immutable/chunks/C0PCwpqt.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0PCwpqt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C0rm4mmq.js +0 -1
- package/build/client/_app/immutable/chunks/C0rm4mmq.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0rm4mmq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C2sjtvBO.js +0 -1
- package/build/client/_app/immutable/chunks/C2sjtvBO.js.br +0 -0
- package/build/client/_app/immutable/chunks/C2sjtvBO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C82Rp5eQ.js +0 -1
- package/build/client/_app/immutable/chunks/C82Rp5eQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/C82Rp5eQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGSOl_q_.js +0 -4
- package/build/client/_app/immutable/chunks/CGSOl_q_.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGSOl_q_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CjNnAkTB.js +0 -1
- package/build/client/_app/immutable/chunks/CjNnAkTB.js.br +0 -0
- package/build/client/_app/immutable/chunks/CjNnAkTB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cx2cA4gg.js +0 -1
- package/build/client/_app/immutable/chunks/Cx2cA4gg.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cx2cA4gg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D4iRRB8h.js.br +0 -0
- package/build/client/_app/immutable/chunks/D4iRRB8h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5ccpaXt.js +0 -1
- package/build/client/_app/immutable/chunks/D5ccpaXt.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5ccpaXt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D7E46CWw.js +0 -1
- package/build/client/_app/immutable/chunks/D7E46CWw.js.br +0 -0
- package/build/client/_app/immutable/chunks/D7E46CWw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DR9xdhsg.js.br +0 -0
- package/build/client/_app/immutable/chunks/DR9xdhsg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVRQRZnh.js +0 -1
- package/build/client/_app/immutable/chunks/DVRQRZnh.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVRQRZnh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DcPEQ0_V.js +0 -29
- package/build/client/_app/immutable/chunks/DcPEQ0_V.js.br +0 -0
- package/build/client/_app/immutable/chunks/DcPEQ0_V.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dx56OlI-.js.br +0 -2
- package/build/client/_app/immutable/chunks/Dx56OlI-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PXh00dfp.js +0 -2
- package/build/client/_app/immutable/chunks/PXh00dfp.js.br +0 -0
- package/build/client/_app/immutable/chunks/PXh00dfp.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DrdSPfGo.js +0 -2
- package/build/client/_app/immutable/entry/app.DrdSPfGo.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DrdSPfGo.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DGG3CpnK.js +0 -1
- package/build/client/_app/immutable/entry/start.DGG3CpnK.js.br +0 -2
- package/build/client/_app/immutable/entry/start.DGG3CpnK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.kCLtccjl.js +0 -5
- package/build/client/_app/immutable/nodes/0.kCLtccjl.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.kCLtccjl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js +0 -1
- package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.br +0 -3
- package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.B4uwvHd0.js +0 -2
- package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.qfhS2VqU.js +0 -1
- package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.DkZDCIfS.js +0 -1
- package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.DFVzMgyY.js +0 -66
- package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.br +0 -1
- package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.t20GootO.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.t20GootO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.D14iWySv.js +0 -1
- package/build/client/_app/immutable/nodes/7.D14iWySv.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.D14iWySv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.BSXe_VNA.js +0 -1
- package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js +0 -2
- package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.gz +0 -0
- package/build/server/chunks/0-BozXjQlk.js +0 -22
- package/build/server/chunks/0-BozXjQlk.js.map +0 -1
- package/build/server/chunks/1-C_LPMO7A.js +0 -9
- package/build/server/chunks/1-C_LPMO7A.js.map +0 -1
- package/build/server/chunks/10-DGUQMXHt.js.map +0 -1
- package/build/server/chunks/11-CxBnyyqR.js.map +0 -1
- package/build/server/chunks/12-K_JVUnsk.js.map +0 -1
- package/build/server/chunks/7-DvU-_ADW.js.map +0 -1
- package/build/server/chunks/8-CA3-CJtS.js.map +0 -1
- package/build/server/chunks/9-jMOS3lPS.js.map +0 -1
- package/build/server/chunks/JsonValue-WMdIUvRM.js.map +0 -1
- package/build/server/chunks/Modal-zVnoAfFx.js.map +0 -1
- package/build/server/chunks/Panel-yg5YKL4d.js +0 -38
- package/build/server/chunks/Panel-yg5YKL4d.js.map +0 -1
- package/build/server/chunks/PrettyJson-D3CylSVd.js.map +0 -1
- package/build/server/chunks/Tooltip-ys6l541_.js +0 -28
- package/build/server/chunks/Tooltip-ys6l541_.js.map +0 -1
- package/build/server/chunks/_layout.svelte-DMm1Ill8.js +0 -168
- package/build/server/chunks/_layout.svelte-DMm1Ill8.js.map +0 -1
- package/build/server/chunks/_page.svelte-BBHqwhWF.js.map +0 -1
- package/build/server/chunks/_page.svelte-BRxX_vQR.js.map +0 -1
- package/build/server/chunks/_page.svelte-C-13GpOe.js.map +0 -1
- package/build/server/chunks/_page.svelte-Ca9u_35e.js.map +0 -1
- package/build/server/chunks/_page.svelte-Cm_vgRRR.js +0 -206
- package/build/server/chunks/_page.svelte-Cm_vgRRR.js.map +0 -1
- package/build/server/chunks/_page.svelte-DoOBFRSo.js +0 -299
- package/build/server/chunks/_page.svelte-DoOBFRSo.js.map +0 -1
- package/build/server/chunks/client-BFlyU7ZU.js +0 -7
- package/build/server/chunks/event-DVH-6ISX.js.map +0 -1
- package/build/server/chunks/mongo-Db8Vgimy.js.map +0 -1
- package/build/server/chunks/remote-xxtqbu-AjxdDZZ_.js.map +0 -1
- package/build/server/chunks/servers.remote-DrkuAWHP.js.map +0 -1
- package/build/server/chunks/utils-kjxf7BZO.js +0 -39
- package/build/server/chunks/utils-kjxf7BZO.js.map +0 -1
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
let showDropModal = $state(false);
|
|
17
17
|
let collectionToDrop = $state<Collection | null>(null);
|
|
18
|
+
let isDropping = $state(false);
|
|
18
19
|
|
|
19
20
|
function openDropModal(collection: Collection) {
|
|
20
21
|
collectionToDrop = collection;
|
|
@@ -24,11 +25,13 @@
|
|
|
24
25
|
function closeDropModal() {
|
|
25
26
|
showDropModal = false;
|
|
26
27
|
collectionToDrop = null;
|
|
28
|
+
isDropping = false;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
async function confirmDrop() {
|
|
30
|
-
if (!collectionToDrop) return;
|
|
32
|
+
if (!collectionToDrop || isDropping) return;
|
|
31
33
|
|
|
34
|
+
isDropping = true;
|
|
32
35
|
try {
|
|
33
36
|
await dropCollectionCommand({
|
|
34
37
|
server: data.server,
|
|
@@ -41,6 +44,7 @@
|
|
|
41
44
|
await invalidateAll();
|
|
42
45
|
} catch (error) {
|
|
43
46
|
notificationStore.notifyError(error, "Failed to drop collection");
|
|
47
|
+
isDropping = false;
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
50
|
</script>
|
|
@@ -163,7 +167,13 @@
|
|
|
163
167
|
undone.
|
|
164
168
|
</p>
|
|
165
169
|
{#snippet footer()}
|
|
166
|
-
<button class="btn btn-default btn-sm" onclick={closeDropModal}>Cancel</button>
|
|
167
|
-
<button class="btn btn-outline-danger btn-sm" onclick={confirmDrop}
|
|
170
|
+
<button class="btn btn-default btn-sm" onclick={closeDropModal} disabled={isDropping}>Cancel</button>
|
|
171
|
+
<button class="btn btn-outline-danger btn-sm" onclick={confirmDrop} disabled={isDropping}>
|
|
172
|
+
{#if isDropping}
|
|
173
|
+
Dropping...
|
|
174
|
+
{:else}
|
|
175
|
+
Drop Collection
|
|
176
|
+
{/if}
|
|
177
|
+
</button>
|
|
168
178
|
{/snippet}
|
|
169
179
|
</Modal>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import {
|
|
3
3
|
deleteDocument as deleteDocumentCommand,
|
|
4
|
+
insertDocument as insertDocumentCommand,
|
|
4
5
|
loadDocuments,
|
|
5
6
|
updateDocument as updateDocumentCommand,
|
|
6
7
|
updateMany as updateManyCommand,
|
|
@@ -14,6 +15,7 @@
|
|
|
14
15
|
import { notificationStore } from "$lib/stores/notifications.svelte";
|
|
15
16
|
import type { MongoDocument, SearchParams } from "$lib/types";
|
|
16
17
|
import { formatNumber } from "$lib/utils/filters";
|
|
18
|
+
import { parseJSON, serializeForEditing } from "$lib/utils/jsonParser";
|
|
17
19
|
import { SvelteURLSearchParams } from "svelte/reactivity";
|
|
18
20
|
import type { PageData } from "./$types";
|
|
19
21
|
|
|
@@ -25,6 +27,7 @@
|
|
|
25
27
|
let editMode = $state(false);
|
|
26
28
|
let updateQuery = $state("{}");
|
|
27
29
|
let isUpdating = $state(false);
|
|
30
|
+
let showInsertEditor = $state(false);
|
|
28
31
|
|
|
29
32
|
let finalCount = $state<number | null>(null);
|
|
30
33
|
let countCount = 0;
|
|
@@ -71,7 +74,7 @@
|
|
|
71
74
|
|
|
72
75
|
async function editDocument(_id: { $value?: string } | undefined, json: MongoDocument, items: MongoDocument[]) {
|
|
73
76
|
const partial = Boolean(
|
|
74
|
-
params.project && params.project !== "{}" && Object.keys(
|
|
77
|
+
params.project && params.project !== "{}" && Object.keys(parseJSON(params.project) as object).length > 0,
|
|
75
78
|
);
|
|
76
79
|
const newId = json?._id?.$value;
|
|
77
80
|
const oldId = _id?.$value;
|
|
@@ -201,53 +204,291 @@
|
|
|
201
204
|
isUpdating = false;
|
|
202
205
|
}
|
|
203
206
|
}
|
|
207
|
+
|
|
208
|
+
let insertJson = $state("{}");
|
|
209
|
+
|
|
210
|
+
async function executeInsert() {
|
|
211
|
+
isUpdating = true;
|
|
212
|
+
try {
|
|
213
|
+
const json = parseJSON(insertJson);
|
|
214
|
+
const result = await insertDocumentCommand({
|
|
215
|
+
server: data.server,
|
|
216
|
+
database: data.database,
|
|
217
|
+
collection: data.collection,
|
|
218
|
+
document: null,
|
|
219
|
+
value: json,
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
if (result.ok) {
|
|
223
|
+
notificationStore.notifySuccess("Document inserted successfully");
|
|
224
|
+
// Reset the modified items to force a refresh
|
|
225
|
+
modifiedItems = null;
|
|
226
|
+
showInsertEditor = false;
|
|
227
|
+
insertJson = "{}";
|
|
228
|
+
}
|
|
229
|
+
} catch (error) {
|
|
230
|
+
console.error(error);
|
|
231
|
+
notificationStore.notifyError(error, "Failed to insert document");
|
|
232
|
+
} finally {
|
|
233
|
+
isUpdating = false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function handleInsertClick() {
|
|
238
|
+
showInsertEditor = true;
|
|
239
|
+
insertJson = "{}";
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function cancelInsert() {
|
|
243
|
+
showInsertEditor = false;
|
|
244
|
+
insertJson = "{}";
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function getReversedSort(): string {
|
|
248
|
+
const currentSort = params.sort || "{}";
|
|
249
|
+
|
|
250
|
+
// If no sort is defined, default to _id: -1
|
|
251
|
+
if (currentSort.replace(/\s/g, "") === "{}") {
|
|
252
|
+
return serializeForEditing({ _id: -1 })
|
|
253
|
+
.replace(/[\n\t]/g, " ")
|
|
254
|
+
.replace(/\s+/g, " ");
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const sortObj = parseJSON(currentSort) as Record<string, unknown>;
|
|
258
|
+
const reversedSort: Record<string, number> = {};
|
|
259
|
+
|
|
260
|
+
// Reverse each sort field
|
|
261
|
+
for (const [key, value] of Object.entries(sortObj)) {
|
|
262
|
+
if (typeof value === "number") {
|
|
263
|
+
reversedSort[key] = value === 1 ? -1 : 1;
|
|
264
|
+
} else {
|
|
265
|
+
// Keep non-numeric values as-is
|
|
266
|
+
reversedSort[key] = value as number;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Serialize and compact the output (remove newlines and extra spaces)
|
|
271
|
+
return serializeForEditing(reversedSort)
|
|
272
|
+
.replace(/[\n\t]/g, " ")
|
|
273
|
+
.replace(/\s+/g, " ");
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function toggleSort(e: MouseEvent) {
|
|
277
|
+
e.preventDefault();
|
|
278
|
+
const newSort = getReversedSort();
|
|
279
|
+
|
|
280
|
+
params.sort = newSort;
|
|
281
|
+
data.params.sort = newSort;
|
|
282
|
+
data.params.skip = 0;
|
|
283
|
+
params.skip = 0;
|
|
284
|
+
|
|
285
|
+
const queryParams = new SvelteURLSearchParams();
|
|
286
|
+
queryParams.set("query", params.query || "{}");
|
|
287
|
+
queryParams.set("sort", newSort);
|
|
288
|
+
queryParams.set("project", params.project || "");
|
|
289
|
+
queryParams.set("skip", "0");
|
|
290
|
+
queryParams.set("limit", String(params.limit));
|
|
291
|
+
|
|
292
|
+
const url = `/servers/${encodeURIComponent(data.server)}/databases/${encodeURIComponent(data.database)}/collections/${encodeURIComponent(data.collection)}/documents?${queryParams.toString()}`;
|
|
293
|
+
|
|
294
|
+
/* eslint-disable-next-line svelte/no-navigation-without-resolve */
|
|
295
|
+
pushState(url, {});
|
|
296
|
+
dataPromise = loadDocuments({
|
|
297
|
+
server: data.server,
|
|
298
|
+
database: data.database,
|
|
299
|
+
collection: data.collection,
|
|
300
|
+
query: params.query,
|
|
301
|
+
sort: newSort,
|
|
302
|
+
project: params.project,
|
|
303
|
+
skip: 0,
|
|
304
|
+
limit: params.limit,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
204
307
|
</script>
|
|
205
308
|
|
|
309
|
+
{#snippet previousButton(url: string, onClick: (e: MouseEvent) => void)}
|
|
310
|
+
<!-- eslint-disable @typescript-eslint/no-explicit-any -->
|
|
311
|
+
<a
|
|
312
|
+
href={resolve(url as any)}
|
|
313
|
+
onclick={onClick}
|
|
314
|
+
class="px-3 py-1 rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[13px] transition no-underline -my-2"
|
|
315
|
+
style="color: var(--text);"
|
|
316
|
+
>
|
|
317
|
+
Previous
|
|
318
|
+
</a>
|
|
319
|
+
{/snippet}
|
|
320
|
+
|
|
321
|
+
{#snippet nextButton(url: string, onClick: (e: MouseEvent) => void)}
|
|
322
|
+
<!-- eslint-disable @typescript-eslint/no-explicit-any -->
|
|
323
|
+
<a
|
|
324
|
+
href={resolve(url as any)}
|
|
325
|
+
onclick={onClick}
|
|
326
|
+
class="px-3 py-1 rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[13px] transition no-underline"
|
|
327
|
+
style="color: var(--text);"
|
|
328
|
+
>
|
|
329
|
+
Next
|
|
330
|
+
</a>
|
|
331
|
+
{/snippet}
|
|
332
|
+
|
|
333
|
+
{#snippet sortButton()}
|
|
334
|
+
<button
|
|
335
|
+
onclick={toggleSort}
|
|
336
|
+
class="px-3 py-1 rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[13px] transition"
|
|
337
|
+
style="color: var(--text); cursor: pointer;"
|
|
338
|
+
title="Reverse sort order"
|
|
339
|
+
>
|
|
340
|
+
<svg
|
|
341
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
342
|
+
viewBox="0 0 24 24"
|
|
343
|
+
fill="none"
|
|
344
|
+
stroke="currentColor"
|
|
345
|
+
stroke-width="2"
|
|
346
|
+
stroke-linecap="round"
|
|
347
|
+
stroke-linejoin="round"
|
|
348
|
+
class="w-4 h-4"
|
|
349
|
+
>
|
|
350
|
+
<path d="M3 6h18" />
|
|
351
|
+
<path d="M7 12h10" />
|
|
352
|
+
<path d="M10 18h4" />
|
|
353
|
+
<path d="m7 16 3 3 3-3" />
|
|
354
|
+
</svg>
|
|
355
|
+
</button>
|
|
356
|
+
{/snippet}
|
|
357
|
+
|
|
206
358
|
<SearchBox bind:params bind:editMode readonly={data.readOnly} />
|
|
207
359
|
|
|
208
360
|
{#if editMode}
|
|
209
|
-
<Panel title="
|
|
210
|
-
<div class="p-4 space-y-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
361
|
+
<Panel title="Edit Mode">
|
|
362
|
+
<div class="p-4 sm:p-6 space-y-6">
|
|
363
|
+
<!-- Insert Document Section -->
|
|
364
|
+
<div class="rounded-xl bg-[var(--color-3)]/30 p-4 border border-[var(--border-color)]">
|
|
365
|
+
<h3 class="text-lg font-semibold mb-3" style="color: var(--text);">Insert New Document</h3>
|
|
366
|
+
{#if !showInsertEditor}
|
|
367
|
+
<button class="btn btn-success" onclick={handleInsertClick}>
|
|
368
|
+
<svg
|
|
369
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
370
|
+
viewBox="0 0 24 24"
|
|
371
|
+
fill="none"
|
|
372
|
+
stroke="currentColor"
|
|
373
|
+
stroke-width="2"
|
|
374
|
+
stroke-linecap="round"
|
|
375
|
+
stroke-linejoin="round"
|
|
376
|
+
class="w-4 h-4 inline mr-2"
|
|
377
|
+
>
|
|
378
|
+
<path d="M12 5v14M5 12h14" />
|
|
379
|
+
</svg>
|
|
380
|
+
Insert Document
|
|
381
|
+
</button>
|
|
382
|
+
{:else}
|
|
383
|
+
<div class="space-y-3">
|
|
384
|
+
<label for="insert-document" class="block text-sm font-semibold mb-2" style="color: var(--text);">
|
|
385
|
+
Document JSON:
|
|
386
|
+
</label>
|
|
387
|
+
<textarea
|
|
388
|
+
id="insert-document"
|
|
389
|
+
bind:value={insertJson}
|
|
390
|
+
placeholder="Document JSON"
|
|
391
|
+
rows="6"
|
|
392
|
+
use:jsonTextarea={{ onsubmit: executeInsert }}
|
|
393
|
+
class="w-full p-3 rounded-xl border border-[var(--border-color)] bg-[var(--color-3)] font-mono text-sm focus:outline-none focus:ring-2"
|
|
394
|
+
style="color: var(--text); --tw-ring-color: var(--link);"
|
|
395
|
+
></textarea>
|
|
396
|
+
<div class="flex gap-3">
|
|
397
|
+
<button
|
|
398
|
+
class="btn btn-success hover:bg-[var(--button-success-l)]"
|
|
399
|
+
disabled={isUpdating}
|
|
400
|
+
onclick={executeInsert}
|
|
401
|
+
>
|
|
402
|
+
{isUpdating ? "Inserting..." : "Insert"}
|
|
403
|
+
</button>
|
|
404
|
+
<button class="btn btn-default" onclick={cancelInsert} disabled={isUpdating}>Cancel</button>
|
|
405
|
+
</div>
|
|
406
|
+
</div>
|
|
407
|
+
{/if}
|
|
223
408
|
</div>
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
>
|
|
228
|
-
<
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
409
|
+
|
|
410
|
+
<!-- Update Multiple Documents Section -->
|
|
411
|
+
<div class="rounded-xl bg-[var(--color-3)]/30 p-4 border border-[var(--border-color)]">
|
|
412
|
+
<h3 class="text-lg font-semibold mb-3" style="color: var(--text);">Update Multiple Documents</h3>
|
|
413
|
+
<div class="space-y-4">
|
|
414
|
+
<div>
|
|
415
|
+
<label for="update-filter" class="block text-sm font-semibold mb-2" style="color: var(--text);">
|
|
416
|
+
Filter (which documents to update):
|
|
417
|
+
</label>
|
|
418
|
+
<input
|
|
419
|
+
type="text"
|
|
420
|
+
id="update-filter"
|
|
421
|
+
value={params.query || "{}"}
|
|
422
|
+
readonly
|
|
423
|
+
class="w-full p-3 rounded-xl border border-[var(--border-color)] bg-[var(--color-3)] font-mono text-sm opacity-75 cursor-not-allowed"
|
|
424
|
+
style="color: var(--text);"
|
|
425
|
+
/>
|
|
426
|
+
<p class="text-xs mt-2" style="color: var(--text-secondary);">
|
|
427
|
+
This filter is taken from the query above. Modify the query to change which documents will be updated.
|
|
428
|
+
</p>
|
|
429
|
+
</div>
|
|
430
|
+
<div>
|
|
431
|
+
<label for="update-operation" class="block text-sm font-semibold mb-2" style="color: var(--text);">
|
|
432
|
+
Update Operation (e.g., $set, $inc, $unset):
|
|
433
|
+
</label>
|
|
434
|
+
<textarea
|
|
435
|
+
bind:value={updateQuery}
|
|
436
|
+
placeholder="Update operation"
|
|
437
|
+
rows="4"
|
|
438
|
+
use:jsonTextarea={{ onsubmit: executeUpdateMany }}
|
|
439
|
+
class="w-full p-3 rounded-xl border border-[var(--border-color)] bg-[var(--color-3)] font-mono text-sm focus:outline-none focus:ring-2"
|
|
440
|
+
style="color: var(--text); --tw-ring-color: var(--link);"
|
|
441
|
+
></textarea>
|
|
442
|
+
</div>
|
|
443
|
+
<div class="flex gap-3">
|
|
444
|
+
<button
|
|
445
|
+
class="btn btn-success hover:bg-[var(--button-success-l)]"
|
|
446
|
+
disabled={isUpdating}
|
|
447
|
+
onclick={executeUpdateMany}
|
|
448
|
+
>
|
|
449
|
+
{isUpdating ? "Updating..." : "Execute Update"}
|
|
450
|
+
</button>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
235
453
|
</div>
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
454
|
+
|
|
455
|
+
<!-- Close Edit Mode -->
|
|
456
|
+
<div class="flex justify-end">
|
|
457
|
+
<button
|
|
458
|
+
class="btn btn-default hover:bg-[var(--color-3)]"
|
|
459
|
+
onclick={() => {
|
|
460
|
+
editMode = false;
|
|
461
|
+
showInsertEditor = false;
|
|
462
|
+
}}
|
|
463
|
+
>
|
|
464
|
+
Close Edit Mode
|
|
239
465
|
</button>
|
|
240
|
-
<button class="btn btn-default" onclick={() => (editMode = false)}>Cancel</button>
|
|
241
466
|
</div>
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
467
|
+
|
|
468
|
+
<!-- Update Operation Examples -->
|
|
469
|
+
<div
|
|
470
|
+
class="text-sm rounded-xl bg-[var(--color-3)]/50 p-4 border border-[var(--border-color)]"
|
|
471
|
+
style="color: var(--text-secondary);"
|
|
472
|
+
>
|
|
473
|
+
<p class="mb-2 font-semibold" style="color: var(--text);">Update Operation Examples:</p>
|
|
474
|
+
<p class="mb-2">
|
|
475
|
+
• Set a field: <code
|
|
476
|
+
class="bg-[var(--light-background)] px-2 py-1 rounded border border-[var(--border-color)] font-mono text-xs"
|
|
477
|
+
>{'{"$set": {"status": "active"}}'}</code
|
|
478
|
+
>
|
|
479
|
+
</p>
|
|
480
|
+
<p class="mb-2">
|
|
481
|
+
• Increment a value: <code
|
|
482
|
+
class="bg-[var(--light-background)] px-2 py-1 rounded border border-[var(--border-color)] font-mono text-xs"
|
|
483
|
+
>{'{"$inc": {"count": 1}}'}</code
|
|
484
|
+
>
|
|
246
485
|
</p>
|
|
247
|
-
<p
|
|
248
|
-
•
|
|
486
|
+
<p>
|
|
487
|
+
• Unset a field: <code
|
|
488
|
+
class="bg-[var(--light-background)] px-2 py-1 rounded border border-[var(--border-color)] font-mono text-xs"
|
|
489
|
+
>{'{"$unset": {"oldField": ""}}'}</code
|
|
490
|
+
>
|
|
249
491
|
</p>
|
|
250
|
-
<p>• Unset a field: <code class="bg-[var(--color-3)] px-1 rounded">{'{"$unset": {"oldField": ""}}'}</code></p>
|
|
251
492
|
</div>
|
|
252
493
|
</div>
|
|
253
494
|
</Panel>
|
|
@@ -258,19 +499,17 @@
|
|
|
258
499
|
title={finalCount !== null
|
|
259
500
|
? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + data.params.limit)} of ${formatNumber(finalCount)} documents...`
|
|
260
501
|
: "Loading documents..."}
|
|
502
|
+
titleClass="py-1"
|
|
261
503
|
>
|
|
262
504
|
{#snippet actions()}
|
|
263
505
|
{#if finalCount !== null}
|
|
264
506
|
{#if data.params.skip > 0}
|
|
265
|
-
|
|
266
|
-
<a href={resolve(previousUrl as any)} onclick={navigatePrevious} class="btn btn-default btn-sm -my-2">
|
|
267
|
-
Previous
|
|
268
|
-
</a>
|
|
507
|
+
{@render previousButton(previousUrl, navigatePrevious)}
|
|
269
508
|
{/if}
|
|
270
509
|
{#if data.params.skip + data.params.limit < finalCount}
|
|
271
|
-
|
|
272
|
-
<a href={resolve(nextUrl as any)} onclick={navigateNext} class="btn btn-default btn-sm -my-2">Next</a>
|
|
510
|
+
{@render nextButton(nextUrl, navigateNext)}
|
|
273
511
|
{/if}
|
|
512
|
+
{@render sortButton()}
|
|
274
513
|
{/if}
|
|
275
514
|
{/snippet}
|
|
276
515
|
</Panel>
|
|
@@ -279,21 +518,19 @@
|
|
|
279
518
|
{@const items = resultsData?.data ?? []}
|
|
280
519
|
{#await data.count}
|
|
281
520
|
<Panel
|
|
521
|
+
titleClass="py-1"
|
|
282
522
|
title={items.length > 0
|
|
283
523
|
? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} Documents (counting...)`
|
|
284
524
|
: "No documents"}
|
|
285
525
|
>
|
|
286
526
|
{#snippet actions()}
|
|
287
527
|
{#if data.params.skip > 0}
|
|
288
|
-
|
|
289
|
-
<a href={resolve(previousUrl as any)} onclick={navigatePrevious} class="btn btn-default btn-sm -my-2">
|
|
290
|
-
Previous
|
|
291
|
-
</a>
|
|
528
|
+
{@render previousButton(previousUrl, navigatePrevious)}
|
|
292
529
|
{/if}
|
|
293
530
|
{#if items.length >= data.params.limit}
|
|
294
|
-
|
|
295
|
-
<a href={resolve(nextUrl as any)} onclick={navigateNext} class="btn btn-default btn-sm -my-2">Next</a>
|
|
531
|
+
{@render nextButton(nextUrl, navigateNext)}
|
|
296
532
|
{/if}
|
|
533
|
+
{@render sortButton()}
|
|
297
534
|
{/snippet}
|
|
298
535
|
</Panel>
|
|
299
536
|
{:then countData}
|
|
@@ -306,21 +543,19 @@
|
|
|
306
543
|
<Panel
|
|
307
544
|
title={items.length > 0
|
|
308
545
|
? count > 0
|
|
309
|
-
? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} of ${formatNumber(count)}
|
|
310
|
-
: `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)}
|
|
546
|
+
? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} of ${formatNumber(count)} documents`
|
|
547
|
+
: `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} documents (count ${isTimeout ? "timeout" : "unavailable"})`
|
|
311
548
|
: "No documents"}
|
|
549
|
+
titleClass="py-1"
|
|
312
550
|
>
|
|
313
551
|
{#snippet actions()}
|
|
314
552
|
{#if hasPrevious}
|
|
315
|
-
|
|
316
|
-
<a href={resolve(previousUrl as any)} onclick={navigatePrevious} class="btn btn-default btn-sm -my-2">
|
|
317
|
-
Previous
|
|
318
|
-
</a>
|
|
553
|
+
{@render previousButton(previousUrl, navigatePrevious)}
|
|
319
554
|
{/if}
|
|
320
555
|
{#if hasNext}
|
|
321
|
-
|
|
322
|
-
<a href={resolve(nextUrl as any)} onclick={navigateNext} class="btn btn-default btn-sm -my-2">Next</a>
|
|
556
|
+
{@render nextButton(nextUrl, navigateNext)}
|
|
323
557
|
{/if}
|
|
558
|
+
{@render sortButton()}
|
|
324
559
|
{/snippet}
|
|
325
560
|
</Panel>
|
|
326
561
|
{/if}
|
|
@@ -17,19 +17,19 @@ export const load: PageServerLoad = async ({ params, depends }) => {
|
|
|
17
17
|
const indexList = (await collection.listIndexes().toArray()) as IndexDescription[];
|
|
18
18
|
|
|
19
19
|
// Get index usage statistics
|
|
20
|
-
let indexStats: Record<string, { ops: number; since: Date }> = {};
|
|
20
|
+
let indexStats: Record<string, { ops: number; since: Date; building: boolean }> = {};
|
|
21
21
|
try {
|
|
22
22
|
const statsResult = await collection.aggregate([{ $indexStats: {} }]).toArray();
|
|
23
23
|
|
|
24
|
-
indexStats =
|
|
25
|
-
(
|
|
26
|
-
|
|
24
|
+
indexStats = Object.fromEntries(
|
|
25
|
+
statsResult.map((stat) => [
|
|
26
|
+
stat.name,
|
|
27
|
+
{
|
|
27
28
|
ops: stat.accesses?.ops || 0,
|
|
28
29
|
since: stat.accesses?.since || new Date(),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
{} as Record<string, { ops: number; since: Date }>,
|
|
30
|
+
building: stat.building || false,
|
|
31
|
+
},
|
|
32
|
+
]),
|
|
33
33
|
);
|
|
34
34
|
} catch (err) {
|
|
35
35
|
logger.error("Error fetching index stats:", err);
|