miqro 6.3.0 → 7.0.1

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 (216) hide show
  1. package/README.md +9 -17
  2. package/build/editor.bundle.js +11601 -10129
  3. package/build/esm/src/bin/types.js +10 -5
  4. package/build/esm/src/cluster.js +1 -1
  5. package/build/esm/src/common/arguments.d.ts +1 -1
  6. package/build/esm/src/common/arguments.js +28 -14
  7. package/build/esm/src/common/assets.d.ts +1 -1
  8. package/build/esm/src/common/assets.js +34 -13
  9. package/build/esm/src/common/esbuild.d.ts +4 -1
  10. package/build/esm/src/common/esbuild.js +31 -26
  11. package/build/esm/src/common/exit.js +4 -4
  12. package/build/esm/src/common/help.d.ts +1 -1
  13. package/build/esm/src/common/help.js +0 -1
  14. package/build/esm/src/common/jsx.d.ts +2 -3
  15. package/build/esm/src/common/jsx.js +70 -75
  16. package/build/esm/src/common/paths.d.ts +0 -1
  17. package/build/esm/src/common/paths.js +3 -3
  18. package/build/esm/src/common/watch.d.ts +0 -1
  19. package/build/esm/src/common/watch.js +1 -1
  20. package/build/esm/src/inflate/inflate-sea.js +35 -24
  21. package/build/esm/src/inflate/inflate.js +4 -4
  22. package/build/esm/src/inflate/setup-auth.js +1 -1
  23. package/build/esm/src/inflate/setup-cors.js +1 -1
  24. package/build/esm/src/inflate/setup-db.js +2 -2
  25. package/build/esm/src/inflate/setup-error.js +1 -1
  26. package/build/esm/src/inflate/setup-http.js +16 -16
  27. package/build/esm/src/inflate/setup-log.js +1 -1
  28. package/build/esm/src/inflate/setup-middleware.js +1 -1
  29. package/build/esm/src/inflate/setup-server-config.js +1 -1
  30. package/build/esm/src/inflate/setup-ws.js +1 -1
  31. package/build/esm/src/inflate/setup.doc.d.ts +2 -2
  32. package/build/esm/src/inflate/setup.doc.js +23 -2
  33. package/build/esm/src/inflate/utils/sea-utils.js +2 -2
  34. package/build/esm/src/lib.d.ts +10 -1
  35. package/build/esm/src/lib.js +16 -1
  36. package/build/esm/src/main.js +1 -1
  37. package/build/esm/src/services/app.js +3 -4
  38. package/build/esm/src/services/migrations.js +2 -2
  39. package/build/esm/src/services/utils/jwt.d.ts +2 -0
  40. package/build/esm/src/services/utils/jwt.js +23 -0
  41. package/build/esm/src/services/utils/middleware.d.ts +9 -0
  42. package/build/esm/src/services/utils/middleware.js +9 -0
  43. package/build/esm/src/services/utils/server-interface.js +33 -4
  44. package/build/esm/src/types.d.ts +50 -83
  45. package/build/lib.cjs +15684 -15612
  46. package/package.json +6 -8
  47. package/sea/basic-compile.base64.sh +1 -1
  48. package/sea/basic-compile.sh +1 -1
  49. package/sea/install-nodejs.sh +1 -1
  50. package/sea/node.version.tag +1 -1
  51. package/.eslintrc +0 -15
  52. package/build/esm/editor/auth.d.ts +0 -6
  53. package/build/esm/editor/auth.js +0 -41
  54. package/build/esm/editor/common/admin-interface.d.ts +0 -36
  55. package/build/esm/editor/common/admin-interface.js +0 -44
  56. package/build/esm/editor/common/constants.d.ts +0 -4
  57. package/build/esm/editor/common/constants.js +0 -20
  58. package/build/esm/editor/common/constants.server.d.ts +0 -2
  59. package/build/esm/editor/common/constants.server.js +0 -4
  60. package/build/esm/editor/common/editor-index.d.ts +0 -2
  61. package/build/esm/editor/common/editor-index.js +0 -14
  62. package/build/esm/editor/common/html-encode.d.ts +0 -1
  63. package/build/esm/editor/common/html-encode.js +0 -14
  64. package/build/esm/editor/common/log-socket.d.ts +0 -15
  65. package/build/esm/editor/common/log-socket.js +0 -70
  66. package/build/esm/editor/common/templates.d.ts +0 -11
  67. package/build/esm/editor/common/templates.js +0 -477
  68. package/build/esm/editor/components/api-preview.d.ts +0 -11
  69. package/build/esm/editor/components/api-preview.js +0 -90
  70. package/build/esm/editor/components/editor.d.ts +0 -16
  71. package/build/esm/editor/components/editor.js +0 -365
  72. package/build/esm/editor/components/file-browser.d.ts +0 -37
  73. package/build/esm/editor/components/file-browser.js +0 -126
  74. package/build/esm/editor/components/file-editor-toolbar.d.ts +0 -22
  75. package/build/esm/editor/components/file-editor-toolbar.js +0 -93
  76. package/build/esm/editor/components/file-editor.d.ts +0 -32
  77. package/build/esm/editor/components/file-editor.js +0 -59
  78. package/build/esm/editor/components/filter-query.d.ts +0 -1
  79. package/build/esm/editor/components/filter-query.js +0 -22
  80. package/build/esm/editor/components/highlight-text-area.d.ts +0 -11
  81. package/build/esm/editor/components/highlight-text-area.js +0 -125
  82. package/build/esm/editor/components/log-viewer.d.ts +0 -6
  83. package/build/esm/editor/components/log-viewer.js +0 -69
  84. package/build/esm/editor/components/new-file.d.ts +0 -10
  85. package/build/esm/editor/components/new-file.js +0 -117
  86. package/build/esm/editor/components/scroll-query.d.ts +0 -7
  87. package/build/esm/editor/components/scroll-query.js +0 -21
  88. package/build/esm/editor/components/start-page.d.ts +0 -13
  89. package/build/esm/editor/components/start-page.js +0 -30
  90. package/build/esm/editor/http/admin/editor/api/fs/delete.api.d.ts +0 -3
  91. package/build/esm/editor/http/admin/editor/api/fs/delete.api.js +0 -29
  92. package/build/esm/editor/http/admin/editor/api/fs/read.api.d.ts +0 -5
  93. package/build/esm/editor/http/admin/editor/api/fs/read.api.js +0 -49
  94. package/build/esm/editor/http/admin/editor/api/fs/rename.api.d.ts +0 -4
  95. package/build/esm/editor/http/admin/editor/api/fs/rename.api.js +0 -39
  96. package/build/esm/editor/http/admin/editor/api/fs/scan.api.d.ts +0 -26
  97. package/build/esm/editor/http/admin/editor/api/fs/scan.api.js +0 -149
  98. package/build/esm/editor/http/admin/editor/api/fs/write.api.d.ts +0 -3
  99. package/build/esm/editor/http/admin/editor/api/fs/write.api.js +0 -38
  100. package/build/esm/editor/http/admin/editor/api/server/reload.api.d.ts +0 -10
  101. package/build/esm/editor/http/admin/editor/api/server/reload.api.js +0 -46
  102. package/build/esm/editor/http/admin/editor/api/server/restart.api.d.ts +0 -10
  103. package/build/esm/editor/http/admin/editor/api/server/restart.api.js +0 -45
  104. package/build/esm/editor/http/admin/editor/editor.d.ts +0 -1
  105. package/build/esm/editor/http/admin/editor/editor.js +0 -7
  106. package/build/esm/editor/http/admin/editor/index.api.d.ts +0 -3
  107. package/build/esm/editor/http/admin/editor/index.api.js +0 -21
  108. package/build/esm/editor/server.d.ts +0 -3
  109. package/build/esm/editor/server.js +0 -49
  110. package/build/esm/editor/ws.d.ts +0 -3
  111. package/build/esm/editor/ws.js +0 -11
  112. package/build/esm/src/services/globals.d.ts +0 -3
  113. package/build/esm/src/services/globals.js +0 -182
  114. package/build/jsx.dom.js +0 -1587
  115. package/build/postject.base64.cjs +0 -1
  116. package/editor/auth.ts +0 -51
  117. package/editor/common/admin-interface.ts +0 -84
  118. package/editor/common/constants.server.ts +0 -5
  119. package/editor/common/constants.ts +0 -21
  120. package/editor/common/editor-index.tsx +0 -17
  121. package/editor/common/html-encode.ts +0 -14
  122. package/editor/common/log-socket.tsx +0 -85
  123. package/editor/common/templates.ts +0 -481
  124. package/editor/components/api-preview.tsx +0 -116
  125. package/editor/components/editor.tsx +0 -494
  126. package/editor/components/file-browser.tsx +0 -308
  127. package/editor/components/file-editor-toolbar.tsx +0 -191
  128. package/editor/components/file-editor.tsx +0 -122
  129. package/editor/components/filter-query.tsx +0 -22
  130. package/editor/components/highlight-text-area.tsx +0 -145
  131. package/editor/components/log-viewer.tsx +0 -110
  132. package/editor/components/new-file.tsx +0 -169
  133. package/editor/components/scroll-query.tsx +0 -22
  134. package/editor/components/start-page.tsx +0 -49
  135. package/editor/http/admin/editor/api/fs/delete.api.tsx +0 -32
  136. package/editor/http/admin/editor/api/fs/read.api.tsx +0 -55
  137. package/editor/http/admin/editor/api/fs/rename.api.tsx +0 -41
  138. package/editor/http/admin/editor/api/fs/scan.api.tsx +0 -181
  139. package/editor/http/admin/editor/api/fs/write.api.tsx +0 -41
  140. package/editor/http/admin/editor/api/server/reload.api.ts +0 -53
  141. package/editor/http/admin/editor/api/server/restart.api.tsx +0 -52
  142. package/editor/http/admin/editor/editor.tsx +0 -8
  143. package/editor/http/admin/editor/index.api.tsx +0 -39
  144. package/editor/server.ts +0 -57
  145. package/editor/ws.ts +0 -15
  146. package/sea/types.json +0 -1
  147. package/src/bin/compile.ts +0 -35
  148. package/src/bin/doc-md.ts +0 -210
  149. package/src/bin/generate-doc.ts +0 -64
  150. package/src/bin/test.ts +0 -92
  151. package/src/bin/types.ts +0 -29
  152. package/src/cluster.ts +0 -27
  153. package/src/common/arguments.ts +0 -745
  154. package/src/common/assets.ts +0 -128
  155. package/src/common/checksum.ts +0 -58
  156. package/src/common/constants.ts +0 -18
  157. package/src/common/content-type.ts +0 -84
  158. package/src/common/esbuild.ts +0 -94
  159. package/src/common/exit.ts +0 -91
  160. package/src/common/fs.ts +0 -82
  161. package/src/common/help.ts +0 -61
  162. package/src/common/jsx.ts +0 -547
  163. package/src/common/jwt.ts +0 -85
  164. package/src/common/paths.ts +0 -107
  165. package/src/common/watch.ts +0 -88
  166. package/src/inflate/inflate-sea.ts +0 -226
  167. package/src/inflate/inflate.ts +0 -101
  168. package/src/inflate/md.ts +0 -25
  169. package/src/inflate/setup-auth.ts +0 -41
  170. package/src/inflate/setup-cors.ts +0 -41
  171. package/src/inflate/setup-db.ts +0 -117
  172. package/src/inflate/setup-error.ts +0 -44
  173. package/src/inflate/setup-http.ts +0 -704
  174. package/src/inflate/setup-log.ts +0 -45
  175. package/src/inflate/setup-middleware.ts +0 -47
  176. package/src/inflate/setup-server-config.ts +0 -48
  177. package/src/inflate/setup-test.ts +0 -23
  178. package/src/inflate/setup-ws.ts +0 -50
  179. package/src/inflate/setup.doc.ts +0 -68
  180. package/src/inflate/utils/sea-utils.ts +0 -14
  181. package/src/lib.ts +0 -19
  182. package/src/main.ts +0 -101
  183. package/src/services/app.ts +0 -699
  184. package/src/services/editor.tsx +0 -101
  185. package/src/services/globals.ts +0 -186
  186. package/src/services/hot-reload.ts +0 -51
  187. package/src/services/migrations.ts +0 -68
  188. package/src/services/utils/admin-interface.ts +0 -37
  189. package/src/services/utils/cache.ts +0 -88
  190. package/src/services/utils/cluster-cache.ts +0 -230
  191. package/src/services/utils/cluster-ws.ts +0 -202
  192. package/src/services/utils/db-manager.ts +0 -92
  193. package/src/services/utils/get-route.ts +0 -70
  194. package/src/services/utils/log-transport.ts +0 -81
  195. package/src/services/utils/log.ts +0 -92
  196. package/src/services/utils/server-interface.ts +0 -92
  197. package/src/services/utils/websocketmanager.ts +0 -157
  198. package/src/types/@esbuild.d.ts +0 -1
  199. package/src/types/@miqro/core.d.ts +0 -2
  200. package/src/types/@miqro/jsx.d.ts +0 -2
  201. package/src/types/@miqro/parser.d.ts +0 -2
  202. package/src/types/@miqro/query.d.ts +0 -2
  203. package/src/types/@miqro/request.d.ts +0 -2
  204. package/src/types/@miqro/test.d.ts +0 -2
  205. package/src/types/@miqro.d.ts +0 -1
  206. package/src/types/@types.d.ts +0 -1
  207. package/src/types/browser.globals.d.ts +0 -1
  208. package/src/types/cookie.d.ts +0 -2
  209. package/src/types/globals.d.ts +0 -2
  210. package/src/types/jose.d.ts +0 -2
  211. package/src/types/jsx.globals.d.ts +0 -38
  212. package/src/types/miqro.d.ts +0 -228
  213. package/src/types/postject.d.ts +0 -1
  214. package/src/types/server.globals.d.ts +0 -47
  215. package/src/types.ts +0 -304
  216. package/tsconfig.json +0 -35
