clickgo 3.16.26 → 3.16.28

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 (102) hide show
  1. package/README.md +1 -1
  2. package/dist/app/demo/app.js +4 -16
  3. package/dist/app/demo/config.json +4 -1
  4. package/dist/app/demo/form/control/arteditor/arteditor.js +7 -18
  5. package/dist/app/demo/form/control/button/button.js +2 -13
  6. package/dist/app/demo/form/control/check/check.js +3 -14
  7. package/dist/app/demo/form/control/content/content.js +3 -14
  8. package/dist/app/demo/form/control/daterange/daterange.js +1 -1
  9. package/dist/app/demo/form/control/delete/delete.js +3 -14
  10. package/dist/app/demo/form/control/dialog/dialog.js +2 -0
  11. package/dist/app/demo/form/control/dialog/dialog.xml +26 -12
  12. package/dist/app/demo/form/control/flow/flow.js +2 -13
  13. package/dist/app/demo/form/control/form/form.js +4 -15
  14. package/dist/app/demo/form/control/iconview/iconview.js +12 -29
  15. package/dist/app/demo/form/control/jodit/jodit.js +7 -18
  16. package/dist/app/demo/form/control/link/link.js +2 -13
  17. package/dist/app/demo/form/control/list/list.js +40 -52
  18. package/dist/app/demo/form/control/list/list.xml +20 -10
  19. package/dist/app/demo/form/control/map/map.js +17 -28
  20. package/dist/app/demo/form/control/menu/menu.js +6 -17
  21. package/dist/app/demo/form/control/mpegts/mpegts.js +1 -1
  22. package/dist/app/demo/form/control/nav/nav.js +6 -17
  23. package/dist/app/demo/form/control/novnc/novnc.js +75 -0
  24. package/dist/app/demo/form/control/novnc/novnc.xml +13 -0
  25. package/dist/app/demo/form/control/panel/panel.js +9 -20
  26. package/dist/app/demo/form/control/panel/test1.js +20 -41
  27. package/dist/app/demo/form/control/pdf/pdf.js +7 -20
  28. package/dist/app/demo/form/control/progress/progress.js +3 -12
  29. package/dist/app/demo/form/control/radio/radio.js +6 -17
  30. package/dist/app/demo/form/control/select/select.js +28 -41
  31. package/dist/app/demo/form/control/switch/switch.js +3 -14
  32. package/dist/app/demo/form/control/tab/tab.js +7 -18
  33. package/dist/app/demo/form/control/table/table.js +8 -23
  34. package/dist/app/demo/form/control/text/text.js +2 -13
  35. package/dist/app/demo/form/control/tuieditor/tuieditor.js +7 -18
  36. package/dist/app/demo/form/control/uploader/uploader.js +20 -31
  37. package/dist/app/demo/form/control/vflow/vflow.js +2 -13
  38. package/dist/app/demo/form/event/form/form.js +11 -22
  39. package/dist/app/demo/form/event/task/task.js +14 -29
  40. package/dist/app/demo/form/main.js +381 -387
  41. package/dist/app/demo/form/main.xml +3 -0
  42. package/dist/app/demo/form/method/acontrol/acontrol.js +2 -13
  43. package/dist/app/demo/form/method/aform/aform.js +41 -60
  44. package/dist/app/demo/form/method/aform/sd.js +3 -14
  45. package/dist/app/demo/form/method/core/core.js +25 -50
  46. package/dist/app/demo/form/method/dom/dom.js +35 -58
  47. package/dist/app/demo/form/method/form/form.js +106 -149
  48. package/dist/app/demo/form/method/fs/fs.js +126 -147
  49. package/dist/app/demo/form/method/native/native.js +44 -72
  50. package/dist/app/demo/form/method/storage/storage.js +9 -27
  51. package/dist/app/demo/form/method/system/system.js +16 -41
  52. package/dist/app/demo/form/method/task/task.js +18 -37
  53. package/dist/app/demo/form/method/theme/theme.js +39 -54
  54. package/dist/app/demo/form/method/tool/tool.js +22 -43
  55. package/dist/app/demo/form/method/tool/tool.xml +1 -1
  56. package/dist/app/demo/form/method/zip/zip.js +18 -29
  57. package/dist/app/demo/form/solution/backpanel/backpanel.js +10 -23
  58. package/dist/app/task/app.js +2 -13
  59. package/dist/app/task/form/bar/bar.js +32 -45
  60. package/dist/clickgo.js +1 -1
  61. package/dist/control/arteditor.cgc +0 -0
  62. package/dist/control/box.cgc +0 -0
  63. package/dist/control/captcha.cgc +0 -0
  64. package/dist/control/common.cgc +0 -0
  65. package/dist/control/desc.cgc +0 -0
  66. package/dist/control/drawer.cgc +0 -0
  67. package/dist/control/echarts.cgc +0 -0
  68. package/dist/control/form.cgc +0 -0
  69. package/dist/control/iconview.cgc +0 -0
  70. package/dist/control/jodit.cgc +0 -0
  71. package/dist/control/map.cgc +0 -0
  72. package/dist/control/monaco.cgc +0 -0
  73. package/dist/control/mpegts.cgc +0 -0
  74. package/dist/control/nav.cgc +0 -0
  75. package/dist/control/novnc.cgc +0 -0
  76. package/dist/control/page.cgc +0 -0
  77. package/dist/control/pdf.cgc +0 -0
  78. package/dist/control/property.cgc +0 -0
  79. package/dist/control/qrcode.cgc +0 -0
  80. package/dist/control/table.cgc +0 -0
  81. package/dist/control/task.cgc +0 -0
  82. package/dist/control/tplink.cgc +0 -0
  83. package/dist/control/tuieditor.cgc +0 -0
  84. package/dist/control/tuiviewer.cgc +0 -0
  85. package/dist/control/xterm.cgc +0 -0
  86. package/dist/index.js +59 -71
  87. package/dist/lib/control.js +213 -235
  88. package/dist/lib/core.js +356 -379
  89. package/dist/lib/dom.js +62 -91
  90. package/dist/lib/form.js +834 -906
  91. package/dist/lib/fs.js +834 -892
  92. package/dist/lib/native.js +32 -63
  93. package/dist/lib/storage.js +21 -33
  94. package/dist/lib/task.js +1054 -1098
  95. package/dist/lib/theme.js +102 -121
  96. package/dist/lib/tool.js +65 -98
  97. package/dist/lib/zip.js +27 -42
  98. package/dist/theme/blue.cgt +0 -0
  99. package/dist/theme/byterun.cgt +0 -0
  100. package/dist/theme/dark.cgt +0 -0
  101. package/dist/theme/light.cgt +0 -0
  102. package/package.json +1 -1
package/dist/lib/fs.js CHANGED
@@ -32,15 +32,6 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
35
  Object.defineProperty(exports, "__esModule", { value: true });
45
36
  exports.mount = mount;
46
37
  exports.unmount = unmount;
@@ -65,7 +56,7 @@ const task = __importStar(require("./task"));
65
56
  const form = __importStar(require("./form"));
66
57
  const core = __importStar(require("./core"));
67
58
  const native = __importStar(require("./native"));
