clickgo 3.11.2 → 3.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -28,7 +28,7 @@ Load the module loader first, and then load it using the module loader.
28
28
  **index.html**
29
29
 
30
30
  ```html
31
- <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.5.1/dist/loader.min.js?path=index&npm={'clickgo':'3.11.2'}"></script>
31
+ <script src="https://cdn.jsdelivr.net/npm/@litert/loader@3.5.1/dist/loader.min.js?path=index&npm={'clickgo':'3.11.3'}"></script>
32
32
  ```
33
33
 
34
34
  **index.js**
@@ -108,6 +108,7 @@
108
108
  "/form/control/tag/tag.xml",
109
109
  "/form/control/text/text.js",
110
110
  "/form/control/text/text.xml",
111
+ "/form/control/tip/tip.xml",
111
112
  "/form/control/tuieditor/tuieditor.js",
112
113
  "/form/control/tuieditor/tuieditor.xml",
113
114
  "/form/control/vflow/vflow.css",
@@ -5,6 +5,7 @@
5
5
  <layout gutter="10">
6
6
  <button v-if="selected[0] !== './test1'" style="flex: 1;" @click="go">Go test1 with {'type': 'show'}</button>
7
7
  <button style="flex: 1;" @click="ssend">send {'type': 'send'}</button>
8
+ <button style="flex: 1;" @click="sendToPanel(refs.panel, {'type': 's2p'})">sendToPanel {'type': 's2p'}</button>
8
9
  </layout>
9
10
  <layout gutter="10">
10
11
  <button style="flex: 1;" @click="plain = !plain">{{plain ? '' : '!'}}plain</button>
@@ -5,7 +5,8 @@
5
5
  <label>Parent data: {{rootForm.parentData}}</label>
6
6
  <label>Qs: {{qs}}</label>
7
7
  <label>rootMountData: {{rootMountData}}</label>
8
- <button @click="click" style="height: 30px;">Hi</button>
8
+ <button @click="click">Hi</button>
9
+ <button @click="sendToRootPanel({'a':1})" style="height: 30px;">sendToRootPanel({'a':1})</button>
9
10
  <layout>
10
11
  <button style="padding: 15px 30px;" area="split">
11
12
  Padding 10px 20px with pop
@@ -5,20 +5,20 @@
5
5
  <svg :layout="layout" :src="file" style="width: 64px; height: 64px;" />
6
6
  </layout>
7
7
  <layout gutter="10" style="margin-top: 10px;">
8
- <button @click="color = undefined" style="padding: 0 10px; flex: 1; width: 0;">Default</button>
9
- <button @click="color = 'green'" style="padding: 0 10px; flex: 1; width: 0;">Green</button>
10
- <button @click="color = 'red'" style="padding: 0 10px; flex: 1; width: 0;">Red</button>
8
+ <button @click="color = undefined" style="flex: 1; width: 0;">Default</button>
9
+ <button @click="color = 'green'" style="flex: 1; width: 0;">Green</button>
10
+ <button @click="color = 'red'" style="flex: 1; width: 0;">Red</button>
11
11
  </layout>
12
12
  <layout gutter="10" style="margin-top: 10px;">
13
- <button @click="i = 0" style="padding: 0 10px; flex: 1; width: 0;">Shape 0</button>
14
- <button @click="i = 1" style="padding: 0 10px; flex: 1; width: 0;">1</button>
15
- <button @click="i = 2" style="padding: 0 10px; flex: 1; width: 0;">2</button>
16
- <button @click="i = 3" style="padding: 0 10px; flex: 1; width: 0;">None</button>
13
+ <button @click="i = 0" style="flex: 1; width: 0;">Shape 0</button>
14
+ <button @click="i = 1" style="flex: 1; width: 0;">1</button>
15
+ <button @click="i = 2" style="flex: 1; width: 0;">2</button>
16
+ <button @click="i = 3" style="flex: 1; width: 0;">None</button>
17
17
  </layout>
18
18
  <layout gutter="10" style="margin-top: 10px;">
