miqro 5.0.5 → 6.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 (353) hide show
  1. package/.eslintrc +15 -0
  2. package/README.md +618 -20
  3. package/build/editor.bundle.js +61154 -0
  4. package/build/esm/editor/auth.d.ts +6 -0
  5. package/build/esm/editor/auth.js +42 -0
  6. package/build/esm/editor/auth.js.map +1 -0
  7. package/build/esm/editor/common/admin-interface.d.ts +36 -0
  8. package/build/esm/editor/common/admin-interface.js +45 -0
  9. package/build/esm/editor/common/admin-interface.js.map +1 -0
  10. package/build/esm/editor/common/constants.d.ts +4 -0
  11. package/build/esm/editor/common/constants.js +21 -0
  12. package/build/esm/editor/common/constants.js.map +1 -0
  13. package/build/esm/editor/common/constants.server.d.ts +2 -0
  14. package/build/esm/editor/common/constants.server.js +5 -0
  15. package/build/esm/editor/common/constants.server.js.map +1 -0
  16. package/build/esm/editor/common/editor-index.d.ts +2 -0
  17. package/build/esm/editor/common/editor-index.js +15 -0
  18. package/build/esm/editor/common/editor-index.js.map +1 -0
  19. package/build/esm/editor/common/html-encode.d.ts +1 -0
  20. package/build/esm/editor/common/html-encode.js +15 -0
  21. package/build/esm/editor/common/html-encode.js.map +1 -0
  22. package/build/esm/editor/common/log-socket.d.ts +13 -0
  23. package/build/esm/editor/common/log-socket.js +68 -0
  24. package/build/esm/editor/common/log-socket.js.map +1 -0
  25. package/build/esm/editor/common/templates.d.ts +11 -0
  26. package/build/esm/editor/common/templates.js +444 -0
  27. package/build/esm/editor/common/templates.js.map +1 -0
  28. package/build/esm/editor/components/api-preview.d.ts +11 -0
  29. package/build/esm/editor/components/api-preview.js +91 -0
  30. package/build/esm/editor/components/api-preview.js.map +1 -0
  31. package/build/esm/editor/components/editor.d.ts +16 -0
  32. package/build/esm/editor/components/editor.js +355 -0
  33. package/build/esm/editor/components/editor.js.map +1 -0
  34. package/build/esm/editor/components/file-browser.d.ts +37 -0
  35. package/build/esm/editor/components/file-browser.js +122 -0
  36. package/build/esm/editor/components/file-browser.js.map +1 -0
  37. package/build/esm/editor/components/file-editor-toolbar.d.ts +22 -0
  38. package/build/esm/editor/components/file-editor-toolbar.js +94 -0
  39. package/build/esm/editor/components/file-editor-toolbar.js.map +1 -0
  40. package/build/esm/editor/components/file-editor.d.ts +32 -0
  41. package/build/esm/editor/components/file-editor.js +60 -0
  42. package/build/esm/editor/components/file-editor.js.map +1 -0
  43. package/build/esm/editor/components/filter-query.d.ts +1 -0
  44. package/build/esm/editor/components/filter-query.js +23 -0
  45. package/build/esm/editor/components/filter-query.js.map +1 -0
  46. package/build/esm/editor/components/highlight-text-area.d.ts +11 -0
  47. package/build/esm/editor/components/highlight-text-area.js +139 -0
  48. package/build/esm/editor/components/highlight-text-area.js.map +1 -0
  49. package/build/esm/editor/components/log-viewer.d.ts +6 -0
  50. package/build/esm/editor/components/log-viewer.js +70 -0
  51. package/build/esm/editor/components/log-viewer.js.map +1 -0
  52. package/build/esm/editor/components/new-file.d.ts +10 -0
  53. package/build/esm/editor/components/new-file.js +118 -0
  54. package/build/esm/editor/components/new-file.js.map +1 -0
  55. package/build/esm/editor/components/scroll-query.d.ts +7 -0
  56. package/build/esm/editor/components/scroll-query.js +22 -0
  57. package/build/esm/editor/components/scroll-query.js.map +1 -0
  58. package/build/esm/editor/components/start-page.d.ts +13 -0
  59. package/build/esm/editor/components/start-page.js +31 -0
  60. package/build/esm/editor/components/start-page.js.map +1 -0
  61. package/build/esm/editor/http/admin/editor/api/fs/delete.api.d.ts +3 -0
  62. package/build/esm/editor/http/admin/editor/api/fs/delete.api.js +30 -0
  63. package/build/esm/editor/http/admin/editor/api/fs/delete.api.js.map +1 -0
  64. package/build/esm/editor/http/admin/editor/api/fs/read.api.d.ts +5 -0
  65. package/build/esm/editor/http/admin/editor/api/fs/read.api.js +50 -0
  66. package/build/esm/editor/http/admin/editor/api/fs/read.api.js.map +1 -0
  67. package/build/esm/editor/http/admin/editor/api/fs/rename.api.d.ts +4 -0
  68. package/build/esm/editor/http/admin/editor/api/fs/rename.api.js +40 -0
  69. package/build/esm/editor/http/admin/editor/api/fs/rename.api.js.map +1 -0
  70. package/build/esm/editor/http/admin/editor/api/fs/scan.api.d.ts +26 -0
  71. package/build/esm/editor/http/admin/editor/api/fs/scan.api.js +150 -0
  72. package/build/esm/editor/http/admin/editor/api/fs/scan.api.js.map +1 -0
  73. package/build/esm/editor/http/admin/editor/api/fs/write.api.d.ts +3 -0
  74. package/build/esm/editor/http/admin/editor/api/fs/write.api.js +39 -0
  75. package/build/esm/editor/http/admin/editor/api/fs/write.api.js.map +1 -0
  76. package/build/esm/editor/http/admin/editor/api/server/reload.api.d.ts +10 -0
  77. package/build/esm/editor/http/admin/editor/api/server/reload.api.js +46 -0
  78. package/build/esm/editor/http/admin/editor/api/server/reload.api.js.map +1 -0
  79. package/build/esm/editor/http/admin/editor/api/server/restart.api.d.ts +10 -0
  80. package/build/esm/editor/http/admin/editor/api/server/restart.api.js +46 -0
  81. package/build/esm/editor/http/admin/editor/api/server/restart.api.js.map +1 -0
  82. package/build/esm/editor/http/admin/editor/editor.js +8 -0
  83. package/build/esm/editor/http/admin/editor/editor.js.map +1 -0
  84. package/build/esm/editor/http/admin/editor/index.api.d.ts +3 -0
  85. package/build/esm/editor/http/admin/editor/index.api.js +22 -0
  86. package/build/esm/editor/http/admin/editor/index.api.js.map +1 -0
  87. package/build/esm/editor/server.d.ts +3 -0
  88. package/build/esm/editor/server.js +50 -0
  89. package/build/esm/editor/server.js.map +1 -0
  90. package/build/esm/editor/ws.d.ts +3 -0
  91. package/build/esm/editor/ws.js +12 -0
  92. package/build/esm/editor/ws.js.map +1 -0
  93. package/build/esm/src/cluster.js +11 -0
  94. package/build/esm/src/cluster.js.map +1 -0
  95. package/build/esm/src/common/arguments.d.ts +22 -0
  96. package/build/esm/src/common/arguments.js +310 -0
  97. package/build/esm/src/common/arguments.js.map +1 -0
  98. package/build/esm/src/common/assets.d.ts +11 -0
  99. package/build/esm/src/common/assets.js +121 -0
  100. package/build/esm/src/common/assets.js.map +1 -0
  101. package/build/esm/src/common/checksum.d.ts +19 -0
  102. package/build/esm/src/common/checksum.js +57 -0
  103. package/build/esm/src/common/checksum.js.map +1 -0
  104. package/build/esm/src/common/constants.d.ts +10 -0
  105. package/build/esm/src/common/constants.js +14 -0
  106. package/build/esm/src/common/constants.js.map +1 -0
  107. package/build/esm/src/common/content-type.d.ts +4 -0
  108. package/build/esm/src/common/content-type.js +82 -0
  109. package/build/esm/src/common/content-type.js.map +1 -0
  110. package/build/esm/src/common/esbuild.d.ts +17 -0
  111. package/build/esm/src/common/esbuild.js +79 -0
  112. package/build/esm/src/common/esbuild.js.map +1 -0
  113. package/build/esm/src/common/exit.d.ts +2 -0
  114. package/build/esm/src/common/exit.js +84 -0
  115. package/build/esm/src/common/exit.js.map +1 -0
  116. package/build/esm/src/common/fs.d.ts +8 -0
  117. package/build/esm/src/common/fs.js +17 -0
  118. package/build/esm/src/common/fs.js.map +1 -0
  119. package/build/esm/src/common/help.d.ts +3 -0
  120. package/build/esm/src/common/help.js +44 -0
  121. package/build/esm/src/common/help.js.map +1 -0
  122. package/build/esm/src/common/jsx.d.ts +52 -0
  123. package/build/esm/src/common/jsx.js +365 -0
  124. package/build/esm/src/common/jsx.js.map +1 -0
  125. package/build/esm/src/common/paths.d.ts +14 -0
  126. package/build/esm/src/common/paths.js +110 -0
  127. package/build/esm/src/common/paths.js.map +1 -0
  128. package/build/esm/src/common/watch.d.ts +3 -0
  129. package/build/esm/src/common/watch.js +74 -0
  130. package/build/esm/src/common/watch.js.map +1 -0
  131. package/build/esm/src/inflate/inflate-sea.d.ts +5 -0
  132. package/build/esm/src/inflate/inflate-sea.js +175 -0
  133. package/build/esm/src/inflate/inflate-sea.js.map +1 -0
  134. package/build/esm/src/inflate/inflate.d.ts +14 -0
  135. package/build/esm/src/inflate/inflate.js +65 -0
  136. package/build/esm/src/inflate/inflate.js.map +1 -0
  137. package/build/esm/src/inflate/md.d.ts +2 -0
  138. package/build/esm/src/inflate/md.js +19 -0
  139. package/build/esm/src/inflate/md.js.map +1 -0
  140. package/build/esm/src/inflate/setup-auth.d.ts +3 -0
  141. package/build/esm/src/inflate/setup-auth.js +38 -0
  142. package/build/esm/src/inflate/setup-auth.js.map +1 -0
  143. package/build/esm/src/inflate/setup-cors.d.ts +3 -0
  144. package/build/esm/src/inflate/setup-cors.js +38 -0
  145. package/build/esm/src/inflate/setup-cors.js.map +1 -0
  146. package/build/esm/src/inflate/setup-db.d.ts +8 -0
  147. package/build/esm/src/inflate/setup-db.js +99 -0
  148. package/build/esm/src/inflate/setup-db.js.map +1 -0
  149. package/build/esm/src/inflate/setup-http.d.ts +37 -0
  150. package/build/esm/src/inflate/setup-http.js +543 -0
  151. package/build/esm/src/inflate/setup-http.js.map +1 -0
  152. package/build/esm/src/inflate/setup-log.d.ts +7 -0
  153. package/build/esm/src/inflate/setup-log.js +37 -0
  154. package/build/esm/src/inflate/setup-log.js.map +1 -0
  155. package/build/esm/src/inflate/setup-server-config.d.ts +7 -0
  156. package/build/esm/src/inflate/setup-server-config.js +37 -0
  157. package/build/esm/src/inflate/setup-server-config.js.map +1 -0
  158. package/build/esm/src/inflate/setup-test.d.ts +2 -0
  159. package/build/esm/src/inflate/setup-test.js +22 -0
  160. package/build/esm/src/inflate/setup-test.js.map +1 -0
  161. package/build/esm/src/inflate/setup-ws.d.ts +4 -0
  162. package/build/esm/src/inflate/setup-ws.js +46 -0
  163. package/build/esm/src/inflate/setup-ws.js.map +1 -0
  164. package/build/esm/src/inflate/utils/sea-utils.d.ts +2 -0
  165. package/build/esm/src/inflate/utils/sea-utils.js +13 -0
  166. package/build/esm/src/inflate/utils/sea-utils.js.map +1 -0
  167. package/build/esm/src/lib.d.ts +13 -0
  168. package/build/esm/src/lib.js +17 -0
  169. package/build/esm/src/lib.js.map +1 -0
  170. package/build/esm/src/main.d.ts +2 -0
  171. package/build/esm/src/main.js +92 -0
  172. package/build/esm/src/main.js.map +1 -0
  173. package/build/esm/src/services/app.d.ts +88 -0
  174. package/build/esm/src/services/app.js +619 -0
  175. package/build/esm/src/services/app.js.map +1 -0
  176. package/build/esm/src/services/editor.d.ts +3 -0
  177. package/build/esm/src/services/editor.js +61 -0
  178. package/build/esm/src/services/editor.js.map +1 -0
  179. package/build/esm/src/services/globals.d.ts +3 -0
  180. package/build/esm/src/services/globals.js +139 -0
  181. package/build/esm/src/services/globals.js.map +1 -0
  182. package/build/esm/src/services/hot-reload.d.ts +1 -0
  183. package/build/esm/src/services/hot-reload.js +45 -0
  184. package/build/esm/src/services/hot-reload.js.map +1 -0
  185. package/build/esm/src/services/migrations.d.ts +4 -0
  186. package/build/esm/src/services/migrations.js +61 -0
  187. package/build/esm/src/services/migrations.js.map +1 -0
  188. package/build/esm/src/services/utils/cache.d.ts +19 -0
  189. package/build/esm/src/services/utils/cache.js +85 -0
  190. package/build/esm/src/services/utils/cache.js.map +1 -0
  191. package/build/esm/src/services/utils/cluster-cache.d.ts +20 -0
  192. package/build/esm/src/services/utils/cluster-cache.js +211 -0
  193. package/build/esm/src/services/utils/cluster-cache.js.map +1 -0
  194. package/build/esm/src/services/utils/cluster-ws.d.ts +24 -0
  195. package/build/esm/src/services/utils/cluster-ws.js +176 -0
  196. package/build/esm/src/services/utils/cluster-ws.js.map +1 -0
  197. package/build/esm/src/services/utils/db-manager.d.ts +20 -0
  198. package/build/esm/src/services/utils/db-manager.js +59 -0
  199. package/build/esm/src/services/utils/db-manager.js.map +1 -0
  200. package/build/esm/src/services/utils/get-route.d.ts +9 -0
  201. package/build/esm/src/services/utils/get-route.js +58 -0
  202. package/build/esm/src/services/utils/get-route.js.map +1 -0
  203. package/build/esm/src/services/utils/log.d.ts +17 -0
  204. package/build/esm/src/services/utils/log.js +74 -0
  205. package/build/esm/src/services/utils/log.js.map +1 -0
  206. package/build/esm/src/services/utils/server-interface.d.ts +41 -0
  207. package/build/esm/src/services/utils/server-interface.js +74 -0
  208. package/build/esm/src/services/utils/server-interface.js.map +1 -0
  209. package/build/esm/src/services/utils/websocketmanager.d.ts +23 -0
  210. package/build/esm/src/services/utils/websocketmanager.js +128 -0
  211. package/build/esm/src/services/utils/websocketmanager.js.map +1 -0
  212. package/build/esm/src/types.d.ts +166 -0
  213. package/build/esm/src/types.js +2 -0
  214. package/build/esm/src/types.js.map +1 -0
  215. package/build/jsx.dom.js +1585 -0
  216. package/build/lib.cjs +14009 -0
  217. package/build/postject.base64.cjs +1 -0
  218. package/editor/auth.ts +51 -0
  219. package/editor/common/admin-interface.ts +84 -0
  220. package/editor/common/constants.server.ts +5 -0
  221. package/editor/common/constants.ts +21 -0
  222. package/editor/common/editor-index.tsx +17 -0
  223. package/editor/common/html-encode.ts +14 -0
  224. package/editor/common/log-socket.tsx +82 -0
  225. package/editor/common/templates.ts +448 -0
  226. package/editor/components/api-preview.tsx +116 -0
  227. package/editor/components/editor.tsx +483 -0
  228. package/editor/components/file-browser.tsx +295 -0
  229. package/editor/components/file-editor-toolbar.tsx +187 -0
  230. package/editor/components/file-editor.tsx +122 -0
  231. package/editor/components/filter-query.tsx +22 -0
  232. package/editor/components/highlight-text-area.tsx +159 -0
  233. package/editor/components/log-viewer.tsx +110 -0
  234. package/editor/components/new-file.tsx +169 -0
  235. package/editor/components/scroll-query.tsx +22 -0
  236. package/editor/components/start-page.tsx +49 -0
  237. package/editor/http/admin/editor/api/fs/delete.api.tsx +32 -0
  238. package/editor/http/admin/editor/api/fs/read.api.tsx +55 -0
  239. package/editor/http/admin/editor/api/fs/rename.api.tsx +41 -0
  240. package/editor/http/admin/editor/api/fs/scan.api.tsx +181 -0
  241. package/editor/http/admin/editor/api/fs/write.api.tsx +41 -0
  242. package/editor/http/admin/editor/api/server/reload.api.ts +52 -0
  243. package/editor/http/admin/editor/api/server/restart.api.tsx +52 -0
  244. package/editor/http/admin/editor/editor.tsx +8 -0
  245. package/editor/http/admin/editor/font.ttf +0 -0
  246. package/editor/http/admin/editor/index.api.tsx +39 -0
  247. package/editor/http/admin/editor/style.css +620 -0
  248. package/editor/server.ts +57 -0
  249. package/editor/static/android-chrome-192x192.png +0 -0
  250. package/editor/static/android-chrome-512x512.png +0 -0
  251. package/editor/static/apple-touch-icon.png +0 -0
  252. package/editor/static/editor.bundle.in.mjs +20 -0
  253. package/editor/static/favicon-16x16.png +0 -0
  254. package/editor/static/favicon-32x32.png +0 -0
  255. package/editor/static/favicon.ico +0 -0
  256. package/editor/static/site.webmanifest +19 -0
  257. package/editor/ws.ts +15 -0
  258. package/package.json +43 -24
  259. package/package.json--OLD +36 -0
  260. package/sea/app.sh +33 -0
  261. package/sea/base64.js +3 -0
  262. package/sea/basic-compile.base64.sh +1 -0
  263. package/sea/basic-compile.sh +73 -0
  264. package/sea/basic-config.json +9 -0
  265. package/sea/compile.sh +124 -0
  266. package/sea/copy-types.sh +46 -0
  267. package/sea/editor-assets/editor.bundle.in.mjs +19 -0
  268. package/sea/esbuild.sh +31 -0
  269. package/sea/generate-global-types-asset-json.js +34 -0
  270. package/sea/install-esbuild.sh +53 -0
  271. package/sea/install-nodejs.sh +49 -0
  272. package/sea/main.sh +34 -0
  273. package/sea/node.sh +33 -0
  274. package/sea/node.version.tag +1 -0
  275. package/sea/precompile.sh +7 -0
  276. package/sea/release-tar.sh +5 -0
  277. package/sea/sign-add.sh +22 -0
  278. package/sea/sign-remove.sh +22 -0
  279. package/sea/tsc.sh +1 -0
  280. package/sea/types.json +1 -0
  281. package/src/cluster.ts +16 -0
  282. package/src/common/arguments.ts +366 -0
  283. package/src/common/assets.ts +124 -0
  284. package/src/common/checksum.ts +58 -0
  285. package/src/common/constants.ts +18 -0
  286. package/src/common/content-type.ts +84 -0
  287. package/src/common/esbuild.ts +94 -0
  288. package/src/common/exit.ts +91 -0
  289. package/src/common/fs.ts +17 -0
  290. package/src/common/help.ts +46 -0
  291. package/src/common/jsx.ts +414 -0
  292. package/src/common/paths.ts +117 -0
  293. package/src/common/watch.ts +80 -0
  294. package/src/inflate/inflate-sea.ts +193 -0
  295. package/src/inflate/inflate.ts +96 -0
  296. package/src/inflate/md.ts +20 -0
  297. package/src/inflate/setup-auth.ts +40 -0
  298. package/src/inflate/setup-cors.ts +40 -0
  299. package/src/inflate/setup-db.ts +113 -0
  300. package/src/inflate/setup-http.ts +643 -0
  301. package/src/inflate/setup-log.ts +44 -0
  302. package/src/inflate/setup-server-config.ts +47 -0
  303. package/src/inflate/setup-test.ts +23 -0
  304. package/src/inflate/setup-ws.ts +48 -0
  305. package/src/inflate/utils/sea-utils.ts +14 -0
  306. package/src/lib.ts +19 -0
  307. package/src/main.ts +87 -0
  308. package/src/services/app.ts +718 -0
  309. package/src/services/editor.tsx +93 -0
  310. package/src/services/globals.ts +143 -0
  311. package/src/services/hot-reload.ts +46 -0
  312. package/src/services/migrations.ts +66 -0
  313. package/src/services/utils/cache.ts +88 -0
  314. package/src/services/utils/cluster-cache.ts +225 -0
  315. package/src/services/utils/cluster-ws.ts +192 -0
  316. package/src/services/utils/db-manager.ts +79 -0
  317. package/src/services/utils/get-route.ts +70 -0
  318. package/src/services/utils/log.ts +91 -0
  319. package/src/services/utils/server-interface.ts +166 -0
  320. package/src/services/utils/websocketmanager.ts +139 -0
  321. package/src/types/@esbuild.d.ts +1 -0
  322. package/src/types/@miqro/core.d.ts +2 -0
  323. package/src/types/@miqro/jsx.d.ts +2 -0
  324. package/src/types/@miqro/parser.d.ts +2 -0
  325. package/src/types/@miqro/query.d.ts +2 -0
  326. package/src/types/@miqro/request.d.ts +2 -0
  327. package/src/types/@miqro/test.d.ts +2 -0
  328. package/src/types/@miqro.d.ts +1 -0
  329. package/src/types/@types.d.ts +1 -0
  330. package/src/types/browser.globals.d.ts +9 -0
  331. package/src/types/globals.d.ts +2 -0
  332. package/src/types/jsx.globals.d.ts +37 -0
  333. package/src/types/miqro.d.ts +109 -0
  334. package/src/types/postject.d.ts +1 -0
  335. package/src/types/server.globals.d.ts +72 -0
  336. package/src/types.ts +199 -0
  337. package/tsconfig.json +35 -0
  338. package/build/cli.js +0 -4
  339. package/build/cmd-map.d.ts +0 -90
  340. package/build/cmd-map.js +0 -460
  341. package/build/index.js +0 -2
  342. package/build/utils/doc/json.d.ts +0 -7
  343. package/build/utils/doc/json.js +0 -12
  344. package/build/utils/doc/md.d.ts +0 -19
  345. package/build/utils/doc/md.js +0 -173
  346. package/build/utils/exec.d.ts +0 -32
  347. package/build/utils/exec.js +0 -102
  348. package/build/utils/templates.d.ts +0 -33
  349. package/build/utils/templates.js +0 -302
  350. package/build/utils/watch.d.ts +0 -1
  351. package/build/utils/watch.js +0 -35
  352. /package/build/{index.d.ts → esm/editor/http/admin/editor/editor.d.ts} +0 -0
  353. /package/build/{cli.d.ts → esm/src/cluster.d.ts} +0 -0