68
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout2/', '/app/demo/form/control/alayout2/alayout2.js', '/app/demo/form/control/alayout2/alayout2.xml', '/app/demo/form/control/alert/', '/app/demo/form/control/alert/alert.js', '/app/demo/form/control/alert/alert.xml', '/app/demo/form/control/arteditor/', '/app/demo/form/control/arteditor/arteditor.js', '/app/demo/form/control/arteditor/arteditor.xml', '/app/demo/form/control/arteditor/img.js', '/app/demo/form/control/arteditor/img.xml', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/box/', '/app/demo/form/control/box/box.js', '/app/demo/form/control/box/box.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/calendar/', '/app/demo/form/control/calendar/calendar.js', '/app/demo/form/control/calendar/calendar.xml', '/app/demo/form/control/captcha/', '/app/demo/form/control/captcha/captcha.js', '/app/demo/form/control/captcha/captcha.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/circle/', '/app/demo/form/control/circle/circle.xml', '/app/demo/form/control/content/', '/app/demo/form/control/content/content.js', '/app/demo/form/control/content/content.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.xml', '/app/demo/form/control/datepanel/', '/app/demo/form/control/datepanel/datepanel.js', '/app/demo/form/control/datepanel/datepanel.xml', '/app/demo/form/control/daterange/', '/app/demo/form/control/daterange/daterange.js', '/app/demo/form/control/daterange/daterange.xml', '/app/demo/form/control/delete/', '/app/demo/form/control/delete/delete.js', '/app/demo/form/control/delete/delete.xml', '/app/demo/form/control/desc/', '/app/demo/form/control/desc/desc.js', '/app/demo/form/control/desc/desc.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/drawer/', '/app/demo/form/control/drawer/drawer.js', '/app/demo/form/control/drawer/drawer.xml', '/app/demo/form/control/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.xml', '/app/demo/form/control/empty/', '/app/demo/form/control/empty/empty.js', '/app/demo/form/control/empty/empty.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/grid/', '/app/demo/form/control/grid/grid.js', '/app/demo/form/control/grid/grid.xml', '/app/demo/form/control/group/', '/app/demo/form/control/group/group.js', '/app/demo/form/control/group/group.xml', '/app/demo/form/control/hske/', '/app/demo/form/control/hske/hske.js', '/app/demo/form/control/hske/hske.xml', '/app/demo/form/control/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.xml', '/app/demo/form/control/icon/', '/app/demo/form/control/icon/icon.xml', '/app/demo/form/control/iconview/', '/app/demo/form/control/iconview/iconview.js', '/app/demo/form/control/iconview/iconview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/imgviewer/', '/app/demo/form/control/imgviewer/imgviewer.js', '/app/demo/form/control/imgviewer/imgviewer.xml', '/app/demo/form/control/jodit/', '/app/demo/form/control/jodit/jodit.js', '/app/demo/form/control/jodit/jodit.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.js', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/layout/', '/app/demo/form/control/layout/layout.js', '/app/demo/form/control/layout/layout.xml', '/app/demo/form/control/link/', '/app/demo/form/control/link/link.js', '/app/demo/form/control/link/link.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/map/', '/app/demo/form/control/map/map.js', '/app/demo/form/control/map/map.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/mpegts/', '/app/demo/form/control/mpegts/mpegts.js', '/app/demo/form/control/mpegts/mpegts.xml', '/app/demo/form/control/nav/', '/app/demo/form/control/nav/nav.js', '/app/demo/form/control/nav/nav.xml', '/app/demo/form/control/page/', '/app/demo/form/control/page/page.js', '/app/demo/form/control/page/page.xml', '/app/demo/form/control/palette/', '/app/demo/form/control/palette/palette.js', '/app/demo/form/control/palette/palette.xml', '/app/demo/form/control/panel/', '/app/demo/form/control/panel/panel.js', '/app/demo/form/control/panel/panel.xml', '/app/demo/form/control/panel/test1.js', '/app/demo/form/control/panel/test1.xml', '/app/demo/form/control/panel/test2.xml', '/app/demo/form/control/pdf/', '/app/demo/form/control/pdf/pdf.js', '/app/demo/form/control/pdf/pdf.xml', '/app/demo/form/control/pdf/test.pdf', '/app/demo/form/control/progress/', '/app/demo/form/control/progress/progress.js', '/app/demo/form/control/progress/progress.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/qrcode/', '/app/demo/form/control/qrcode/qrcode.js', '/app/demo/form/control/qrcode/qrcode.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/setting/', '/app/demo/form/control/setting/setting.xml', '/app/demo/form/control/sgroup/', '/app/demo/form/control/sgroup/sgroup.xml', '/app/demo/form/control/step/', '/app/demo/form/control/step/step.js', '/app/demo/form/control/step/step.xml', '/app/demo/form/control/svg/', '/app/demo/form/control/svg/svg.js', '/app/demo/form/control/svg/svg.xml', '/app/demo/form/control/switch/', '/app/demo/form/control/switch/switch.js', '/app/demo/form/control/switch/switch.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/table/', '/app/demo/form/control/table/table.js', '/app/demo/form/control/table/table.xml', '/app/demo/form/control/tag/', '/app/demo/form/control/tag/tag.js', '/app/demo/form/control/tag/tag.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/timeline/', '/app/demo/form/control/timeline/timeline.js', '/app/demo/form/control/timeline/timeline.xml', '/app/demo/form/control/tip/', '/app/demo/form/control/tip/tip.js', '/app/demo/form/control/tip/tip.xml', '/app/demo/form/control/tplink/', '/app/demo/form/control/tplink/tplink.js', '/app/demo/form/control/tplink/tplink.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.xml', '/app/demo/form/control/tuiviewer/', '/app/demo/form/control/tuiviewer/tuiviewer.js', '/app/demo/form/control/tuiviewer/tuiviewer.xml', '/app/demo/form/control/uploader/', '/app/demo/form/control/uploader/uploader.js', '/app/demo/form/control/uploader/uploader.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/control/video/', '/app/demo/form/control/video/video.js', '/app/demo/form/control/video/video.xml', '/app/demo/form/control/web/', '/app/demo/form/control/web/web.js', '/app/demo/form/control/web/web.xml', '/app/demo/form/control/xterm/', '/app/demo/form/control/xterm/xterm.js', '/app/demo/form/control/xterm/xterm.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/other/', '/app/demo/form/event/other/other.js', '/app/demo/form/event/other/other.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/acontrol/', '/app/demo/form/method/acontrol/acontrol.js', '/app/demo/form/method/acontrol/acontrol.xml', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/sd.js', '/app/demo/form/method/aform/sd.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/form/test.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/storage/', '/app/demo/form/method/storage/storage.js', '/app/demo/form/method/storage/storage.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/form/solution/', '/app/demo/form/solution/backpanel/', '/app/demo/form/solution/backpanel/backpanel.js', '/app/demo/form/solution/backpanel/backpanel.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/custombtn.cgc', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/marker.svg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/video.mp4', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.d.ts', '/clickgo.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/captcha.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/drawer.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/iconview.cgc', '/control/jodit.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/mpegts.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/pdf.cgc', '/control/property.cgc', '/control/qrcode.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tplink.cgc', '/control/tuieditor.cgc', '/control/tuiviewer.cgc', '/control/web.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/ext/tplinkhd.min.js', '/global.css', '/icon.png', '/index.d.ts', '/index.js', '/index.ts', '/lib/', '/lib/control.d.ts', '/lib/control.js', '/lib/control.ts', '/lib/core.d.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.d.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.d.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.d.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.d.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.d.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.d.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.d.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.d.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.d.ts', '/lib/zip.js', '/lib/zip.ts', '/notosans-regular.ttf', '/theme/', '/theme/blue.cgt', '/theme/byterun.cgt', '/theme/dark.cgt', '/theme/light.cgt'];
59
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout2/', '/app/demo/form/control/alayout2/alayout2.js', '/app/demo/form/control/alayout2/alayout2.xml', '/app/demo/form/control/alert/', '/app/demo/form/control/alert/alert.js', '/app/demo/form/control/alert/alert.xml', '/app/demo/form/control/arteditor/', '/app/demo/form/control/arteditor/arteditor.js', '/app/demo/form/control/arteditor/arteditor.xml', '/app/demo/form/control/arteditor/img.js', '/app/demo/form/control/arteditor/img.xml', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/box/', '/app/demo/form/control/box/box.js', '/app/demo/form/control/box/box.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/calendar/', '/app/demo/form/control/calendar/calendar.js', '/app/demo/form/control/calendar/calendar.xml', '/app/demo/form/control/captcha/', '/app/demo/form/control/captcha/captcha.js', '/app/demo/form/control/captcha/captcha.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/circle/', '/app/demo/form/control/circle/circle.xml', '/app/demo/form/control/content/', '/app/demo/form/control/content/content.js', '/app/demo/form/control/content/content.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.xml', '/app/demo/form/control/datepanel/', '/app/demo/form/control/datepanel/datepanel.js', '/app/demo/form/control/datepanel/datepanel.xml', '/app/demo/form/control/daterange/', '/app/demo/form/control/daterange/daterange.js', '/app/demo/form/control/daterange/daterange.xml', '/app/demo/form/control/delete/', '/app/demo/form/control/delete/delete.js', '/app/demo/form/control/delete/delete.xml', '/app/demo/form/control/desc/', '/app/demo/form/control/desc/desc.js', '/app/demo/form/control/desc/desc.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/drawer/', '/app/demo/form/control/drawer/drawer.js', '/app/demo/form/control/drawer/drawer.xml', '/app/demo/form/control/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.xml', '/app/demo/form/control/empty/', '/app/demo/form/control/empty/empty.js', '/app/demo/form/control/empty/empty.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/grid/', '/app/demo/form/control/grid/grid.js', '/app/demo/form/control/grid/grid.xml', '/app/demo/form/control/group/', '/app/demo/form/control/group/group.js', '/app/demo/form/control/group/group.xml', '/app/demo/form/control/hske/', '/app/demo/form/control/hske/hske.js', '/app/demo/form/control/hske/hske.xml', '/app/demo/form/control/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.xml', '/app/demo/form/control/icon/', '/app/demo/form/control/icon/icon.xml', '/app/demo/form/control/iconview/', '/app/demo/form/control/iconview/iconview.js', '/app/demo/form/control/iconview/iconview.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/imgviewer/', '/app/demo/form/control/imgviewer/imgviewer.js', '/app/demo/form/control/imgviewer/imgviewer.xml', '/app/demo/form/control/jodit/', '/app/demo/form/control/jodit/jodit.js', '/app/demo/form/control/jodit/jodit.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.js', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/layout/', '/app/demo/form/control/layout/layout.js', '/app/demo/form/control/layout/layout.xml', '/app/demo/form/control/link/', '/app/demo/form/control/link/link.js', '/app/demo/form/control/link/link.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/map/', '/app/demo/form/control/map/map.js', '/app/demo/form/control/map/map.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/mpegts/', '/app/demo/form/control/mpegts/mpegts.js', '/app/demo/form/control/mpegts/mpegts.xml', '/app/demo/form/control/nav/', '/app/demo/form/control/nav/nav.js', '/app/demo/form/control/nav/nav.xml', '/app/demo/form/control/novnc/', '/app/demo/form/control/novnc/novnc.js', '/app/demo/form/control/novnc/novnc.xml', '/app/demo/form/control/page/', '/app/demo/form/control/page/page.js', '/app/demo/form/control/page/page.xml', '/app/demo/form/control/palette/', '/app/demo/form/control/palette/palette.js', '/app/demo/form/control/palette/palette.xml', '/app/demo/form/control/panel/', '/app/demo/form/control/panel/panel.js', '/app/demo/form/control/panel/panel.xml', '/app/demo/form/control/panel/test1.js', '/app/demo/form/control/panel/test1.xml', '/app/demo/form/control/panel/test2.xml', '/app/demo/form/control/pdf/', '/app/demo/form/control/pdf/pdf.js', '/app/demo/form/control/pdf/pdf.xml', '/app/demo/form/control/pdf/test.pdf', '/app/demo/form/control/progress/', '/app/demo/form/control/progress/progress.js', '/app/demo/form/control/progress/progress.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/qrcode/', '/app/demo/form/control/qrcode/qrcode.js', '/app/demo/form/control/qrcode/qrcode.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/setting/', '/app/demo/form/control/setting/setting.xml', '/app/demo/form/control/sgroup/', '/app/demo/form/control/sgroup/sgroup.xml', '/app/demo/form/control/step/', '/app/demo/form/control/step/step.js', '/app/demo/form/control/step/step.xml', '/app/demo/form/control/svg/', '/app/demo/form/control/svg/svg.js', '/app/demo/form/control/svg/svg.xml', '/app/demo/form/control/switch/', '/app/demo/form/control/switch/switch.js', '/app/demo/form/control/switch/switch.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/table/', '/app/demo/form/control/table/table.js', '/app/demo/form/control/table/table.xml', '/app/demo/form/control/tag/', '/app/demo/form/control/tag/tag.js', '/app/demo/form/control/tag/tag.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/timeline/', '/app/demo/form/control/timeline/timeline.js', '/app/demo/form/control/timeline/timeline.xml', '/app/demo/form/control/tip/', '/app/demo/form/control/tip/tip.js', '/app/demo/form/control/tip/tip.xml', '/app/demo/form/control/tplink/', '/app/demo/form/control/tplink/tplink.js', '/app/demo/form/control/tplink/tplink.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.xml', '/app/demo/form/control/tuiviewer/', '/app/demo/form/control/tuiviewer/tuiviewer.js', '/app/demo/form/control/tuiviewer/tuiviewer.xml', '/app/demo/form/control/uploader/', '/app/demo/form/control/uploader/uploader.js', '/app/demo/form/control/uploader/uploader.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/control/video/', '/app/demo/form/control/video/video.js', '/app/demo/form/control/video/video.xml', '/app/demo/form/control/web/', '/app/demo/form/control/web/web.js', '/app/demo/form/control/web/web.xml', '/app/demo/form/control/xterm/', '/app/demo/form/control/xterm/xterm.js', '/app/demo/form/control/xterm/xterm.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/other/', '/app/demo/form/event/other/other.js', '/app/demo/form/event/other/other.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/acontrol/', '/app/demo/form/method/acontrol/acontrol.js', '/app/demo/form/method/acontrol/acontrol.xml', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/sd.js', '/app/demo/form/method/aform/sd.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/form/test.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/storage/', '/app/demo/form/method/storage/storage.js', '/app/demo/form/method/storage/storage.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/form/solution/', '/app/demo/form/solution/backpanel/', '/app/demo/form/solution/backpanel/backpanel.js', '/app/demo/form/solution/backpanel/backpanel.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/custombtn.cgc', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/marker.svg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/video.mp4', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.d.ts', '/clickgo.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/captcha.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/drawer.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/iconview.cgc', '/control/jodit.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/mpegts.cgc', '/control/nav.cgc', '/control/novnc.cgc', '/control/page.cgc', '/control/pdf.cgc', '/control/property.cgc', '/control/qrcode.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tplink.cgc', '/control/tuieditor.cgc', '/control/tuiviewer.cgc', '/control/web.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/ext/tplinkhd.min.js', '/global.css', '/icon.png', '/index.d.ts', '/index.js', '/index.ts', '/lib/', '/lib/control.d.ts', '/lib/control.js', '/lib/control.ts', '/lib/core.d.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.d.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.d.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.d.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.d.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.d.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.d.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.d.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.d.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.d.ts', '/lib/zip.js', '/lib/zip.ts', '/notosans-regular.ttf', '/theme/', '/theme/blue.cgt', '/theme/byterun.cgt', '/theme/dark.cgt', '/theme/light.cgt'];
69
60
  const localeData = {
70
61
  'en': {
71
62
  'apply-unmount': 'Are you sure to unmount the "?" mount point?',
@@ -129,393 +120,467 @@ function mount(name, handler, taskId) {
129
120
  mounts[name] = handler;
130
121
  return true;
131
122
  }
132
- function unmount(name) {
133
- return __awaiter(this, void 0, void 0, function* () {
134
- var _a, _b;
135
- if (!mounts[name]) {
136
- return true;
137
- }
138
- const loc = (_b = (_a = localeData[core.config.locale]) === null || _a === void 0 ? void 0 : _a['apply-unmount']) !== null && _b !== void 0 ? _b : localeData['en']['apply-unmount'];
139
- if (!(yield form.superConfirm(loc.replace('?', '/mount/' + tool.escapeHTML(name) + '/')))) {
140
- return false;
141
- }
142
- delete mounts[name];
123
+ async function unmount(name) {
124
+ if (!mounts[name]) {
143
125
  return true;
144
- });
126
+ }
127
+ const loc = localeData[core.config.locale]?.['apply-unmount'] ?? localeData['en']['apply-unmount'];
128
+ if (!await form.superConfirm(loc.replace('?', '/mount/' + tool.escapeHTML(name) + '/'))) {
129
+ return false;
130
+ }
131
+ delete mounts[name];
132
+ return true;
145
133
  }
146
- function getContent(path, options, taskId) {
147
- return __awaiter(this, void 0, void 0, function* () {
148
- var _a, _b, _c;
149
- path = tool.urlResolve('/', path);
150
- const fpath = path.slice(8);
151
- if (typeof options === 'string') {
152
- options = {
153
- 'encoding': options
154
- };
155
- }
156
- else {
157
- options !== null && options !== void 0 ? options : (options = {});
158
- }
159
- const encoding = options.encoding;
160
- const start = options.start;
161
- const end = options.end;
162
- if (path.startsWith('/clickgo/') || path.startsWith('http:') || path.startsWith('https:') || path.startsWith('file:')) {
163
- let ourl = '';
164
- if (path.startsWith('/clickgo/')) {
165
- if (!clickgoFiles.includes(fpath)) {
166
- return null;
167
- }
168
- ourl = tool.urlResolve(__dirname, './').slice(0, -1) + fpath;
169
- }
170
- else {
171
- ourl = path;
172
- }
173
- try {
174
- const rand = '?' + ((_a = options.cache) !== null && _a !== void 0 ? _a : Math.random().toString());
175
- let blob = null;
176
- const headers = {};
177
- if (start !== null && start !== void 0 ? start : end) {
178
- headers['range'] = `bytes=${start !== null && start !== void 0 ? start : '0'}-${end !== null && end !== void 0 ? end : ''}`;
179
- }
180
- if (options.progress) {
181
- blob = yield tool.request(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
182
- 'headers': headers,
183
- 'progress': options.progress,
184
- 'responseType': 'blob'
185
- });
186
- }
187
- else {
188
- blob = yield (yield fetch(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
189
- 'headers': headers
190
- })).blob();
191
- }
192
- if (!blob) {
193
- return null;
194
- }
195
- if (!encoding) {
196
- return blob;
197
- }
198
- return yield new Promise(function (resolve) {
199
- const fr = new FileReader();
200
- fr.addEventListener('load', function () {
201
- resolve(fr.result);
202
- });
203
- fr.readAsText(blob, encoding);
204
- });
205
- }
206
- catch (_d) {
134
+ async function getContent(path, options, taskId) {
135
+ path = tool.urlResolve('/', path);
136
+ const fpath = path.slice(8);
137
+ if (typeof options === 'string') {
138
+ options = {
139
+ 'encoding': options
140
+ };
141
+ }
142
+ else {
143
+ options ??= {};
144
+ }
145
+ const encoding = options.encoding;
146
+ const start = options.start;
147
+ const end = options.end;
148
+ if (path.startsWith('/clickgo/') || path.startsWith('http:') || path.startsWith('https:') || path.startsWith('file:')) {
149
+ let ourl = '';
150
+ if (path.startsWith('/clickgo/')) {
151
+ if (!clickgoFiles.includes(fpath)) {
207
152
  return null;
208
153
  }
154
+ ourl = tool.urlResolve(__dirname, './').slice(0, -1) + fpath;
209
155
  }
210
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
211
- const r = yield task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
212
- if (!r[0]) {
213
- return null;
214
- }
215
- if (path.startsWith('/mounted/')) {
216
- const name = getMountName(path);
217
- const hanlder = mounts[name];
218
- if (!hanlder) {
219
- return null;
220
- }
221
- return (_c = (_b = hanlder.getContent) === null || _b === void 0 ? void 0 : _b.call(hanlder, path.slice(9 + name.length), options)) !== null && _c !== void 0 ? _c : null;
156
+ else {
157
+ ourl = path;
158
+ }
159
+ try {
160
+ const rand = '?' + (options.cache ?? Math.random().toString());
161
+ let blob = null;
162
+ const headers = {};
163
+ if (start ?? end) {
164
+ headers['range'] = `bytes=${start ?? '0'}-${end ?? ''}`;
222
165
  }
223
166
  if (options.progress) {
224
- delete options.progress;
225
- }
226
- const rtn = yield native.invoke('cg-fs-getContent', native.getToken(), fpath, options);
227
- if (!rtn) {
228
- return null;
229
- }
230
- if (typeof rtn === 'string') {
231
- return rtn;
232
- }
233
- return new Blob([rtn], {
234
- 'type': tool.getMimeByPath(path).mime
235
- });
236
- }
237
- else if (path.startsWith('/package/') || path.startsWith('/current/')) {
238
- if (!taskId) {
239
- return null;
167
+ blob = await tool.request(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
168
+ 'headers': headers,
169
+ 'progress': options.progress,
170
+ 'responseType': 'blob'
171
+ });
240
172
  }
241
- if (path.startsWith('/current/')) {
242
- return getContent(task.list[taskId].current + fpath, options, taskId);
173
+ else {
174
+ blob = await (await fetch(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
175
+ 'headers': headers
176
+ })).blob();
243
177
  }
244
- const file = task.list[taskId].app.files[fpath];
245
- if (!file) {
178
+ if (!blob) {
246
179
  return null;
247
180
  }
248
- if (typeof file === 'string') {
249
- return file;
250
- }
251
- if (!options.encoding) {
252
- if (start === undefined && end === undefined) {
253
- return file;
254
- }
255
- return file.slice(start, end, file.type);
181
+ if (!encoding) {
182
+ return blob;
256
183
  }
257
- const encoding = options.encoding;
258
- return new Promise(function (resolve) {
184
+ return await new Promise(function (resolve) {
259
185
  const fr = new FileReader();
260
186
  fr.addEventListener('load', function () {
261
187
  resolve(fr.result);
262
188
  });
263
- fr.readAsText(file, encoding);
189
+ fr.readAsText(blob, encoding);
264
190
  });
265
191
  }
266
- else {
192
+ catch {
267
193
  return null;
268
194
  }
269
- });
270
- }
271
- function putContent(path_1, data_1) {
272
- return __awaiter(this, arguments, void 0, function* (path, data, options = {}, taskId) {
273
- var _a, _b;
274
- path = tool.urlResolve('/', path);
275
- const fpath = path.slice(8);
276
- if (path.startsWith('/clickgo/')) {
277
- return false;
195
+ }
196
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
197
+ const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
198
+ if (!r[0]) {
199
+ return null;
278
200
  }
279
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
280
- const r = yield task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
281
- if (!r[0]) {
282
- return false;
283
- }
284
- if (path.startsWith('/mounted/')) {
285
- const name = getMountName(path);
286
- const hanlder = mounts[name];
287
- if (!hanlder) {
288
- return false;
289
- }
290
- return (_b = (_a = hanlder.putContent) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length), data, options)) !== null && _b !== void 0 ? _b : false;
291
- }
292
- let buf = undefined;
293
- if (data instanceof Blob) {
294
- buf = new Uint8Array(yield data.arrayBuffer());
201
+ if (path.startsWith('/mounted/')) {
202
+ const name = getMountName(path);
203
+ const hanlder = mounts[name];
204
+ if (!hanlder) {
205
+ return null;
295
206
  }
296
- return native.invoke('cg-fs-putContent', native.getToken(), fpath, buf !== null && buf !== void 0 ? buf : data, options);
207
+ return hanlder.getContent?.(path.slice(9 + name.length), options) ?? null;
297
208
  }
298
- else if (path.startsWith('/package/')) {
299
- return false;
209
+ if (options.progress) {
210
+ delete options.progress;
300
211
  }
301
- else if (path.startsWith('/current/')) {
302
- if (!taskId) {
303
- return false;
304
- }
305
- return putContent(task.list[taskId].current + fpath, data, options, taskId);
212
+ const rtn = await native.invoke('cg-fs-getContent', native.getToken(), fpath, options);
213
+ if (!rtn) {
214
+ return null;
306
215
  }
307
- else {
308
- return false;
216
+ if (typeof rtn === 'string') {
217
+ return rtn;
309
218
  }
310
- });
311
- }
312
- function readLink(path, encoding, taskId) {
313
- return __awaiter(this, void 0, void 0, function* () {
314
- var _a, _b;
315
- path = tool.urlResolve('/', path);
316
- const fpath = path.slice(8);
317
- if (path.startsWith('/clickgo/')) {
219
+ return new Blob([rtn], {
220
+ 'type': tool.getMimeByPath(path).mime
221
+ });
222
+ }
223
+ else if (path.startsWith('/package/') || path.startsWith('/current/')) {
224
+ if (!taskId) {
318
225
  return null;
319
226
  }
320
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
321
- const r = yield task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
322
- if (!r[0]) {
323
- return null;
324
- }
325
- if (path.startsWith('/mounted/')) {
326
- const name = getMountName(path);
327
- const hanlder = mounts[name];
328
- if (!hanlder) {
329
- return null;
330
- }
331
- return (_b = (_a = hanlder.readLink) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length), encoding)) !== null && _b !== void 0 ? _b : null;
332
- }
333
- return native.invoke('cg-fs-readLink', native.getToken(), fpath, encoding);
227
+ if (path.startsWith('/current/')) {
228
+ return getContent(task.list[taskId].current + fpath, options, taskId);
334
229
  }
335
- else if (path.startsWith('/package/')) {
230
+ const file = task.list[taskId].app.files[fpath];
231
+ if (!file) {
336
232
  return null;
337
233
  }
338
- else if (path.startsWith('/current/')) {
339
- if (!taskId) {
340
- return null;
341
- }
342
- return task.list[taskId].current;
234
+ if (typeof file === 'string') {
235
+ return file;
343
236
  }
344
- else {
345
- return null;
237
+ if (!options.encoding) {
238
+ if (start === undefined && end === undefined) {
239
+ return file;
240
+ }
241
+ return file.slice(start, end, file.type);
346
242
  }
347
- });
243
+ const encoding = options.encoding;
244
+ return new Promise(function (resolve) {
245
+ const fr = new FileReader();
246
+ fr.addEventListener('load', function () {
247
+ resolve(fr.result);
248
+ });
249
+ fr.readAsText(file, encoding);
250
+ });
251
+ }
252
+ else {
253
+ return null;
254
+ }
348
255
  }
349
- function symlink(filePath, linkPath, type, taskId) {
350
- return __awaiter(this, void 0, void 0, function* () {
351
- var _a, _b;
352
- filePath = tool.urlResolve('/', filePath);
353
- linkPath = tool.urlResolve('/', linkPath);
354
- if (filePath.startsWith('/clickgo/')) {
256
+ async function putContent(path, data, options = {}, taskId) {
257
+ path = tool.urlResolve('/', path);
258
+ const fpath = path.slice(8);
259
+ if (path.startsWith('/clickgo/')) {
260
+ return false;
261
+ }
262
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
263
+ const r = await task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
264
+ if (!r[0]) {
355
265
  return false;
356
266
  }
357
- else if (filePath.startsWith('/storage/') || filePath.startsWith('/mounted/')) {
358
- const r = yield task.checkPermission('fs.' + filePath + 'w', false, undefined, taskId);
359
- if (!r[0]) {
267
+ if (path.startsWith('/mounted/')) {
268
+ const name = getMountName(path);
269
+ const hanlder = mounts[name];
270
+ if (!hanlder) {
360
271
  return false;
361
272
  }
362
- if (filePath.startsWith('/mounted/')) {
363
- const fname = getMountName(filePath);
364
- const lname = getMountName(linkPath);
365
- if (fname !== lname) {
366
- return false;
367
- }
368
- const hanlder = mounts[fname];
369
- if (!hanlder) {
370
- return false;
371
- }
372
- return (_b = (_a = hanlder.symlink) === null || _a === void 0 ? void 0 : _a.call(hanlder, filePath.slice(9 + fname.length), linkPath.slice(9 + fname.length), type)) !== null && _b !== void 0 ? _b : false;
373
- }
374
- return native.invoke('cg-fs-symlink', native.getToken(), filePath.slice(8), linkPath.slice(8), type);
273
+ return hanlder.putContent?.(path.slice(9 + name.length), data, options) ?? false;
274
+ }
275
+ let buf = undefined;
276
+ if (data instanceof Blob) {
277
+ buf = new Uint8Array(await data.arrayBuffer());
375
278
  }
376
- else if (filePath.startsWith('/package/')) {
279
+ return native.invoke('cg-fs-putContent', native.getToken(), fpath, buf ?? data, options);
280
+ }
281
+ else if (path.startsWith('/package/')) {
282
+ return false;
283
+ }
284
+ else if (path.startsWith('/current/')) {
285
+ if (!taskId) {
377
286
  return false;
378
287
  }
379
- else if (filePath.startsWith('/current/')) {
380
- if (!taskId) {
381
- return false;
382
- }
383
- if (linkPath.startsWith('/current/')) {
384
- linkPath = task.list[taskId].current + linkPath.slice(8);
288
+ return putContent(task.list[taskId].current + fpath, data, options, taskId);
289
+ }
290
+ else {
291
+ return false;
292
+ }
293
+ }
294
+ async function readLink(path, encoding, taskId) {
295
+ path = tool.urlResolve('/', path);
296
+ const fpath = path.slice(8);
297
+ if (path.startsWith('/clickgo/')) {
298
+ return null;
299
+ }
300
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
301
+ const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
302
+ if (!r[0]) {
303
+ return null;
304
+ }
305
+ if (path.startsWith('/mounted/')) {
306
+ const name = getMountName(path);
307
+ const hanlder = mounts[name];
308
+ if (!hanlder) {
309
+ return null;
385
310
  }
386
- return symlink(task.list[taskId].current + filePath.slice(8), linkPath, type, taskId);
311
+ return hanlder.readLink?.(path.slice(9 + name.length), encoding) ?? null;
387
312
  }
388
- else {
389
- return false;
313
+ return native.invoke('cg-fs-readLink', native.getToken(), fpath, encoding);
314
+ }
315
+ else if (path.startsWith('/package/')) {
316
+ return null;
317
+ }
318
+ else if (path.startsWith('/current/')) {
319
+ if (!taskId) {
320
+ return null;
390
321
  }
391
- });
322
+ return task.list[taskId].current;
323
+ }
324
+ else {
325
+ return null;
326
+ }
392
327
  }
393
- function unlink(path, taskId) {
394
- return __awaiter(this, void 0, void 0, function* () {
395
- var _a, _b;
396
- path = tool.urlResolve('/', path);
397
- const fpath = path.slice(8);
398
- if (path.startsWith('/clickgo/')) {
328
+ async function symlink(filePath, linkPath, type, taskId) {
329
+ filePath = tool.urlResolve('/', filePath);
330
+ linkPath = tool.urlResolve('/', linkPath);
331
+ if (filePath.startsWith('/clickgo/')) {
332
+ return false;
333
+ }
334
+ else if (filePath.startsWith('/storage/') || filePath.startsWith('/mounted/')) {
335
+ const r = await task.checkPermission('fs.' + filePath + 'w', false, undefined, taskId);
336
+ if (!r[0]) {
399
337
  return false;
400
338
  }
401
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
402
- const r = yield task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
403
- if (!r[0]) {
339
+ if (filePath.startsWith('/mounted/')) {
340
+ const fname = getMountName(filePath);
341
+ const lname = getMountName(linkPath);
342
+ if (fname !== lname) {
404
343
  return false;
405
344
  }
406
- if (path.startsWith('/mounted/')) {
407
- const name = getMountName(path);
408
- const hanlder = mounts[name];
409
- if (!hanlder) {
410
- return false;
411
- }
412
- return (_b = (_a = hanlder.unlink) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length))) !== null && _b !== void 0 ? _b : false;
345
+ const hanlder = mounts[fname];
346
+ if (!hanlder) {
347
+ return false;
413
348
  }
414
- return native.invoke('cg-fs-unlink', native.getToken(), fpath);
349
+ return hanlder.symlink?.(filePath.slice(9 + fname.length), linkPath.slice(9 + fname.length), type) ?? false;
415
350
  }
416
- else if (path.startsWith('/package/')) {
351
+ return native.invoke('cg-fs-symlink', native.getToken(), filePath.slice(8), linkPath.slice(8), type);
352
+ }
353
+ else if (filePath.startsWith('/package/')) {
354
+ return false;
355
+ }
356
+ else if (filePath.startsWith('/current/')) {
357
+ if (!taskId) {
358
+ return false;
359
+ }
360
+ if (linkPath.startsWith('/current/')) {
361
+ linkPath = task.list[taskId].current + linkPath.slice(8);
362
+ }
363
+ return symlink(task.list[taskId].current + filePath.slice(8), linkPath, type, taskId);
364
+ }
365
+ else {
366
+ return false;
367
+ }
368
+ }
369
+ async function unlink(path, taskId) {
370
+ path = tool.urlResolve('/', path);
371
+ const fpath = path.slice(8);
372
+ if (path.startsWith('/clickgo/')) {
373
+ return false;
374
+ }
375
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
376
+ const r = await task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
377
+ if (!r[0]) {
417
378
  return false;
418
379
  }
419
- else if (path.startsWith('/current/')) {
420
- if (!taskId) {
380
+ if (path.startsWith('/mounted/')) {
381
+ const name = getMountName(path);
382
+ const hanlder = mounts[name];
383
+ if (!hanlder) {
421
384
  return false;
422
385
  }
423
- return unlink(task.list[taskId].current + fpath, taskId);
386
+ return hanlder.unlink?.(path.slice(9 + name.length)) ?? false;
424
387
  }
425
- else {
388
+ return native.invoke('cg-fs-unlink', native.getToken(), fpath);
389
+ }
390
+ else if (path.startsWith('/package/')) {
391
+ return false;
392
+ }
393
+ else if (path.startsWith('/current/')) {
394
+ if (!taskId) {
426
395
  return false;
427
396
  }
428
- });
397
+ return unlink(task.list[taskId].current + fpath, taskId);
398
+ }
399
+ else {
400
+ return false;
401
+ }
429
402
  }
430
- function getClickGoStats(path) {
431
- return __awaiter(this, void 0, void 0, function* () {
432
- if (path.endsWith('/')) {
433
- const date = new Date();
403
+ async function getClickGoStats(path) {
404
+ if (path.endsWith('/')) {
405
+ const date = new Date();
406
+ const ms = date.getTime();
407
+ return {
408
+ isFile: function () {
409
+ return false;
410
+ },
411
+ isDirectory: function () {
412
+ return true;
413
+ },
414
+ isSymbolicLink: function () {
415
+ return false;
416
+ },
417
+ 'size': 0,
418
+ 'blksize': 0,
419
+ 'atimeMs': ms,
420
+ 'mtimeMs': ms,
421
+ 'ctimeMs': ms,
422
+ 'birthtimeMs': ms,
423
+ 'atime': date,
424
+ 'mtime': date,
425
+ 'ctime': date,
426
+ 'birthtime': date
427
+ };
428
+ }
429
+ else {
430
+ try {
431
+ const res = await fetch(tool.urlResolve(__dirname, './').slice(0, -1) + path, {
432
+ 'headers': {
433
+ 'range': `bytes=0-1`
434
+ }
435
+ });
436
+ const hdate = res.headers.get('date');
437
+ const hmdate = res.headers.get('last-modified');
438
+ let hlength = res.headers.get('content-range');
439
+ if (hlength) {
440
+ const lio = hlength.lastIndexOf('/');
441
+ hlength = hlength.slice(lio + 1);
442
+ }
443
+ let date = new Date();
444
+ let mdate = date;
445
+ if (hdate) {
446
+ date = new Date(hdate);
447
+ }
448
+ if (hmdate) {
449
+ mdate = new Date(hmdate);
450
+ }
434
451
  const ms = date.getTime();
452
+ const mms = mdate.getTime();
435
453
  return {
436
454
  isFile: function () {
437
- return false;
455
+ return true;
438
456
  },
439
457
  isDirectory: function () {
440
- return true;
458
+ return false;
441
459
  },
442
460
  isSymbolicLink: function () {
443
461
  return false;
444
462
  },
445
- 'size': 0,
446
- 'blksize': 0,
463
+ 'size': hlength ? parseInt(hlength) : 0,
464
+ 'blksize': hlength ? parseInt(hlength) : 0,
447
465
  'atimeMs': ms,
448
- 'mtimeMs': ms,
449
- 'ctimeMs': ms,
466
+ 'mtimeMs': mms,
467
+ 'ctimeMs': mms,
450
468
  'birthtimeMs': ms,
451
469
  'atime': date,
452
- 'mtime': date,
453
- 'ctime': date,
470
+ 'mtime': mdate,
471
+ 'ctime': mdate,
454
472
  'birthtime': date
455
473
  };
456
474
  }
457
- else {
458
- try {
459
- const res = yield fetch(tool.urlResolve(__dirname, './').slice(0, -1) + path, {
460
- 'headers': {
461
- 'range': `bytes=0-1`
462
- }
463
- });
464
- const hdate = res.headers.get('date');
465
- const hmdate = res.headers.get('last-modified');
466
- let hlength = res.headers.get('content-range');
467
- if (hlength) {
468
- const lio = hlength.lastIndexOf('/');
469
- hlength = hlength.slice(lio + 1);
470
- }
471
- let date = new Date();
472
- let mdate = date;
473
- if (hdate) {
474
- date = new Date(hdate);
475
- }
476
- if (hmdate) {
477
- mdate = new Date(hmdate);
478
- }
479
- const ms = date.getTime();
480
- const mms = mdate.getTime();
481
- return {
482
- isFile: function () {
483
- return true;
484
- },
485
- isDirectory: function () {
486
- return false;
487
- },
488
- isSymbolicLink: function () {
489
- return false;
490
- },
491
- 'size': hlength ? parseInt(hlength) : 0,
492
- 'blksize': hlength ? parseInt(hlength) : 0,
493
- 'atimeMs': ms,
494
- 'mtimeMs': mms,
495
- 'ctimeMs': mms,
496
- 'birthtimeMs': ms,
497
- 'atime': date,
498
- 'mtime': mdate,
499
- 'ctime': mdate,
500
- 'birthtime': date
501
- };
502
- }
503
- catch (_a) {
475
+ catch {
476
+ return null;
477
+ }
478
+ }
479
+ }
480
+ async function stats(path, taskId) {
481
+ path = tool.urlResolve('/', path);
482
+ if (path.endsWith('/')) {
483
+ path = path.slice(0, -1);
484
+ }
485
+ if (['', '/clickgo', '/storage', '/mounted', '/package'].includes(path)) {
486
+ const date = new Date();
487
+ const ms = date.getTime();
488
+ return {
489
+ isFile: function () {
490
+ return false;
491
+ },
492
+ isDirectory: function () {
493
+ return true;
494
+ },
495
+ isSymbolicLink: function () {
496
+ return false;
497
+ },
498
+ 'size': 0,
499
+ 'blksize': 0,
500
+ 'atimeMs': ms,
501
+ 'mtimeMs': ms,
502
+ 'ctimeMs': ms,
503
+ 'birthtimeMs': ms,
504
+ 'atime': date,
505
+ 'mtime': date,
506
+ 'ctime': date,
507
+ 'birthtime': date
508
+ };
509
+ }
510
+ if (path === '/current') {
511
+ const date = new Date();
512
+ const ms = date.getTime();
513
+ return {
514
+ isFile: function () {
515
+ return false;
516
+ },
517
+ isDirectory: function () {
518
+ return false;
519
+ },
520
+ isSymbolicLink: function () {
521
+ return true;
522
+ },
523
+ 'size': 0,
524
+ 'blksize': 0,
525
+ 'atimeMs': ms,
526
+ 'mtimeMs': ms,
527
+ 'ctimeMs': ms,
528
+ 'birthtimeMs': ms,
529
+ 'atime': date,
530
+ 'mtime': date,
531
+ 'ctime': date,
532
+ 'birthtime': date
533
+ };
534
+ }
535
+ let fpath = path.slice(8);
536
+ if (path.startsWith('/clickgo/')) {
537
+ if (!clickgoFiles.includes(fpath)) {
538
+ if (!clickgoFiles.includes(fpath + '/')) {
504
539
  return null;
505
540
  }
541
+ fpath += '/';
506
542
  }
507
- });
508
- }
509
- function stats(path, taskId) {
510
- return __awaiter(this, void 0, void 0, function* () {
511
- var _a, _b;
512
- path = tool.urlResolve('/', path);
513
- if (path.endsWith('/')) {
514
- path = path.slice(0, -1);
515
- }
516
- if (['', '/clickgo', '/storage', '/mounted', '/package'].includes(path)) {
517
- const date = new Date();
518
- const ms = date.getTime();
543
+ return getClickGoStats(fpath);
544
+ }
545
+ else if (path.startsWith('/storage/')) {
546
+ const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
547
+ if (!r[0]) {
548
+ return null;
549
+ }
550
+ const item = await native.invoke('cg-fs-stats', native.getToken(), fpath);
551
+ if (!item) {
552
+ return null;
553
+ }
554
+ return {
555
+ isFile: function () {
556
+ return item.isFile;
557
+ },
558
+ isDirectory: function () {
559
+ return item.isDirectory;
560
+ },
561
+ isSymbolicLink: function () {
562
+ return item.isSymbolicLink;
563
+ },
564
+ 'size': item.size,
565
+ 'blksize': item.blksize,
566
+ 'atimeMs': item.atimeMs,
567
+ 'mtimeMs': item.mtimeMs,
568
+ 'ctimeMs': item.ctimeMs,
569
+ 'birthtimeMs': item.birthtimeMs,
570
+ 'atime': item.atime,
571
+ 'mtime': item.mtime,
572
+ 'ctime': item.ctime,
573
+ 'birthtime': item.birthtime
574
+ };
575
+ }
576
+ else if (path.startsWith('/mounted/')) {
577
+ const name = getMountName(path);
578
+ const hanlder = mounts[name];
579
+ if (!hanlder) {
580
+ return null;
581
+ }
582
+ if (path === '/mounted/' + name) {
583
+ const ms = hanlder.date.getTime();
519
584
  return {
520
585
  isFile: function () {
521
586
  return false;
@@ -532,27 +597,48 @@ function stats(path, taskId) {
532
597
  'mtimeMs': ms,
533
598
  'ctimeMs': ms,
534
599
  'birthtimeMs': ms,
535
- 'atime': date,
536
- 'mtime': date,
537
- 'ctime': date,
538
- 'birthtime': date
600
+ 'atime': hanlder.date,
601
+ 'mtime': hanlder.date,
602
+ 'ctime': hanlder.date,
603
+ 'birthtime': hanlder.date
539
604
  };
540
605
  }
541
- if (path === '/current') {
606
+ const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
607
+ if (!r[0]) {
608
+ return null;
609
+ }
610
+ return hanlder.stats?.(path.slice(9 + name.length)) ?? null;
611
+ }
612
+ else if (path.startsWith('/package/') || path.startsWith('/current/')) {
613
+ if (!taskId) {
614
+ return null;
615
+ }
616
+ if (path.startsWith('/current/')) {
617
+ return stats(task.list[taskId].current + fpath, taskId);
618
+ }
619
+ if (task.list[taskId].app.files[fpath]) {
620
+ const file = task.list[taskId].app.files[fpath];
542
621
  const date = new Date();
543
622
  const ms = date.getTime();
623
+ let size = 0;
624
+ if (typeof file !== 'string') {
625
+ size = file.size;
626
+ }
627
+ else {
628
+ size = new Blob([file]).size;
629
+ }
544
630
  return {
545
631
  isFile: function () {
546
- return false;
632
+ return true;
547
633
  },
548
634
  isDirectory: function () {
549
635
  return false;
550
636
  },
551
637
  isSymbolicLink: function () {
552
- return true;
638
+ return false;
553
639
  },
554
- 'size': 0,
555
- 'blksize': 0,
640
+ 'size': size,
641
+ 'blksize': size,
556
642
  'atimeMs': ms,
557
643
  'mtimeMs': ms,
558
644
  'ctimeMs': ms,
@@ -563,415 +649,359 @@ function stats(path, taskId) {
563
649
  'birthtime': date
564
650
  };
565
651
  }
566
- let fpath = path.slice(8);
567
- if (path.startsWith('/clickgo/')) {
568
- if (!clickgoFiles.includes(fpath)) {
569
- if (!clickgoFiles.includes(fpath + '/')) {
570
- return null;
571
- }
572
- fpath += '/';
573
- }
574
- return getClickGoStats(fpath);
652
+ if (!fpath.endsWith('/')) {
653
+ fpath += '/';
575
654
  }
576
- else if (path.startsWith('/storage/')) {
577
- const r = yield task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
578
- if (!r[0]) {
579
- return null;
580
- }
581
- const item = yield native.invoke('cg-fs-stats', native.getToken(), fpath);
582
- if (!item) {
583
- return null;
655
+ for (const p in task.list[taskId].app.files) {
656
+ if (!p.startsWith(fpath)) {
657
+ continue;
584
658
  }
659
+ const date = new Date();
660
+ const ms = date.getTime();
585
661
  return {
586
662
  isFile: function () {
587
- return item.isFile;
663
+ return false;
588
664
  },
589
665
  isDirectory: function () {
590
- return item.isDirectory;
666
+ return true;
591
667
  },
592
668
  isSymbolicLink: function () {
593
- return item.isSymbolicLink;
669
+ return false;
594
670
  },
595
- 'size': item.size,
596
- 'blksize': item.blksize,
597
- 'atimeMs': item.atimeMs,
598
- 'mtimeMs': item.mtimeMs,
599
- 'ctimeMs': item.ctimeMs,
600
- 'birthtimeMs': item.birthtimeMs,
601
- 'atime': item.atime,
602
- 'mtime': item.mtime,
603
- 'ctime': item.ctime,
604
- 'birthtime': item.birthtime
671
+ 'size': 0,
672
+ 'blksize': 0,
673
+ 'atimeMs': ms,
674
+ 'mtimeMs': ms,
675
+ 'ctimeMs': ms,
676
+ 'birthtimeMs': ms,
677
+ 'atime': date,
678
+ 'mtime': date,
679
+ 'ctime': date,
680
+ 'birthtime': date
605
681
  };
606
682
  }
607
- else if (path.startsWith('/mounted/')) {
608
- const name = getMountName(path);
609
- const hanlder = mounts[name];
610
- if (!hanlder) {
611
- return null;
612
- }
613
- if (path === '/mounted/' + name) {
614
- const ms = hanlder.date.getTime();
615
- return {
616
- isFile: function () {
617
- return false;
618
- },
619
- isDirectory: function () {
620
- return true;
621
- },
622
- isSymbolicLink: function () {
623
- return false;
624
- },
625
- 'size': 0,
626
- 'blksize': 0,
627
- 'atimeMs': ms,
628
- 'mtimeMs': ms,
629
- 'ctimeMs': ms,
630
- 'birthtimeMs': ms,
631
- 'atime': hanlder.date,
632
- 'mtime': hanlder.date,
633
- 'ctime': hanlder.date,
634
- 'birthtime': hanlder.date
635
- };
636
- }
637
- const r = yield task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
638
- if (!r[0]) {
639
- return null;
640
- }
641
- return (_b = (_a = hanlder.stats) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length))) !== null && _b !== void 0 ? _b : null;
642
- }
643
- else if (path.startsWith('/package/') || path.startsWith('/current/')) {
644
- if (!taskId) {
645
- return null;
646
- }
647
- if (path.startsWith('/current/')) {
648
- return stats(task.list[taskId].current + fpath, taskId);
649
- }
650
- if (task.list[taskId].app.files[fpath]) {
651
- const file = task.list[taskId].app.files[fpath];
652
- const date = new Date();
653
- const ms = date.getTime();
654
- let size = 0;
655
- if (typeof file !== 'string') {
656
- size = file.size;
657
- }
658
- else {
659
- size = new Blob([file]).size;
660
- }
661
- return {
662
- isFile: function () {
663
- return true;
664
- },
665
- isDirectory: function () {
666
- return false;
667
- },
668
- isSymbolicLink: function () {
669
- return false;
670
- },
671
- 'size': size,
672
- 'blksize': size,
673
- 'atimeMs': ms,
674
- 'mtimeMs': ms,
675
- 'ctimeMs': ms,
676
- 'birthtimeMs': ms,
677
- 'atime': date,
678
- 'mtime': date,
679
- 'ctime': date,
680
- 'birthtime': date
681
- };
682
- }
683
- if (!fpath.endsWith('/')) {
684
- fpath += '/';
685
- }
686
- for (const p in task.list[taskId].app.files) {
687
- if (!p.startsWith(fpath)) {
688
- continue;
689
- }
690
- const date = new Date();
691
- const ms = date.getTime();
692
- return {
693
- isFile: function () {
694
- return false;
695
- },
696
- isDirectory: function () {
697
- return true;
698
- },
699
- isSymbolicLink: function () {
700
- return false;
701
- },
702
- 'size': 0,
703
- 'blksize': 0,
704
- 'atimeMs': ms,
705
- 'mtimeMs': ms,
706
- 'ctimeMs': ms,
707
- 'birthtimeMs': ms,
708
- 'atime': date,
709
- 'mtime': date,
710
- 'ctime': date,
711
- 'birthtime': date
712
- };
713
- }
714
- return null;
715
- }
716
- else {
717
- return null;
718
- }
719
- });
683
+ return null;
684
+ }
685
+ else {
686
+ return null;
687
+ }
720
688
  }
721
- function isDir(path, taskId) {
722
- return __awaiter(this, void 0, void 0, function* () {
723
- const pstats = yield stats(path, taskId);
724
- if (!(pstats === null || pstats === void 0 ? void 0 : pstats.isDirectory())) {
725
- return false;
726
- }
727
- return pstats;
728
- });
689
+ async function isDir(path, taskId) {
690
+ const pstats = await stats(path, taskId);
691
+ if (!pstats?.isDirectory()) {
692
+ return false;
693
+ }
694
+ return pstats;
729
695
  }
730
- function isFile(path, taskId) {
731
- return __awaiter(this, void 0, void 0, function* () {
732
- const pstats = yield stats(path, taskId);
733
- if (!(pstats === null || pstats === void 0 ? void 0 : pstats.isFile())) {
734
- return false;
735
- }
736
- return pstats;
737
- });
696
+ async function isFile(path, taskId) {
697
+ const pstats = await stats(path, taskId);
698
+ if (!pstats?.isFile()) {
699
+ return false;
700
+ }
701
+ return pstats;
738
702
  }
739
- function mkdir(path_1) {
740
- return __awaiter(this, arguments, void 0, function* (path, mode = 0o755, taskId) {
741
- var _a, _b;
742
- path = tool.urlResolve('/', path);
743
- if (yield isDir(path, taskId)) {
744
- return true;
745
- }
746
- const fpath = path.slice(8);
747
- if (path.startsWith('/clickgo/')) {
748
- return false;
749
- }
750
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
751
- const r = yield task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
752
- if (!r[0]) {
753
- return false;
754
- }
755
- if (path.startsWith('/mounted/')) {
756
- const name = getMountName(path);
757
- const hanlder = mounts[name];
758
- if (!hanlder) {
759
- return false;
760
- }
761
- return (_b = (_a = hanlder.mkdir) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length), mode)) !== null && _b !== void 0 ? _b : false;
762
- }
763
- return native.invoke('cg-fs-mkdir', native.getToken(), fpath, mode);
764
- }
765
- else if (path.startsWith('/package/')) {
703
+ async function mkdir(path, mode = 0o755, taskId) {
704
+ path = tool.urlResolve('/', path);
705
+ if (await isDir(path, taskId)) {
706
+ return true;
707
+ }
708
+ const fpath = path.slice(8);
709
+ if (path.startsWith('/clickgo/')) {
710
+ return false;
711
+ }
712
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
713
+ const r = await task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
714
+ if (!r[0]) {
766
715
  return false;
767
716
  }
768
- else if (path.startsWith('/current/')) {
769
- if (!taskId) {
717
+ if (path.startsWith('/mounted/')) {
718
+ const name = getMountName(path);
719
+ const hanlder = mounts[name];
720
+ if (!hanlder) {
770
721
  return false;
771
722
  }
772
- return mkdir(task.list[taskId].current + fpath, mode, taskId);
723
+ return hanlder.mkdir?.(path.slice(9 + name.length), mode) ?? false;
773
724
  }
774
- else {
725
+ return native.invoke('cg-fs-mkdir', native.getToken(), fpath, mode);
726
+ }
727
+ else if (path.startsWith('/package/')) {
728
+ return false;
729
+ }
730
+ else if (path.startsWith('/current/')) {
731
+ if (!taskId) {
775
732
  return false;
776
733
  }
777
- });
734
+ return mkdir(task.list[taskId].current + fpath, mode, taskId);
735
+ }
736
+ else {
737
+ return false;
738
+ }
778
739
  }
779
- function rmdir(path, taskId) {
780
- return __awaiter(this, void 0, void 0, function* () {
781
- var _a, _b;
782
- path = tool.urlResolve('/', path);
783
- const fpath = path.slice(8);
784
- if (path.startsWith('/clickgo/')) {
740
+ async function rmdir(path, taskId) {
741
+ path = tool.urlResolve('/', path);
742
+ const fpath = path.slice(8);
743
+ if (path.startsWith('/clickgo/')) {
744
+ return false;
745
+ }
746
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
747
+ const r = await task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
748
+ if (!r[0]) {
785
749
  return false;
786
750
  }
787
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
788
- const r = yield task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
789
- if (!r[0]) {
751
+ if (path.startsWith('/mounted/')) {
752
+ const name = getMountName(path);
753
+ const hanlder = mounts[name];
754
+ if (!hanlder) {
790
755
  return false;
791
756
  }
792
- if (path.startsWith('/mounted/')) {
793
- const name = getMountName(path);
794
- const hanlder = mounts[name];
795
- if (!hanlder) {
796
- return false;
797
- }
798
- return (_b = (_a = hanlder.rmdir) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length))) !== null && _b !== void 0 ? _b : false;
799
- }
800
- return native.invoke('cg-fs-rmdir', native.getToken(), fpath);
757
+ return hanlder.rmdir?.(path.slice(9 + name.length)) ?? false;
801
758
  }
802
- else if (path.startsWith('/package/')) {
759
+ return native.invoke('cg-fs-rmdir', native.getToken(), fpath);
760
+ }
761
+ else if (path.startsWith('/package/')) {
762
+ return false;
763
+ }
764
+ else if (path.startsWith('/current/')) {
765
+ if (!taskId) {
803
766
  return false;
804
767
  }
805
- else if (path.startsWith('/current/')) {
806
- if (!taskId) {
807
- return false;
808
- }
809
- return rmdir(task.list[taskId].current + fpath, taskId);
810
- }
811
- else {
768
+ return rmdir(task.list[taskId].current + fpath, taskId);
769
+ }
770
+ else {
771
+ return false;
772
+ }
773
+ }
774
+ async function rmdirDeep(path, taskId) {
775
+ path = tool.urlResolve('/', path);
776
+ if (!path.endsWith('/')) {
777
+ path += '/';
778
+ }
779
+ const list = await readDir(path, undefined, taskId);
780
+ for (const item of list) {
781
+ const stat = await stats(path + item.name, taskId);
782
+ if (!stat) {
812
783
  return false;
813
784
  }
814
- });
815
- }
816
- function rmdirDeep(path, taskId) {
817
- return __awaiter(this, void 0, void 0, function* () {
818
- path = tool.urlResolve('/', path);
819
- if (!path.endsWith('/')) {
820
- path += '/';
821
- }
822
- const list = yield readDir(path, undefined, taskId);
823
- for (const item of list) {
824
- const stat = yield stats(path + item.name, taskId);
825
- if (!stat) {
785
+ if (stat.isDirectory()) {
786
+ const rtn = await rmdirDeep(path + item.name, taskId);
787
+ if (!rtn) {
826
788
  return false;
827
789
  }
828
- if (stat.isDirectory()) {
829
- const rtn = yield rmdirDeep(path + item.name, taskId);
830
- if (!rtn) {
831
- return false;
832
- }
833
- }
834
- else {
835
- const rtn = yield unlink(path + item.name, taskId);
836
- if (!rtn) {
837
- return false;
838
- }
839
- }
840
- }
841
- return rmdir(path, taskId);
842
- });
843
- }
844
- function chmod(path, mod, taskId) {
845
- return __awaiter(this, void 0, void 0, function* () {
846
- var _a, _b;
847
- path = tool.urlResolve('/', path);
848
- const fpath = path.slice(8);
849
- if (path.startsWith('/clickgo/')) {
850
- return false;
851
790
  }
852
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
853
- const r = yield task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
854
- if (!r[0]) {
791
+ else {
792
+ const rtn = await unlink(path + item.name, taskId);
793
+ if (!rtn) {
855
794
  return false;
856
795
  }
857
- if (path.startsWith('/mounted/')) {
858
- const name = getMountName(path);
859
- const hanlder = mounts[name];
860
- if (!hanlder) {
861
- return false;
862
- }
863
- return (_b = (_a = hanlder.chmod) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length), mod)) !== null && _b !== void 0 ? _b : false;
864
- }
865
- return native.invoke('cg-fs-chmod', native.getToken(), fpath, mod);
866
796
  }
867
- else if (path.startsWith('/package/')) {
797
+ }
798
+ return rmdir(path, taskId);
799
+ }
800
+ async function chmod(path, mod, taskId) {
801
+ path = tool.urlResolve('/', path);
802
+ const fpath = path.slice(8);
803
+ if (path.startsWith('/clickgo/')) {
804
+ return false;
805
+ }
806
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
807
+ const r = await task.checkPermission('fs.' + path + 'w', false, undefined, taskId);
808
+ if (!r[0]) {
868
809
  return false;
869
810
  }
870
- else if (path.startsWith('/current/')) {
871
- if (!taskId) {
811
+ if (path.startsWith('/mounted/')) {
812
+ const name = getMountName(path);
813
+ const hanlder = mounts[name];
814
+ if (!hanlder) {
872
815
  return false;
873
816
  }
874
- return chmod(task.list[taskId].current + fpath, mod, taskId);
817
+ return hanlder.chmod?.(path.slice(9 + name.length), mod) ?? false;
875
818
  }
876
- else {
819
+ return native.invoke('cg-fs-chmod', native.getToken(), fpath, mod);
820
+ }
821
+ else if (path.startsWith('/package/')) {
822
+ return false;
823
+ }
824
+ else if (path.startsWith('/current/')) {
825
+ if (!taskId) {
877
826
  return false;
878
827
  }
879
- });
828
+ return chmod(task.list[taskId].current + fpath, mod, taskId);
829
+ }
830
+ else {
831
+ return false;
832
+ }
880
833
  }
881
- function rename(oldPath, newPath, taskId) {
882
- return __awaiter(this, void 0, void 0, function* () {
883
- var _a, _b;
884
- oldPath = tool.urlResolve('/', oldPath);
885
- newPath = tool.urlResolve('/', newPath);
886
- if (!oldPath.startsWith(newPath.slice(0, 9))) {
834
+ async function rename(oldPath, newPath, taskId) {
835
+ oldPath = tool.urlResolve('/', oldPath);
836
+ newPath = tool.urlResolve('/', newPath);
837
+ if (!oldPath.startsWith(newPath.slice(0, 9))) {
838
+ return false;
839
+ }
840
+ const ofpath = oldPath.slice(8);
841
+ const nfpath = newPath.slice(8);
842
+ if (oldPath.startsWith('/clickgo/')) {
843
+ return false;
844
+ }
845
+ else if (oldPath.startsWith('/storage/') || oldPath.startsWith('/mounted/')) {
846
+ let r = await task.checkPermission('fs.' + oldPath + 'w', false, undefined, taskId);
847
+ if (!r[0]) {
887
848
  return false;
888
849
  }
889
- const ofpath = oldPath.slice(8);
890
- const nfpath = newPath.slice(8);
891
- if (oldPath.startsWith('/clickgo/')) {
850
+ r = await task.checkPermission('fs.' + newPath + 'w', false, undefined, taskId);
851
+ if (!r[0]) {
892
852
  return false;
893
853
  }
894
- else if (oldPath.startsWith('/storage/') || oldPath.startsWith('/mounted/')) {
895
- let r = yield task.checkPermission('fs.' + oldPath + 'w', false, undefined, taskId);
896
- if (!r[0]) {
854
+ if (oldPath.startsWith('/mounted/')) {
855
+ const fname = getMountName(oldPath);
856
+ const lname = getMountName(newPath);
857
+ if (fname !== lname) {
897
858
  return false;
898
859
  }
899
- r = yield task.checkPermission('fs.' + newPath + 'w', false, undefined, taskId);
900
- if (!r[0]) {
860
+ const hanlder = mounts[fname];
861
+ if (!hanlder) {
901
862
  return false;
902
863
  }
903
- if (oldPath.startsWith('/mounted/')) {
904
- const fname = getMountName(oldPath);
905
- const lname = getMountName(newPath);
906
- if (fname !== lname) {
907
- return false;
908
- }
909
- const hanlder = mounts[fname];
910
- if (!hanlder) {
911
- return false;
912
- }
913
- return (_b = (_a = hanlder.rename) === null || _a === void 0 ? void 0 : _a.call(hanlder, oldPath.slice(9 + fname.length), newPath.slice(9 + fname.length))) !== null && _b !== void 0 ? _b : false;
914
- }
915
- return native.invoke('cg-fs-rename', native.getToken(), ofpath, nfpath);
864
+ return hanlder.rename?.(oldPath.slice(9 + fname.length), newPath.slice(9 + fname.length)) ?? false;
916
865
  }
917
- else if (oldPath.startsWith('/package/')) {
866
+ return native.invoke('cg-fs-rename', native.getToken(), ofpath, nfpath);
867
+ }
868
+ else if (oldPath.startsWith('/package/')) {
869
+ return false;
870
+ }
871
+ else if (oldPath.startsWith('/current/')) {
872
+ if (!taskId) {
918
873
  return false;
919
874
  }
920
- else if (oldPath.startsWith('/current/')) {
921
- if (!taskId) {
922
- return false;
875
+ return rename(task.list[taskId].current + ofpath, task.list[taskId].current + nfpath, taskId);
876
+ }
877
+ else {
878
+ return false;
879
+ }
880
+ }
881
+ async function readDir(path, encoding, taskId) {
882
+ path = tool.urlResolve('/', path);
883
+ if (path === '/') {
884
+ const list = [
885
+ {
886
+ isFile: function () {
887
+ return false;
888
+ },
889
+ isDirectory: function () {
890
+ return true;
891
+ },
892
+ isSymbolicLink: function () {
893
+ return false;
894
+ },
895
+ 'name': 'clickgo'
896
+ },
897
+ {
898
+ isFile: function () {
899
+ return false;
900
+ },
901
+ isDirectory: function () {
902
+ return true;
903
+ },
904
+ isSymbolicLink: function () {
905
+ return false;
906
+ },
907
+ 'name': 'storage'
908
+ },
909
+ {
910
+ isFile: function () {
911
+ return false;
912
+ },
913
+ isDirectory: function () {
914
+ return true;
915
+ },
916
+ isSymbolicLink: function () {
917
+ return false;
918
+ },
919
+ 'name': 'mounted'
923
920
  }
924
- return rename(task.list[taskId].current + ofpath, task.list[taskId].current + nfpath, taskId);
925
- }
926
- else {
927
- return false;
921
+ ];
922
+ if (taskId) {
923
+ list.push({
924
+ isFile: function () {
925
+ return false;
926
+ },
927
+ isDirectory: function () {
928
+ return true;
929
+ },
930
+ isSymbolicLink: function () {
931
+ return false;
932
+ },
933
+ 'name': 'package'
934
+ });
928
935
  }
929
- });
930
- }
931
- function readDir(path, encoding, taskId) {
932
- return __awaiter(this, void 0, void 0, function* () {
933
- var _a, _b;
934
- path = tool.urlResolve('/', path);
935
- if (path === '/') {
936
- const list = [
937
- {
938
- isFile: function () {
939
- return false;
940
- },
941
- isDirectory: function () {
942
- return true;
943
- },
944
- isSymbolicLink: function () {
945
- return false;
946
- },
947
- 'name': 'clickgo'
936
+ if (taskId) {
937
+ list.push({
938
+ isFile: function () {
939
+ return false;
948
940
  },
949
- {
950
- isFile: function () {
951
- return false;
952
- },
953
- isDirectory: function () {
954
- return true;
955
- },
956
- isSymbolicLink: function () {
957
- return false;
958
- },
959
- 'name': 'storage'
941
+ isDirectory: function () {
942
+ return false;
960
943
  },
961
- {
962
- isFile: function () {
963
- return false;
964
- },
965
- isDirectory: function () {
966
- return true;
967
- },
968
- isSymbolicLink: function () {
969
- return false;
970
- },
971
- 'name': 'mounted'
944
+ isSymbolicLink: function () {
945
+ return true;
946
+ },
947
+ 'name': 'current'
948
+ });
949
+ }
950
+ return list;
951
+ }
952
+ if (!path.endsWith('/')) {
953
+ path += '/';
954
+ }
955
+ const fpath = path.slice(8);
956
+ if (path.startsWith('/clickgo/')) {
957
+ const list = [];
958
+ for (const item of clickgoFiles) {
959
+ if (!item.startsWith(fpath)) {
960
+ continue;
961
+ }
962
+ if (fpath === item) {
963
+ continue;
964
+ }
965
+ const rpath = item.slice(fpath.length);
966
+ if (rpath.includes('/')) {
967
+ if (rpath.endsWith('/')) {
968
+ if (rpath.slice(0, -1).includes('/')) {
969
+ continue;
970
+ }
971
+ list.push({
972
+ isFile: function () {
973
+ return false;
974
+ },
975
+ isDirectory: function () {
976
+ return true;
977
+ },
978
+ isSymbolicLink: function () {
979
+ return false;
980
+ },
981
+ 'name': rpath.slice(0, -1)
982
+ });
972
983
  }
973
- ];
974
- if (taskId) {
984
+ continue;
985
+ }
986
+ list.push({
987
+ isFile: function () {
988
+ return true;
989
+ },
990
+ isDirectory: function () {
991
+ return false;
992
+ },
993
+ isSymbolicLink: function () {
994
+ return false;
995
+ },
996
+ 'name': rpath
997
+ });
998
+ }
999
+ return list;
1000
+ }
1001
+ else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
1002
+ const list = [];
1003
+ if (path === '/mounted/') {
1004
+ for (const name in mounts) {
975
1005
  list.push({
976
1006
  isFile: function () {
977
1007
  return false;
@@ -982,78 +1012,59 @@ function readDir(path, encoding, taskId) {
982
1012
  isSymbolicLink: function () {
983
1013
  return false;
984
1014
  },
985
- 'name': 'package'
986
- });
987
- }
988
- if (taskId) {
989
- list.push({
990
- isFile: function () {
991
- return false;
992
- },
993
- isDirectory: function () {
994
- return false;
995
- },
996
- isSymbolicLink: function () {
997
- return true;
998
- },
999
- 'name': 'current'
1015
+ 'name': name
1000
1016
  });
1001
1017
  }
1002
1018
  return list;
1003
1019
  }
1004
- if (!path.endsWith('/')) {
1005
- path += '/';
1020
+ const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
1021
+ if (!r[0]) {
1022
+ return [];
1006
1023
  }
1007
- const fpath = path.slice(8);
1008
- if (path.startsWith('/clickgo/')) {
1009
- const list = [];
1010
- for (const item of clickgoFiles) {
1011
- if (!item.startsWith(fpath)) {
1012
- continue;
1013
- }
1014
- if (fpath === item) {
1015
- continue;
1016
- }
1017
- const rpath = item.slice(fpath.length);
1018
- if (rpath.includes('/')) {
1019
- if (rpath.endsWith('/')) {
1020
- if (rpath.slice(0, -1).includes('/')) {
1021
- continue;
1022
- }
1023
- list.push({
1024
- isFile: function () {
1025
- return false;
1026
- },
1027
- isDirectory: function () {
1028
- return true;
1029
- },
1030
- isSymbolicLink: function () {
1031
- return false;
1032
- },
1033
- 'name': rpath.slice(0, -1)
1034
- });
1035
- }
1036
- continue;
1037
- }
1038
- list.push({
1039
- isFile: function () {
1040
- return true;
1041
- },
1042
- isDirectory: function () {
1043
- return false;
1044
- },
1045
- isSymbolicLink: function () {
1046
- return false;
1047
- },
1048
- 'name': rpath
1049
- });
1024
+ if (path.startsWith('/mounted/')) {
1025
+ const name = getMountName(path);
1026
+ const hanlder = mounts[name];
1027
+ if (!hanlder) {
1028
+ return [];
1050
1029
  }
1051
- return list;
1030
+ return hanlder.readDir?.(path.slice(9 + name.length), encoding) ?? [];
1031
+ }
1032
+ const ls = await native.invoke('cg-fs-readDir', native.getToken(), fpath, encoding);
1033
+ for (const item of ls) {
1034
+ list.push({
1035
+ isFile: function () {
1036
+ return item.isFile;
1037
+ },
1038
+ isDirectory: function () {
1039
+ return item.isDirectory;
1040
+ },
1041
+ isSymbolicLink: function () {
1042
+ return item.isSymbolicLink;
1043
+ },
1044
+ 'name': item.name
1045
+ });
1046
+ }
1047
+ return list;
1048
+ }
1049
+ else if (path.startsWith('/package/') || path.startsWith('/current/')) {
1050
+ if (!taskId) {
1051
+ return [];
1052
1052
  }
1053
- else if (path.startsWith('/storage/') || path.startsWith('/mounted/')) {
1054
- const list = [];
1055
- if (path === '/mounted/') {
1056
- for (const name in mounts) {
1053
+ if (path.startsWith('/current/')) {
1054
+ return readDir(task.list[taskId].current + fpath, encoding, taskId);
1055
+ }
1056
+ const list = [];
1057
+ const dirs = [];
1058
+ for (const p in task.list[taskId].app.files) {
1059
+ if (!p.startsWith(fpath)) {
1060
+ continue;
1061
+ }
1062
+ const rpath = p.slice(fpath.length);
1063
+ const sio = rpath.indexOf('/');
1064
+ if (sio !== -1) {
1065
+ const name = rpath.slice(0, sio);
1066
+ if (!dirs.includes(name)) {
1067
+ dirs.push(name);
1057
1068
  list.push({
1058
1069
  isFile: function () {
1059
1070
  return false;
@@ -1067,175 +1078,106 @@ function readDir(path, encoding, taskId) {
1067
1078
  'name': name
1068
1079
  });
1069
1080
  }
1070
- return list;
1071
- }
1072
- const r = yield task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
1073
- if (!r[0]) {
1074
- return [];
1075
- }
1076
- if (path.startsWith('/mounted/')) {
1077
- const name = getMountName(path);
1078
- const hanlder = mounts[name];
1079
- if (!hanlder) {
1080
- return [];
1081
- }
1082
- return (_b = (_a = hanlder.readDir) === null || _a === void 0 ? void 0 : _a.call(hanlder, path.slice(9 + name.length), encoding)) !== null && _b !== void 0 ? _b : [];
1083
- }
1084
- const ls = yield native.invoke('cg-fs-readDir', native.getToken(), fpath, encoding);
1085
- for (const item of ls) {
1086
- list.push({
1087
- isFile: function () {
1088
- return item.isFile;
1089
- },
1090
- isDirectory: function () {
1091
- return item.isDirectory;
1092
- },
1093
- isSymbolicLink: function () {
1094
- return item.isSymbolicLink;
1095
- },
1096
- 'name': item.name
1097
- });
1081
+ continue;
1098
1082
  }
1099
- return list;
1083
+ list.push({
1084
+ isFile: function () {
1085
+ return true;
1086
+ },
1087
+ isDirectory: function () {
1088
+ return false;
1089
+ },
1090
+ isSymbolicLink: function () {
1091
+ return false;
1092
+ },
1093
+ 'name': rpath
1094
+ });
1100
1095
  }
1101
- else if (path.startsWith('/package/') || path.startsWith('/current/')) {
1102
- if (!taskId) {
1103
- return [];
1104
- }
1105
- if (path.startsWith('/current/')) {
1106
- return readDir(task.list[taskId].current + fpath, encoding, taskId);
1096
+ return list;
1097
+ }
1098
+ else {
1099
+ return [];
1100
+ }
1101
+ }
1102
+ async function copyFolder(from, to, ignore = [], taskId) {
1103
+ let num = 0;
1104
+ if (!await isDir(from, taskId)) {
1105
+ return 0;
1106
+ }
1107
+ const flist = await readDir(from, undefined, taskId);
1108
+ let checkTo = false;
1109
+ for (const item of flist) {
1110
+ if (item.isDirectory()) {
1111
+ const r = await copyFolder(from + item.name + '/', to + item.name + '/', ignore, taskId);
1112
+ if (r === -1) {
1113
+ return r;
1107
1114
  }
1108
- const list = [];
1109
- const dirs = [];
1110
- for (const p in task.list[taskId].app.files) {
1111
- if (!p.startsWith(fpath)) {
1112
- continue;
1113
- }
1114
- const rpath = p.slice(fpath.length);
1115
- const sio = rpath.indexOf('/');
1116
- if (sio !== -1) {
1117
- const name = rpath.slice(0, sio);
1118
- if (!dirs.includes(name)) {
1119
- dirs.push(name);
1120
- list.push({
1121
- isFile: function () {
1122
- return false;
1123
- },
1124
- isDirectory: function () {
1125
- return true;
1126
- },
1127
- isSymbolicLink: function () {
1128
- return false;
1129
- },
1130
- 'name': name
1131
- });
1132
- }
1133
- continue;
1134
- }
1135
- list.push({
1136
- isFile: function () {
1137
- return true;
1138
- },
1139
- isDirectory: function () {
1140
- return false;
1141
- },
1142
- isSymbolicLink: function () {
1143
- return false;
1144
- },
1145
- 'name': rpath
1146
- });
1115
+ else {
1116
+ num += r;
1147
1117
  }
1148
- return list;
1149
- }
1150
- else {
1151
- return [];
1152
1118
  }
1153
- });
1154
- }
1155
- function copyFolder(from_1, to_1) {
1156
- return __awaiter(this, arguments, void 0, function* (from, to, ignore = [], taskId) {
1157
- let num = 0;
1158
- if (!(yield isDir(from, taskId))) {
1159
- return 0;
1160
- }
1161
- const flist = yield readDir(from, undefined, taskId);
1162
- let checkTo = false;
1163
- for (const item of flist) {
1164
- if (item.isDirectory()) {
1165
- const r = yield copyFolder(from + item.name + '/', to + item.name + '/', ignore, taskId);
1166
- if (r === -1) {
1167
- return r;
1168
- }
1169
- else {
1170
- num += r;
1171
- }
1119
+ else if (item.isFile()) {
1120
+ if (ignore.length > 0 && tool.match(item.name, ignore)) {
1121
+ continue;
1172
1122
  }
1173
- else if (item.isFile()) {
1174
- if (ignore.length > 0 && tool.match(item.name, ignore)) {
1175
- continue;
1176
- }
1177
- if (!checkTo) {
1178
- if (!(yield mkdir(to, undefined, taskId))) {
1179
- return -1;
1180
- }
1181
- checkTo = true;
1182
- }
1183
- if (!(yield copyFile(from + item.name, to + item.name, taskId))) {
1184
- continue;
1123
+ if (!checkTo) {
1124
+ if (!await mkdir(to, undefined, taskId)) {
1125
+ return -1;
1185
1126
  }
1186
- ++num;
1127
+ checkTo = true;
1187
1128
  }
1129
+ if (!(await copyFile(from + item.name, to + item.name, taskId))) {
1130
+ continue;
1131
+ }
1132
+ ++num;
1188
1133
  }
1189
- return num;
1190
- });
1134
+ }
1135
+ return num;
1191
1136
  }
1192
- function copyFile(src, dest, taskId) {
1193
- return __awaiter(this, void 0, void 0, function* () {
1194
- var _a, _b;
1195
- src = tool.urlResolve('/', src);
1196
- dest = tool.urlResolve('/', dest);
1197
- if (!src.startsWith(dest.slice(0, 9))) {
1137
+ async function copyFile(src, dest, taskId) {
1138
+ src = tool.urlResolve('/', src);
1139
+ dest = tool.urlResolve('/', dest);
1140
+ if (!src.startsWith(dest.slice(0, 9))) {
1141
+ return false;
1142
+ }
1143
+ const sfpath = src.slice(8);
1144
+ const dfpath = dest.slice(8);
1145
+ if (src.startsWith('/clickgo/')) {
1146
+ return false;
1147
+ }
1148
+ else if (src.startsWith('/storage/') || dest.startsWith('/mounted/')) {
1149
+ let r = await task.checkPermission('fs.' + src + 'r', false, undefined, taskId);
1150
+ if (!r[0]) {
1198
1151
  return false;
1199
1152
  }
1200
- const sfpath = src.slice(8);
1201
- const dfpath = dest.slice(8);
1202
- if (src.startsWith('/clickgo/')) {
1153
+ r = await task.checkPermission('fs.' + dest + 'w', false, undefined, taskId);
1154
+ if (!r[0]) {
1203
1155
  return false;
1204
1156
  }
1205
- else if (src.startsWith('/storage/') || dest.startsWith('/mounted/')) {
1206
- let r = yield task.checkPermission('fs.' + src + 'r', false, undefined, taskId);
1207
- if (!r[0]) {
1157
+ if (src.startsWith('/mounted/')) {
1158
+ const fname = getMountName(src);
1159
+ const lname = getMountName(dest);
1160
+ if (fname !== lname) {
1208
1161
  return false;
1209
1162
  }
1210
- r = yield task.checkPermission('fs.' + dest + 'w', false, undefined, taskId);
1211
- if (!r[0]) {
1212
- return false;
1213
- }
1214
- if (src.startsWith('/mounted/')) {
1215
- const fname = getMountName(src);
1216
- const lname = getMountName(dest);
1217
- if (fname !== lname) {
1218
- return false;
1219
- }
1220
- const hanlder = mounts[fname];
1221
- if (!hanlder) {
1222
- return false;
1223
- }
1224
- return (_b = (_a = hanlder.copyFile) === null || _a === void 0 ? void 0 : _a.call(hanlder, src.slice(9 + fname.length), dest.slice(9 + fname.length))) !== null && _b !== void 0 ? _b : false;
1225
- }
1226
- return native.invoke('cg-fs-copyFile', native.getToken(), sfpath, dfpath);
1227
- }
1228
- else if (src.startsWith('/package/')) {
1229
- return false;
1230
- }
1231
- else if (src.startsWith('/current/')) {
1232
- if (!taskId) {
1163
+ const hanlder = mounts[fname];
1164
+ if (!hanlder) {
1233
1165
  return false;
1234
1166
  }
1235
- return copyFile(task.list[taskId].current + sfpath, task.list[taskId].current + dfpath, taskId);
1167
+ return hanlder.copyFile?.(src.slice(9 + fname.length), dest.slice(9 + fname.length)) ?? false;
1236
1168
  }
1237
- else {
1169
+ return native.invoke('cg-fs-copyFile', native.getToken(), sfpath, dfpath);
1170
+ }
1171
+ else if (src.startsWith('/package/')) {
1172
+ return false;
1173
+ }
1174
+ else if (src.startsWith('/current/')) {
1175
+ if (!taskId) {
1238
1176
  return false;
1239
1177
  }
1240
- });
1178
+ return copyFile(task.list[taskId].current + sfpath, task.list[taskId].current + dfpath, taskId);
1179
+ }
1180
+ else {
1181
+ return false;
1182
+ }
1241
1183
  }