19
- <button @click="f = 0" style="padding: 0 10px; flex: 1; width: 0;">File 0</button>
20
- <button @click="f = 1" style="padding: 0 10px; flex: 1; width: 0;">1</button>
21
- <button @click="f = 2" style="padding: 0 10px; flex: 1; width: 0;">2</button>
22
- <button @click="f = 3" style="padding: 0 10px; flex: 1; width: 0;">None</button>
19
+ <button @click="f = 0" style="flex: 1; width: 0;">File 0</button>
20
+ <button @click="f = 1" style="flex: 1; width: 0;">1</button>
21
+ <button @click="f = 2" style="flex: 1; width: 0;">2</button>
22
+ <button @click="f = 3" style="flex: 1; width: 0;">None</button>
23
23
  </layout>
24
24
  </form>
@@ -0,0 +1,13 @@
1
+ <form width="300" height="500" title="Tip">
2
+ <layout direction="v" gutter="10" style="flex: 1; padding: 10px;">
3
+ <tip label="ok">
4
+ <button>123</button>
5
+ </tip>
6
+ <tip label="Click me">
7
+ <button>456</button>
8
+ </tip>
9
+ <tip label="This is a select">
10
+ <select :data="[1,2,3,4]"></select>
11
+ </tip>
12
+ </layout>
13
+ </form>
@@ -172,6 +172,10 @@ class default_1 extends clickgo.form.AbstractForm {
172
172
  frm = yield clickgo.form.create('/form/control/tag/tag');
173
173
  break;
174
174
  }
175
+ case 'ctip': {
176
+ frm = yield clickgo.form.create('/form/control/tip/tip');
177
+ break;
178
+ }
175
179
  case 'cxterm': {
176
180
  frm = yield clickgo.form.create(xterm_1.default);
177
181
  break;
@@ -75,6 +75,9 @@
75
75
  <button @click="openForm('cstep')">Step</button>
76
76
  <button @click="openForm('ctag')">Tag</button>
77
77
  </layout>
78
+ <layout gutter="10">
79
+ <button @click="openForm('ctip')">Tip</button>
80
+ </layout>
78
81
  <layout gutter="10">
79
82
  <button @click="openForm('cmonaco')">Monaco</button>
80
83
  <button @click="openForm('cxterm')">Xterm</button>
@@ -66,6 +66,8 @@ class default_1 extends clickgo.form.AbstractForm {
66
66
  this.url = 'HtTp://uSer:pAss@sUBDom.TopdOm23.CoM:29819/Admxw2Ksiz/dszas?Mdi=KdiMs1&a=JDd#hehHe';
67
67
  this.url1 = '/abc/def/hehe';
68
68
  this.url2 = '../bb.index';
69
+ this.second = '4531';
70
+ this.qs = 'a=1&b=2&c=3';
69
71
  }
70
72
  sleep() {
71
73
  return __awaiter(this, void 0, void 0, function* () {
@@ -98,5 +100,20 @@ class default_1 extends clickgo.form.AbstractForm {
98
100
  urlResolve() {
99
101
  clickgo.form.dialog(clickgo.tool.urlResolve(this.url1, this.url2)).catch((e) => { throw e; });
100
102
  }
103
+ formatSecond() {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ yield clickgo.form.dialog(clickgo.tool.formatSecond(parseInt(this.second) || 0));
106
+ });
107
+ }
108
+ queryParse() {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ yield clickgo.form.dialog(JSON.stringify(clickgo.tool.queryParse(this.qs)));
111
+ });
112
+ }
113
+ queryStringify() {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ yield clickgo.form.dialog(clickgo.tool.queryStringify({ 'a': 1, 'b': 'c' }));
116
+ });
117
+ }
101
118
  }
102
119
  exports.default = default_1;
@@ -1,4 +1,4 @@
1
- <form width="350" height="400" title="Library tool">
1
+ <form width="350" height="500" title="Library tool">
2
2
  <flow direction="v" style="flex: 1; padding: 10px;">
3
3
  <layout direction="v" gutter="10">
4
4
  <button @click="sleep">{{sleeping ? 'Waiting...' : 'sleep(1000)'}}</button>
@@ -7,12 +7,12 @@
7
7
  <layout gutter="10">
8
8
  <text v-model="min" style="flex: 1;"></text>
9
9
  <text v-model="max" style="flex: 1;"></text>
10
- <button @click="rand" style="padding: 0 10px;">rand({{min}}, {{max}})</button>
10
+ <button @click="rand">rand({{min}}, {{max}})</button>
11
11
  </layout>
12
12
  <layout gutter="10">
13
13
  <text v-model="length" style="width: 30px;"></text>