@@ -1,365 +0,0 @@
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
- function InflateError2Map(errors) {
11
- const errorMap = {};
12
- for (const e of errors) {
13
- const filePath = e.filePath;
14
- const error = e.error;
15
- errorMap[filePath] = {
16
- error
17
- };
18
- }
19
- return errorMap;
20
- }
21
- export function Editor(props) {
22
- //console.dir(props);
23
- const logSocket = useLogSocket({
24
- disableLog: props.disablelog === "true" || props.disablelog === true ? true : false
25
- });
26
- const [services, setservices] = jsx.useState(JSON.parse(props.services));
27
- const [collapsed, setCollapsed] = jsx.useState((() => {
28
- const ret = {};
29
- services.forEach(service => {
30
- ret[`${service}/`] = false;
31
- });
32
- return ret;
33
- })());
34
- /*const [panelVisible, setpanelVisible] = jsx.useState<{
35
- [panel: string]: boolean | undefined;
36
- }>({ right: false, bottom: false });*/
37
- const [rightPanelVisible, setRightPanelVisible] = jsx.useQuery("right-panel", "0");
38
- const [leftPanelVisible, setLeftPanelVisible] = jsx.useQuery("left-panel", "1");
39
- const [bottomPanelVisible, setBottomPanelVisible] = jsx.useQuery("bottom-panel", "0");
40
- const [migrations, setmigrations] = jsx.useState(JSON.parse(props.migrations));
41
- const [files, setfiles] = jsx.useState(JSON.parse(props.files));
42
- const [reloadString, setreloadString] = jsx.useState(props.reloadstring);
43
- const [changed, setchanged] = jsx.useState({});
44
- const [errors, seterrors] = jsx.useState(InflateError2Map(JSON.parse(props.errors)));
45
- const [newFileDialogShow, setnewFileDialogShow] = jsx.useState(false);
46
- const [filter, setfilter] = useFilterQuery();
47
- const refresh = jsx.useRefresh();
48
- const [opened, setopened] = jsx.useState({});
49
- const [current, setcurrent] = jsx.useQuery("current", props.initialcurrent ? props.initialcurrent : "");
50
- const [_, setScroll] = useScroll();
51
- if (current instanceof Array) {
52
- setcurrent(current[0]);
53
- }
54
- else if (current) {
55
- if (!opened[current]) {
56
- const file = files.filter(file => file.filePath === current)[0];
57
- if (!file) {
58
- setcurrent("");
59
- }
60
- else {
61
- openFile(file.filePath);
62
- }
63
- }
64
- }
65
- /*useEffect(() => {
66
- for (const service of services) {
67
- if (collapsed[`${service}/`] === undefined) {
68
- collapsed[`${service}/`] = true;
69
- refresh();
70
- }
71
- }
72
- }, services);*/
73
- function openFile(filePath) {
74
- console.log("open [%s]", filePath);
75
- const isOpen = opened[filePath];
76
- setScroll({
77
- scrollLeft: 0,
78
- scrollTop: 0
79
- });
80
- if (!isOpen) {
81
- const file = files.filter(file => file.filePath === filePath)[0];
82
- if (!file) {
83
- throw new Error("cannot find reference to file [" + filePath + "]");
84
- }
85
- opened[file.filePath] = {
86
- content: null,
87
- ...file
88
- };
89
- changed[file.filePath] = null;
90
- setopened(opened);
91
- if (opened[file.filePath].content === null && (globalThis.window) !== undefined) {
92
- if (opened[file.filePath].language !== "binary") {
93
- fetch(BASEEDITOR_PATH + "/api/fs/read", {
94
- method: "POST",
95
- headers: {
96
- ["content-type"]: "application/json"
97
- },
98
- body: JSON.stringify({
99
- path: file.filePath
100
- })
101
- }).then(response => {
102
- if (response.ok) {
103
- response.json().then(json => {
104
- const contents = json.contents;
105
- if (opened[file.filePath]) {
106
- opened[file.filePath].content = contents;
107
- changed[file.filePath] = contents;
108
- setopened(opened);
109
- setchanged(changed);
110
- refresh();
111
- }
112
- });
113
- }
114
- });
115
- }
116
- else {
117
- opened[file.filePath].content = "";
118
- changed[file.filePath] = "";
119
- setopened(opened);
120
- refresh();
121
- }
122
- }
123
- }
124
- setcurrent(filePath);
125
- }
126
- function closeFile(filePath) {
127
- setScroll({
128
- scrollTop: 0,
129
- scrollLeft: 0
130
- });
131
- console.log("closing [%s]", filePath);
132
- //console.log("current [%s]", current);
133
- if (filePath === current) {
134
- setcurrent("");
135
- }
136
- delete opened[filePath];
137
- delete changed[filePath];
138
- setchanged(changed);
139
- setopened(opened);
140
- refresh();
141
- }
142
- async function scanFiles() {
143
- const r = await fetch(BASEEDITOR_PATH + "/api/fs/scan", {
144
- method: "GET"
145
- });
146
- if (r.ok) {
147
- const { files, services } = await r.json();
148
- setfiles(files);
149
- setservices(services);
150
- for (const file of files) {
151
- if (opened[file.filePath]) {
152
- opened[file.filePath] = {
153
- content: opened[file.filePath].content,
154
- ...file
155
- };
156
- }
157
- }
158
- }
159
- }
160
- function isDirCollapsed(dir) {
161
- console.log("isDirCollapsed [%s]", dir);
162
- if (dir === "" || filter !== "") {
163
- return false;
164
- }
165
- return collapsed[dir] || collapsed[dir] === undefined ? true : false;
166
- //return collapsed[dir] ? false : true;
167
- }
168
- function toggleCollapseDir(dir) {
169
- console.log("toggleCollapseDir [%s]", dir);
170
- collapsed[dir] = isDirCollapsed(dir) ? false : true;
171
- setCollapsed(collapsed);
172
- refresh();
173
- }
174
- async function deleteFile(file) {
175
- console.log("deleteFile [%s]", file);
176
- const r = await fetch(BASEEDITOR_PATH + "/api/fs/delete", {
177
- method: "POST",
178
- headers: {
179
- ["content-type"]: "application/json"
180
- },
181
- body: JSON.stringify({
182
- path: file
183
- })
184
- });
185
- if (r.ok) {
186
- await scanFiles();
187
- if (opened[file]) {
188
- closeFile(file);
189
- }
190
- }
191
- }
192
- async function renameFile(file, newName) {
193
- console.log("renameFile [%s] to [%s]", file, newName);
194
- if (opened[file]) {
195
- const r = await fetch(BASEEDITOR_PATH + "/api/fs/rename", {
196
- method: "POST",
197
- headers: {
198
- ["content-type"]: "application/json"
199
- },
200
- body: JSON.stringify({
201
- path: file,
202
- newName
203
- })
204
- });
205
- if (r.ok) {
206
- const fileO = opened[file];
207
- const changeO = changed[file];
208
- fileO.filePath = newName;
209
- delete changed[file];
210
- delete opened[file];
211
- opened[newName] = fileO;
212
- changed[newName] = changeO;
213
- await scanFiles();
214
- setopened(opened);
215
- setchanged(changed);
216
- if (current === file) {
217
- setcurrent(newName);
218
- }
219
- refresh();
220
- }
221
- }
222
- }
223
- async function saveFile(file) {
224
- console.log("saveFile [%s]", file);
225
- const contents = changed[file];
226
- if (opened[file] && contents !== undefined && contents !== null) {
227
- const r = await fetch(BASEEDITOR_PATH + "/api/fs/write", {
228
- method: "POST",
229
- headers: {
230
- ["content-type"]: "application/json"
231
- },
232
- body: JSON.stringify({
233
- path: file,
234
- contents,
235
- override: true
236
- })
237
- });
238
- if (r.ok) {
239
- opened[file].content = contents;
240
- setopened(opened);
241
- setchanged(changed);
242
- refresh();
243
- }
244
- }
245
- }
246
- async function reloadServer() {
247
- const r = await fetch(BASEEDITOR_PATH + "/api/server/reload", {
248
- method: "POST"
249
- });
250
- if (r.ok) {
251
- const reloadResponse = await r.json();
252
- if (reloadResponse.errors && reloadResponse.errors.length > 0) {
253
- seterrors(InflateError2Map(reloadResponse.errors));
254
- setreloadString(reloadResponse.reloadString);
255
- refresh();
256
- }
257
- else {
258
- setreloadString(reloadResponse.reloadString);
259
- seterrors({});
260
- refresh();
261
- }
262
- setmigrations(reloadResponse.migrations);
263
- await scanFiles();
264
- }
265
- }
266
- function setLanguage(file, newLanguage) {
267
- if (opened[file]) {
268
- opened[file].language = newLanguage;
269
- setopened(opened);
270
- refresh();
271
- }
272
- }
273
- function hasFileContentChanged(filePath) {
274
- if (!opened[filePath]) {
275
- return false;
276
- }
277
- return changed[filePath] !== opened[filePath].content;
278
- }
279
- function isPanelVisible(panel) {
280
- switch (panel) {
281
- case "left":
282
- return leftPanelVisible === "1";
283
- case "bottom":
284
- return bottomPanelVisible === "1";
285
- case "right":
286
- return rightPanelVisible === "1";
287
- default:
288
- return true;
289
- }
290
- //return panelVisible[panel] || panelVisible[panel] === undefined ? true : false;
291
- }
292
- function togglePanel(panel) {
293
- console.log("togglePanel [%s]", panel);
294
- /*panelVisible[panel] = !isPanelVisible(panel);
295
- setpanelVisible(panelVisible);
296
- refresh();*/
297
- switch (panel) {
298
- case "left":
299
- return setLeftPanelVisible(isPanelVisible(panel) ? "0" : "1");
300
- case "bottom":
301
- return setBottomPanelVisible(isPanelVisible(panel) ? "0" : "1");
302
- case "right":
303
- return setRightPanelVisible(isPanelVisible(panel) ? "0" : "1");
304
- default:
305
- return;
306
- }
307
- }
308
- const openedFile = opened[String(current)];
309
- //console.log("Editor [%s]", openedFile?.filePath);
310
- return JSX.createElement("div", { class: "editor" },
311
- JSX.createElement("div", { class: `editor-firstrow${!isPanelVisible("bottom") ? " bottom-panel-hidden" : ""}` },
312
- JSX.createElement(NewFile, { migrations: migrations, services: services, open: newFileDialogShow, ondone: async (path) => {
313
- setnewFileDialogShow(false);
314
- if (path) {
315
- await scanFiles();
316
- //await reloadServer();
317
- }
318
- } }),
319
- JSX.createElement(FileBrowser, { disableLog: props.disablelog, disablePreview: props.disablepreview, disableReload: props.disablereload, togglePanel: togglePanel, isPanelVisible: isPanelVisible, opened: Object.keys(opened).sort().map(o => opened[o]), isDirCollapsed: isDirCollapsed, toggleCollapseDir: toggleCollapseDir, migrations: migrations, hasErrors: (file) => errors[file] ? true : false, reloadServer: reloadServer, closeAll: () => {
320
- const openedList = Object.keys(opened);
321
- for (const o of openedList) {
322
- closeFile(o);
323
- }
324
- }, closeFile: closeFile, current: current ? String(current) : "", files: files, filter: filter, hasFileContentChanged: hasFileContentChanged, isOpen: (file) => opened[file] !== undefined, openFile: openFile, saveAll: async () => {
325
- const openedList = Object.keys(opened);
326
- for (const o of openedList) {
327
- if (hasFileContentChanged(o)) {
328
- await saveFile(o);
329
- }
330
- }
331
- //await reloadServer();
332
- }, scanFiles: scanFiles, setfilter: setfilter, showNewFile: () => {
333
- setnewFileDialogShow(true);
334
- } }),
335
- JSX.createElement("div", { class: `file-editor-list${!isPanelVisible("left") ? " left-panel-hidden" : ""}${!isPanelVisible("bottom") ? " bottom-panel-hidden" : ""}` }, !openedFile ?
336
- JSX.createElement(StartPage, { disableLog: props.disablelog, disablePreview: props.disablepreview, disableReload: props.disablereload, isPanelVisible: isPanelVisible, togglePanel: togglePanel }) :
337
- JSX.createElement("div", { class: "file-editor-container" },
338
- JSX.createElement(FileEditor, { disableLog: props.disablelog, disablePreview: props.disablepreview, disableReload: props.disablereload, isPanelVisible: isPanelVisible, togglePanel: togglePanel, reloadString: reloadString, error: errors[openedFile.filePath]?.error, changed: hasFileContentChanged(openedFile.filePath), setlanguage: (newLanguage) => setLanguage(openedFile.filePath, newLanguage), deleteFile: async () => {
339
- await deleteFile(openedFile.filePath);
340
- //await reloadServer();
341
- }, renameFile: async (newName) => {
342
- await renameFile(openedFile.filePath, newName);
343
- //await reloadServer();
344
- }, saveFile: async (reload = false) => {
345
- await saveFile(openedFile.filePath);
346
- if (reload) {
347
- await reloadServer();
348
- }
349
- //
350
- }, content: changed[openedFile.filePath] !== null ? changed[openedFile.filePath] : opened[openedFile.filePath].content, current: current === openedFile.filePath, revertFile: () => {
351
- changed[openedFile.filePath] = openedFile.content;
352
- setchanged(changed);
353
- refresh();
354
- }, contentchange: (content) => {
355
- changed[openedFile.filePath] = content;
356
- setopened(opened);
357
- refresh();
358
- }, closeFile: () => {
359
- closeFile(openedFile.filePath);
360
- }, path: openedFile.filePath, previewPath: openedFile.previewPath, apiPreview: openedFile.apiPreview, language: opened[openedFile.filePath].language })))),
361
- JSX.createElement("div", { class: "editor-bottom-panel", style: `${!isPanelVisible("bottom") ? "display: none;" : ""}` },
362
- JSX.createElement(LogViewer, { socket: logSocket })));
363
- }
364
- Editor.asFragment = true;
365
- Editor.shadowInit = false;
@@ -1,37 +0,0 @@
1
- interface FileBrowserFile {
2
- filePath: string;
3
- fileName: string;
4
- language: string;
5
- content?: string;
6
- dirs: string[];
7
- }
8
- interface FileBrowserProps {
9
- filter: string;
10
- migrations: string[];
11
- current: string;
12
- isDirCollapsed: (dir: string) => boolean;
13
- toggleCollapseDir: (dir: string) => void;
14
- saveAll: () => void;
15
- isOpen: (file: string) => boolean;
16
- openFile: (file: string) => void;
17
- setfilter: (newFilter: any) => void;
18
- showNewFile: () => void;
19
- scanFiles: () => void;
20
- closeAll: () => void;
21
- closeFile: (file: string) => void;
22
- reloadServer: () => void;
23
- hasFileContentChanged: (file: string) => boolean;
24
- hasErrors: (file: string) => boolean;
25
- files: FileBrowserFile[];
26
- opened: {
27
- fileName: string;
28
- filePath: string;
29
- }[];
30
- isPanelVisible: (panel: string) => boolean;
31
- togglePanel: (panel: string) => void;
32
- disableLog?: boolean;
33
- disablePreview?: boolean;
34
- disableReload?: boolean;
35
- }
36
- export declare function FileBrowser(props: FileBrowserProps): JSX.Element;
37
- export {};
@@ -1,126 +0,0 @@
1
- export function FileBrowser(props) {
2
- return JSX.createElement("div", { class: "file-browser", style: `${!props.isPanelVisible("left") ? "display: none;" : ""}` },
3
- JSX.createElement("div", { class: "file-browser-toolbar" },
4
- JSX.createElement("div", { class: "row" },
5
- JSX.createElement("button", { class: "file-editor-button btn", style: `width: 10%;${props.disableReload ? "width: 30%;" : ""}`, onclick: ev => {
6
- ev.preventDefault();
7
- props.togglePanel("left");
8
- } }, "<<"),
9
- props.disableLog ? JSX.createElement(JSX.Fragment, null) :
10
- JSX.createElement("button", { id: "log-btn", class: "file-editor-button btn", style: `width: 30%;${props.disableLog ? "display: none;" : ""}`, onclick: ev => {
11
- ev.preventDefault();
12
- props.togglePanel("bottom");
13
- } }, "log"),
14
- props.disableReload ? JSX.createElement(JSX.Fragment, null) :
15
- JSX.createElement("button", { id: "scan-btn", class: "file-editor-button btn active", style: `width: 30%;${props.disableReload ? "display: none;" : ""}`, onclick: ev => {
16
- ev.preventDefault();
17
- props.scanFiles();
18
- } }, "scan"),
19
- props.disableReload ? JSX.createElement(JSX.Fragment, null) :
20
- JSX.createElement("button", { id: "reload-btn", class: "file-editor-button btn warning", style: `width: 30%;${props.disableReload ? "display: none;" : ""}`, onclick: ev => {
21
- ev.preventDefault();
22
- props.reloadServer();
23
- } }, "reload")),
24
- JSX.createElement("div", { class: "row" },
25
- JSX.createElement("input", { type: "text", style: "width: 100%;", value: props.filter, oninput: ev => {
26
- ev.preventDefault();
27
- const text = ev.target.value;
28
- props.setfilter(text);
29
- }, placeholder: "..filter.." })),
30
- JSX.createElement("div", { class: "row" },
31
- props.disablePreview ? JSX.createElement(JSX.Fragment, null) :
32
- JSX.createElement("button", { id: "preview-btn", class: "file-editor-button btn", style: `width: 30%;${props.disablePreview ? "display: none;" : ""}`, onclick: ev => {
33
- ev.preventDefault();
34
- props.togglePanel("right");
35
- } }, "preview"),
36
- JSX.createElement("button", { id: "new-btn", class: "file-editor-button btn info", style: "width: 20%;", onclick: ev => {
37
- ev.preventDefault();
38
- props.showNewFile();
39
- } }, "new"),
40
- props.disableReload ? JSX.createElement(JSX.Fragment, null) :
41
- JSX.createElement("button", { id: "scan-btn", class: "file-editor-button btn active", style: `width: 30%;${!props.disableReload ? "display: none;" : ""}`, onclick: ev => {
42
- ev.preventDefault();
43
- props.scanFiles();
44
- } }, "scan"),
45
- JSX.createElement("button", { id: "saveall-btn", class: "file-editor-button btn success", style: "width: 25%;", onclick: ev => {
46
- ev.preventDefault();
47
- props.saveAll();
48
- } }, "save"),
49
- JSX.createElement("button", { id: "closeall-btn", class: "file-editor-button btn danger", style: "width: 25%;", onclick: ev => {
50
- ev.preventDefault();
51
- props.closeAll();
52
- } }, "close"))),
53
- JSX.createElement("div", { class: "file-browser-files" },
54
- props.opened.length > 0 ? JSX.createElement("div", { class: "file-browser-opened-files", style: "padding: var(--file-browser-separation);" },
55
- JSX.createElement("ul", { style: "padding: 0; margin: 0;" }, props.opened.map(file => JSX.createElement(File, { closeFile: props.closeFile, current: props.current, fileName: file.fileName, filePath: file.filePath, hasErrors: props.hasErrors, hasFileContentChanged: props.hasFileContentChanged, isOpen: props.isOpen, openFile: props.openFile })))) : JSX.createElement(JSX.Fragment, null),
56
- JSX.createElement(FileTree, { isDirCollapsed: props.isDirCollapsed, toggleCollapseDir: props.toggleCollapseDir, closeFile: props.closeFile, current: props.current, files: props.files, filter: props.filter, hasErrors: props.hasErrors, hasFileContentChanged: props.hasFileContentChanged, isOpen: props.isOpen, openFile: props.openFile })));
57
- }
58
- function FileTree(props) {
59
- const ret = {
60
- dirs: {},
61
- files: [],
62
- name: "",
63
- fullName: ""
64
- };
65
- props.files.forEach((file) => {
66
- let cDir = ret;
67
- let fullName = "";
68
- for (const dir of file.dirs) {
69
- fullName += dir + "/";
70
- if (cDir.dirs[dir] === undefined) {
71
- const newDir = {
72
- dirs: {},
73
- files: [],
74
- name: dir,
75
- fullName: `${fullName}`
76
- };
77
- cDir.dirs[dir] = newDir;
78
- cDir = newDir;
79
- }
80
- else {
81
- cDir = cDir.dirs[dir];
82
- }
83
- }
84
- cDir.files.push(file);
85
- });
86
- //console.dir(ret);
87
- return JSX.createElement(FileTreeFolder, { ...props, tree: ret, level: 0 });
88
- }
89
- function FileTreeFolder(props) {
90
- //console.dir(props.tree);
91
- const dirs = Object.keys(props.tree.dirs).map(k => props.tree.dirs[k]);
92
- const files = props.tree.files.filter(file => props.filter ? file.filePath.includes(props.filter) : true);
93
- return JSX.createElement("ul", { style: `margin-left: calc(2 * var(--file-browser-separation-file));${props.level === 0 ? " padding: var(--file-browser-separation);" : ""}` },
94
- JSX.createElement(JSX.Fragment, null,
95
- props.tree.name !== "" ? JSX.createElement("div", { class: "file-browser-dir", style: "padding: 0;" },
96
- JSX.createElement("p", { style: "margin: 0;" },
97
- props.tree.name,
98
- "/"),
99
- JSX.createElement("button", { onclick: ev => {
100
- ev.preventDefault();
101
- ev.stopPropagation();
102
- props.toggleCollapseDir(props.tree.fullName);
103
- }, class: "btn-small", style: "margin: 0; margin-left: calc(2 * var(--file-browser-separation));" }, props.isDirCollapsed(props.tree.fullName) ? "+" : "-")) : JSX.createElement(JSX.Fragment, null),
104
- props.isDirCollapsed(props.tree.fullName) ? JSX.createElement(JSX.Fragment, null) :
105
- JSX.createElement(JSX.Fragment, null,
106
- dirs.map(dir => {
107
- return JSX.createElement(FileTreeFolder, { ...props, tree: dir, level: props.level + 1 });
108
- }),
109
- files.map(file => JSX.createElement(File, { closeFile: props.closeFile, current: props.current, fileName: file.fileName, filePath: file.filePath, hasErrors: props.hasErrors, hasFileContentChanged: props.hasFileContentChanged, isOpen: props.isOpen, openFile: props.openFile })))));
110
- }
111
- function File(props) {
112
- const isOpen = props.isOpen(props.filePath);
113
- return JSX.createElement("li", { class: `file-browser-file${props.hasErrors(props.filePath) ? " error" : ""}${props.hasFileContentChanged(props.filePath) ? " changed" : ""}${props.current === props.filePath ? " active" : ""}${isOpen ? " open" : ""}`, style: "display: flex; justify-content: flex-start; align-items: center; margin-left: calc(2 * var(--file-browser-separation-file));", onclick: ev => {
114
- ev.preventDefault();
115
- ev.stopPropagation();
116
- props.openFile(props.filePath);
117
- } },
118
- JSX.createElement("p", { style: "margin: 0; padding: 0;" },
119
- props.fileName,
120
- props.hasFileContentChanged(props.filePath) ? "(*)" : ""),
121
- JSX.createElement("button", { onclick: ev => {
122
- ev.preventDefault();
123
- ev.stopPropagation();
124
- props.closeFile(props.filePath);
125
- }, class: "btn-small", style: props.isOpen(props.filePath) ? "margin-left: calc(2 * var(--file-browser-separation-file));" : "display: none;", disabled: !props.isOpen(props.filePath) }, "X"));
126
- }
@@ -1,22 +0,0 @@
1
- interface FileEditorToolbar {
2
- path: string;
3
- language: string;
4
- changed: boolean;
5
- renameFile: (newName: string) => void;
6
- deleteFile: () => void;
7
- setlanguage: (newLang: string) => void;
8
- saveFile: (reload?: boolean) => void;
9
- revertFile: () => void;
10
- closeFile: () => void;
11
- togglePanel: (panel: string) => void;
12
- isPanelVisible: (panel: string) => boolean;
13
- disableLog?: boolean;
14
- disablePreview?: boolean;
15
- disableReload?: boolean;
16
- }
17
- export declare function FileEditorToolbar(props: FileEditorToolbar): JSX.Element;
18
- export declare namespace FileEditorToolbar {
19
- var asFragment: boolean;
20
- var shadowInit: boolean;
21
- }
22
- export {};
@@ -1,93 +0,0 @@
1
- import { SUPPORTED_LANGUAGES } from "../common/constants.js";
2
- export function FileEditorToolbar(props) {
3
- const renamingRef = jsx.useRef();
4
- const refresh = jsx.useRefresh();
5
- const [renaming, setrenaming] = jsx.useState(false);
6
- jsx.useEffect(() => {
7
- if (renamingRef.current) {
8
- renamingRef.current.value = props.path;
9
- renamingRef.current.focus();
10
- refresh();
11
- }
12
- }, [renamingRef.current]);
13
- jsx.useEffect(() => {
14
- setrenaming(false);
15
- }, [props.path]);
16
- return JSX.createElement("div", { class: "file-editor-toolbar" },
17
- JSX.createElement("div", { class: "file-editor-toolbar-row" },
18
- JSX.createElement("button", { class: "file-editor-button btn", style: `${props.isPanelVisible("left") ? "display: none;" : "margin-right: var(--file-browser-separation);"}`, onclick: ev => {
19
- ev.preventDefault();
20
- props.togglePanel("left");
21
- } }, ">>"),
22
- JSX.createElement("button", { id: "save-btn", disabled: !props.changed, class: `btn success`, onclick: ev => {
23
- ev.preventDefault();
24
- props.saveFile();
25
- } }, "save"),
26
- props.disableReload ? JSX.createElement(JSX.Fragment, null) : JSX.createElement("button", { id: "savereload-btn", disabled: !props.changed, class: `btn info`, style: "margin-left: var(--file-browser-separation);", onclick: ev => {
27
- ev.preventDefault();
28
- props.saveFile(true);
29
- } }, "save/reload"),
30
- JSX.createElement("button", { id: "revert-btn", disabled: !props.changed, style: "margin-left: var(--file-browser-separation);", class: `btn warning`, onclick: ev => {
31
- ev.preventDefault();
32
- props.revertFile();
33
- } }, "revert"),
34
- JSX.createElement("button", { id: "close-btn", class: `btn danger`, style: "margin-left: var(--file-browser-separation);", onclick: ev => {
35
- ev.preventDefault();
36
- props.closeFile();
37
- } }, "close"),
38
- SUPPORTED_LANGUAGES.includes(props.language) ?
39
- JSX.createElement("select", { value: props.language, oninput: ev => {
40
- ev.preventDefault();
41
- props.setlanguage(ev.target.value);
42
- }, style: "margin: 0; padding: 0; margin-left: calc(2*var(--file-browser-separation-file));" }, SUPPORTED_LANGUAGES.map(language => JSX.createElement("option", { value: language }, language))) : JSX.createElement(JSX.Fragment, null)),
43
- JSX.createElement("div", { class: "file-editor-toolbar-row" }, !renaming ?
44
- JSX.createElement(JSX.Fragment, null,
45
- JSX.createElement("p", { style: "margin-left:20px;", onclick: ev => {
46
- ev.preventDefault();
47
- setrenaming(true);
48
- } }, props.path)) :
49
- JSX.createElement(JSX.Fragment, null,
50
- JSX.createElement("form", { style: "width: 100%; height: 100%; margin-right: calc(2 * var(--file-browser-separation));", onsubmit: ev => {
51
- ev.preventDefault();
52
- setrenaming(false);
53
- if (renamingRef.current && renamingRef.current.value !== props.path) {
54
- setrenaming(false);
55
- props.renameFile(renamingRef.current.value);
56
- }
57
- } },
58
- JSX.createElement("input", { style: "width: 100%; height: 100%;", onfocusout: ev => {
59
- ev.preventDefault();
60
- //setrenaming(false);
61
- }, ref: renamingRef, onkeydown: (ev) => {
62
- if (ev.keyCode === 27) {
63
- // catch esc
64
- ev.preventDefault();
65
- setrenaming(false);
66
- }
67
- else {
68
- refresh();
69
- }
70
- }, type: "text" })),
71
- renamingRef.current && renamingRef.current.value !== props.path && renamingRef.current.value !== "" ?
72
- JSX.createElement("button", { style: "margin-left: var(--file-browser-separation);", class: "btn info", onclick: ev => {
73
- ev.preventDefault();
74
- if (renamingRef.current) {
75
- setrenaming(false);
76
- props.renameFile(renamingRef.current.value);
77
- }
78
- } }, "rename file")
79
- : JSX.createElement(JSX.Fragment, null),
80
- JSX.createElement("button", { style: "margin-left: var(--file-browser-separation);", class: "btn danger", onclick: ev => {
81
- ev.preventDefault();
82
- if (renamingRef.current) {
83
- setrenaming(false);
84
- props.deleteFile();
85
- }
86
- } }, "delete file"),
87
- JSX.createElement("button", { style: "margin-left: var(--file-browser-separation);", class: "btn", onclick: ev => {
88
- ev.preventDefault();
89
- setrenaming(false);
90
- } }, "cancel"))));
91
- }
92
- FileEditorToolbar.asFragment = true;
93
- FileEditorToolbar.shadowInit = false;