mongoku 2.0.2 → 2.0.3

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 (151) hide show
  1. package/Dockerfile +27 -0
  2. package/build/client/_app/immutable/chunks/{MHUppGzk.js → BAM9w9EL.js} +1 -1
  3. package/build/client/_app/immutable/chunks/BAM9w9EL.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/BAM9w9EL.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{CN-ecO3-.js → BMa204Dm.js} +1 -1
  6. package/build/client/_app/immutable/chunks/BMa204Dm.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/BMa204Dm.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{_2kcttvK.js → BdR-m9Ad.js} +1 -1
  9. package/build/client/_app/immutable/chunks/BdR-m9Ad.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/BdR-m9Ad.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/BzAcxkRZ.js +4 -0
  12. package/build/client/_app/immutable/chunks/BzAcxkRZ.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BzAcxkRZ.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{BFhvhM4X.js → CyQLXPZI.js} +1 -1
  15. package/build/client/_app/immutable/chunks/CyQLXPZI.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/CyQLXPZI.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{BdWVCPGW.js → D4VhtiDg.js} +1 -1
  18. package/build/client/_app/immutable/chunks/D4VhtiDg.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/D4VhtiDg.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{zXvB9_Mi.js → XYFbSe2V.js} +1 -1
  21. package/build/client/_app/immutable/chunks/XYFbSe2V.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/XYFbSe2V.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{CGIdus8b.js → uMNMODvc.js} +1 -1
  24. package/build/client/_app/immutable/chunks/uMNMODvc.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/uMNMODvc.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/{app.hGE78f-O.js → app.9nC_873E.js} +2 -2
  27. package/build/client/_app/immutable/entry/app.9nC_873E.js.br +0 -0
  28. package/build/client/_app/immutable/entry/app.9nC_873E.js.gz +0 -0
  29. package/build/client/_app/immutable/entry/start.Bn88Alw2.js +1 -0
  30. package/build/client/_app/immutable/entry/start.Bn88Alw2.js.br +2 -0
  31. package/build/client/_app/immutable/entry/start.Bn88Alw2.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{0.DyBXVtnT.js → 0.COxTCtn2.js} +1 -1
  33. package/build/client/_app/immutable/nodes/0.COxTCtn2.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/0.COxTCtn2.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{1.FqB0jq88.js → 1.Bc8yPK_D.js} +1 -1
  36. package/build/client/_app/immutable/nodes/1.Bc8yPK_D.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/1.Bc8yPK_D.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/{3.Bekn_8hM.js → 3.CI2GcqTf.js} +1 -1
  39. package/build/client/_app/immutable/nodes/3.CI2GcqTf.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/3.CI2GcqTf.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{4.DQfaAvJi.js → 4.ChSdW7ac.js} +1 -1
  42. package/build/client/_app/immutable/nodes/4.ChSdW7ac.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/4.ChSdW7ac.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{5.B1E6iW2R.js → 5.DaMML2go.js} +1 -1
  45. package/build/client/_app/immutable/nodes/5.DaMML2go.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/5.DaMML2go.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{6.28eZQkvz.js → 6.Dcq0qwvO.js} +1 -1
  48. package/build/client/_app/immutable/nodes/6.Dcq0qwvO.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/6.Dcq0qwvO.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{7.qpcLWZb7.js → 7.CU-ncPes.js} +1 -1
  51. package/build/client/_app/immutable/nodes/7.CU-ncPes.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/7.CU-ncPes.js.gz +0 -0
  53. package/build/client/_app/version.json +1 -1
  54. package/build/client/_app/version.json.br +0 -0
  55. package/build/client/_app/version.json.gz +0 -0
  56. package/build/server/chunks/{0-m42kIUxj.js → 0-C1NyHW8A.js} +2 -2
  57. package/build/server/chunks/{0-m42kIUxj.js.map → 0-C1NyHW8A.js.map} +1 -1
  58. package/build/server/chunks/{1-uc74UVG3.js → 1-CThf4W5r.js} +2 -2
  59. package/build/server/chunks/{1-uc74UVG3.js.map → 1-CThf4W5r.js.map} +1 -1
  60. package/build/server/chunks/{3-Bi8teWON.js → 3-CJf0NbiV.js} +2 -2
  61. package/build/server/chunks/{3-Bi8teWON.js.map → 3-CJf0NbiV.js.map} +1 -1
  62. package/build/server/chunks/{4-u1WGAtFU.js → 4-Dfbpsagm.js} +2 -2
  63. package/build/server/chunks/{4-u1WGAtFU.js.map → 4-Dfbpsagm.js.map} +1 -1
  64. package/build/server/chunks/{5-BlGdcdjs.js → 5-DLB6GOjf.js} +2 -2
  65. package/build/server/chunks/{5-BlGdcdjs.js.map → 5-DLB6GOjf.js.map} +1 -1
  66. package/build/server/chunks/{6-YCp6xyCU.js → 6-DfCARDKO.js} +2 -2
  67. package/build/server/chunks/{6-YCp6xyCU.js.map → 6-DfCARDKO.js.map} +1 -1
  68. package/build/server/chunks/{7-ieA4k9K_.js → 7-B5o4OymX.js} +2 -2
  69. package/build/server/chunks/{7-ieA4k9K_.js.map → 7-B5o4OymX.js.map} +1 -1
  70. package/build/server/index.js +1 -1
  71. package/build/server/index.js.map +1 -1
  72. package/build/server/manifest.js +8 -8
  73. package/build/server/manifest.js.map +1 -1
  74. package/cli.ts +148 -0
  75. package/dist/cli.js +2 -3
  76. package/ecosystem.config.js +9 -0
  77. package/package.json +10 -2
  78. package/src/api/servers.remote.ts +98 -0
  79. package/src/app.css +228 -0
  80. package/src/app.d.ts +16 -0
  81. package/src/app.html +11 -0
  82. package/src/hooks.server.ts +34 -0
  83. package/src/lib/components/Breadcrumbs.svelte +133 -0
  84. package/src/lib/components/JsonValue.svelte +248 -0
  85. package/src/lib/components/Notifications.svelte +81 -0
  86. package/src/lib/components/Panel.svelte +37 -0
  87. package/src/lib/components/PrettyJson.svelte +187 -0
  88. package/src/lib/components/SearchBox.svelte +160 -0
  89. package/src/lib/components/TooltipTable.svelte +137 -0
  90. package/src/lib/server/HostsManager.ts +105 -0
  91. package/src/lib/server/JsonEncoder.ts +62 -0
  92. package/src/lib/server/mongo.ts +199 -0
  93. package/src/lib/stores/notifications.svelte.ts +45 -0
  94. package/src/lib/types.ts +56 -0
  95. package/src/lib/utils/filters.ts +25 -0
  96. package/src/lib/utils/jsonParser.ts +125 -0
  97. package/src/routes/+layout.server.ts +7 -0
  98. package/src/routes/+layout.svelte +27 -0
  99. package/src/routes/+page.server.ts +6 -0
  100. package/src/routes/servers/+page.server.ts +53 -0
  101. package/src/routes/servers/+page.svelte +196 -0
  102. package/src/routes/servers/[server]/databases/+page.server.ts +47 -0
  103. package/src/routes/servers/[server]/databases/+page.svelte +88 -0
  104. package/src/routes/servers/[server]/databases/[database]/collections/+page.server.ts +21 -0
  105. package/src/routes/servers/[server]/databases/[database]/collections/+page.svelte +110 -0
  106. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/+page.server.ts +106 -0
  107. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/+page.svelte +174 -0
  108. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/[document]/+page.server.ts +25 -0
  109. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/[document]/+page.svelte +90 -0
  110. package/src/tests/api/readonly.test.ts +89 -0
  111. package/src/tests/setup.ts +19 -0
  112. package/svelte.config.js +28 -0
  113. package/tsconfig.cli.json +15 -0
  114. package/tsconfig.json +19 -0
  115. package/vite.config.ts +7 -0
  116. package/build/client/_app/immutable/chunks/BFhvhM4X.js.br +0 -0
  117. package/build/client/_app/immutable/chunks/BFhvhM4X.js.gz +0 -0
  118. package/build/client/_app/immutable/chunks/BdWVCPGW.js.br +0 -0
  119. package/build/client/_app/immutable/chunks/BdWVCPGW.js.gz +0 -0
  120. package/build/client/_app/immutable/chunks/CGIdus8b.js.br +0 -0
  121. package/build/client/_app/immutable/chunks/CGIdus8b.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/CN-ecO3-.js.br +0 -0
  123. package/build/client/_app/immutable/chunks/CN-ecO3-.js.gz +0 -0
  124. package/build/client/_app/immutable/chunks/DB3PPjLu.js +0 -4
  125. package/build/client/_app/immutable/chunks/DB3PPjLu.js.br +0 -0
  126. package/build/client/_app/immutable/chunks/DB3PPjLu.js.gz +0 -0
  127. package/build/client/_app/immutable/chunks/MHUppGzk.js.br +0 -0
  128. package/build/client/_app/immutable/chunks/MHUppGzk.js.gz +0 -0
  129. package/build/client/_app/immutable/chunks/_2kcttvK.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/_2kcttvK.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/zXvB9_Mi.js.br +0 -0
  132. package/build/client/_app/immutable/chunks/zXvB9_Mi.js.gz +0 -0
  133. package/build/client/_app/immutable/entry/app.hGE78f-O.js.br +0 -0
  134. package/build/client/_app/immutable/entry/app.hGE78f-O.js.gz +0 -0
  135. package/build/client/_app/immutable/entry/start._GE1Zd3d.js +0 -1
  136. package/build/client/_app/immutable/entry/start._GE1Zd3d.js.br +0 -2
  137. package/build/client/_app/immutable/entry/start._GE1Zd3d.js.gz +0 -0
  138. package/build/client/_app/immutable/nodes/0.DyBXVtnT.js.br +0 -0
  139. package/build/client/_app/immutable/nodes/0.DyBXVtnT.js.gz +0 -0
  140. package/build/client/_app/immutable/nodes/1.FqB0jq88.js.br +0 -2
  141. package/build/client/_app/immutable/nodes/1.FqB0jq88.js.gz +0 -0
  142. package/build/client/_app/immutable/nodes/3.Bekn_8hM.js.br +0 -0
  143. package/build/client/_app/immutable/nodes/3.Bekn_8hM.js.gz +0 -0
  144. package/build/client/_app/immutable/nodes/4.DQfaAvJi.js.br +0 -0
  145. package/build/client/_app/immutable/nodes/4.DQfaAvJi.js.gz +0 -0
  146. package/build/client/_app/immutable/nodes/5.B1E6iW2R.js.br +0 -0
  147. package/build/client/_app/immutable/nodes/5.B1E6iW2R.js.gz +0 -0
  148. package/build/client/_app/immutable/nodes/6.28eZQkvz.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/6.28eZQkvz.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/7.qpcLWZb7.js.br +0 -0
  151. package/build/client/_app/immutable/nodes/7.qpcLWZb7.js.gz +0 -0