14
14
  <text v-model="block" style="flex: 1;"></text>
15
- <button @click="random" style="padding: 0 10px;">random({{length}}, RANDOM_LN, '{{block}}')</button>
15
+ <button @click="random">random({{length}}, RANDOM_LN, '{{block}}')</button>
16
16
  </layout>
17
17
  <button @click="escapeHTML">escapeHTML('{{purifyTxt.slice(0, 5).replace("'", "\\'")}}...')</button>
18
18
  <button @click="rgb2hsl">rgb2hsl('9,105,218')</button>
@@ -22,6 +22,15 @@
22
22
  <text v-model="url1"></text>
23
23
  <text v-model="url2"></text>
24
24
  <button @click="urlResolve">urlResolve('{{url1.slice(0, 5)}}...', '{{url2.slice(0, 5)}}...')</button>
25
+ <layout gutter="10">
26
+ <text v-model="second" style="flex: 1;"></text>
27
+ <button @click="formatSecond">formatSecond({{second}})</button>
28
+ </layout>
29
+ <layout gutter="10">
30
+ <text v-model="qs" style="flex: 1;"></text>
31
+ <button @click="queryParse">queryParse('{{qs.slice(0, 5)}}...')</button>
32
+ </layout>
33
+ <button @click="queryStringify">queryStringify({'a':1,'b':'c'})</button>
25
34
  </layout>
26
35
  </flow>
27
36
  </form>
package/dist/clickgo.js CHANGED
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.zip = exports.tool = exports.theme = exports.task = exports.storage = exports.native = exports.fs = exports.form = exports.dom = exports.core = exports.control = exports.vue = exports.hasFrame = exports.isImmersion = exports.getPlatform = exports.isNative = exports.getVersion = void 0;
27
- const version = '3.11.2';
27
+ const version = '3.11.3';
28
28
  function getVersion() {
29
29
  return version;
30
30
  }
package/dist/clickgo.ts CHANGED
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- const version = '3.11.2';
16
+ const version = '3.11.3';
17
17
  export function getVersion(): string {
18
18
  return version;
19
19
  }
