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.
- package/README.md +1 -1
- package/dist/app/demo/app.js +4 -16
- package/dist/app/demo/config.json +4 -1
- package/dist/app/demo/form/control/arteditor/arteditor.js +7 -18
- package/dist/app/demo/form/control/button/button.js +2 -13
- package/dist/app/demo/form/control/check/check.js +3 -14
- package/dist/app/demo/form/control/content/content.js +3 -14
- package/dist/app/demo/form/control/daterange/daterange.js +1 -1
- package/dist/app/demo/form/control/delete/delete.js +3 -14
- package/dist/app/demo/form/control/dialog/dialog.js +2 -0
- package/dist/app/demo/form/control/dialog/dialog.xml +26 -12
- package/dist/app/demo/form/control/flow/flow.js +2 -13
- package/dist/app/demo/form/control/form/form.js +4 -15
- package/dist/app/demo/form/control/iconview/iconview.js +12 -29
- package/dist/app/demo/form/control/jodit/jodit.js +7 -18
- package/dist/app/demo/form/control/link/link.js +2 -13
- package/dist/app/demo/form/control/list/list.js +40 -52
- package/dist/app/demo/form/control/list/list.xml +20 -10
- package/dist/app/demo/form/control/map/map.js +17 -28
- package/dist/app/demo/form/control/menu/menu.js +6 -17
- package/dist/app/demo/form/control/mpegts/mpegts.js +1 -1
- package/dist/app/demo/form/control/nav/nav.js +6 -17
- package/dist/app/demo/form/control/novnc/novnc.js +75 -0
- package/dist/app/demo/form/control/novnc/novnc.xml +13 -0
- package/dist/app/demo/form/control/panel/panel.js +9 -20
- package/dist/app/demo/form/control/panel/test1.js +20 -41
- package/dist/app/demo/form/control/pdf/pdf.js +7 -20
- package/dist/app/demo/form/control/progress/progress.js +3 -12
- package/dist/app/demo/form/control/radio/radio.js +6 -17
- package/dist/app/demo/form/control/select/select.js +28 -41
- package/dist/app/demo/form/control/switch/switch.js +3 -14
- package/dist/app/demo/form/control/tab/tab.js +7 -18
- package/dist/app/demo/form/control/table/table.js +8 -23
- package/dist/app/demo/form/control/text/text.js +2 -13
- package/dist/app/demo/form/control/tuieditor/tuieditor.js +7 -18
- package/dist/app/demo/form/control/uploader/uploader.js +20 -31
- package/dist/app/demo/form/control/vflow/vflow.js +2 -13
- package/dist/app/demo/form/event/form/form.js +11 -22
- package/dist/app/demo/form/event/task/task.js +14 -29
- package/dist/app/demo/form/main.js +381 -387
- package/dist/app/demo/form/main.xml +3 -0
- package/dist/app/demo/form/method/acontrol/acontrol.js +2 -13
- package/dist/app/demo/form/method/aform/aform.js +41 -60
- package/dist/app/demo/form/method/aform/sd.js +3 -14
- package/dist/app/demo/form/method/core/core.js +25 -50
- package/dist/app/demo/form/method/dom/dom.js +35 -58
- package/dist/app/demo/form/method/form/form.js +106 -149
- package/dist/app/demo/form/method/fs/fs.js +126 -147
- package/dist/app/demo/form/method/native/native.js +44 -72
- package/dist/app/demo/form/method/storage/storage.js +9 -27
- package/dist/app/demo/form/method/system/system.js +16 -41
- package/dist/app/demo/form/method/task/task.js +18 -37
- package/dist/app/demo/form/method/theme/theme.js +39 -54
- package/dist/app/demo/form/method/tool/tool.js +22 -43
- package/dist/app/demo/form/method/tool/tool.xml +1 -1
- package/dist/app/demo/form/method/zip/zip.js +18 -29
- package/dist/app/demo/form/solution/backpanel/backpanel.js +10 -23
- package/dist/app/task/app.js +2 -13
- package/dist/app/task/form/bar/bar.js +32 -45
- package/dist/clickgo.js +1 -1
- package/dist/control/arteditor.cgc +0 -0
- package/dist/control/box.cgc +0 -0
- package/dist/control/captcha.cgc +0 -0
- package/dist/control/common.cgc +0 -0
- package/dist/control/desc.cgc +0 -0
- package/dist/control/drawer.cgc +0 -0
- package/dist/control/echarts.cgc +0 -0
- package/dist/control/form.cgc +0 -0
- package/dist/control/iconview.cgc +0 -0
- package/dist/control/jodit.cgc +0 -0
- package/dist/control/map.cgc +0 -0
- package/dist/control/monaco.cgc +0 -0
- package/dist/control/mpegts.cgc +0 -0
- package/dist/control/nav.cgc +0 -0
- package/dist/control/novnc.cgc +0 -0
- package/dist/control/page.cgc +0 -0
- package/dist/control/pdf.cgc +0 -0
- package/dist/control/property.cgc +0 -0
- package/dist/control/qrcode.cgc +0 -0
- package/dist/control/table.cgc +0 -0
- package/dist/control/task.cgc +0 -0
- package/dist/control/tplink.cgc +0 -0
- package/dist/control/tuieditor.cgc +0 -0
- package/dist/control/tuiviewer.cgc +0 -0
- package/dist/control/xterm.cgc +0 -0
- package/dist/index.js +59 -71
- package/dist/lib/control.js +213 -235
- package/dist/lib/core.js +356 -379
- package/dist/lib/dom.js +62 -91
- package/dist/lib/form.js +834 -906
- package/dist/lib/fs.js +834 -892
- package/dist/lib/native.js +32 -63
- package/dist/lib/storage.js +21 -33
- package/dist/lib/task.js +1054 -1098
- package/dist/lib/theme.js +102 -121
- package/dist/lib/tool.js +65 -98
- package/dist/lib/zip.js +27 -42
- package/dist/theme/blue.cgt +0 -0
- package/dist/theme/byterun.cgt +0 -0
- package/dist/theme/dark.cgt +0 -0
- package/dist/theme/light.cgt +0 -0
- 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
|
-
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (path.startsWith('/clickgo/')
|
|
163
|
-
|
|
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
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
242
|
-
|
|
173
|
+
else {
|
|
174
|
+
blob = await (await fetch(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
|
|
175
|
+
'headers': headers
|
|
176
|
+
})).blob();
|
|
243
177
|
}
|
|
244
|
-
|
|
245
|
-
if (!file) {
|
|
178
|
+
if (!blob) {
|
|
246
179
|
return null;
|
|
247
180
|
}
|
|
248
|
-
if (
|
|
249
|
-
return
|
|
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
|
-
|
|
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(
|
|
189
|
+
fr.readAsText(blob, encoding);
|
|
264
190
|
});
|
|
265
191
|
}
|
|
266
|
-
|
|
192
|
+
catch {
|
|
267
193
|
return null;
|
|
268
194
|
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
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
|
|
207
|
+
return hanlder.getContent?.(path.slice(9 + name.length), options) ?? null;
|
|
297
208
|
}
|
|
298
|
-
|
|
299
|
-
|
|
209
|
+
if (options.progress) {
|
|
210
|
+
delete options.progress;
|
|
300
211
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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
|
-
|
|
308
|
-
return
|
|
216
|
+
if (typeof rtn === 'string') {
|
|
217
|
+
return rtn;
|
|
309
218
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
-
|
|
321
|
-
|
|
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
|
-
|
|
230
|
+
const file = task.list[taskId].app.files[fpath];
|
|
231
|
+
if (!file) {
|
|
336
232
|
return null;
|
|
337
233
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
return null;
|
|
341
|
-
}
|
|
342
|
-
return task.list[taskId].current;
|
|
234
|
+
if (typeof file === 'string') {
|
|
235
|
+
return file;
|
|
343
236
|
}
|
|
344
|
-
|
|
345
|
-
|
|
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
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
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
|
-
|
|
358
|
-
const
|
|
359
|
-
|
|
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
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
-
|
|
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
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
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
|
|
311
|
+
return hanlder.readLink?.(path.slice(9 + name.length), encoding) ?? null;
|
|
387
312
|
}
|
|
388
|
-
|
|
389
|
-
|
|
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
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
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
|
-
|
|
402
|
-
const
|
|
403
|
-
|
|
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
|
-
|
|
407
|
-
|
|
408
|
-
|
|
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
|
|
349
|
+
return hanlder.symlink?.(filePath.slice(9 + fname.length), linkPath.slice(9 + fname.length), type) ?? false;
|
|
415
350
|
}
|
|
416
|
-
|
|
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
|
-
|
|
420
|
-
|
|
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(
|
|
386
|
+
return hanlder.unlink?.(path.slice(9 + name.length)) ?? false;
|
|
424
387
|
}
|
|
425
|
-
|
|
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
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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
|
|
455
|
+
return true;
|
|
438
456
|
},
|
|
439
457
|
isDirectory: function () {
|
|
440
|
-
return
|
|
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':
|
|
449
|
-
'ctimeMs':
|
|
466
|
+
'mtimeMs': mms,
|
|
467
|
+
'ctimeMs': mms,
|
|
450
468
|
'birthtimeMs': ms,
|
|
451
469
|
'atime': date,
|
|
452
|
-
'mtime':
|
|
453
|
-
'ctime':
|
|
470
|
+
'mtime': mdate,
|
|
471
|
+
'ctime': mdate,
|
|
454
472
|
'birthtime': date
|
|
455
473
|
};
|
|
456
474
|
}
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
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
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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
|
-
|
|
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
|
|
632
|
+
return true;
|
|
547
633
|
},
|
|
548
634
|
isDirectory: function () {
|
|
549
635
|
return false;
|
|
550
636
|
},
|
|
551
637
|
isSymbolicLink: function () {
|
|
552
|
-
return
|
|
638
|
+
return false;
|
|
553
639
|
},
|
|
554
|
-
'size':
|
|
555
|
-
'blksize':
|
|
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
|
-
|
|
567
|
-
|
|
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
|
-
|
|
577
|
-
|
|
578
|
-
|
|
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
|
|
663
|
+
return false;
|
|
588
664
|
},
|
|
589
665
|
isDirectory: function () {
|
|
590
|
-
return
|
|
666
|
+
return true;
|
|
591
667
|
},
|
|
592
668
|
isSymbolicLink: function () {
|
|
593
|
-
return
|
|
669
|
+
return false;
|
|
594
670
|
},
|
|
595
|
-
'size':
|
|
596
|
-
'blksize':
|
|
597
|
-
'atimeMs':
|
|
598
|
-
'mtimeMs':
|
|
599
|
-
'ctimeMs':
|
|
600
|
-
'birthtimeMs':
|
|
601
|
-
'atime':
|
|
602
|
-
'mtime':
|
|
603
|
-
'ctime':
|
|
604
|
-
'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
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
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
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
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
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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(
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
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
|
-
|
|
769
|
-
|
|
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(
|
|
723
|
+
return hanlder.mkdir?.(path.slice(9 + name.length), mode) ?? false;
|
|
773
724
|
}
|
|
774
|
-
|
|
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
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
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
|
-
|
|
788
|
-
const
|
|
789
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
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
|
-
|
|
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
|
|
853
|
-
const
|
|
854
|
-
if (!
|
|
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
|
-
|
|
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
|
-
|
|
871
|
-
|
|
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(
|
|
817
|
+
return hanlder.chmod?.(path.slice(9 + name.length), mod) ?? false;
|
|
875
818
|
}
|
|
876
|
-
|
|
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
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
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
|
-
|
|
890
|
-
|
|
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
|
-
|
|
895
|
-
|
|
896
|
-
|
|
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
|
-
|
|
900
|
-
if (!
|
|
860
|
+
const hanlder = mounts[fname];
|
|
861
|
+
if (!hanlder) {
|
|
901
862
|
return false;
|
|
902
863
|
}
|
|
903
|
-
|
|
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
|
-
|
|
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
|
-
|
|
921
|
-
|
|
922
|
-
|
|
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
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
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
|
|
932
|
-
|
|
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
|
-
|
|
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
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
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
|
-
|
|
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':
|
|
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
|
-
|
|
1005
|
-
|
|
1020
|
+
const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
|
|
1021
|
+
if (!r[0]) {
|
|
1022
|
+
return [];
|
|
1006
1023
|
}
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
const
|
|
1010
|
-
|
|
1011
|
-
|
|
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
|
|
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
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
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
|
-
|
|
1109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1174
|
-
if (
|
|
1175
|
-
|
|
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
|
-
|
|
1127
|
+
checkTo = true;
|
|
1187
1128
|
}
|
|
1129
|
+
if (!(await copyFile(from + item.name, to + item.name, taskId))) {
|
|
1130
|
+
continue;
|
|
1131
|
+
}
|
|
1132
|
+
++num;
|
|
1188
1133
|
}
|
|
1189
|
-
|
|
1190
|
-
|
|
1134
|
+
}
|
|
1135
|
+
return num;
|
|
1191
1136
|
}
|
|
1192
|
-
function copyFile(src, dest, taskId) {
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
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
|
-
|
|
1201
|
-
|
|
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
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
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
|
-
|
|
1211
|
-
if (!
|
|
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(
|
|
1167
|
+
return hanlder.copyFile?.(src.slice(9 + fname.length), dest.slice(9 + fname.length)) ?? false;
|
|
1236
1168
|
}
|
|
1237
|
-
|
|
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
|
}
|