@@ -10,16 +10,16 @@ return {
10
10
  assets: new Set(["robots.txt"]),
11
11
  mimeTypes: {".txt":"text/plain"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start._GE1Zd3d.js",app:"_app/immutable/entry/app.hGE78f-O.js",imports:["_app/immutable/entry/start._GE1Zd3d.js","_app/immutable/chunks/DB3PPjLu.js","_app/immutable/chunks/sBKW2MYH.js","_app/immutable/chunks/BaB-cr9N.js","_app/immutable/chunks/CGIdus8b.js","_app/immutable/entry/app.hGE78f-O.js","_app/immutable/chunks/BaB-cr9N.js","_app/immutable/chunks/BY57TmdO.js","_app/immutable/chunks/sBKW2MYH.js","_app/immutable/chunks/D17Lj1H7.js","_app/immutable/chunks/D72Du7TF.js","_app/immutable/chunks/iHsChU5o.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
13
+ client: {start:"_app/immutable/entry/start.Bn88Alw2.js",app:"_app/immutable/entry/app.9nC_873E.js",imports:["_app/immutable/entry/start.Bn88Alw2.js","_app/immutable/chunks/BzAcxkRZ.js","_app/immutable/chunks/sBKW2MYH.js","_app/immutable/chunks/BaB-cr9N.js","_app/immutable/chunks/uMNMODvc.js","_app/immutable/entry/app.9nC_873E.js","_app/immutable/chunks/BaB-cr9N.js","_app/immutable/chunks/BY57TmdO.js","_app/immutable/chunks/sBKW2MYH.js","_app/immutable/chunks/D17Lj1H7.js","_app/immutable/chunks/D72Du7TF.js","_app/immutable/chunks/iHsChU5o.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
- __memo(() => import('./chunks/0-m42kIUxj.js')),
16
- __memo(() => import('./chunks/1-uc74UVG3.js')),
15
+ __memo(() => import('./chunks/0-C1NyHW8A.js')),
16
+ __memo(() => import('./chunks/1-CThf4W5r.js')),
17
17
  __memo(() => import('./chunks/2-B39zPvzn.js')),
18
- __memo(() => import('./chunks/3-Bi8teWON.js')),
19
- __memo(() => import('./chunks/4-u1WGAtFU.js')),
20
- __memo(() => import('./chunks/5-BlGdcdjs.js')),
21
- __memo(() => import('./chunks/6-YCp6xyCU.js')),
22
- __memo(() => import('./chunks/7-ieA4k9K_.js'))
18
+ __memo(() => import('./chunks/3-CJf0NbiV.js')),
19
+ __memo(() => import('./chunks/4-Dfbpsagm.js')),
20
+ __memo(() => import('./chunks/5-DLB6GOjf.js')),
21
+ __memo(() => import('./chunks/6-DfCARDKO.js')),
22
+ __memo(() => import('./chunks/7-B5o4OymX.js'))
23
23
  ],
24
24
  remotes: {
25
25
  'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu-BFzaWXy0.js'))
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"robots.txt\"]),\n\tmimeTypes: {\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start._GE1Zd3d.js\",app:\"_app/immutable/entry/app.hGE78f-O.js\",imports:[\"_app/immutable/entry/start._GE1Zd3d.js\",\"_app/immutable/chunks/DB3PPjLu.js\",\"_app/immutable/chunks/sBKW2MYH.js\",\"_app/immutable/chunks/BaB-cr9N.js\",\"_app/immutable/chunks/CGIdus8b.js\",\"_app/immutable/entry/app.hGE78f-O.js\",\"_app/immutable/chunks/BaB-cr9N.js\",\"_app/immutable/chunks/BY57TmdO.js\",\"_app/immutable/chunks/sBKW2MYH.js\",\"_app/immutable/chunks/D17Lj1H7.js\",\"_app/immutable/chunks/D72Du7TF.js\",\"_app/immutable/chunks/iHsChU5o.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js')),\n\t\t\t__memo(() => import('./nodes/7.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu.js'))\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers\",\n\t\t\t\tpattern: /^\\/servers\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 4 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 5 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/documents/[document]\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/documents\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"document\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 7 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"robots.txt\"]),\n\tmimeTypes: {\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.Bn88Alw2.js\",app:\"_app/immutable/entry/app.9nC_873E.js\",imports:[\"_app/immutable/entry/start.Bn88Alw2.js\",\"_app/immutable/chunks/BzAcxkRZ.js\",\"_app/immutable/chunks/sBKW2MYH.js\",\"_app/immutable/chunks/BaB-cr9N.js\",\"_app/immutable/chunks/uMNMODvc.js\",\"_app/immutable/entry/app.9nC_873E.js\",\"_app/immutable/chunks/BaB-cr9N.js\",\"_app/immutable/chunks/BY57TmdO.js\",\"_app/immutable/chunks/sBKW2MYH.js\",\"_app/immutable/chunks/D17Lj1H7.js\",\"_app/immutable/chunks/D72Du7TF.js\",\"_app/immutable/chunks/iHsChU5o.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js')),\n\t\t\t__memo(() => import('./nodes/7.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu.js'))\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers\",\n\t\t\t\tpattern: /^\\/servers\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 4 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 5 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/documents/[document]\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/documents\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"document\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 7 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
package/cli.ts ADDED
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env node
2
+
3
+ import chalk from "chalk";
4
+ import { spawn, SpawnOptions } from "child_process";
5
+ import { Command } from "commander";
6
+ import { readFileSync } from "fs";
7
+ import { dirname, join } from "path";
8
+ import { fileURLToPath } from "url";
9
+
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+
13
+ // Read version from package.json (go up one level if in dist directory)
14
+ const rootDir = __dirname.endsWith("dist") ? dirname(__dirname) : __dirname;
15
+ const packageJsonPath = join(rootDir, "package.json");
16
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
17
+ const version = packageJson.version;
18
+
19
+ const program = new Command();
20
+
21
+ // generated by figlet.textSync('Mongoku', { horizontalLayout: 'full' }))
22
+
23
+ // __ __ _
24
+ // | \/ | ___ _ __ __ _ ___ | | __ _ _
25
+ // | |\/| | / _ \ | '_ \ / _` | / _ \ | |/ / | | | |
26
+ // | | | | | (_) | | | | | | (_| | | (_) | | < | |_| |
27
+ // |_| |_| \___/ |_| |_| \__, | \___/ |_|\_\ \__,_|
28
+ // |___/
29
+
30
+ const asciiArt = [
31
+ "__ __ _ ",
32
+ "| \\/ | ___ _ __ __ _ ___ | | __ _ _ ",
33
+ "| |\\/| | / _ \\ | '_ \\ / _` | / _ \\ | |/ / | | | |",
34
+ "| | | | | (_) | | | | | | (_| | | (_) | | < | |_| |",
35
+ "|_| |_| \\___/ |_| |_| \\__, | \\___/ |_|\\_\\ \\__,_|",
36
+ " |___/ ",
37
+ ].join("\n");
38
+
39
+ program.name("mongoku").description("MongoDB client for the web").version(version);
40
+
41
+ // Custom error handler for better error messages
42
+ program.configureOutput({
43
+ outputError: (str, write) => {
44
+ // Check for common mistakes
45
+ if (str.includes("too many arguments")) {
46
+ const args = process.argv.slice(2);
47
+ if (args.includes("pm2")) {
48
+ write(chalk.red("❌ Error: Did you mean '--pm2' instead of 'pm2'?\n"));
49
+ return;
50
+ }
51
+ }
52
+ write(chalk.red(str));
53
+ },
54
+ });
55
+
56
+ // Start action handler (shared between default and explicit 'start' command)
57
+ async function startAction(options: { pm2?: boolean; port?: string; readonly?: boolean }) {
58
+ console.log(chalk.cyan(asciiArt));
59
+
60
+ const port = options.port || process.env.MONGOKU_SERVER_PORT || "3100";
61
+ process.env.MONGOKU_SERVER_PORT = port;
62
+
63
+ // Set read-only mode if specified
64
+ if (options.readonly) {
65
+ process.env.MONGOKU_READ_ONLY_MODE = "true";
66
+ console.log(chalk.yellow("🔒 Read-only mode enabled"));
67
+ }
68
+
69
+ if (options.pm2) {
70
+ console.log(chalk.green(`🚀 Starting Mongoku with PM2 on port ${port}...`));
71
+ runCommand("pm2", ["--name", "mongoku", "start", "ecosystem.config.js"], { stdio: "inherit", cwd: rootDir });
72
+ } else {
73
+ console.log(chalk.green(`🚀 Starting Mongoku on port ${port}...`));
74
+ console.log(chalk.cyan(`📊 Open http://localhost:${port} in your browser`));
75
+ runCommand("node", ["build"], { stdio: "inherit", cwd: rootDir });
76
+ }
77
+ }
78
+
79
+ program
80
+ .command("stop")
81
+ .description("Stop the Mongoku server running with PM2")
82
+ .action(() => {
83
+ runCommand("pm2", ["stop", "mongoku"], { stdio: "inherit" });
84
+ });
85
+
86
+ program
87
+ .command("start")
88
+ .description("Start the Mongoku server")
89
+ .option("--pm2", "Run with PM2")
90
+ .option("-p, --port <port>", "Port to run on", "3100")
91
+ .option("--readonly", "Enable read-only mode (prevents modifications)")
92
+ .allowExcessArguments(false)
93
+ .action(startAction);
94
+
95
+ program
96
+ .command("help")
97
+ .description("Show help")
98
+ .action(() => {
99
+ program.outputHelp();
100
+ });
101
+
102
+ // Default action (start the server)
103
+ program
104
+ .option("--pm2", "Run with PM2")
105
+ .option("-p, --port <port>", "Port to run on", "3100")
106
+ .option("--readonly", "Enable read-only mode (prevents modifications)")
107
+ .allowExcessArguments(false)
108
+ .action(startAction);
109
+
110
+ function runCommand(command: string, args: string[], options: SpawnOptions = {}): Promise<void> {
111
+ return new Promise((resolve, reject) => {
112
+ const childProcess = spawn(command, args, {
113
+ ...options,
114
+ shell: true,
115
+ env: { ...process.env },
116
+ });
117
+
118
+ if (!options.detached && options.stdio !== "inherit") {
119
+ childProcess.stdout?.on("data", (data) => {
120
+ console.log(data.toString());
121
+ });
122
+
123
+ childProcess.stderr?.on("data", (data) => {
124
+ console.error(data.toString());
125
+ });
126
+ }
127
+
128
+ childProcess.on("error", (error) => {
129
+ console.error(chalk.red(`Error: ${error.message}`));
130
+ reject(error);
131
+ });
132
+
133
+ childProcess.on("close", (code) => {
134
+ if (code !== 0 && !options.detached) {
135
+ reject(new Error(`Command failed with exit code ${code}`));
136
+ } else {
137
+ resolve();
138
+ }
139
+ });
140
+
141
+ if (options.detached) {
142
+ childProcess.unref();
143
+ resolve();
144
+ }
145
+ });
146
+ }
147
+
148
+ program.parse(process.argv);
package/dist/cli.js CHANGED
@@ -53,15 +53,14 @@ async function startAction(options) {
53
53
  process.env.MONGOKU_READ_ONLY_MODE = "true";
54
54
  console.log(chalk.yellow("🔒 Read-only mode enabled"));
55
55
  }
56
- const buildPath = join(rootDir, "build");
57
56
  if (options.pm2) {
58
57
  console.log(chalk.green(`🚀 Starting Mongoku with PM2 on port ${port}...`));
59
- runCommand("pm2", ["--name", "mongoku", "start", join(rootDir, "ecosystem.config.js")], { stdio: "inherit" });
58
+ runCommand("pm2", ["--name", "mongoku", "start", "ecosystem.config.js"], { stdio: "inherit", cwd: rootDir });
60
59
  }
61
60
  else {
62
61
  console.log(chalk.green(`🚀 Starting Mongoku on port ${port}...`));
63
62
  console.log(chalk.cyan(`📊 Open http://localhost:${port} in your browser`));
64
- runCommand("node", [buildPath], { stdio: "inherit" });
63
+ runCommand("node", ["build"], { stdio: "inherit", cwd: rootDir });
65
64
  }
66
65
  }
67
66
  program
@@ -0,0 +1,9 @@
1
+ export const apps = [
2
+ {
3
+ name: "mongoku",
4
+ script: "./build/index.js",
5
+ env: {
6
+ MONGOKU_SERVER_PORT: "3100",
7
+ },
8
+ },
9
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mongoku",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "license": "MIT",
5
5
  "author": "Anthony Moi <m.anthony.moi@gmail.com>",
6
6
  "type": "module",
@@ -33,7 +33,15 @@
33
33
  },
34
34
  "files": [
35
35
  "/dist",
36
- "/build"
36
+ "/build",
37
+ "/ecosystem.config.js",
38
+ "/cli.ts",
39
+ "/src",
40
+ "/Dockerfile",
41
+ "/svelte.config.js",
42
+ "/tsconfig.json",
43
+ "/tsconfig.cli.json",
44
+ "/vite.config.ts"
37
45
  ],
38
46
  "devDependencies": {
39
47
  "@eslint/compat": "^1.4.0",
@@ -0,0 +1,98 @@
1
+ import { command } from "$app/server";
2
+ import JsonEncoder from "$lib/server/JsonEncoder";
3
+ import { getMongo } from "$lib/server/mongo";
4
+ import { error } from "@sveltejs/kit";
5
+ import { ObjectId } from "mongodb";
6
+ import { z } from "zod";
7
+
8
+ // Check if read-only mode is enabled
9
+ function checkReadOnly() {
10
+ if (process.env.MONGOKU_READ_ONLY_MODE === "true") {
11
+ error(403, "Read-only mode is enabled");
12
+ }
13
+ }
14
+
15
+ // Add a new server
16
+ export const addServer = command(
17
+ z.object({
18
+ url: z.string(),
19
+ }),
20
+ async ({ url }) => {
21
+ const mongo = await getMongo();
22
+ await mongo.addServer(url);
23
+ return { ok: true };
24
+ },
25
+ );
26
+
27
+ // Remove a server
28
+ export const removeServer = command(z.string(), async (serverName) => {
29
+ const mongo = await getMongo();
30
+ await mongo.removeServer(serverName);
31
+ return { ok: true };
32
+ });
33
+
34
+ // Update a document
35
+ export const updateDocument = command(
36
+ z.object({
37
+ server: z.string(),
38
+ database: z.string(),
39
+ collection: z.string(),
40
+ document: z.string(),
41
+ value: z.unknown(),
42
+ partial: z.boolean().optional().default(false),
43
+ }),
44
+ async ({ server, database, collection, document, value, partial }) => {
45
+ checkReadOnly();
46
+
47
+ const mongo = await getMongo();
48
+ const coll = mongo.getCollection(server, database, collection);
49
+
50
+ if (!coll) {
51
+ error(404, `Collection not found: ${server}.${database}.${collection}`);
52
+ }
53
+
54
+ const newValue = JsonEncoder.decode(value);
55
+
56
+ // TODO: For now it makes it impossible to remove fields from object with a projection
57
+ const update = partial ? { $set: newValue } : JsonEncoder.decode(newValue);
58
+ await coll.replaceOne(
59
+ {
60
+ _id: new ObjectId(document),
61
+ },
62
+ update,
63
+ );
64
+
65
+ return {
66
+ ok: true,
67
+ update: JsonEncoder.encode(newValue),
68
+ };
69
+ },
70
+ );
71
+
72
+ // Delete a document
73
+ export const deleteDocument = command(
74
+ z.object({
75
+ server: z.string(),
76
+ database: z.string(),
77
+ collection: z.string(),
78
+ document: z.string(),
79
+ }),
80
+ async ({ server, database, collection, document }) => {
81
+ checkReadOnly();
82
+
83
+ const mongo = await getMongo();
84
+ const coll = mongo.getCollection(server, database, collection);
85
+
86
+ if (!coll) {
87
+ error(404, `Collection not found: ${server}.${database}.${collection}`);
88
+ }
89
+
90
+ await coll.deleteOne({
91
+ _id: new ObjectId(document),
92
+ });
93
+
94
+ return {
95
+ ok: true,
96
+ };
97
+ },
98
+ );
package/src/app.css ADDED
@@ -0,0 +1,228 @@
1
+ @import "tailwindcss";
2
+ @import "@fontsource/cuprum";
3
+ @import "@fontsource/rajdhani";
4
+
5
+ @tailwind base;
6
+ @tailwind components;
7
+ @tailwind utilities;
8
+
9
+ :root {
10
+ --color-1: hsl(216, 26%, 15%);
11
+ --color-1-5: hsl(218, 25%, 18%);
12
+ --color-2: hsl(220, 23%, 21%);
13
+ --color-3: hsl(217, 20%, 25%);
14
+ --color-4: hsl(220, 20%, 30%);
15
+
16
+ --background-color: var(--color-1);
17
+ --border-color: var(--color-3);
18
+
19
+ --text: hsl(0, 0%, 88%);
20
+ --text-inverse: hsl(0, 0%, 12%);
21
+ --text-darker: hsl(0, 0%, 57%);
22
+ --text-lighter: hsl(0, 0%, 100%);
23
+ --link: hsl(211, 100%, 89%);
24
+
25
+ --error: hsl(0, 78%, 28%);
26
+
27
+ --button-danger: #a31515;
28
+ --button-danger-l: #a54c4c;
29
+ --button-success: #008000;
30
+ --button-success-l: #4e994e;
31
+ --button-light: hsl(0, 0%, 88%);
32
+
33
+ --code-namespace: #9cdcfe;
34
+ --code-boolean: #569cd6;
35
+ --code-null: #569cd6;
36
+ --code-numbers: #b5cea8;
37
+ --code-string: #ce9178;
38
+ --code-links: #4e94ce;
39
+ --code-summary: #6a9955;
40
+ --code-regexp: #ce696b;
41
+ --code-function: #dcdcaa;
42
+
43
+ --border: 1px solid var(--color-3);
44
+ }
45
+
46
+ @layer base {
47
+ body {
48
+ background-color: var(--background-color);
49
+ font-family: "Rajdhani", sans-serif;
50
+ color: var(--text);
51
+ min-height: 100vh;
52
+ }
53
+
54
+ a:hover {
55
+ text-decoration: underline;
56
+ }
57
+
58
+ input[type="text"],
59
+ input[type="number"],
60
+ textarea {
61
+ @apply rounded-md px-2 py-1.5 text-sm;
62
+ background-color: var(--color-1);
63
+ color: var(--text);
64
+ border: 1px solid var(--color-4);
65
+ }
66
+
67
+ input[type="text"]:focus,
68
+ input[type="number"]:focus,
69
+ textarea:focus {
70
+ outline: none;
71
+ border-color: var(--link);
72
+ }
73
+ }
74
+
75
+ @layer utilities {
76
+ .dotted {
77
+ border-bottom: 1px dotted var(--text);
78
+ cursor: help;
79
+ }
80
+
81
+ .error {
82
+ color: var(--error);
83
+ }
84
+ }
85
+
86
+ @layer components {
87
+ .btn {
88
+ @apply px-4 py-2 rounded-md cursor-pointer font-medium transition-all duration-200 border;
89
+ }
90
+
91
+ .btn-sm {
92
+ @apply px-2 py-1.5 text-sm;
93
+ }
94
+
95
+ .btn-default {
96
+ background-color: var(--color-1);
97
+ color: var(--text);
98
+ border-color: var(--color-4);
99
+ }
100
+
101
+ .btn-default:hover {
102
+ background-color: var(--color-3);
103
+ }
104
+
105
+ .btn-danger {
106
+ background-color: var(--button-danger-l);
107
+ color: var(--text-lighter);
108
+ border-color: var(--button-danger);
109
+ }
110
+
111
+ .btn-danger:hover {
112
+ background-color: var(--button-danger);
113
+ }
114
+
115
+ .btn-success {
116
+ background-color: var(--button-success-l);
117
+ color: var(--text-lighter);
118
+ border-color: var(--button-success);
119
+ }
120
+
121
+ .btn-success:hover {
122
+ background-color: var(--button-success);
123
+ }
124
+
125
+ .btn-outline-danger {
126
+ background: transparent;
127
+ color: var(--button-danger);
128
+ border-color: var(--button-danger);
129
+ }
130
+
131
+ .btn-outline-danger:hover {
132
+ background-color: var(--button-danger-l);
133
+ color: var(--text-lighter);
134
+ }
135
+
136
+ .btn-outline-success {
137
+ background: transparent;
138
+ color: var(--button-success);
139
+ border-color: var(--button-success);
140
+ }
141
+
142
+ .btn-outline-success:hover {
143
+ background-color: var(--button-success-l);
144
+ color: var(--text-lighter);
145
+ }
146
+
147
+ .btn:disabled {
148
+ opacity: 0.5;
149
+ cursor: not-allowed;
150
+ }
151
+
152
+ .table {
153
+ width: 100%;
154
+ border-collapse: collapse;
155
+ }
156
+
157
+ .table thead tr {
158
+ background-color: var(--color-3);
159
+ }
160
+
161
+ .table th,
162
+ .table td {
163
+ padding: 12px;
164
+ text-align: left;
165
+ border-bottom: 1px solid var(--border-color);
166
+ }
167
+
168
+ .table th {
169
+ font-weight: 500;
170
+ color: var(--text-lighter);
171
+ }
172
+
173
+ .table tbody tr:hover {
174
+ background-color: var(--color-1-5);
175
+ }
176
+
177
+ .badge {
178
+ display: inline-block;
179
+ padding: 4px 8px;
180
+ border-radius: 3px;
181
+ font-size: 12px;
182
+ margin-right: 8px;
183
+ }
184
+
185
+ .badge-danger {
186
+ background-color: var(--button-danger);
187
+ color: var(--text-lighter);
188
+ }
189
+
190
+ .modal-overlay {
191
+ position: fixed;
192
+ top: 0;
193
+ left: 0;
194
+ right: 0;
195
+ bottom: 0;
196
+ background-color: rgba(0, 0, 0, 0.5);
197
+ display: flex;
198
+ align-items: center;
199
+ justify-content: center;
200
+ z-index: 1000;
201
+ }
202
+
203
+ .modal {
204
+ background-color: var(--color-2);
205
+ border: 1px solid var(--color-3);
206
+ border-radius: 4px;
207
+ max-width: 500px;
208
+ width: 90%;
209
+ }
210
+
211
+ .modal-body {
212
+ padding: 20px;
213
+ }
214
+
215
+ .modal-footer {
216
+ border-top: 1px solid var(--color-3);
217
+ padding: 15px 20px;
218
+ display: flex;
219
+ justify-content: flex-end;
220
+ gap: 10px;
221
+ }
222
+
223
+ .loading {
224
+ text-align: center;
225
+ padding: 40px;
226
+ color: var(--text-darker);
227
+ }
228
+ }
package/src/app.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ // See https://svelte.dev/docs/kit/types#app.d.ts
2
+ // for information about these interfaces
3
+ declare global {
4
+ namespace App {
5
+ interface Error {
6
+ message: string;
7
+ code?: number | string;
8
+ }
9
+ // interface Locals {}
10
+ // interface PageData {}
11
+ // interface PageState {}
12
+ // interface Platform {}
13
+ }
14
+ }
15
+
16
+ export {};
package/src/app.html ADDED
@@ -0,0 +1,11 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ %sveltekit.head%
7
+ </head>
8
+ <body data-sveltekit-preload-data="hover">
9
+ <div style="display: contents">%sveltekit.body%</div>
10
+ </body>
11
+ </html>
@@ -0,0 +1,34 @@
1
+ import type { Handle, HandleServerError } from "@sveltejs/kit";
2
+ import { MongoError } from "mongodb";
3
+
4
+ // Bigger than the default 10, helpful with MongoDB errors
5
+ Error.stackTraceLimit = 100;
6
+
7
+ export const handle: Handle = async ({ event, resolve }) => {
8
+ return resolve(event);
9
+ };
10
+
11
+ export const handleError: HandleServerError = ({ error }) => {
12
+ // Log the error server-side
13
+ console.error(error);
14
+
15
+ // Handle MongoDB errors specifically
16
+ if (error instanceof MongoError) {
17
+ return {
18
+ message: error.message,
19
+ code: error.code,
20
+ };
21
+ }
22
+
23
+ // Handle standard errors
24
+ if (error instanceof Error) {
25
+ return {
26
+ message: error.message,
27
+ };
28
+ }
29
+
30
+ // Fallback for unknown error types
31
+ return {
32
+ message: "An unexpected error occurred",
33
+ };
34
+ };