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.
Files changed (398) hide show
  1. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css +1 -0
  2. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/10.BrydhPds.css +1 -0
  5. package/build/client/_app/immutable/assets/10.BrydhPds.css.br +0 -0
  6. package/build/client/_app/immutable/assets/10.BrydhPds.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/12.I1sSDJ6i.css +1 -0
  8. package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.br +0 -0
  9. package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css +1 -0
  11. package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.br +0 -0
  12. package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.gz +0 -0
  13. package/build/client/_app/immutable/chunks/0oUK0vJa.js +1 -0
  14. package/build/client/_app/immutable/chunks/0oUK0vJa.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/0oUK0vJa.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/3xIOsPOb.js +16 -0
  17. package/build/client/_app/immutable/chunks/3xIOsPOb.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/3xIOsPOb.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/B83FMsIQ.js +24 -0
  20. package/build/client/_app/immutable/chunks/B83FMsIQ.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/B83FMsIQ.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/BGXqurs_.js +1 -0
  23. package/build/client/_app/immutable/chunks/BGXqurs_.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/BGXqurs_.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/BPbCnJEo.js +1 -0
  26. package/build/client/_app/immutable/chunks/BPbCnJEo.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BPbCnJEo.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/BXUq66wC.js +1 -0
  29. package/build/client/_app/immutable/chunks/BXUq66wC.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/BXUq66wC.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/BZY48V2X.js +14 -0
  32. package/build/client/_app/immutable/chunks/BZY48V2X.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/BZY48V2X.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/Bq7qZpXP.js +1 -0
  35. package/build/client/_app/immutable/chunks/Bq7qZpXP.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/Bq7qZpXP.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/BxoAxRg6.js +1 -0
  38. package/build/client/_app/immutable/chunks/BxoAxRg6.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/BxoAxRg6.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/ByCRZ7zS.js +2 -0
  41. package/build/client/_app/immutable/chunks/ByCRZ7zS.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/ByCRZ7zS.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/{D4iRRB8h.js → C1g0HmEj.js} +1 -1
  44. package/build/client/_app/immutable/chunks/C1g0HmEj.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/C1g0HmEj.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/DGtnJf56.js +1 -0
  47. package/build/client/_app/immutable/chunks/DGtnJf56.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/DGtnJf56.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/{DR9xdhsg.js → DIw4Wyr4.js} +1 -1
  50. package/build/client/_app/immutable/chunks/DIw4Wyr4.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/DIw4Wyr4.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/Dn0_-jEe.js +1 -0
  53. package/build/client/_app/immutable/chunks/Dn0_-jEe.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/Dn0_-jEe.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/UJuWD2W4.js +1 -0
  56. package/build/client/_app/immutable/chunks/UJuWD2W4.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/UJuWD2W4.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/{Dx56OlI-.js → _Sxqiax7.js} +1 -1
  59. package/build/client/_app/immutable/chunks/_Sxqiax7.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/_Sxqiax7.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/_kKBJjiB.js +1 -0
  62. package/build/client/_app/immutable/chunks/_kKBJjiB.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/_kKBJjiB.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/pj4OZpZf.js +4 -0
  65. package/build/client/_app/immutable/chunks/pj4OZpZf.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/pj4OZpZf.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/reNJcONQ.js +1 -0
  68. package/build/client/_app/immutable/chunks/reNJcONQ.js.br +0 -0
  69. package/build/client/_app/immutable/chunks/reNJcONQ.js.gz +0 -0
  70. package/build/client/_app/immutable/entry/app.DV8my7lq.js +2 -0
  71. package/build/client/_app/immutable/entry/app.DV8my7lq.js.br +0 -0
  72. package/build/client/_app/immutable/entry/app.DV8my7lq.js.gz +0 -0
  73. package/build/client/_app/immutable/entry/start.CHeMkIYN.js +1 -0
  74. package/build/client/_app/immutable/entry/start.CHeMkIYN.js.br +0 -0
  75. package/build/client/_app/immutable/entry/start.CHeMkIYN.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/0.CNNOoOHl.js +1 -0
  77. package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/1.C-65KEEJ.js +1 -0
  80. package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js +1 -0
  83. package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/11.iU-GIxdi.js +1 -0
  86. package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.br +0 -0
  87. package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.gz +0 -0
  88. package/build/client/_app/immutable/nodes/12.BneOFPb1.js +1 -0
  89. package/build/client/_app/immutable/nodes/12.BneOFPb1.js.br +0 -0
  90. package/build/client/_app/immutable/nodes/12.BneOFPb1.js.gz +0 -0
  91. package/build/client/_app/immutable/nodes/13.BsUY4XVc.js +66 -0
  92. package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.br +0 -0
  93. package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.gz +0 -0
  94. package/build/client/_app/immutable/nodes/{2.DwwrLLW4.js → 2.DqvBb3C7.js} +1 -1
  95. package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.br +0 -0
  96. package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.gz +0 -0
  97. package/build/client/_app/immutable/nodes/{3.t20GootO.js → 3.27swwcG4.js} +1 -1
  98. package/build/client/_app/immutable/nodes/3.27swwcG4.js.br +0 -0
  99. package/build/client/_app/immutable/nodes/3.27swwcG4.js.gz +0 -0
  100. package/build/client/_app/immutable/nodes/{4.CXHjkPtf.js → 4.CcholrFe.js} +1 -1
  101. package/build/client/_app/immutable/nodes/4.CcholrFe.js.br +0 -0
  102. package/build/client/_app/immutable/nodes/4.CcholrFe.js.gz +0 -0
  103. package/build/client/_app/immutable/nodes/{5.C9tcr5B0.js → 5.CzudN9q-.js} +1 -1
  104. package/build/client/_app/immutable/nodes/5.CzudN9q-.js.br +0 -0
  105. package/build/client/_app/immutable/nodes/5.CzudN9q-.js.gz +0 -0
  106. package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js +1 -0
  107. package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.br +0 -0
  108. package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.gz +0 -0
  109. package/build/client/_app/immutable/nodes/8.aa4EbN0k.js +1 -0
  110. package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.br +0 -0
  111. package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.gz +0 -0
  112. package/build/client/_app/immutable/nodes/9.9dZgqvLb.js +2 -0
  113. package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.br +0 -0
  114. package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.gz +0 -0
  115. package/build/client/_app/version.json +1 -1
  116. package/build/client/_app/version.json.br +0 -0
  117. package/build/client/_app/version.json.gz +0 -0
  118. package/build/server/chunks/0-BHG1s0_H.js +22 -0
  119. package/build/server/chunks/0-BHG1s0_H.js.map +1 -0
  120. package/build/server/chunks/1-Xz1zN5FT.js +9 -0
  121. package/build/server/chunks/1-Xz1zN5FT.js.map +1 -0
  122. package/build/server/chunks/{10-DGUQMXHt.js → 10-CaYvpZVK.js} +6 -5
  123. package/build/server/chunks/10-CaYvpZVK.js.map +1 -0
  124. package/build/server/chunks/{11-CxBnyyqR.js → 11-uJK96PLt.js} +6 -5
  125. package/build/server/chunks/11-uJK96PLt.js.map +1 -0
  126. package/build/server/chunks/{12-K_JVUnsk.js → 12-CvEEILKx.js} +14 -13
  127. package/build/server/chunks/12-CvEEILKx.js.map +1 -0
  128. package/build/server/chunks/{13-Cay35aHK.js → 13-Cvk7ClFs.js} +6 -5
  129. package/build/server/chunks/{13-Cay35aHK.js.map → 13-Cvk7ClFs.js.map} +1 -1
  130. package/build/server/chunks/{2-ClkERMhY.js → 2-BheEgghx.js} +2 -2
  131. package/build/server/chunks/{2-ClkERMhY.js.map → 2-BheEgghx.js.map} +1 -1
  132. package/build/server/chunks/{3-CTpqmxdo.js → 3-BwrTscBH.js} +2 -2
  133. package/build/server/chunks/{3-CTpqmxdo.js.map → 3-BwrTscBH.js.map} +1 -1
  134. package/build/server/chunks/{4-CUH4fZn8.js → 4-D28kbpdN.js} +2 -2
  135. package/build/server/chunks/{4-CUH4fZn8.js.map → 4-D28kbpdN.js.map} +1 -1
  136. package/build/server/chunks/{5-BSEdxfut.js → 5--wY8V1OC.js} +2 -2
  137. package/build/server/chunks/{5-BSEdxfut.js.map → 5--wY8V1OC.js.map} +1 -1
  138. package/build/server/chunks/{7-DvU-_ADW.js → 7-DTmi6ASF.js} +6 -5
  139. package/build/server/chunks/7-DTmi6ASF.js.map +1 -0
  140. package/build/server/chunks/{8-CA3-CJtS.js → 8-CHIpUo4j.js} +6 -5
  141. package/build/server/chunks/8-CHIpUo4j.js.map +1 -0
  142. package/build/server/chunks/{9-jMOS3lPS.js → 9-C3nw_taL.js} +6 -5
  143. package/build/server/chunks/9-C3nw_taL.js.map +1 -0
  144. package/build/server/chunks/{JsonValue-WMdIUvRM.js → JsonValue-DiECF6Zd.js} +11 -4
  145. package/build/server/chunks/JsonValue-DiECF6Zd.js.map +1 -0
  146. package/build/server/chunks/{Modal-zVnoAfFx.js → Modal-BzZ9u6V6.js} +3 -3
  147. package/build/server/chunks/Modal-BzZ9u6V6.js.map +1 -0
  148. package/build/server/chunks/Panel-DEP08QXV.js +48 -0
  149. package/build/server/chunks/Panel-DEP08QXV.js.map +1 -0
  150. package/build/server/chunks/{PrettyJson-D3CylSVd.js → PrettyJson-ElzPxPF4.js} +55 -40
  151. package/build/server/chunks/PrettyJson-ElzPxPF4.js.map +1 -0
  152. package/build/server/chunks/Tooltip-DK6Aok7l.js +35 -0
  153. package/build/server/chunks/Tooltip-DK6Aok7l.js.map +1 -0
  154. package/build/server/chunks/{TooltipTable-DCu3GLqO.js → TooltipTable-DUYKVtrh.js} +3 -3
  155. package/build/server/chunks/{TooltipTable-DCu3GLqO.js.map → TooltipTable-DUYKVtrh.js.map} +1 -1
  156. package/build/server/chunks/_layout.svelte-CCi6mq1k.js +159 -0
  157. package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +1 -0
  158. package/build/server/chunks/{_page.svelte-C-13GpOe.js → _page.svelte-B4BL5PJR.js} +18 -16
  159. package/build/server/chunks/_page.svelte-B4BL5PJR.js.map +1 -0
  160. package/build/server/chunks/{_page.svelte-BRxX_vQR.js → _page.svelte-BUheieJ5.js} +26 -15
  161. package/build/server/chunks/_page.svelte-BUheieJ5.js.map +1 -0
  162. package/build/server/chunks/{_page.svelte-BBHqwhWF.js → _page.svelte-Bj297hp1.js} +16 -15
  163. package/build/server/chunks/_page.svelte-Bj297hp1.js.map +1 -0
  164. package/build/server/chunks/{_page.svelte-2w3fCax2.js → _page.svelte-BvjNfjgw.js} +14 -14
  165. package/build/server/chunks/{_page.svelte-2w3fCax2.js.map → _page.svelte-BvjNfjgw.js.map} +1 -1
  166. package/build/server/chunks/_page.svelte-DDe4hyAB.js +387 -0
  167. package/build/server/chunks/_page.svelte-DDe4hyAB.js.map +1 -0
  168. package/build/server/chunks/{_page.svelte-Ca9u_35e.js → _page.svelte-DEe2Kbbw.js} +72 -12
  169. package/build/server/chunks/_page.svelte-DEe2Kbbw.js.map +1 -0
  170. package/build/server/chunks/_page.svelte-DJFPwyij.js +323 -0
  171. package/build/server/chunks/_page.svelte-DJFPwyij.js.map +1 -0
  172. package/build/server/chunks/client-Cp5ag8tA.js +7 -0
  173. package/build/server/chunks/{client-BFlyU7ZU.js.map → client-Cp5ag8tA.js.map} +1 -1
  174. package/build/server/chunks/{client2-DYaMKWrc.js → client2-Dos6p_Xm.js} +3 -4
  175. package/build/server/chunks/{client2-DYaMKWrc.js.map → client2-Dos6p_Xm.js.map} +1 -1
  176. package/build/server/chunks/{error.svelte-BENdaVOT.js → error.svelte-BBEhCLUJ.js} +6 -7
  177. package/build/server/chunks/{error.svelte-BENdaVOT.js.map → error.svelte-BBEhCLUJ.js.map} +1 -1
  178. package/build/server/chunks/{index2-DBFlGzWV.js → index2-DzKnqQNM.js} +2 -2
  179. package/build/server/chunks/{index2-DBFlGzWV.js.map → index2-DzKnqQNM.js.map} +1 -1
  180. package/build/server/chunks/{index3-CoOO2o9t.js → index3-DANRthiW.js} +2 -2
  181. package/build/server/chunks/{index3-CoOO2o9t.js.map → index3-DANRthiW.js.map} +1 -1
  182. package/build/server/chunks/{mongo-Db8Vgimy.js → mongo-BHk5yAj9.js} +90 -19
  183. package/build/server/chunks/mongo-BHk5yAj9.js.map +1 -0
  184. package/build/server/chunks/{remote-xxtqbu-AjxdDZZ_.js → remote-xxtqbu-DBe3CqEJ.js} +6 -6
  185. package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +1 -0
  186. package/build/server/chunks/{server2-_mGVuBoG.js → server2-YmCaJGWy.js} +2 -2
  187. package/build/server/chunks/{server2-_mGVuBoG.js.map → server2-YmCaJGWy.js.map} +1 -1
  188. package/build/server/chunks/{servers.remote-DrkuAWHP.js → servers.remote-HDmNH7n4.js} +245 -15
  189. package/build/server/chunks/servers.remote-HDmNH7n4.js.map +1 -0
  190. package/build/server/chunks/{shared-Buki-xt5.js → shared-CQd3A1I4.js} +2 -2
  191. package/build/server/chunks/{shared-Buki-xt5.js.map → shared-CQd3A1I4.js.map} +1 -1
  192. package/build/server/chunks/{state.svelte-C8IWmp_n.js → state.svelte-Dm0prnTp.js} +2 -2
  193. package/build/server/chunks/{state.svelte-C8IWmp_n.js.map → state.svelte-Dm0prnTp.js.map} +1 -1
  194. package/build/server/chunks/{event-DVH-6ISX.js → utils-D1ahxout.js} +39 -2
  195. package/build/server/chunks/utils-D1ahxout.js.map +1 -0
  196. package/build/server/index.js +5 -6
  197. package/build/server/index.js.map +1 -1
  198. package/build/server/manifest.js +15 -15
  199. package/build/server/manifest.js.map +1 -1
  200. package/package.json +3 -2
  201. package/src/api/servers.remote.ts +275 -11
  202. package/src/app.css +178 -135
  203. package/src/app.html +23 -10
  204. package/src/lib/actions/portal.ts +42 -0
  205. package/src/lib/components/Breadcrumbs.svelte +20 -60
  206. package/src/lib/components/JsonValue.svelte +30 -1
  207. package/src/lib/components/Modal.svelte +5 -5
  208. package/src/lib/components/Notifications.svelte +42 -21
  209. package/src/lib/components/PageSwitcher.svelte +16 -10
  210. package/src/lib/components/Panel.svelte +19 -15
  211. package/src/lib/components/PrettyJson.svelte +102 -90
  212. package/src/lib/components/ReplicaSetSelector.svelte +144 -0
  213. package/src/lib/components/SearchBox.svelte +117 -96
  214. package/src/lib/components/ThemeSwitcher.svelte +191 -36
  215. package/src/lib/components/Tooltip.svelte +23 -14
  216. package/src/lib/server/mongo.ts +129 -26
  217. package/src/lib/utils/formatSignificantDigits.ts +30 -0
  218. package/src/lib/utils/formatTimeAgo.ts +20 -0
  219. package/src/lib/utils/hostnames.ts +86 -0
  220. package/src/lib/utils/jsonParser.ts +50 -0
  221. package/src/lib/utils/longestCommonSuffix.ts +47 -0
  222. package/src/lib/utils/sum.ts +10 -0
  223. package/src/routes/+layout.svelte +36 -17
  224. package/src/routes/servers/+page.svelte +6 -7
  225. package/src/routes/servers/[server]/databases/+page.svelte +71 -2
  226. package/src/routes/servers/[server]/databases/[database]/collections/+page.svelte +13 -3
  227. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +292 -57
  228. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.server.ts +8 -8
  229. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.svelte +628 -105
  230. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/mappings/+page.svelte +26 -12
  231. package/build/client/_app/immutable/assets/0.COnAcXN4.css +0 -1
  232. package/build/client/_app/immutable/assets/0.COnAcXN4.css.br +0 -0
  233. package/build/client/_app/immutable/assets/0.COnAcXN4.css.gz +0 -0
  234. package/build/client/_app/immutable/assets/10.59aTjJn9.css +0 -1
  235. package/build/client/_app/immutable/assets/10.59aTjJn9.css.br +0 -0
  236. package/build/client/_app/immutable/assets/10.59aTjJn9.css.gz +0 -0
  237. package/build/client/_app/immutable/assets/12.BdCOhvz0.css +0 -1
  238. package/build/client/_app/immutable/assets/12.BdCOhvz0.css.br +0 -0
  239. package/build/client/_app/immutable/assets/12.BdCOhvz0.css.gz +0 -0
  240. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css +0 -1
  241. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.br +0 -0
  242. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.gz +0 -0
  243. package/build/client/_app/immutable/assets/Panel.B3aWupye.css +0 -1
  244. package/build/client/_app/immutable/assets/Panel.B3aWupye.css.br +0 -0
  245. package/build/client/_app/immutable/assets/Panel.B3aWupye.css.gz +0 -0
  246. package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.Cnibl3-L.woff2 +0 -0
  247. package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.RKIjpA76.woff +0 -0
  248. package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.CT5q4ZVh.woff2 +0 -0
  249. package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.iCCFJ4Gn.woff +0 -0
  250. package/build/client/_app/immutable/assets/cuprum-latin-400-normal.Cbwtr8a4.woff +0 -0
  251. package/build/client/_app/immutable/assets/cuprum-latin-400-normal.CjFvNwMJ.woff2 +0 -0
  252. package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BWTJtpjo.woff2 +0 -0
  253. package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BZXayy47.woff +0 -0
  254. package/build/client/_app/immutable/assets/cuprum-vietnamese-400-normal.uXRi1gw5.woff +0 -0
  255. package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.BdIzgbsr.woff +0 -0
  256. package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.CTuj2HZW.woff2 +0 -0
  257. package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.C6_q4usG.woff +0 -0
  258. package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.CurJOxDW.woff2 +0 -0
  259. package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.DACPYgMx.woff2 +0 -0
  260. package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.Der7ynDE.woff +0 -0
  261. package/build/client/_app/immutable/chunks/3iRu_dUj.js +0 -2
  262. package/build/client/_app/immutable/chunks/3iRu_dUj.js.br +0 -0
  263. package/build/client/_app/immutable/chunks/3iRu_dUj.js.gz +0 -0
  264. package/build/client/_app/immutable/chunks/5nAxkTTP.js +0 -1
  265. package/build/client/_app/immutable/chunks/5nAxkTTP.js.br +0 -5
  266. package/build/client/_app/immutable/chunks/5nAxkTTP.js.gz +0 -0
  267. package/build/client/_app/immutable/chunks/BBg-V8FE.js +0 -1
  268. package/build/client/_app/immutable/chunks/BBg-V8FE.js.br +0 -0
  269. package/build/client/_app/immutable/chunks/BBg-V8FE.js.gz +0 -0
  270. package/build/client/_app/immutable/chunks/BE8UzJuY.js +0 -1
  271. package/build/client/_app/immutable/chunks/BE8UzJuY.js.br +0 -0
  272. package/build/client/_app/immutable/chunks/BE8UzJuY.js.gz +0 -0
  273. package/build/client/_app/immutable/chunks/BQEBQyfZ.js +0 -1
  274. package/build/client/_app/immutable/chunks/BQEBQyfZ.js.br +0 -0
  275. package/build/client/_app/immutable/chunks/BQEBQyfZ.js.gz +0 -0
  276. package/build/client/_app/immutable/chunks/BUNgwIS0.js +0 -1
  277. package/build/client/_app/immutable/chunks/BUNgwIS0.js.br +0 -0
  278. package/build/client/_app/immutable/chunks/BUNgwIS0.js.gz +0 -0
  279. package/build/client/_app/immutable/chunks/BvKY81hz.js +0 -1
  280. package/build/client/_app/immutable/chunks/BvKY81hz.js.br +0 -0
  281. package/build/client/_app/immutable/chunks/BvKY81hz.js.gz +0 -0
  282. package/build/client/_app/immutable/chunks/C0PCwpqt.js +0 -23
  283. package/build/client/_app/immutable/chunks/C0PCwpqt.js.br +0 -0
  284. package/build/client/_app/immutable/chunks/C0PCwpqt.js.gz +0 -0
  285. package/build/client/_app/immutable/chunks/C0rm4mmq.js +0 -1
  286. package/build/client/_app/immutable/chunks/C0rm4mmq.js.br +0 -0
  287. package/build/client/_app/immutable/chunks/C0rm4mmq.js.gz +0 -0
  288. package/build/client/_app/immutable/chunks/C2sjtvBO.js +0 -1
  289. package/build/client/_app/immutable/chunks/C2sjtvBO.js.br +0 -0
  290. package/build/client/_app/immutable/chunks/C2sjtvBO.js.gz +0 -0
  291. package/build/client/_app/immutable/chunks/C82Rp5eQ.js +0 -1
  292. package/build/client/_app/immutable/chunks/C82Rp5eQ.js.br +0 -0
  293. package/build/client/_app/immutable/chunks/C82Rp5eQ.js.gz +0 -0
  294. package/build/client/_app/immutable/chunks/CGSOl_q_.js +0 -4
  295. package/build/client/_app/immutable/chunks/CGSOl_q_.js.br +0 -0
  296. package/build/client/_app/immutable/chunks/CGSOl_q_.js.gz +0 -0
  297. package/build/client/_app/immutable/chunks/CjNnAkTB.js +0 -1
  298. package/build/client/_app/immutable/chunks/CjNnAkTB.js.br +0 -0
  299. package/build/client/_app/immutable/chunks/CjNnAkTB.js.gz +0 -0
  300. package/build/client/_app/immutable/chunks/Cx2cA4gg.js +0 -1
  301. package/build/client/_app/immutable/chunks/Cx2cA4gg.js.br +0 -0
  302. package/build/client/_app/immutable/chunks/Cx2cA4gg.js.gz +0 -0
  303. package/build/client/_app/immutable/chunks/D4iRRB8h.js.br +0 -0
  304. package/build/client/_app/immutable/chunks/D4iRRB8h.js.gz +0 -0
  305. package/build/client/_app/immutable/chunks/D5ccpaXt.js +0 -1
  306. package/build/client/_app/immutable/chunks/D5ccpaXt.js.br +0 -0
  307. package/build/client/_app/immutable/chunks/D5ccpaXt.js.gz +0 -0
  308. package/build/client/_app/immutable/chunks/D7E46CWw.js +0 -1
  309. package/build/client/_app/immutable/chunks/D7E46CWw.js.br +0 -0
  310. package/build/client/_app/immutable/chunks/D7E46CWw.js.gz +0 -0
  311. package/build/client/_app/immutable/chunks/DR9xdhsg.js.br +0 -0
  312. package/build/client/_app/immutable/chunks/DR9xdhsg.js.gz +0 -0
  313. package/build/client/_app/immutable/chunks/DVRQRZnh.js +0 -1
  314. package/build/client/_app/immutable/chunks/DVRQRZnh.js.br +0 -0
  315. package/build/client/_app/immutable/chunks/DVRQRZnh.js.gz +0 -0
  316. package/build/client/_app/immutable/chunks/DcPEQ0_V.js +0 -29
  317. package/build/client/_app/immutable/chunks/DcPEQ0_V.js.br +0 -0
  318. package/build/client/_app/immutable/chunks/DcPEQ0_V.js.gz +0 -0
  319. package/build/client/_app/immutable/chunks/Dx56OlI-.js.br +0 -2
  320. package/build/client/_app/immutable/chunks/Dx56OlI-.js.gz +0 -0
  321. package/build/client/_app/immutable/chunks/PXh00dfp.js +0 -2
  322. package/build/client/_app/immutable/chunks/PXh00dfp.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/PXh00dfp.js.gz +0 -0
  324. package/build/client/_app/immutable/entry/app.DrdSPfGo.js +0 -2
  325. package/build/client/_app/immutable/entry/app.DrdSPfGo.js.br +0 -0
  326. package/build/client/_app/immutable/entry/app.DrdSPfGo.js.gz +0 -0
  327. package/build/client/_app/immutable/entry/start.DGG3CpnK.js +0 -1
  328. package/build/client/_app/immutable/entry/start.DGG3CpnK.js.br +0 -2
  329. package/build/client/_app/immutable/entry/start.DGG3CpnK.js.gz +0 -0
  330. package/build/client/_app/immutable/nodes/0.kCLtccjl.js +0 -5
  331. package/build/client/_app/immutable/nodes/0.kCLtccjl.js.br +0 -0
  332. package/build/client/_app/immutable/nodes/0.kCLtccjl.js.gz +0 -0
  333. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js +0 -1
  334. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.br +0 -3
  335. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.gz +0 -0
  336. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js +0 -2
  337. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.br +0 -0
  338. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.gz +0 -0
  339. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js +0 -1
  340. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.br +0 -0
  341. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.gz +0 -0
  342. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js +0 -1
  343. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.br +0 -0
  344. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.gz +0 -0
  345. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js +0 -66
  346. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.br +0 -0
  347. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.gz +0 -0
  348. package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.br +0 -1
  349. package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.gz +0 -0
  350. package/build/client/_app/immutable/nodes/3.t20GootO.js.br +0 -0
  351. package/build/client/_app/immutable/nodes/3.t20GootO.js.gz +0 -0
  352. package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.br +0 -0
  353. package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.gz +0 -0
  354. package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.br +0 -0
  355. package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.gz +0 -0
  356. package/build/client/_app/immutable/nodes/7.D14iWySv.js +0 -1
  357. package/build/client/_app/immutable/nodes/7.D14iWySv.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/7.D14iWySv.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js +0 -1
  360. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.br +0 -0
  361. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.gz +0 -0
  362. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js +0 -2
  363. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.br +0 -0
  364. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.gz +0 -0
  365. package/build/server/chunks/0-BozXjQlk.js +0 -22
  366. package/build/server/chunks/0-BozXjQlk.js.map +0 -1
  367. package/build/server/chunks/1-C_LPMO7A.js +0 -9
  368. package/build/server/chunks/1-C_LPMO7A.js.map +0 -1
  369. package/build/server/chunks/10-DGUQMXHt.js.map +0 -1
  370. package/build/server/chunks/11-CxBnyyqR.js.map +0 -1
  371. package/build/server/chunks/12-K_JVUnsk.js.map +0 -1
  372. package/build/server/chunks/7-DvU-_ADW.js.map +0 -1
  373. package/build/server/chunks/8-CA3-CJtS.js.map +0 -1
  374. package/build/server/chunks/9-jMOS3lPS.js.map +0 -1
  375. package/build/server/chunks/JsonValue-WMdIUvRM.js.map +0 -1
  376. package/build/server/chunks/Modal-zVnoAfFx.js.map +0 -1
  377. package/build/server/chunks/Panel-yg5YKL4d.js +0 -38
  378. package/build/server/chunks/Panel-yg5YKL4d.js.map +0 -1
  379. package/build/server/chunks/PrettyJson-D3CylSVd.js.map +0 -1
  380. package/build/server/chunks/Tooltip-ys6l541_.js +0 -28
  381. package/build/server/chunks/Tooltip-ys6l541_.js.map +0 -1
  382. package/build/server/chunks/_layout.svelte-DMm1Ill8.js +0 -168
  383. package/build/server/chunks/_layout.svelte-DMm1Ill8.js.map +0 -1
  384. package/build/server/chunks/_page.svelte-BBHqwhWF.js.map +0 -1
  385. package/build/server/chunks/_page.svelte-BRxX_vQR.js.map +0 -1
  386. package/build/server/chunks/_page.svelte-C-13GpOe.js.map +0 -1
  387. package/build/server/chunks/_page.svelte-Ca9u_35e.js.map +0 -1
  388. package/build/server/chunks/_page.svelte-Cm_vgRRR.js +0 -206
  389. package/build/server/chunks/_page.svelte-Cm_vgRRR.js.map +0 -1
  390. package/build/server/chunks/_page.svelte-DoOBFRSo.js +0 -299
  391. package/build/server/chunks/_page.svelte-DoOBFRSo.js.map +0 -1
  392. package/build/server/chunks/client-BFlyU7ZU.js +0 -7
  393. package/build/server/chunks/event-DVH-6ISX.js.map +0 -1
  394. package/build/server/chunks/mongo-Db8Vgimy.js.map +0 -1
  395. package/build/server/chunks/remote-xxtqbu-AjxdDZZ_.js.map +0 -1
  396. package/build/server/chunks/servers.remote-DrkuAWHP.js.map +0 -1
  397. package/build/server/chunks/utils-kjxf7BZO.js +0 -39
  398. 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}>Drop Collection</button>
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(JSON.parse(params.project)).length > 0,
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="Update Multiple Documents">
210
- <div class="p-4 space-y-4">
211
- <div>
212
- <label for="update-filter" class="block text-sm font-medium mb-2">Filter (which documents to update):</label>
213
- <input
214
- type="text"
215
- id="update-filter"
216
- value={params.query || "{}"}
217
- readonly
218
- class="w-full p-2 border border-[var(--color-4)] bg-[var(--light-background)] rounded font-mono text-sm opacity-75 cursor-not-allowed"
219
- />
220
- <p class="text-xs text-[var(--text-secondary,#888)] mt-1">
221
- This filter is taken from the query above. Modify the query to change which documents will be updated.
222
- </p>
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
- <div>
225
- <label for="update-operation" class="block text-sm font-medium mb-2"
226
- >Update Operation (e.g., $set, $inc, $unset):</label
227
- >
228
- <textarea
229
- bind:value={updateQuery}
230
- placeholder="Update operation"
231
- rows="4"
232
- use:jsonTextarea={{ onsubmit: executeUpdateMany }}
233
- class="w-full p-2 border border-[var(--color-4)] bg-[var(--color-3)] rounded font-mono text-sm"
234
- ></textarea>
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
- <div class="flex gap-2">
237
- <button class="btn btn-success" disabled={isUpdating} onclick={executeUpdateMany}>
238
- {isUpdating ? "Updating..." : "Execute Update"}
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
- <div class="text-sm text-[var(--text-secondary,#888)]">
243
- <p class="mb-1"><strong>Examples:</strong></p>
244
- <p class="mb-1">
245
- • Set a field: <code class="bg-[var(--color-3)] px-1 rounded">{'{"$set": {"status": "active"}}'}</code>
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 class="mb-1">
248
- Increment a value: <code class="bg-[var(--color-3)] px-1 rounded">{'{"$inc": {"count": 1}}'}</code>
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
- <!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
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
- <!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
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
- <!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
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
- <!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
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)} Documents`
310
- : `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} Documents (count ${isTimeout ? "timeout" : "unavailable"})`
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
- <!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
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
- <!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->
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 = statsResult.reduce(
25
- (acc, stat) => {
26
- acc[stat.name] = {
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
- return acc;
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);