Binary file
@@ -186,7 +186,7 @@ export abstract class AbstractControl {
186
186
  public readonly emits: Record<string, null | ((payload: any) => boolean)> = {};
187
187
 
188
188
  /** --- 组件的子插槽 --- */
189
- public readonly slots: Record<string, any> = {};
189
+ public readonly slots: Record<string, () => any[]> = {};
190
190
 
191
191
  /** --- 获取某插槽所有子类 --- */
192
192
  public get slotsAll() {
package/dist/lib/form.js CHANGED
@@ -269,6 +269,15 @@ class AbstractPanel extends AbstractCommon {
269
269
  get rootPanel() {
270
270
  return {};
271
271
  }
272
+ get formHash() {
273
+ return this.rootForm.formHash;
274
+ }
275
+ set formHash(fh) {
276
+ this.rootForm.formHash = fh;
277
+ }
278
+ sendToRootPanel(data) {
279
+ this.rootPanel.send(data);
280
+ }
272
281
  enterStep(list) {
273
282
  return __awaiter(this, void 0, void 0, function* () {
274
283
  return this.rootForm.enterStep(list);
@@ -384,6 +393,9 @@ class AbstractForm extends AbstractCommon {
384
393
  core.trigger('formHashChange', this.taskId, this.formId, parent);
385
394
  });
386
395
  }
396
+ sendToPanel(panel, data) {
397
+ panel.send(data);
398
+ }
387
399
  get inStep() {
388
400
  return this._inStep;
389
401
  }
@@ -1502,25 +1514,38 @@ function refreshPopPosition(el, pop, direction, size = {}) {
1502
1514
  left = bcr.left;
1503
1515
  top = bcr.top + bcr.height;
1504
1516
  }
1505
- else {
1517
+ else if (direction === 'h') {
1506
1518
  left = bcr.left + bcr.width - 2;
1507
1519
  top = bcr.top - 2;
1508
1520
  }
1521
+ else {
1522
+ pop.removeAttribute('data-pop-t-bottom');
1523
+ left = bcr.left + bcr.width / 2 - width / 2;
1524
+ top = bcr.top - height - 10;
1525
+ }
1509
1526
  if (width + left > window.innerWidth) {
1510
1527
  if (direction === 'v') {
1511
1528
  left = bcr.left + bcr.width - width;
1512
1529
  }
1513
- else {
1530
+ else if (direction === 'h') {
1514
1531
  left = bcr.left - width + 2;
1515
1532
  }
1533
+ else {
1534
+ }
1516
1535
  }
1517
1536
  if (height + top > window.innerHeight) {
1518
1537
  if (direction === 'v') {
1519
1538
  top = bcr.top - height;
1520
1539
  }
1521
- else {
1540
+ else if (direction === 'h') {
1522
1541
  top = bcr.top + bcr.height - height + 2;
1523
1542
  }
1543
+ else {
1544
+ }
1545
+ }
1546
+ else if (top < 0 && direction === 't') {
1547
+ top = bcr.top + bcr.height + 10;
1548
+ pop.dataset.popTBottom = '';
1524
1549
  }
1525
1550
  }
1526
1551
  else {
@@ -1565,6 +1590,17 @@ function refreshPopPosition(el, pop, direction, size = {}) {
1565
1590
  }
1566
1591
  let lastShowPopTime = 0;
1567
1592
  function showPop(el, pop, direction, opt = {}) {
1593
+ if (pop && direction === 't') {
1594
+ refreshPopPosition(el, pop, 't', opt.size);
1595
+ if (opt.autoPosition) {
1596
+ clickgo.dom.watchSize(pop, () => {
1597
+ refreshPopPosition(el, pop, 't', opt.size);
1598
+ });
1599
+ }
1600
+ pop.dataset.cgOpen = '';
1601
+ pop.dataset.cgT = '';
1602
+ return;
1603
+ }
1568
1604
  if (opt.null === undefined) {
1569
1605
  opt.null = false;
1570
1606
  }
@@ -1605,7 +1641,7 @@ function showPop(el, pop, direction, opt = {}) {
1605
1641
  return;
1606
1642
  }
1607
1643
  refreshPopPosition(el, pop, direction, opt.size);
1608
- if (opt.autoPosition && typeof direction === 'string' && ['h', 'v'].includes(direction)) {
1644
+ if (opt.autoPosition && typeof direction === 'string') {
1609
1645
  clickgo.dom.watchSize(pop, () => {
1610
1646
  refreshPopPosition(el, pop, direction, opt.size);
1611
1647
  });
@@ -1626,6 +1662,12 @@ function hidePop(pop) {
1626
1662
  hidePop(popInfo.elList[0]);
1627
1663
  return;
1628
1664
  }
1665
+ if (pop.dataset.cgT !== undefined) {
1666
+ pop.removeAttribute('data-cg-t');
1667
+ pop.removeAttribute('data-cg-open');
1668
+ clickgo.dom.unwatchSize(pop);
1669
+ return;
1670
+ }
1629
1671
  let isPop = false;
1630
1672
  if (pop.dataset.cgPopOpen !== undefined) {
1631
1673
  }
package/dist/lib/form.ts CHANGED
@@ -358,6 +358,21 @@ export abstract class AbstractPanel extends AbstractCommon {
358
358
  return {} as any;
359
359
  }
360
360
 
361
+ /** --- 获取母窗体的 formHash --- */
362
+ public get formHash(): string {
363
+ return this.rootForm.formHash;
364
+ }
365
+
366
+ /** --- 设置母窗体的 formHash --- */
367
+ public set formHash(fh: string) {
368
+ this.rootForm.formHash = fh;
369
+ }
370
+
371
+ /** --- 发送一段数据到自己这个 panel 控件,本质上也是调用的 panel 控件的 send 方法,主要用来实现发送给跳转后的 panel --- */
372
+ public sendToRootPanel(data: Record<string, any>): void {
373
+ this.rootPanel.send(data);
374
+ }
375
+
361
376
  /** --- 母窗体进入 form hash 为源的步进条 --- */
362
377
  public async enterStep(list: Array<{
363
378
  /** --- 步骤 hash,第一个必须为当前 hash --- */
@@ -523,6 +538,11 @@ export abstract class AbstractForm extends AbstractCommon {
523
538
  core.trigger('formHashChange', this.taskId, this.formId, parent);
524
539
  }
525
540
 
541
+ /** --- 发送一段数据到 panel 控件,本质上也是调用的 panel 控件的 send 方法 --- */
542
+ public sendToPanel(panel: control.AbstractControl & Record<string, any>, data: Record<string, any>): void {
543
+ panel.send(data);
544
+ }
545
+
526
546
  /** --- 覆盖整个窗体的 loading --- */
527
547
  public loading: boolean = false;
528
548
 
@@ -1965,43 +1985,61 @@ export function removeFromPop(el: HTMLElement): void {
1965
1985
  }
1966
1986
 
1967
1987
  /** --- 重新调整 pop 的位置 --- */
1968
- function refreshPopPosition(el: HTMLElement, pop: HTMLElement, direction: 'h' | 'v' | MouseEvent | TouchEvent | { x: number; y: number; }, size: { width?: number; height?: number; } = {}): void {
1988
+ function refreshPopPosition(el: HTMLElement, pop: HTMLElement, direction: 'h' | 'v' | 't' | MouseEvent | TouchEvent | { x: number; y: number; }, size: { width?: number; height?: number; } = {}): void {
1969
1989
  // --- 最终 pop 的大小 ---
1970
1990
  const width = size.width ?? pop.offsetWidth;
1971
1991
  const height = size.height ?? pop.offsetHeight;
1972
1992
  // --- 最终显示位置 ---
1973
1993
  let left: number, top: number;
1974
1994
  if (typeof direction === 'string') {
1995
+ /** --- 母对象的位置 --- */
1975
1996
  const bcr = el.getBoundingClientRect();
1976
1997
  if (direction === 'v') {
1977
1998
  // --- 垂直弹出 ---
1978
1999
  left = bcr.left;
1979
2000
  top = bcr.top + bcr.height;
1980
2001
  }
1981
- else {
2002
+ else if (direction === 'h') {
1982
2003
  // --- 水平弹出 ---
1983
2004
  left = bcr.left + bcr.width - 2;
1984
2005
  top = bcr.top - 2;
1985
2006
  }
2007
+ else {
2008
+ // --- 垂直水平居中 ---
2009
+ pop.removeAttribute('data-pop-t-bottom');
2010
+ left = bcr.left + bcr.width / 2 - width / 2;
2011
+ top = bcr.top - height - 10;
2012
+ }
1986
2013
  // --- 检查水平是否出框 ---
1987
2014
  if (width + left > window.innerWidth) {
1988
2015
  if (direction === 'v') {
1989
2016
  // --- 垂直弹出 ---
1990
2017
  left = bcr.left + bcr.width - width;
1991
2018
  }
1992
- else {
2019
+ else if (direction === 'h') {
1993
2020
  // --- 水平弹出,右边位置不够弹到左边 ---
1994
2021
  left = bcr.left - width + 2;
1995
2022
  }
2023
+ else {
2024
+ // --- 垂直水平居中,水平超出不管 ---
2025
+ }
1996
2026
  }
1997
- // --- 检测垂直是否出框 ---
2027
+ // --- 检测垂直是否下侧出框 ---
1998
2028
  if (height + top > window.innerHeight) {
1999
2029
  if (direction === 'v') {
2000
2030
  top = bcr.top - height;
2001
2031
  }
2002
- else {
2032
+ else if (direction === 'h') {
2003
2033
  top = bcr.top + bcr.height - height + 2;
2004
2034
  }
2035
+ else {
2036
+ // --- 垂直水平居中,下侧出框不管 ---
2037
+ }
2038
+ }
2039
+ else if (top < 0 && direction === 't') {
2040
+ // --- 垂直水平居中,上侧出框 ---
2041
+ top = bcr.top + bcr.height + 10;
2042
+ pop.dataset.popTBottom = '';
2005
2043
  }
2006
2044
  }
2007
2045
  else {
@@ -2053,10 +2091,25 @@ let lastShowPopTime: number = 0;
2053
2091
  * --- 获取 pop 显示出来的坐标并报系统全局记录 ---
2054
2092
  * @param el 响应的元素
2055
2093
  * @param pop 要显示 pop 元素
2056
- * @param direction 要显示方向(以 $el 为准的 h 水平和 v 垂直)或坐标
2094
+ * @param direction 要显示方向(以 $el 为准的 h 水平 v 垂直 t 垂直水平居中)或坐标
2057
2095
  * @param opt width / height 显示的 pop 定义自定义宽/高度,可省略;null,true 代表为空也会显示,默认为 false; autoPosition, 自动更新 pop 位置,默认 false,true 为原元素位置变更,pop 位置也会变更,pop 大小变更,位置也会变更
2058
2096
  */
2059
- export function showPop(el: HTMLElement, pop: HTMLElement | undefined, direction: 'h' | 'v' | MouseEvent | TouchEvent | { x: number; y: number; }, opt: { 'size'?: { width?: number; height?: number; }; 'null'?: boolean; 'autoPosition'?: boolean; } = {}): void {
2097
+ export function showPop(el: HTMLElement, pop: HTMLElement | undefined, direction: 'h' | 'v' | 't' | MouseEvent | TouchEvent | { x: number; y: number; }, opt: {
2098
+ 'size'?: { width?: number; height?: number; };
2099
+ 'null'?: boolean;
2100
+ 'autoPosition'?: boolean;
2101
+ } = {}): void {
2102
+ if (pop && direction === 't') {
2103
+ refreshPopPosition(el, pop, 't', opt.size);
2104
+ if (opt.autoPosition) {
2105
+ clickgo.dom.watchSize(pop, () => {
2106
+ refreshPopPosition(el, pop, 't', opt.size);
2107
+ });
2108
+ }
2109
+ pop.dataset.cgOpen = '';
2110
+ pop.dataset.cgT = '';
2111
+ return;
2112
+ }
2060
2113
  // --- opt.null 为 true 代表可为空,为空也会被显示,默认为 false ---
2061
2114
  if (opt.null === undefined) {
2062
2115
  opt.null = false;
@@ -2105,7 +2158,7 @@ export function showPop(el: HTMLElement, pop: HTMLElement | undefined, direction
2105
2158
  }
2106
2159
  // --- 设定 pop 位置 ---
2107
2160
  refreshPopPosition(el, pop, direction, opt.size);
2108
- if (opt.autoPosition && typeof direction === 'string' && ['h', 'v'].includes(direction)) {
2161
+ if (opt.autoPosition && typeof direction === 'string') {
2109
2162
  // --- 可能要重置 pop 位置 ---
2110
2163
  clickgo.dom.watchSize(pop, () => {
2111
2164
  refreshPopPosition(el, pop, direction, opt.size);
@@ -2130,6 +2183,12 @@ export function hidePop(pop?: HTMLElement): void {
2130
2183
  hidePop(popInfo.elList[0]);
2131
2184
  return;
2132
2185
  }
2186
+ if (pop.dataset.cgT !== undefined) {
2187
+ pop.removeAttribute('data-cg-t');
2188
+ pop.removeAttribute('data-cg-open');
2189
+ clickgo.dom.unwatchSize(pop);
2190
+ return;
2191
+ }
2133
2192
  let isPop: boolean = false;
2134
2193
  if (pop.dataset.cgPopOpen !== undefined) {
2135
2194
  // --- el ---
package/dist/lib/fs.js CHANGED
@@ -38,7 +38,7 @@ const task = __importStar(require("./task"));
38
38
  const form = __importStar(require("./form"));
39
39
  const core = __importStar(require("./core"));
40
40
  const native = __importStar(require("./native"));
41
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.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/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.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/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.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/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.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/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/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/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/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.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/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/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.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.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/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/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/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.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
41
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.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/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.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/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.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/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.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/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/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/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/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.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/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/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.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tip/', '/app/demo/form/control/tip/tip.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.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/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/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/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.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
42
42
  const localeData = {
43
43
  'en': {
44
44
  'apply-unmount': 'Are you sure to unmount the "?" mount point?',
package/dist/lib/fs.ts CHANGED
@@ -12,7 +12,7 @@ import * as form from './form';
12
12
  import * as core from './core';
13
13
  import * as native from './native';
14
14
 
15
- const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.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/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.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/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.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/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.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/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/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/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/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.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/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/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.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.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/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/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/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.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
15
+ const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/alayout/', '/app/demo/form/control/alayout/alayout.css', '/app/demo/form/control/alayout/alayout.js', '/app/demo/form/control/alayout/alayout.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/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/date/', '/app/demo/form/control/date/date.js', '/app/demo/form/control/date/date.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/echarts/', '/app/demo/form/control/echarts/echarts.js', '/app/demo/form/control/echarts/echarts.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/html/', '/app/demo/form/control/html/html.js', '/app/demo/form/control/html/html.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/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/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/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/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.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/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/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.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/tip/', '/app/demo/form/control/tip/tip.xml', '/app/demo/form/control/tuieditor/', '/app/demo/form/control/tuieditor/tuieditor.js', '/app/demo/form/control/tuieditor/tuieditor.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/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/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/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.js', '/clickgo.ts', '/control/', '/control/arteditor.cgc', '/control/box.cgc', '/control/common.cgc', '/control/desc.cgc', '/control/echarts.cgc', '/control/form.cgc', '/control/html.cgc', '/control/iconview.cgc', '/control/map.cgc', '/control/monaco.cgc', '/control/nav.cgc', '/control/page.cgc', '/control/property.cgc', '/control/table.cgc', '/control/task.cgc', '/control/tuieditor.cgc', '/control/xterm.cgc', '/ext/', '/ext/toastui-editor-all.min.js', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/storage.js', '/lib/storage.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/byterun.cgt', '/theme/familiar.cgt', '/theme/light.cgt'];
16
16
 
17
17
  /** --- fs lib 用到的语言包 --- */
18
18
  const localeData: Record<string, {
package/dist/lib/task.js CHANGED
@@ -1057,6 +1057,12 @@ function run(url, opt = {}, ntid) {
1057
1057
  },
1058
1058
  formatSecond: function (second) {
1059
1059
  return tool.formatSecond(second);
1060
+ },
1061
+ queryStringify: function (query) {
1062
+ return tool.queryStringify(query);
1063
+ },
1064
+ queryParse: function (query) {
1065
+ return tool.queryParse(query);
1060
1066
  }
1061
1067
  },
1062
1068
  'zip': {
package/dist/lib/task.ts CHANGED
@@ -1187,6 +1187,12 @@ export async function run(url: string | types.IApp, opt: types.ITaskRunOptions =
1187
1187
  },
1188
1188
  formatSecond: function(second: number): string {
1189
1189
  return tool.formatSecond(second);
1190
+ },
1191
+ queryStringify: function(query: Record<string, any>): string {
1192
+ return tool.queryStringify(query);
1193
+ },
1194
+ queryParse: function(query: string): Record<string, string | string[]> {
1195
+ return tool.queryParse(query);
1190
1196
  }
1191
1197
  },
1192
1198
  'zip': {
package/dist/lib/tool.js CHANGED
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.formatSecond = exports.compar = exports.execCommand = exports.blob2DataUrl = exports.blob2Text = exports.urlAtom = exports.urlResolve = exports.parseUrl = exports.post = exports.fetch = exports.request = exports.rgb2hsl = exports.escapeHTML = exports.getArray = exports.getNumber = exports.getBoolean = exports.random = exports.RANDOM_LUNS = exports.RANDOM_V = exports.RANDOM_LUN = exports.RANDOM_LU = exports.RANDOM_LN = exports.RANDOM_UN = exports.RANDOM_L = exports.RANDOM_U = exports.RANDOM_N = exports.rand = exports.getMimeByPath = exports.stylePrepend = exports.teleportGlue = exports.eventsAttrWrap = exports.layoutClassPrepend = exports.layoutInsertAttr = exports.layoutAddTagClassAndReTagName = exports.styleUrl2DataUrl = exports.match = exports.purify = exports.sleepFrame = exports.nextFrame = exports.sleep = exports.clone = exports.blob2ArrayBuffer = exports.getClassPrototype = void 0;
12
+ exports.queryParse = exports.queryStringify = exports.formatSecond = exports.compar = exports.execCommand = exports.blob2DataUrl = exports.blob2Text = exports.urlAtom = exports.urlResolve = exports.parseUrl = exports.post = exports.fetch = exports.request = exports.rgb2hsl = exports.escapeHTML = exports.getArray = exports.getNumber = exports.getBoolean = exports.random = exports.RANDOM_LUNS = exports.RANDOM_V = exports.RANDOM_LUN = exports.RANDOM_LU = exports.RANDOM_LN = exports.RANDOM_UN = exports.RANDOM_L = exports.RANDOM_U = exports.RANDOM_N = exports.rand = exports.getMimeByPath = exports.stylePrepend = exports.teleportGlue = exports.eventsAttrWrap = exports.layoutClassPrepend = exports.layoutInsertAttr = exports.layoutAddTagClassAndReTagName = exports.styleUrl2DataUrl = exports.match = exports.purify = exports.sleepFrame = exports.nextFrame = exports.sleep = exports.clone = exports.blob2ArrayBuffer = exports.getClassPrototype = void 0;
13
13
  function getClassPrototype(obj, over = [], level = 0) {
14
14
  if (level === 0) {
15
15
  return getClassPrototype(Object.getPrototypeOf(obj), over, level + 1);
@@ -692,3 +692,36 @@ function formatSecond(second) {
692
692
  return (h ? h.toString().padStart(2, '0') + ':' : '') + m.toString().padStart(2, '0') + ':' + s.toString().padStart(2, '0');
693
693
  }
694
694
  exports.formatSecond = formatSecond;
695
+ function queryStringify(query) {
696
+ return Object.entries(query).map(([k, v]) => {
697
+ if (Array.isArray(v)) {
698
+ return v.map((i) => `${encodeURIComponent(k)}=${encodeURIComponent(`${i}`)}`).join('&');
699
+ }
700
+ return `${encodeURIComponent(k)}=${encodeURIComponent(`${v}`)}`;
701
+ }).join('&');
702
+ }
703
+ exports.queryStringify = queryStringify;
704
+ function queryParse(query) {
705
+ const ret = {};
706
+ const arrayKeys = {};
707
+ for (const i of query.split('&')) {
708
+ if (!i.length) {
709
+ continue;
710
+ }
711
+ const pos = i.indexOf('=');
712
+ const key = decodeURIComponent(pos === -1 ? i : i.slice(0, pos));
713
+ const value = pos === -1 ? '' : decodeURIComponent(i.slice(pos + 1));
714
+ if (arrayKeys[key]) {
715
+ ret[key].push(value);
716
+ }
717
+ else if (undefined === ret[key]) {
718
+ ret[key] = value;
719
+ }
720
+ else {
721
+ ret[key] = [ret[key], value];
722
+ arrayKeys[key] = true;
723
+ }
724
+ }
725
+ return ret;
726
+ }
727
+ exports.queryParse = queryParse;
package/dist/lib/tool.ts CHANGED
@@ -867,3 +867,47 @@ export function formatSecond(second: number): string {
867
867
  const s = Math.floor(second - m * 60);
868
868
  return (h ? h.toString().padStart(2, '0') + ':' : '') + m.toString().padStart(2, '0') + ':' + s.toString().padStart(2, '0');
869
869
  }
870
+
871
+ /**
872
+ * --- 将对象转换为 query string ---
873
+ * @param query 要转换的对象
874
+ */
875
+ export function queryStringify(query: Record<string, any>): string {
876
+ return Object.entries(query).map(([k, v]) => {
877
+ if (Array.isArray(v)) {
878
+ return v.map((i) => `${encodeURIComponent(k)}=${encodeURIComponent(`${i}`)}`).join('&');
879
+ }
880
+ return `${encodeURIComponent(k)}=${encodeURIComponent(`${v}`)}`;
881
+ }).join('&');
882
+ }
883
+
884
+ /**
885
+ * --- 将 query string 转换为对象 ---
886
+ * @param query 要转换的字符串
887
+ */
888
+ export function queryParse(query: string): Record<string, string | string[]> {
889
+ const ret: Record<string, string | string[]> = {};
890
+ const arrayKeys: Record<string, boolean> = {};
891
+ for (const i of query.split('&')) {
892
+ if (!i.length) {
893
+ continue;
894
+ }
895
+
896
+ const pos = i.indexOf('=');
897
+
898
+ const key = decodeURIComponent(pos === -1 ? i : i.slice(0, pos));
899
+ const value = pos === -1 ? '' : decodeURIComponent(i.slice(pos + 1));
900
+
901
+ if (arrayKeys[key]) {
902
+ (ret[key] as string[]).push(value);
903
+ }
904
+ else if (undefined === ret[key]) {
905
+ ret[key] = value;
906
+ }
907
+ else {
908
+ ret[key] = [ret[key] as string, value];
909
+ arrayKeys[key] = true;
910
+ }
911
+ }
912
+ return ret;
913
+ }
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clickgo",
3
- "version": "3.11.2",
3
+ "version": "3.11.3",
4
4
  "description": "Background interface, software interface, mobile phone APP interface operation library.",
5
5
  "keywords": [
6
6
  "deskrt",