clickgo 3.16.28 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/README.md +19 -8
  2. package/dist/app/{demo/res/video.mp4 → demo.cga} +0 -0
  3. package/dist/app/task.cga +0 -0
  4. package/dist/control/arteditor.cgc +0 -0
  5. package/dist/control/box.cgc +0 -0
  6. package/dist/control/captcha.cgc +0 -0
  7. package/dist/control/common.cgc +0 -0
  8. package/dist/control/desc.cgc +0 -0
  9. package/dist/control/drawer.cgc +0 -0
  10. package/dist/control/echarts.cgc +0 -0
  11. package/dist/control/form.cgc +0 -0
  12. package/dist/control/iconview.cgc +0 -0
  13. package/dist/control/jodit.cgc +0 -0
  14. package/dist/control/map.cgc +0 -0
  15. package/dist/control/monaco.cgc +0 -0
  16. package/dist/control/mpegts.cgc +0 -0
  17. package/dist/control/nav.cgc +0 -0
  18. package/dist/control/novnc.cgc +0 -0
  19. package/dist/control/page.cgc +0 -0
  20. package/dist/control/pdf.cgc +0 -0
  21. package/dist/control/property.cgc +0 -0
  22. package/dist/control/qrcode.cgc +0 -0
  23. package/dist/control/table.cgc +0 -0
  24. package/dist/control/task.cgc +0 -0
  25. package/dist/control/tplink.cgc +0 -0
  26. package/dist/control/tuieditor.cgc +0 -0
  27. package/dist/control/tuiviewer.cgc +0 -0
  28. package/dist/control/tums.cgc +0 -0
  29. package/dist/control/xterm.cgc +0 -0
  30. package/dist/ext/tums-player/audio.wasm +0 -0
  31. package/dist/ext/tums-player/decoder.worker.js +129 -0
  32. package/dist/ext/tums-player/libaudio.js +1 -0
  33. package/dist/ext/tums-player/libaudio.wasm +0 -0
  34. package/dist/ext/tums-player/libffmpeg.js +1 -0
  35. package/dist/ext/tums-player/libffmpeg.wasm +0 -0
  36. package/dist/ext/tums-player/libs.worker.js +92 -0
  37. package/dist/ext/tums-player/tums-player.umd.min.js +35 -0
  38. package/dist/ext/tums-player/webgl.js +2 -0
  39. package/dist/ext/tums-player/webgl.worker.js +42 -0
  40. package/dist/global.css +1 -1
  41. package/dist/index.js +1 -175
  42. package/dist/theme/dark.cgt +0 -0
  43. package/dist/theme/light.cgt +0 -0
  44. package/package.json +16 -10
  45. package/dist/app/demo/app.js +0 -48
  46. package/dist/app/demo/config.json +0 -252
  47. package/dist/app/demo/form/control/alayout2/alayout2.js +0 -43
  48. package/dist/app/demo/form/control/alayout2/alayout2.xml +0 -16
  49. package/dist/app/demo/form/control/alert/alert.js +0 -43
  50. package/dist/app/demo/form/control/alert/alert.xml +0 -32
  51. package/dist/app/demo/form/control/arteditor/arteditor.js +0 -64
  52. package/dist/app/demo/form/control/arteditor/arteditor.xml +0 -12
  53. package/dist/app/demo/form/control/arteditor/img.js +0 -61
  54. package/dist/app/demo/form/control/arteditor/img.xml +0 -6
  55. package/dist/app/demo/form/control/block/block.css +0 -1
  56. package/dist/app/demo/form/control/block/block.scss +0 -17
  57. package/dist/app/demo/form/control/block/block.xml +0 -7
  58. package/dist/app/demo/form/control/box/box.js +0 -87
  59. package/dist/app/demo/form/control/box/box.xml +0 -23
  60. package/dist/app/demo/form/control/button/button.css +0 -1
  61. package/dist/app/demo/form/control/button/button.js +0 -51
  62. package/dist/app/demo/form/control/button/button.scss +0 -18
  63. package/dist/app/demo/form/control/button/button.xml +0 -133
  64. package/dist/app/demo/form/control/calendar/calendar.js +0 -62
  65. package/dist/app/demo/form/control/calendar/calendar.xml +0 -34
  66. package/dist/app/demo/form/control/captcha/captcha.js +0 -60
  67. package/dist/app/demo/form/control/captcha/captcha.xml +0 -10
  68. package/dist/app/demo/form/control/check/check.js +0 -54
  69. package/dist/app/demo/form/control/check/check.xml +0 -17
  70. package/dist/app/demo/form/control/circle/circle.xml +0 -36
  71. package/dist/app/demo/form/control/content/content.js +0 -47
  72. package/dist/app/demo/form/control/content/content.xml +0 -16
  73. package/dist/app/demo/form/control/date/date.js +0 -56
  74. package/dist/app/demo/form/control/date/date.xml +0 -28
  75. package/dist/app/demo/form/control/datepanel/datepanel.js +0 -63
  76. package/dist/app/demo/form/control/datepanel/datepanel.xml +0 -32
  77. package/dist/app/demo/form/control/daterange/daterange.js +0 -54
  78. package/dist/app/demo/form/control/daterange/daterange.xml +0 -22
  79. package/dist/app/demo/form/control/delete/delete.js +0 -47
  80. package/dist/app/demo/form/control/delete/delete.xml +0 -20
  81. package/dist/app/demo/form/control/desc/desc.js +0 -82
  82. package/dist/app/demo/form/control/desc/desc.xml +0 -44
  83. package/dist/app/demo/form/control/dialog/dialog.js +0 -49
  84. package/dist/app/demo/form/control/dialog/dialog.xml +0 -46
  85. package/dist/app/demo/form/control/drawer/drawer.js +0 -45
  86. package/dist/app/demo/form/control/drawer/drawer.xml +0 -34
  87. package/dist/app/demo/form/control/echarts/echarts.js +0 -137
  88. package/dist/app/demo/form/control/echarts/echarts.xml +0 -12
  89. package/dist/app/demo/form/control/empty/empty.js +0 -44
  90. package/dist/app/demo/form/control/empty/empty.xml +0 -9
  91. package/dist/app/demo/form/control/file/file.js +0 -60
  92. package/dist/app/demo/form/control/file/file.xml +0 -25
  93. package/dist/app/demo/form/control/flow/flow.css +0 -1
  94. package/dist/app/demo/form/control/flow/flow.js +0 -86
  95. package/dist/app/demo/form/control/flow/flow.scss +0 -18
  96. package/dist/app/demo/form/control/flow/flow.xml +0 -101
  97. package/dist/app/demo/form/control/form/form.css +0 -1
  98. package/dist/app/demo/form/control/form/form.js +0 -66
  99. package/dist/app/demo/form/control/form/form.scss +0 -5
  100. package/dist/app/demo/form/control/form/form.xml +0 -29
  101. package/dist/app/demo/form/control/grid/grid.js +0 -45
  102. package/dist/app/demo/form/control/grid/grid.xml +0 -27
  103. package/dist/app/demo/form/control/group/group.js +0 -50
  104. package/dist/app/demo/form/control/group/group.xml +0 -46
  105. package/dist/app/demo/form/control/hske/hske.js +0 -44
  106. package/dist/app/demo/form/control/hske/hske.xml +0 -19
  107. package/dist/app/demo/form/control/html/html.js +0 -70
  108. package/dist/app/demo/form/control/html/html.xml +0 -18
  109. package/dist/app/demo/form/control/icon/icon.xml +0 -49
  110. package/dist/app/demo/form/control/iconview/iconview.js +0 -174
  111. package/dist/app/demo/form/control/iconview/iconview.xml +0 -45
  112. package/dist/app/demo/form/control/img/img.xml +0 -26
  113. package/dist/app/demo/form/control/imgviewer/imgviewer.js +0 -46
  114. package/dist/app/demo/form/control/imgviewer/imgviewer.xml +0 -9
  115. package/dist/app/demo/form/control/jodit/jodit.js +0 -64
  116. package/dist/app/demo/form/control/jodit/jodit.xml +0 -24
  117. package/dist/app/demo/form/control/label/label.js +0 -51
  118. package/dist/app/demo/form/control/label/label.xml +0 -34
  119. package/dist/app/demo/form/control/layout/layout.js +0 -45
  120. package/dist/app/demo/form/control/layout/layout.xml +0 -18
  121. package/dist/app/demo/form/control/link/link.js +0 -42
  122. package/dist/app/demo/form/control/link/link.xml +0 -30
  123. package/dist/app/demo/form/control/list/list.css +0 -1
  124. package/dist/app/demo/form/control/list/list.js +0 -375
  125. package/dist/app/demo/form/control/list/list.scss +0 -7
  126. package/dist/app/demo/form/control/list/list.xml +0 -150
  127. package/dist/app/demo/form/control/loading/loading.xml +0 -8
  128. package/dist/app/demo/form/control/map/map.js +0 -206
  129. package/dist/app/demo/form/control/map/map.xml +0 -44
  130. package/dist/app/demo/form/control/marquee/marquee.js +0 -64
  131. package/dist/app/demo/form/control/marquee/marquee.xml +0 -33
  132. package/dist/app/demo/form/control/menu/menu.js +0 -56
  133. package/dist/app/demo/form/control/menu/menu.xml +0 -125
  134. package/dist/app/demo/form/control/monaco/monaco.js +0 -136
  135. package/dist/app/demo/form/control/monaco/monaco.xml +0 -28
  136. package/dist/app/demo/form/control/mpegts/mpegts.js +0 -70
  137. package/dist/app/demo/form/control/mpegts/mpegts.xml +0 -11
  138. package/dist/app/demo/form/control/nav/nav.js +0 -60
  139. package/dist/app/demo/form/control/nav/nav.xml +0 -106
  140. package/dist/app/demo/form/control/novnc/novnc.js +0 -75
  141. package/dist/app/demo/form/control/novnc/novnc.xml +0 -13
  142. package/dist/app/demo/form/control/page/page.js +0 -51
  143. package/dist/app/demo/form/control/page/page.xml +0 -22
  144. package/dist/app/demo/form/control/palette/palette.js +0 -46
  145. package/dist/app/demo/form/control/palette/palette.xml +0 -16
  146. package/dist/app/demo/form/control/panel/panel.js +0 -106
  147. package/dist/app/demo/form/control/panel/panel.xml +0 -16
  148. package/dist/app/demo/form/control/panel/test1.js +0 -84
  149. package/dist/app/demo/form/control/panel/test1.xml +0 -22
  150. package/dist/app/demo/form/control/panel/test2.xml +0 -4
  151. package/dist/app/demo/form/control/pdf/pdf.js +0 -65
  152. package/dist/app/demo/form/control/pdf/pdf.xml +0 -12
  153. package/dist/app/demo/form/control/pdf/test.pdf +0 -0
  154. package/dist/app/demo/form/control/progress/progress.js +0 -54
  155. package/dist/app/demo/form/control/progress/progress.xml +0 -9
  156. package/dist/app/demo/form/control/property/property.js +0 -166
  157. package/dist/app/demo/form/control/property/property.xml +0 -6
  158. package/dist/app/demo/form/control/qrcode/qrcode.js +0 -45
  159. package/dist/app/demo/form/control/qrcode/qrcode.xml +0 -13
  160. package/dist/app/demo/form/control/radio/radio.js +0 -51
  161. package/dist/app/demo/form/control/radio/radio.xml +0 -15
  162. package/dist/app/demo/form/control/scroll/scroll.js +0 -52
  163. package/dist/app/demo/form/control/scroll/scroll.xml +0 -38
  164. package/dist/app/demo/form/control/select/select.js +0 -273
  165. package/dist/app/demo/form/control/select/select.xml +0 -141
  166. package/dist/app/demo/form/control/setting/setting.xml +0 -11
  167. package/dist/app/demo/form/control/sgroup/sgroup.xml +0 -28
  168. package/dist/app/demo/form/control/step/step.js +0 -61
  169. package/dist/app/demo/form/control/step/step.xml +0 -16
  170. package/dist/app/demo/form/control/svg/svg.js +0 -61
  171. package/dist/app/demo/form/control/svg/svg.xml +0 -24
  172. package/dist/app/demo/form/control/switch/switch.js +0 -53
  173. package/dist/app/demo/form/control/switch/switch.xml +0 -29
  174. package/dist/app/demo/form/control/tab/tab.js +0 -102
  175. package/dist/app/demo/form/control/tab/tab.xml +0 -22
  176. package/dist/app/demo/form/control/table/table.js +0 -218
  177. package/dist/app/demo/form/control/table/table.xml +0 -97
  178. package/dist/app/demo/form/control/tag/tag.js +0 -44
  179. package/dist/app/demo/form/control/tag/tag.xml +0 -52
  180. package/dist/app/demo/form/control/text/text.js +0 -116
  181. package/dist/app/demo/form/control/text/text.xml +0 -70
  182. package/dist/app/demo/form/control/timeline/timeline.js +0 -43
  183. package/dist/app/demo/form/control/timeline/timeline.xml +0 -19
  184. package/dist/app/demo/form/control/tip/tip.js +0 -43
  185. package/dist/app/demo/form/control/tip/tip.xml +0 -42
  186. package/dist/app/demo/form/control/tplink/tplink.js +0 -74
  187. package/dist/app/demo/form/control/tplink/tplink.xml +0 -13
  188. package/dist/app/demo/form/control/tuieditor/tuieditor.js +0 -62
  189. package/dist/app/demo/form/control/tuieditor/tuieditor.xml +0 -22
  190. package/dist/app/demo/form/control/tuiviewer/tuiviewer.js +0 -45
  191. package/dist/app/demo/form/control/tuiviewer/tuiviewer.xml +0 -14
  192. package/dist/app/demo/form/control/uploader/uploader.js +0 -80
  193. package/dist/app/demo/form/control/uploader/uploader.xml +0 -15
  194. package/dist/app/demo/form/control/vflow/vflow.css +0 -1
  195. package/dist/app/demo/form/control/vflow/vflow.js +0 -101
  196. package/dist/app/demo/form/control/vflow/vflow.scss +0 -22
  197. package/dist/app/demo/form/control/vflow/vflow.xml +0 -89
  198. package/dist/app/demo/form/control/video/video.js +0 -47
  199. package/dist/app/demo/form/control/video/video.xml +0 -14
  200. package/dist/app/demo/form/control/web/web.js +0 -43
  201. package/dist/app/demo/form/control/web/web.xml +0 -4
  202. package/dist/app/demo/form/control/xterm/xterm.js +0 -100
  203. package/dist/app/demo/form/control/xterm/xterm.xml +0 -6
  204. package/dist/app/demo/form/event/form/form.css +0 -1
  205. package/dist/app/demo/form/event/form/form.js +0 -169
  206. package/dist/app/demo/form/event/form/form.scss +0 -24
  207. package/dist/app/demo/form/event/form/form.xml +0 -16
  208. package/dist/app/demo/form/event/other/other.js +0 -78
  209. package/dist/app/demo/form/event/other/other.xml +0 -5
  210. package/dist/app/demo/form/event/screen/screen.js +0 -86
  211. package/dist/app/demo/form/event/screen/screen.xml +0 -9
  212. package/dist/app/demo/form/event/task/task.js +0 -96
  213. package/dist/app/demo/form/event/task/task.xml +0 -20
  214. package/dist/app/demo/form/main.css +0 -1
  215. package/dist/app/demo/form/main.js +0 -515
  216. package/dist/app/demo/form/main.scss +0 -9
  217. package/dist/app/demo/form/main.xml +0 -163
  218. package/dist/app/demo/form/method/acontrol/acontrol.js +0 -42
  219. package/dist/app/demo/form/method/acontrol/acontrol.xml +0 -5
  220. package/dist/app/demo/form/method/aform/aform.js +0 -104
  221. package/dist/app/demo/form/method/aform/aform.xml +0 -60
  222. package/dist/app/demo/form/method/aform/sd.js +0 -47
  223. package/dist/app/demo/form/method/aform/sd.xml +0 -7
  224. package/dist/app/demo/form/method/core/core.js +0 -86
  225. package/dist/app/demo/form/method/core/core.xml +0 -23
  226. package/dist/app/demo/form/method/dom/dom.css +0 -1
  227. package/dist/app/demo/form/method/dom/dom.js +0 -228
  228. package/dist/app/demo/form/method/dom/dom.scss +0 -10
  229. package/dist/app/demo/form/method/dom/dom.xml +0 -76
  230. package/dist/app/demo/form/method/form/form.js +0 -244
  231. package/dist/app/demo/form/method/form/form.xml +0 -74
  232. package/dist/app/demo/form/method/form/test.xml +0 -5
  233. package/dist/app/demo/form/method/fs/fs.js +0 -209
  234. package/dist/app/demo/form/method/fs/fs.xml +0 -18
  235. package/dist/app/demo/form/method/fs/text.js +0 -48
  236. package/dist/app/demo/form/method/fs/text.xml +0 -3
  237. package/dist/app/demo/form/method/native/native.js +0 -100
  238. package/dist/app/demo/form/method/native/native.xml +0 -22
  239. package/dist/app/demo/form/method/storage/storage.js +0 -77
  240. package/dist/app/demo/form/method/storage/storage.xml +0 -18
  241. package/dist/app/demo/form/method/system/system.js +0 -63
  242. package/dist/app/demo/form/method/system/system.xml +0 -14
  243. package/dist/app/demo/form/method/task/locale1.json +0 -3
  244. package/dist/app/demo/form/method/task/locale2.json +0 -3
  245. package/dist/app/demo/form/method/task/task.js +0 -177
  246. package/dist/app/demo/form/method/task/task.xml +0 -61
  247. package/dist/app/demo/form/method/theme/theme.js +0 -92
  248. package/dist/app/demo/form/method/theme/theme.xml +0 -12
  249. package/dist/app/demo/form/method/tool/tool.js +0 -122
  250. package/dist/app/demo/form/method/tool/tool.xml +0 -40
  251. package/dist/app/demo/form/method/zip/zip.js +0 -126
  252. package/dist/app/demo/form/method/zip/zip.xml +0 -12
  253. package/dist/app/demo/form/solution/backpanel/backpanel.js +0 -76
  254. package/dist/app/demo/form/solution/backpanel/backpanel.xml +0 -31
  255. package/dist/app/demo/global.css +0 -3
  256. package/dist/app/demo/res/custombtn.cgc +0 -0
  257. package/dist/app/demo/res/icon.svg +0 -5
  258. package/dist/app/demo/res/img.jpg +0 -0
  259. package/dist/app/demo/res/marker.svg +0 -5
  260. package/dist/app/demo/res/r-1.svg +0 -32
  261. package/dist/app/demo/res/r-2.svg +0 -38
  262. package/dist/app/demo/res/sql.svg +0 -25
  263. package/dist/app/demo/res/txt.svg +0 -21
  264. package/dist/app/demo/res/zip.svg +0 -21
  265. package/dist/app/task/app.js +0 -46
  266. package/dist/app/task/config.json +0 -29
  267. package/dist/app/task/form/bar/bar.js +0 -406
  268. package/dist/app/task/form/bar/bar.xml +0 -46
  269. package/dist/app/task/form/desktop/desktop.xml +0 -1
  270. package/dist/app/task/locale/en.json +0 -11
  271. package/dist/app/task/locale/ja.json +0 -11
  272. package/dist/app/task/locale/sc.json +0 -11
  273. package/dist/app/task/locale/tc.json +0 -11
  274. package/dist/clickgo.d.ts +0 -22
  275. package/dist/clickgo.js +0 -109
  276. package/dist/index.d.ts +0 -55
  277. package/dist/lib/control.d.ts +0 -53
  278. package/dist/lib/control.js +0 -584
  279. package/dist/lib/core.d.ts +0 -47
  280. package/dist/lib/core.js +0 -1005
  281. package/dist/lib/dom.d.ts +0 -75
  282. package/dist/lib/dom.js +0 -2147
  283. package/dist/lib/form.d.ts +0 -222
  284. package/dist/lib/form.js +0 -2961
  285. package/dist/lib/fs.d.ts +0 -35
  286. package/dist/lib/fs.js +0 -1183
  287. package/dist/lib/native.d.ts +0 -43
  288. package/dist/lib/native.js +0 -197
  289. package/dist/lib/storage.d.ts +0 -6
  290. package/dist/lib/storage.js +0 -215
  291. package/dist/lib/task.d.ts +0 -32
  292. package/dist/lib/task.js +0 -1831
  293. package/dist/lib/theme.d.ts +0 -8
  294. package/dist/lib/theme.js +0 -176
  295. package/dist/lib/tool.d.ts +0 -122
  296. package/dist/lib/tool.js +0 -1021
  297. package/dist/lib/zip.d.ts +0 -40
  298. package/dist/lib/zip.js +0 -382
  299. package/dist/theme/blue.cgt +0 -0
  300. package/dist/theme/byterun.cgt +0 -0
  301. package/types/index.d.ts +0 -1374