@@ -0,0 +1,483 @@
1
+ import { FileEditor } from "./file-editor.js";
2
+ import { NewFile } from "./new-file.js";
3
+ import { useScroll } from "./scroll-query.js";
4
+ import { useFilterQuery } from "./filter-query.js";
5
+ import { FileBrowser } from "./file-browser.js";
6
+ import { StartPage } from "./start-page.js";
7
+ import { BASEEDITOR_PATH } from "../common/constants.js";
8
+ import { LogViewer } from "./log-viewer.js";
9
+ import { useLogSocket } from "../common/log-socket.js";
10
+
11
+ function InflateError2Map(errors: {
12
+ filePath: string;
13
+ error: string;
14
+ }[]) {
15
+ const errorMap: {
16
+ [filePath: string]: {
17
+ error: string
18
+ };
19
+ } = {};
20
+ for (const e of errors) {
21
+ const filePath = e.filePath;
22
+ const error = e.error;
23
+ errorMap[filePath] = {
24
+ error
25
+ };
26
+ }
27
+ return errorMap;
28
+ }
29
+
30
+ export function Editor(props: { disablelog?: boolean; disablepreview?: boolean; disablereload?: boolean; migrations: string; services: string; reloadstring: string; files: string; initialcurrent: string; classname?: string; errors: string }) {
31
+ const logSocket = useLogSocket();
32
+
33
+ const [services, setservices] = jsx.useState<string[]>(JSON.parse(props.services));
34
+ const [collapsed, setCollapsed] = jsx.useState<{
35
+ [dir: string]: boolean
36
+ }>((() => {
37
+ const ret: { [dir: string]: boolean } = {};
38
+ services.forEach(service => {
39
+ ret[`${service}/`] = false;
40
+ })
41
+ return ret;
42
+ })());
43
+
44
+ /*const [panelVisible, setpanelVisible] = jsx.useState<{
45
+ [panel: string]: boolean | undefined;
46
+ }>({ right: false, bottom: false });*/
47
+
48
+ const [rightPanelVisible, setRightPanelVisible] = jsx.useQuery("right-panel", "0");
49
+ const [leftPanelVisible, setLeftPanelVisible] = jsx.useQuery("left-panel", "1");
50
+ const [bottomPanelVisible, setBottomPanelVisible] = jsx.useQuery("bottom-panel", "0");
51
+
52
+ const [migrations, setmigrations] = jsx.useState<string[]>(JSON.parse(props.migrations));
53
+ const [files, setfiles] = jsx.useState(JSON.parse(props.files) as {
54
+ filePath: string;
55
+ language: string;
56
+ previewPath?: string;
57
+ dirs: string[];
58
+ apiPreview?: {
59
+ path: string;
60
+ method: string;
61
+ }[];
62
+ content?: string;
63
+ fileName: string;
64
+ }[]);
65
+ const [reloadString, setreloadString] = jsx.useState<string>(props.reloadstring);
66
+ const [changed, setchanged] = jsx.useState<{
67
+ [filePath: string]: string | null;
68
+ }>({});
69
+ const [errors, seterrors] = jsx.useState<{
70
+ [filePath: string]: {
71
+ error: string
72
+ };
73
+ }>(InflateError2Map(JSON.parse(props.errors)));
74
+ const [newFileDialogShow, setnewFileDialogShow] = jsx.useState<boolean>(false);
75
+ const [filter, setfilter] = useFilterQuery();
76
+
77
+ const refresh = jsx.useRefresh();
78
+ const [opened, setopened] = jsx.useState<{
79
+ [filePath: string]: {
80
+ filePath: string;
81
+ fileName: string;
82
+ language: string;
83
+ previewPath?: string;
84
+ apiPreview?: {
85
+ path: string;
86
+ method: string;
87
+ }[];
88
+ content: string | null;
89
+ error?: {
90
+ message: string;
91
+ }
92
+ }
93
+ }>({});
94
+ const [current, setcurrent] = jsx.useQuery("current", props.initialcurrent ? props.initialcurrent : "");
95
+ const [_, setScroll] = useScroll();
96
+
97
+ if (current instanceof Array) {
98
+ setcurrent(current[0]);
99
+ } else if (current) {
100
+ if (!opened[current]) {
101
+ const file = files.filter(file => file.filePath === current)[0];
102
+ if (!file) {
103
+ setcurrent("");
104
+ } else {
105
+ openFile(file.filePath);
106
+ }
107
+ }
108
+ }
109
+
110
+ /*useEffect(() => {
111
+ for (const service of services) {
112
+ if (collapsed[`${service}/`] === undefined) {
113
+ collapsed[`${service}/`] = true;
114
+ refresh();
115
+ }
116
+ }
117
+ }, services);*/
118
+
119
+ function openFile(filePath: string) {
120
+ console.log("open [%s]", filePath);
121
+ const isOpen = opened[filePath];
122
+ setScroll({
123
+ scrollLeft: 0,
124
+ scrollTop: 0
125
+ });
126
+ if (!isOpen) {
127
+ const file = files.filter(file => file.filePath === filePath)[0];
128
+ if (!file) {
129
+ throw new Error("cannot find reference to file [" + filePath + "]");
130
+ }
131
+ opened[file.filePath] = {
132
+ content: null,
133
+ ...file
134
+ };
135
+ changed[file.filePath] = null;
136
+
137
+ setopened(opened);
138
+
139
+ if (opened[file.filePath].content === null && (globalThis.window) !== undefined) {
140
+ if (opened[file.filePath].language !== "binary") {
141
+ fetch(BASEEDITOR_PATH + "/api/fs/read", {
142
+ method: "POST",
143
+ headers: {
144
+ ["content-type"]: "application/json"
145
+ },
146
+ body: JSON.stringify({
147
+ path: file.filePath
148
+ })
149
+ }).then(response => {
150
+
151
+ if (response.ok) {
152
+ response.json().then(json => {
153
+ const contents = json.contents;
154
+ if (opened[file.filePath]) {
155
+ opened[file.filePath].content = contents;
156
+ changed[file.filePath] = contents;
157
+ setopened(opened);
158
+ setchanged(changed);
159
+ refresh();
160
+ }
161
+ });
162
+ }
163
+ })
164
+ } else {
165
+ opened[file.filePath].content = "";
166
+ changed[file.filePath] = "";
167
+ setopened(opened);
168
+ refresh();
169
+ }
170
+ }
171
+ }
172
+ setcurrent(filePath);
173
+ }
174
+
175
+ function closeFile(filePath: string) {
176
+ setScroll({
177
+ scrollTop: 0,
178
+ scrollLeft: 0
179
+ })
180
+ console.log("closing [%s]", filePath);
181
+ //console.log("current [%s]", current);
182
+ if (filePath === current) {
183
+ setcurrent("");
184
+ }
185
+ delete opened[filePath];
186
+ delete changed[filePath];
187
+ setchanged(changed);
188
+ setopened(opened);
189
+ refresh();
190
+ }
191
+
192
+ async function scanFiles() {
193
+ const r = await fetch(BASEEDITOR_PATH + "/api/fs/scan", {
194
+ method: "GET"
195
+ });
196
+ if (r.ok) {
197
+ const { files, services } = await r.json();
198
+ setfiles(files);
199
+ setservices(services);
200
+ }
201
+ }
202
+
203
+ function isDirCollapsed(dir: string) {
204
+ console.log("isDirCollapsed [%s]", dir);
205
+ if (dir === "" || filter !== "") {
206
+ return false;
207
+ }
208
+ return collapsed[dir] || collapsed[dir] === undefined ? true : false;
209
+ //return collapsed[dir] ? false : true;
210
+ }
211
+
212
+ function toggleCollapseDir(dir: string) {
213
+ console.log("toggleCollapseDir [%s]", dir);
214
+ collapsed[dir] = isDirCollapsed(dir) ? false : true;
215
+ setCollapsed(collapsed);
216
+ refresh();
217
+ }
218
+
219
+ async function deleteFile(file: string) {
220
+ console.log("deleteFile [%s]", file);
221
+ const r = await fetch(BASEEDITOR_PATH + "/api/fs/delete", {
222
+ method: "POST",
223
+ headers: {
224
+ ["content-type"]: "application/json"
225
+ },
226
+ body: JSON.stringify({
227
+ path: file
228
+ })
229
+ });
230
+ if (r.ok) {
231
+ await scanFiles();
232
+ if (opened[file]) {
233
+ closeFile(file);
234
+ }
235
+ }
236
+ }
237
+
238
+ async function renameFile(file: string, newName: string) {
239
+ console.log("renameFile [%s] to [%s]", file, newName);
240
+ if (opened[file]) {
241
+ const r = await fetch(BASEEDITOR_PATH + "/api/fs/rename", {
242
+ method: "POST",
243
+ headers: {
244
+ ["content-type"]: "application/json"
245
+ },
246
+ body: JSON.stringify({
247
+ path: file,
248
+ newName
249
+ })
250
+ });
251
+ if (r.ok) {
252
+ const fileO = opened[file];
253
+ const changeO = changed[file];
254
+ fileO.filePath = newName;
255
+ delete changed[file];
256
+ delete opened[file];
257
+ opened[newName] = fileO;
258
+ changed[newName] = changeO;
259
+
260
+ await scanFiles();
261
+
262
+ setopened(opened);
263
+ setchanged(changed);
264
+ if (current === file) {
265
+ setcurrent(newName);
266
+ }
267
+ refresh();
268
+ }
269
+ }
270
+ }
271
+
272
+ async function saveFile(file: string) {
273
+ console.log("saveFile [%s]", file);
274
+ const contents = changed[file];
275
+ if (opened[file] && contents !== undefined && contents !== null) {
276
+ const r = await fetch(BASEEDITOR_PATH + "/api/fs/write", {
277
+ method: "POST",
278
+ headers: {
279
+ ["content-type"]: "application/json"
280
+ },
281
+ body: JSON.stringify({
282
+ path: file,
283
+ contents,
284
+ override: true
285
+ })
286
+ });
287
+ if (r.ok) {
288
+ opened[file].content = contents;
289
+ setopened(opened);
290
+ setchanged(changed);
291
+ refresh();
292
+ }
293
+ }
294
+ }
295
+
296
+ async function reloadServer() {
297
+ const r = await fetch(BASEEDITOR_PATH + "/api/server/reload", {
298
+ method: "POST"
299
+ });
300
+ if (r.ok) {
301
+ const reloadResponse = await r.json();
302
+ if (reloadResponse.errors && reloadResponse.errors.length > 0) {
303
+ seterrors(InflateError2Map(reloadResponse.errors));
304
+ setreloadString(reloadResponse.reloadString);
305
+ refresh();
306
+ } else {
307
+ setreloadString(reloadResponse.reloadString);
308
+ seterrors({});
309
+ refresh();
310
+ }
311
+ setmigrations(reloadResponse.migrations);
312
+ await scanFiles();
313
+ }
314
+ }
315
+
316
+ function setLanguage(file: string, newLanguage: string) {
317
+ if (opened[file]) {
318
+ opened[file].language = newLanguage;
319
+ setopened(opened);
320
+ refresh();
321
+ }
322
+ }
323
+
324
+ function hasFileContentChanged(filePath: string) {
325
+ if (!opened[filePath]) {
326
+ return false;
327
+ }
328
+ return changed[filePath] !== opened[filePath].content
329
+ }
330
+
331
+ function isPanelVisible(panel: string) {
332
+ switch (panel) {
333
+ case "left":
334
+ return leftPanelVisible === "1";
335
+ case "bottom":
336
+ return bottomPanelVisible === "1";
337
+ case "right":
338
+ return rightPanelVisible === "1";
339
+ default:
340
+ return true;
341
+ }
342
+ //return panelVisible[panel] || panelVisible[panel] === undefined ? true : false;
343
+ }
344
+
345
+ function togglePanel(panel: string) {
346
+ console.log("togglePanel [%s]", panel);
347
+ /*panelVisible[panel] = !isPanelVisible(panel);
348
+ setpanelVisible(panelVisible);
349
+ refresh();*/
350
+ switch (panel) {
351
+ case "left":
352
+ return setLeftPanelVisible(isPanelVisible(panel) ? "0" : "1");
353
+ case "bottom":
354
+ return setBottomPanelVisible(isPanelVisible(panel) ? "0" : "1");
355
+ case "right":
356
+ return setRightPanelVisible(isPanelVisible(panel) ? "0" : "1");
357
+ default:
358
+ return;
359
+ }
360
+ }
361
+
362
+ const openedFile = opened[String(current)];
363
+
364
+ //console.log("Editor [%s]", openedFile?.filePath);
365
+
366
+ return <div class="editor">
367
+ <div class={`editor-firstrow${!isPanelVisible("bottom") ? " bottom-panel-hidden" : ""}`}>
368
+ <NewFile
369
+ migrations={migrations}
370
+ services={services}
371
+ open={newFileDialogShow}
372
+ ondone={async (path) => {
373
+ setnewFileDialogShow(false);
374
+ if (path) {
375
+ await scanFiles();
376
+ //await reloadServer();
377
+ }
378
+ }} />
379
+ <FileBrowser
380
+ disableLog={props.disablelog}
381
+ disablePreview={props.disablepreview}
382
+ disableReload={props.disablereload}
383
+ togglePanel={togglePanel}
384
+ isPanelVisible={isPanelVisible}
385
+ opened={Object.keys(opened).sort().map(o => opened[o])}
386
+ isDirCollapsed={isDirCollapsed}
387
+ toggleCollapseDir={toggleCollapseDir}
388
+ migrations={migrations}
389
+ hasErrors={(file) => errors[file] ? true : false}
390
+ reloadServer={reloadServer}
391
+ closeAll={() => {
392
+ const openedList = Object.keys(opened);
393
+ for (const o of openedList) {
394
+ closeFile(o);
395
+ }
396
+ }}
397
+ closeFile={closeFile}
398
+ current={current ? String(current) : ""}
399
+ files={files}
400
+ filter={filter}
401
+ hasFileContentChanged={hasFileContentChanged}
402
+ isOpen={(file) => opened[file] !== undefined}
403
+ openFile={openFile}
404
+ saveAll={async () => {
405
+ const openedList = Object.keys(opened);
406
+ for (const o of openedList) {
407
+ if (hasFileContentChanged(o)) {
408
+ await saveFile(o);
409
+ }
410
+ }
411
+ //await reloadServer();
412
+ }}
413
+ scanFiles={scanFiles}
414
+ setfilter={setfilter}
415
+ showNewFile={() => {
416
+ setnewFileDialogShow(true);
417
+ }}
418
+ />
419
+ <div class={`file-editor-list${!isPanelVisible("left") ? " left-panel-hidden" : ""}${!isPanelVisible("bottom") ? " bottom-panel-hidden" : ""}`}>
420
+ {!openedFile ?
421
+ <StartPage
422
+ disableLog={props.disablelog}
423
+ disablePreview={props.disablepreview}
424
+ disableReload={props.disablereload}
425
+ isPanelVisible={isPanelVisible}
426
+ togglePanel={togglePanel}
427
+ /> :
428
+ <div class="file-editor-container">
429
+ <FileEditor
430
+ disableLog={props.disablelog}
431
+ disablePreview={props.disablepreview}
432
+ disableReload={props.disablereload}
433
+ isPanelVisible={isPanelVisible}
434
+ togglePanel={togglePanel}
435
+ reloadString={reloadString}
436
+ error={errors[openedFile.filePath]?.error}
437
+ changed={hasFileContentChanged(openedFile.filePath)}
438
+ setlanguage={(newLanguage: string) => setLanguage(openedFile.filePath, newLanguage)}
439
+ deleteFile={async () => {
440
+ await deleteFile(openedFile.filePath);
441
+ //await reloadServer();
442
+ }}
443
+ renameFile={async (newName) => {
444
+ await renameFile(openedFile.filePath, newName);
445
+ //await reloadServer();
446
+ }}
447
+ saveFile={async (reload = false) => {
448
+ await saveFile(openedFile.filePath);
449
+ if (reload) {
450
+ await reloadServer();
451
+ }
452
+ //
453
+ }}
454
+ content={changed[openedFile.filePath] !== null ? changed[openedFile.filePath] : opened[openedFile.filePath].content}
455
+ current={current === openedFile.filePath}
456
+ revertFile={() => {
457
+ changed[openedFile.filePath] = openedFile.content;
458
+ setchanged(changed);
459
+ refresh();
460
+ }}
461
+ contentchange={(content) => {
462
+ changed[openedFile.filePath] = content;
463
+ setopened(opened);
464
+ refresh();
465
+ }}
466
+ closeFile={() => {
467
+ closeFile(openedFile.filePath);
468
+ }}
469
+ path={openedFile.filePath}
470
+ previewPath={openedFile.previewPath}
471
+ apiPreview={openedFile.apiPreview}
472
+ language={opened[openedFile.filePath].language} />
473
+ </div>}
474
+ </div>
475
+ </div>
476
+ <div class="editor-bottom-panel" style={`${!isPanelVisible("bottom") ? "display: none;" : ""}`}>
477
+ <LogViewer socket={logSocket} />
478
+ </div>
479
+ </div>
480
+ }
481
+
482
+ Editor.asFragment = true;
483
+ Editor.shadowInit = false;