package/dist/lib/fs.js DELETED
@@ -1,1183 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.mount = mount;
37
- exports.unmount = unmount;
38
- exports.getContent = getContent;
39
- exports.putContent = putContent;
40
- exports.readLink = readLink;
41
- exports.symlink = symlink;
42
- exports.unlink = unlink;
43
- exports.stats = stats;
44
- exports.isDir = isDir;
45
- exports.isFile = isFile;
46
- exports.mkdir = mkdir;
47
- exports.rmdir = rmdir;
48
- exports.rmdirDeep = rmdirDeep;
49
- exports.chmod = chmod;
50
- exports.rename = rename;
51
- exports.readDir = readDir;
52
- exports.copyFolder = copyFolder;
53
- exports.copyFile = copyFile;
54
- const tool = __importStar(require("./tool"));
55
- const task = __importStar(require("./task"));
56
- const form = __importStar(require("./form"));
57
- const core = __importStar(require("./core"));
58
- const native = __importStar(require("./native"));
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'];
60
- const localeData = {
61
- 'en': {
62
- 'apply-unmount': 'Are you sure to unmount the "?" mount point?',
63
- },
64
- 'sc': {
65
- 'apply-unmount': '确定卸载“?”挂载点吗?'
66
- },
67
- 'tc': {
68
- 'apply-unmount': '確定卸載「?」掛載點嗎?'
69
- },
70
- 'ja': {
71
- 'apply-unmount': '「?」マウントポイントをアンマウントしてよろしいですか?'
72
- },
73
- 'ko': {
74
- 'apply-unmount': '"?" 마운트 지점을 언마운트하시겠습니까?'
75
- },
76
- 'th': {
77
- 'apply-unmount': 'คุณแน่ใจหรือว่าต้องการยกเลิกการติดตั้งจุดติดตั้ง "?"'
78
- },
79
- 'es': {
80
- 'apply-unmount': '¿Está seguro de que desea desmontar el punto de montaje "?"'
81
- },
82
- 'de': {
83
- 'apply-unmount': 'Möchten Sie den Einhängepunkt "?" wirklich demontieren?'
84
- },
85
- 'fr': {
86
- 'apply-unmount': 'Voulez-vous vraiment démonter le point de montage "?"'
87
- },
88
- 'pt': {
89
- 'apply-unmount': 'Tem certeza de que deseja desmontar o ponto de montagem "?"'
90
- },
91
- 'ru': {
92
- 'apply-unmount': 'Вы уверены, что хотите отмонтировать точку монтирования "?"'
93
- },
94
- 'vi': {
95
- 'apply-unmount': 'Bạn có chắc chắn muốn tháo dỡ điểm gắn "?" không?'
96
- }
97
- };
98
- const mounts = {};
99
- function getMountName(path) {
100
- const io = path.slice(9).indexOf('/');
101
- return io === -1 ? path.slice(9) : path.slice(9, io + 9);
102
- }
103
- function mount(name, handler, taskId) {
104
- if (mounts[name]) {
105
- return false;
106
- }
107
- if (!/^[a-zA-Z][\w]+$/.test(name)) {
108
- return false;
109
- }
110
- if (taskId) {
111
- const t = task.list[taskId];
112
- if (t) {
113
- const val = 'fs./mounted/' + name + '/w';
114
- if (!t.runtime.permissions.includes(val)) {
115
- t.runtime.permissions.push(val);
116
- }
117
- }
118
- }
119
- handler.date = new Date();
120
- mounts[name] = handler;
121
- return true;
122
- }
123
- async function unmount(name) {
124
- if (!mounts[name]) {
125
- return true;
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;
133
- }
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)) {
152
- return null;
153
- }
154
- ourl = tool.urlResolve(__dirname, './').slice(0, -1) + fpath;
155
- }
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 ?? ''}`;
165
- }
166
- if (options.progress) {
167
- blob = await tool.request(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
168
- 'headers': headers,
169
- 'progress': options.progress,
170
- 'responseType': 'blob'
171
- });
172
- }
173
- else {
174
- blob = await (await fetch(ourl + (!ourl.startsWith(loader.cdn) ? rand : ''), {
175
- 'headers': headers
176
- })).blob();
177
- }
178
- if (!blob) {
179
- return null;
180
- }
181
- if (!encoding) {
182
- return blob;
183
- }
184
- return await new Promise(function (resolve) {
185
- const fr = new FileReader();
186
- fr.addEventListener('load', function () {
187
- resolve(fr.result);
188
- });
189
- fr.readAsText(blob, encoding);
190
- });
191
- }
192
- catch {
193
- return null;
194
- }
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;
200
- }
201
- if (path.startsWith('/mounted/')) {
202
- const name = getMountName(path);
203
- const hanlder = mounts[name];
204
- if (!hanlder) {
205
- return null;
206
- }
207
- return hanlder.getContent?.(path.slice(9 + name.length), options) ?? null;
208
- }
209
- if (options.progress) {
210
- delete options.progress;
211
- }
212
- const rtn = await native.invoke('cg-fs-getContent', native.getToken(), fpath, options);
213
- if (!rtn) {
214
- return null;
215
- }
216
- if (typeof rtn === 'string') {
217
- return rtn;
218
- }
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) {
225
- return null;
226
- }
227
- if (path.startsWith('/current/')) {
228
- return getContent(task.list[taskId].current + fpath, options, taskId);
229
- }
230
- const file = task.list[taskId].app.files[fpath];
231
- if (!file) {
232
- return null;
233
- }
234
- if (typeof file === 'string') {
235
- return file;
236
- }
237
- if (!options.encoding) {
238
- if (start === undefined && end === undefined) {
239
- return file;
240
- }
241
- return file.slice(start, end, file.type);
242
- }
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
- }
255
- }
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]) {
265
- return false;
266
- }
267
- if (path.startsWith('/mounted/')) {
268
- const name = getMountName(path);
269
- const hanlder = mounts[name];
270
- if (!hanlder) {
271
- return false;
272
- }
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());
278
- }
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) {
286
- return false;
287
- }
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;
310
- }
311
- return hanlder.readLink?.(path.slice(9 + name.length), encoding) ?? null;
312
- }
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;
321
- }
322
- return task.list[taskId].current;
323
- }
324
- else {
325
- return null;
326
- }
327
- }
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]) {
337
- return false;
338
- }
339
- if (filePath.startsWith('/mounted/')) {
340
- const fname = getMountName(filePath);
341
- const lname = getMountName(linkPath);
342
- if (fname !== lname) {
343
- return false;
344
- }
345
- const hanlder = mounts[fname];
346
- if (!hanlder) {
347
- return false;
348
- }
349
- return hanlder.symlink?.(filePath.slice(9 + fname.length), linkPath.slice(9 + fname.length), type) ?? false;
350
- }
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]) {
378
- return false;
379
- }
380
- if (path.startsWith('/mounted/')) {
381
- const name = getMountName(path);
382
- const hanlder = mounts[name];
383
- if (!hanlder) {
384
- return false;
385
- }
386
- return hanlder.unlink?.(path.slice(9 + name.length)) ?? false;
387
- }
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) {
395
- return false;
396
- }
397
- return unlink(task.list[taskId].current + fpath, taskId);
398
- }
399
- else {
400
- return false;
401
- }
402
- }
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
- }
451
- const ms = date.getTime();
452
- const mms = mdate.getTime();
453
- return {
454
- isFile: function () {
455
- return true;
456
- },
457
- isDirectory: function () {
458
- return false;
459
- },
460
- isSymbolicLink: function () {
461
- return false;
462
- },
463
- 'size': hlength ? parseInt(hlength) : 0,
464
- 'blksize': hlength ? parseInt(hlength) : 0,
465
- 'atimeMs': ms,
466
- 'mtimeMs': mms,
467
- 'ctimeMs': mms,
468
- 'birthtimeMs': ms,
469
- 'atime': date,
470
- 'mtime': mdate,
471
- 'ctime': mdate,
472
- 'birthtime': date
473
- };
474
- }
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 + '/')) {
539
- return null;
540
- }
541
- fpath += '/';
542
- }
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();
584
- return {
585
- isFile: function () {
586
- return false;
587
- },
588
- isDirectory: function () {
589
- return true;
590
- },
591
- isSymbolicLink: function () {
592
- return false;
593
- },
594
- 'size': 0,
595
- 'blksize': 0,
596
- 'atimeMs': ms,
597
- 'mtimeMs': ms,
598
- 'ctimeMs': ms,
599
- 'birthtimeMs': ms,
600
- 'atime': hanlder.date,
601
- 'mtime': hanlder.date,
602
- 'ctime': hanlder.date,
603
- 'birthtime': hanlder.date
604
- };
605
- }
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];
621
- const date = new Date();
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
- }
630
- return {
631
- isFile: function () {
632
- return true;
633
- },
634
- isDirectory: function () {
635
- return false;
636
- },
637
- isSymbolicLink: function () {
638
- return false;
639
- },
640
- 'size': size,
641
- 'blksize': size,
642
- 'atimeMs': ms,
643
- 'mtimeMs': ms,
644
- 'ctimeMs': ms,
645
- 'birthtimeMs': ms,
646
- 'atime': date,
647
- 'mtime': date,
648
- 'ctime': date,
649
- 'birthtime': date
650
- };
651
- }
652
- if (!fpath.endsWith('/')) {
653
- fpath += '/';
654
- }
655
- for (const p in task.list[taskId].app.files) {
656
- if (!p.startsWith(fpath)) {
657
- continue;
658
- }
659
- const date = new Date();
660
- const ms = date.getTime();
661
- return {
662
- isFile: function () {
663
- return false;
664
- },
665
- isDirectory: function () {
666
- return true;
667
- },
668
- isSymbolicLink: function () {
669
- return false;
670
- },
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
681
- };
682
- }
683
- return null;
684
- }
685
- else {
686
- return null;
687
- }
688
- }
689
- async function isDir(path, taskId) {
690
- const pstats = await stats(path, taskId);
691
- if (!pstats?.isDirectory()) {
692
- return false;
693
- }
694
- return pstats;
695
- }
696
- async function isFile(path, taskId) {
697
- const pstats = await stats(path, taskId);
698
- if (!pstats?.isFile()) {
699
- return false;
700
- }
701
- return pstats;
702
- }
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]) {
715
- return false;
716
- }
717
- if (path.startsWith('/mounted/')) {
718
- const name = getMountName(path);
719
- const hanlder = mounts[name];
720
- if (!hanlder) {
721
- return false;
722
- }
723
- return hanlder.mkdir?.(path.slice(9 + name.length), mode) ?? false;
724
- }
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) {
732
- return false;
733
- }
734
- return mkdir(task.list[taskId].current + fpath, mode, taskId);
735
- }
736
- else {
737
- return false;
738
- }
739
- }
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]) {
749
- return false;
750
- }
751
- if (path.startsWith('/mounted/')) {
752
- const name = getMountName(path);
753
- const hanlder = mounts[name];
754
- if (!hanlder) {
755
- return false;
756
- }
757
- return hanlder.rmdir?.(path.slice(9 + name.length)) ?? false;
758
- }
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) {
766
- return false;
767
- }
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) {
783
- return false;
784
- }
785
- if (stat.isDirectory()) {
786
- const rtn = await rmdirDeep(path + item.name, taskId);
787
- if (!rtn) {
788
- return false;
789
- }
790
- }
791
- else {
792
- const rtn = await unlink(path + item.name, taskId);
793
- if (!rtn) {
794
- return false;
795
- }
796
- }
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]) {
809
- return false;
810
- }
811
- if (path.startsWith('/mounted/')) {
812
- const name = getMountName(path);
813
- const hanlder = mounts[name];
814
- if (!hanlder) {
815
- return false;
816
- }
817
- return hanlder.chmod?.(path.slice(9 + name.length), mod) ?? false;
818
- }
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) {
826
- return false;
827
- }
828
- return chmod(task.list[taskId].current + fpath, mod, taskId);
829
- }
830
- else {
831
- return false;
832
- }
833
- }
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]) {
848
- return false;
849
- }
850
- r = await task.checkPermission('fs.' + newPath + 'w', false, undefined, taskId);
851
- if (!r[0]) {
852
- return false;
853
- }
854
- if (oldPath.startsWith('/mounted/')) {
855
- const fname = getMountName(oldPath);
856
- const lname = getMountName(newPath);
857
- if (fname !== lname) {
858
- return false;
859
- }
860
- const hanlder = mounts[fname];
861
- if (!hanlder) {
862
- return false;
863
- }
864
- return hanlder.rename?.(oldPath.slice(9 + fname.length), newPath.slice(9 + fname.length)) ?? false;
865
- }
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) {
873
- return false;
874
- }
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'
920
- }
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
- });
935
- }
936
- if (taskId) {
937
- list.push({
938
- isFile: function () {
939
- return false;
940
- },
941
- isDirectory: function () {
942
- return false;
943
- },
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
- });
983
- }
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) {
1005
- list.push({
1006
- isFile: function () {
1007
- return false;
1008
- },
1009
- isDirectory: function () {
1010
- return true;
1011
- },
1012
- isSymbolicLink: function () {
1013
- return false;
1014
- },
1015
- 'name': name
1016
- });
1017
- }
1018
- return list;
1019
- }
1020
- const r = await task.checkPermission('fs.' + path + 'r', false, undefined, taskId);
1021
- if (!r[0]) {
1022
- return [];
1023
- }
1024
- if (path.startsWith('/mounted/')) {
1025
- const name = getMountName(path);
1026
- const hanlder = mounts[name];
1027
- if (!hanlder) {
1028
- return [];
1029
- }
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
- }
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);
1068
- list.push({
1069
- isFile: function () {
1070
- return false;
1071
- },
1072
- isDirectory: function () {
1073
- return true;
1074
- },
1075
- isSymbolicLink: function () {
1076
- return false;
1077
- },
1078
- 'name': name
1079
- });
1080
- }
1081
- continue;
1082
- }
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
- });
1095
- }
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;
1114
- }
1115
- else {
1116
- num += r;
1117
- }
1118
- }
1119
- else if (item.isFile()) {
1120
- if (ignore.length > 0 && tool.match(item.name, ignore)) {
1121
- continue;
1122
- }
1123
- if (!checkTo) {
1124
- if (!await mkdir(to, undefined, taskId)) {
1125
- return -1;
1126
- }
1127
- checkTo = true;
1128
- }
1129
- if (!(await copyFile(from + item.name, to + item.name, taskId))) {
1130
- continue;
1131
- }
1132
- ++num;
1133
- }
1134
- }
1135
- return num;
1136
- }
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]) {
1151
- return false;
1152
- }
1153
- r = await task.checkPermission('fs.' + dest + 'w', false, undefined, taskId);
1154
- if (!r[0]) {
1155
- return false;
1156
- }
1157
- if (src.startsWith('/mounted/')) {
1158
- const fname = getMountName(src);
1159
- const lname = getMountName(dest);
1160
- if (fname !== lname) {
1161
- return false;
1162
- }
1163
- const hanlder = mounts[fname];
1164
- if (!hanlder) {
1165
- return false;
1166
- }
1167
- return hanlder.copyFile?.(src.slice(9 + fname.length), dest.slice(9 + fname.length)) ?? false;
1168
- }
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) {
1176
- return false;
1177
- }
1178
- return copyFile(task.list[taskId].current + sfpath, task.list[taskId].current + dfpath, taskId);
1179
- }
1180
- else {
1181
- return false;
1182
- }
1183
- }