clickgo 3.16.17 → 3.16.18

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.
@@ -0,0 +1,32 @@
1
+ import * as types from '../../types';
2
+ export declare const list: Record<number, types.ITask>;
3
+ export declare let lastId: number;
4
+ export declare function setFocus(id?: number): void;
5
+ export declare function getFocus(): number | null;
6
+ export declare function onFrame(fun: () => void | Promise<void>, opt?: {
7
+ 'count'?: number;
8
+ 'taskId'?: number;
9
+ 'formId'?: number;
10
+ }): number;
11
+ export declare function offFrame(ft: number, opt?: {
12
+ 'taskId'?: number;
13
+ }): void;
14
+ export declare function get(tid: number): types.ITaskInfo | null;
15
+ export declare function getPermissions(tid: number): string[];
16
+ export declare function getList(): Record<string, types.ITaskInfo>;
17
+ export declare function run(url: string | types.IApp, opt?: types.ITaskRunOptions, ntid?: number): Promise<number>;
18
+ export declare function checkPermission(vals: string | string[], apply?: boolean, applyHandler?: (list: string[]) => void | Promise<void>, taskId?: number): Promise<boolean[]>;
19
+ export declare function end(taskId: number | string): boolean;
20
+ export declare function loadLocaleData(lang: string, data: Record<string, any>, pre?: string, taskId?: number): void;
21
+ export declare function loadLocale(lang: string, path: string, taskId?: number): Promise<boolean>;
22
+ export declare function clearLocale(taskId?: number): void;
23
+ export declare function setLocale(lang: string, path: string, taskId?: number): Promise<boolean>;
24
+ export declare function setLocaleLang(lang: string, taskId?: number): void;
25
+ export declare function clearLocaleLang(taskId?: number): void;
26
+ export declare function createTimer(fun: () => void | Promise<void>, delay: number, opt?: types.ICreateTimerOptions): number;
27
+ export declare function removeTimer(timer: number, taskId?: number): void;
28
+ export declare function sleep(fun: () => void | Promise<void>, delay: number, taskId?: number): number;
29
+ export declare const systemTaskInfo: types.ISystemTaskInfo;
30
+ export declare function setSystem(formId: number, taskId?: number): boolean;
31
+ export declare function clearSystem(taskId?: number | string): boolean;
32
+ export declare function refreshSystemPosition(): void;
package/dist/lib/task.js CHANGED
@@ -859,7 +859,13 @@ function run(url_1) {
859
859
  },
860
860
  isMax: function () {
861
861
  return native.isMax();
862
- }
862
+ },
863
+ open: function (options) {
864
+ return native.open(options);
865
+ },
866
+ save: function (options) {
867
+ return native.save(options);
868
+ },
863
869
  },
864
870
  'storage': {
865
871
  get: function (key) {
@@ -0,0 +1,8 @@
1
+ import * as types from '../../types';
2
+ export declare let global: types.ITheme | null;
3
+ export declare function read(blob: Blob): Promise<types.ITheme | false>;
4
+ export declare function load(theme?: types.ITheme, taskId?: number): Promise<boolean>;
5
+ export declare function remove(name: string, taskId?: number): Promise<void>;
6
+ export declare function clear(taskId?: number): Promise<void>;
7
+ export declare function setGlobal(theme: types.ITheme): Promise<void>;
8
+ export declare function clearGlobal(): void;
@@ -0,0 +1,120 @@
1
+ import * as types from '../../types';
2
+ export declare function compressor<T extends File | Blob>(file: T, options?: {
3
+ 'maxWidth'?: number;
4
+ 'maxHeight'?: number;
5
+ 'quality'?: number;
6
+ }): Promise<File | Blob | false>;
7
+ interface IClassPrototype {
8
+ 'method': Record<string, any>;
9
+ 'access': Record<string, {
10
+ 'get'?: any;
11
+ 'set'?: any;
12
+ }>;
13
+ }
14
+ export declare function getClassPrototype(obj: object, over?: string[], level?: number): IClassPrototype;
15
+ export declare function blob2ArrayBuffer(blob: Blob): Promise<ArrayBuffer>;
16
+ export declare function sizeFormat(size: number, spliter?: string): string;
17
+ export declare function weightFormat(weight: number, spliter?: string): string;
18
+ export declare function clone(obj: Record<string, any> | any[]): any[] | any;
19
+ export declare function sleep(ms?: number): Promise<boolean>;
20
+ export declare function nextFrame(): Promise<void>;
21
+ export declare function sleepFrame(count: number): Promise<void>;
22
+ export declare function purify(text: string): string;
23
+ export declare function match(str: string, regs: RegExp[]): boolean;
24
+ export declare function styleUrl2DataUrl(path: string, style: string, files: Record<string, Blob | string>): Promise<string>;
25
+ export declare function layoutAddTagClassAndReTagName(layout: string, retagname: boolean): string;
26
+ export declare function layoutInsertAttr(layout: string, insert: string, opt?: {
27
+ 'ignore'?: RegExp[];
28
+ 'include'?: RegExp[];
29
+ }): string;
30
+ export declare function layoutClassPrepend(layout: string, preps: string[]): string;
31
+ export declare function eventsAttrWrap(layout: string): string;
32
+ export declare function teleportGlue(layout: string, formId: number | string): string;
33
+ export declare function stylePrepend(style: string, prep?: string): {
34
+ 'style': string;
35
+ 'prep': string;
36
+ };
37
+ export declare function getMimeByPath(path: string): {
38
+ 'mime': string;
39
+ 'ext': string;
40
+ };
41
+ export declare function rand(min: number, max: number): number;
42
+ export declare const RANDOM_N = "0123456789";
43
+ export declare const RANDOM_U = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
44
+ export declare const RANDOM_L = "abcdefghijklmnopqrstuvwxyz";
45
+ export declare const RANDOM_UN: string;
46
+ export declare const RANDOM_LN: string;
47
+ export declare const RANDOM_LU: string;
48
+ export declare const RANDOM_LUN: string;
49
+ export declare const RANDOM_V = "ACEFGHJKLMNPRSTWXY34567";
50
+ export declare const RANDOM_LUNS: string;
51
+ export declare function random(length?: number, source?: string, block?: string): string;
52
+ export declare function getBoolean(param: boolean | string | number | undefined): boolean;
53
+ export declare function getNumber(param: string | number): number;
54
+ export declare function getArray(param: string | any[]): any[];
55
+ export declare function escapeHTML(html: string): string;
56
+ export declare function formatColor(color: string): number[];
57
+ export declare function rgb2hex(r: string | number, g?: string | number, b?: string | number, a?: string | number): string;
58
+ export declare function hex2rgb(hex: string): {
59
+ 'r': number;
60
+ 'g': number;
61
+ 'b': number;
62
+ 'a': number;
63
+ 'rgb': string;
64
+ };
65
+ export declare function rgb2hsl(r: string | number, g?: string | number, b?: string | number, a?: string | number, decimal?: boolean): {
66
+ 'h': number;
67
+ 's': number;
68
+ 'l': number;
69
+ 'a': number;
70
+ 'hsl': string;
71
+ };
72
+ export declare function hsl2rgb(h: string | number, s?: string | number, l?: string | number, a?: string | number, decimal?: boolean): {
73
+ 'r': number;
74
+ 'g': number;
75
+ 'b': number;
76
+ 'a': number;
77
+ 'rgb': string;
78
+ };
79
+ export declare function request(url: string, opt: types.IRequestOptions): Promise<null | any>;
80
+ export declare function fetch(url: string, init?: RequestInit): Promise<string | Blob | null>;
81
+ export declare function get(url: string, opt?: {
82
+ 'credentials'?: 'include' | 'same-origin' | 'omit';
83
+ 'headers'?: HeadersInit;
84
+ }): Promise<Response | null>;
85
+ export declare function post(url: string, data: Record<string, any> | FormData, opt?: {
86
+ 'credentials'?: 'include' | 'same-origin' | 'omit';
87
+ 'headers'?: HeadersInit;
88
+ }): Promise<Response | null>;
89
+ export declare function getResponseJson(url: string, opt?: {
90
+ 'credentials'?: 'include' | 'same-origin' | 'omit';
91
+ 'headers'?: HeadersInit;
92
+ }): Promise<any | null>;
93
+ export declare function postResponseJson(url: string, data: Record<string, any> | FormData, opt?: {
94
+ 'credentials'?: 'include' | 'same-origin' | 'omit';
95
+ 'headers'?: HeadersInit;
96
+ }): Promise<any | null>;
97
+ export declare function parseUrl(url: string): ILoaderUrl;
98
+ export declare function urlResolve(from: string, to: string): string;
99
+ export declare function urlAtom(url: string): string;
100
+ export declare function blob2Text(blob: Blob): Promise<string>;
101
+ export declare function blob2DataUrl(blob: Blob): Promise<string>;
102
+ export declare function execCommand(ac: string): void;
103
+ export declare function compar(before: Array<string | number>, after: Array<string | number>): {
104
+ 'remove': Record<string, number>;
105
+ 'add': Record<string, number>;
106
+ 'length': {
107
+ 'remove': number;
108
+ 'add': number;
109
+ };
110
+ };
111
+ export declare function formatSecond(second: number): string;
112
+ export declare function formatTime(ts: number | Date, tz?: number): {
113
+ 'date': string;
114
+ 'time': string;
115
+ 'zone': string;
116
+ };
117
+ export declare function isMs(time: number): boolean;
118
+ export declare function queryStringify(query: Record<string, any>): string;
119
+ export declare function queryParse(query: string): Record<string, string | string[]>;
120
+ export {};
@@ -0,0 +1,40 @@
1
+ import jszip from 'jszip';
2
+ import * as types from '../../types';
3
+ export declare class Zip {
4
+ private readonly _zip;
5
+ private _path;
6
+ constructor(zip: jszip);
7
+ getContent(path: string): Promise<string | null>;
8
+ getContent<T extends types.TZipOutputType>(path: string, type: T): Promise<types.IZipOutputByType[T] | null>;
9
+ putContent<T extends types.TZipInputType>(path: string, data: types.IZipInputByType[T], options?: {
10
+ 'base64'?: boolean;
11
+ 'binary'?: boolean;
12
+ 'date'?: Date;
13
+ }): void;
14
+ unlink(path: string): void;
15
+ stats(path: string): types.IZipStats | null;
16
+ isDir(path: string): types.IZipStats | false;
17
+ isFile(path: string): types.IZipStats | false;
18
+ readDir(path?: string, opt?: {
19
+ 'hasChildren'?: boolean;
20
+ 'hasDir'?: boolean;
21
+ 'pathAsKey'?: false;
22
+ }): types.IZipItem[];
23
+ readDir(path?: string, opt?: {
24
+ 'hasChildren'?: boolean;
25
+ 'hasDir'?: boolean;
26
+ 'pathAsKey': true;
27
+ }): Record<string, types.IZipItem>;
28
+ private _readDir;
29
+ private _list;
30
+ private _refreshList;
31
+ pwd(): string;
32
+ cd(dir: string): string;
33
+ generate<T extends types.TZipOutputType>(options?: {
34
+ 'type'?: T;
35
+ 'level'?: number;
36
+ 'onUpdate'?: (percent: number, currentFile: string | null) => void;
37
+ }): Promise<types.IZipOutputByType[T]>;
38
+ getList(): Promise<Record<string, Blob | string>>;
39
+ }
40
+ export declare function get(data?: types.TZipInputFileFormat): Promise<Zip | null>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clickgo",
3
- "version": "3.16.17",
3
+ "version": "3.16.18",
4
4
  "description": "Background interface, software interface, mobile phone APP interface operation library.",
5
5
  "keywords": [
6
6
  "deskrt",
package/dist/clickgo.ts DELETED
@@ -1,68 +0,0 @@
1
- /**
2
- * Copyright 2024 Han Guoshuai <zohegs@gmail.com>
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- const version = '3.16.17';
17
- export function getVersion(): string {
18
- return version;
19
- }
20
-
21
- const native = navigator.userAgent.includes('electron') ? true : false;
22
- export function isNative(): boolean {
23
- return native;
24
- }
25
-
26
- let platform: NodeJS.Platform | 'web' = 'web';
27
- let immersion: boolean = false;
28
- let frame: boolean = false;
29
-
30
- if (native) {
31
- const reg = /electron\/(.+?) (.+?)\/(.+?) immersion\/([0-9]) frame\/([0-9])/.exec(navigator.userAgent);
32
- if (reg) {
33
- platform = reg[2] as any;
34
- immersion = reg[4] === '0' ? false : true;
35
- frame = reg[5] === '0' ? false : true;
36
- }
37
- }
38
- export function getPlatform(): NodeJS.Platform | 'web' {
39
- return platform;
40
- }
41
-
42
- /**
43
- * --- 获取当前 native 是否是沉浸式 ---
44
- */
45
- export function isImmersion(): boolean {
46
- return immersion;
47
- }
48
-
49
- /**
50
- * --- 是否含有窗体外边框 ---
51
- */
52
- export function hasFrame(): boolean {
53
- return frame;
54
- }
55
-
56
- export const vue: import('../types/index').IVueObject = (window as any).Vue;
57
-
58
- export * as control from './lib/control';
59
- export * as core from './lib/core';
60
- export * as dom from './lib/dom';
61
- export * as form from './lib/form';
62
- export * as fs from './lib/fs';
63
- export * as native from './lib/native';
64
- export * as storage from './lib/storage';
65
- export * as task from './lib/task';
66
- export * as theme from './lib/theme';
67
- export * as tool from './lib/tool';
68
- export * as zip from './lib/zip';
package/dist/index.ts DELETED
@@ -1,282 +0,0 @@
1
- // npm publish --tag dev --access public
2
- import * as types from '../types/index';
3
-
4
- // --- 以下不会真正加载,最终会在底部进行赋值 ---
5
- export let clickgo: typeof import('./clickgo');
6
- export let control: typeof import('./lib/control');
7
- export let core: typeof import('./lib/core');
8
- export let dom: typeof import('./lib/dom');
9
- export let form: typeof import('./lib/form');
10
- export let fs: typeof import('./lib/fs');
11
- export let native: typeof import('./lib/native');
12
- export let storage: typeof import('./lib/storage');
13
- export let task: typeof import('./lib/task');
14
- export let theme: typeof import('./lib/theme');
15
- export let tool: typeof import('./lib/tool');
16
- export let zip: typeof import('./lib/zip');
17
- export let vue: import('../types/index').IVueObject;
18
-
19
- export function getVersion(): string {
20
- return clickgo.getVersion();
21
- }
22
-
23
- export function isNative(): boolean {
24
- return clickgo.isNative();
25
- }
26
-
27
- export function getPlatform(): NodeJS.Platform | 'web' {
28
- return clickgo.getPlatform();
29
- }
30
-
31
- export function isImmersion(): boolean {
32
- return clickgo.isImmersion();
33
- }
34
-
35
- export function hasFrame(): boolean {
36
- return clickgo.hasFrame();
37
- }
38
-
39
- /** --- 全局类 --- */
40
- export abstract class AbstractBoot {
41
-
42
- /** --- 当前是否是 debug 模式 --- */
43
- private readonly _debug: boolean = false;
44
-
45
- /** --- 判断当前是否是 debug 模式 --- */
46
- public isDebug(): boolean {
47
- return this._debug;
48
- }
49
-
50
- public constructor(opt: {
51
- 'debug'?: boolean;
52
- } = {}) {
53
- if (opt.debug) {
54
- this._debug = true;
55
- }
56
- }
57
-
58
- /** --- 入口方法 --- */
59
- public abstract main(): void | Promise<void>;
60
-
61
- /** --- 全局错误事件 --- */
62
- public onError(taskId: number, formId: number, error: Error, info: string): void | Promise<void>;
63
- public onError(): void {
64
- return;
65
- }
66
-
67
- /** --- 屏幕大小改变事件 --- */
68
- public onScreenResize(): void | Promise<void>;
69
- public onScreenResize(): void {
70
- return;
71
- }
72
-
73
- /** --- 系统配置变更事件 --- */
74
- public onConfigChanged<T extends types.IConfig, TK extends keyof T>(n: TK, v: T[TK]): void | Promise<void>;
75
- public onConfigChanged(): void {
76
- return;
77
- }
78
-
79
- /** --- 窗体创建事件 --- */
80
- public onFormCreated(
81
- taskId: number, formId: number, title: string, icon: string, showInSystemTask: boolean
82
- ): void | Promise<void>;
83
- public onFormCreated(): void {
84
- return;
85
- }
86
-
87
- /** --- 窗体销毁事件 */
88
- public onFormRemoved(taskId: number, formId: number, title: string, icon: string): void | Promise<void>;
89
- public onFormRemoved(): void {
90
- return;
91
- }
92
-
93
- /** --- 窗体标题改变事件 */
94
- public onFormTitleChanged(taskId: number, formId: number, title: string): void | Promise<void>;
95
- public onFormTitleChanged(): void | Promise<void> {
96
- return;
97
- }
98
-
99
- /** --- 窗体图标改变事件 --- */
100
- public onFormIconChanged(taskId: number, formId: number, icon: string): void | Promise<void>;
101
- public onFormIconChanged(): void | Promise<void> {
102
- return;
103
- }
104
-
105
- /** --- 窗体最小化状态改变事件 --- */
106
- public onFormStateMinChanged(taskId: number, formId: number, state: boolean): void | Promise<void>;
107
- public onFormStateMinChanged(): void {
108
- return;
109
- }
110
-
111
- /** --- 窗体最大化状态改变事件 --- */
112
- public onFormStateMaxChanged(taskId: number, formId: number, state: boolean): void | Promise<void>;
113
- public onFormStateMaxChanged(): void {
114
- return;
115
- }
116
-
117
- /** --- 窗体显示状态改变事件 --- */
118
- public onFormShowChanged(taskId: number, formId: number, state: boolean): void | Promise<void>;
119
- public onFormShowChanged(): void {
120
- return;
121
- }
122
-
123
- /** --- 窗体获得焦点事件 --- */
124
- public onFormFocused(taskId: number, formId: number): void | Promise<void>;
125
- public onFormFocused(): void {
126
- return;
127
- }
128
-
129
- /** --- 窗体丢失焦点事件 --- */
130
- public onFormBlurred(taskId: number, formId: number): void | Promise<void>;
131
- public onFormBlurred(): void {
132
- return;
133
- }
134
-
135
- /** --- 窗体闪烁事件 --- */
136
- public onFormFlash(taskId: number, formId: number): void | Promise<void>;
137
- public onFormFlash(): void {
138
- return;
139
- }
140
-
141
- /** --- 窗体是否显示在任务栏属性改变事件 --- */
142
- public onFormShowInSystemTaskChange(taskId: number, formId: number, value: boolean): void | Promise<void>;
143
- public onFormShowInSystemTaskChange(): void {
144
- return;
145
- }
146
-
147
- /** --- 窗体的 formHash 改变事件 --- */
148
- public onFormHashChange(
149
- taskId: number, formId: number, value: string, data: Record<string, any>
150
- ): void | Promise<void>;
151
- public onFormHashChange(): void {
152
- return;
153
- }
154
-
155
- /** --- 任务开始事件 --- */
156
- public onTaskStarted(taskId: number): void | Promise<void>;
157
- public onTaskStarted(): void | Promise<void> {
158
- return;
159
- }
160
-
161
- /** --- 任务结束事件 --- */
162
- public onTaskEnded(taskId: number): void | Promise<void>;
163
- public onTaskEnded(): void | Promise<void> {
164
- return;
165
- }
166
-
167
- /** --- launcher 文件夹名称修改事件 --- */
168
- public onLauncherFolderNameChanged(id: string, name: string): void | Promise<void>;
169
- public onLauncherFolderNameChanged(): void {
170
- return;
171
- }
172
-
173
- /** --- location hash 改变事件 --- */
174
- public onHashChanged(hash: string): void | Promise<void>;
175
- public onHashChanged(): void {
176
- return;
177
- }
178
-
179
- /** --- 键盘按下事件 --- */
180
- public onKeydown(e: KeyboardEvent): void | Promise<void>;
181
- public onKeydown(): void {
182
- return;
183
- }
184
-
185
- /** --- 键盘弹起事件 --- */
186
- public onKeyup(e: KeyboardEvent): void | Promise<void>;
187
- public onKeyup(): void {
188
- return;
189
- }
190
-
191
- /** --- 环境文件准备加载时的事件 --- */
192
- public onRuntimeFileLoad(url: string): void | Promise<void>;
193
- public onRuntimeFileLoad(): void {
194
- return;
195
- }
196
-
197
- /** --- 环境文件加载完成的事件 --- */
198
- public onRuntimeFileLoaded(url: string, state: number): void | Promise<void>;
199
- public onRuntimeFileLoaded(): void {
200
- return;
201
- }
202
-
203
- }
204
-
205
- export function launcher(boot: AbstractBoot): void {
206
- (async function() {
207
- // --- 通过标签加载库 ---
208
- const paths: string[] = [
209
- `${loader.cdn}/npm/vue@3.5.13/dist/vue.global${boot.isDebug() ? '' : '.prod.min'}.js`
210
- ];
211
- // --- 判断 TouchEvent 是否存在(例如某些浏览器可能不存在这个对象) ---
212
- if (!((window as any).TouchEvent)) {
213
- (window as any).TouchEvent = CustomEvent;
214
- }
215
- // --- 判断 ResizeObserver 是否存在 ---
216
- let ro = true;
217
- // ResizeObserver = undefined;
218
- if (!((window as any).ResizeObserver)) {
219
- ro = false;
220
- paths.push(loader.cdn + '/npm/@juggle/resize-observer@3.4.0/lib/exports/resize-observer.umd.min.js');
221
- }
222
- // --- 加载 vue 以及必要库 ---
223
- await loader.loadScripts(paths);
224
- // --- 处理 ResizeObserver ---
225
- if (!ro) {
226
- (window as any).ResizeObserverEntry = (window as any).ResizeObserver.ResizeObserverEntry;
227
- (window as any).ResizeObserver = (window as any).ResizeObserver.ResizeObserver;
228
- }
229
- // --- map 加载库 ---
230
- const map: Record<string, string> = {
231
- 'jszip': loader.cdn + '/npm/jszip@3.10.1/dist/jszip.min'
232
- };
233
- // --- 加载 clickgo 主程序 ---
234
- const after = '?' + Math.random().toString();
235
- const files = await loader.sniffFiles('clickgo.js', {
236
- 'dir': __dirname + '/',
237
- 'after': after,
238
- 'map': map,
239
- 'load': (url) => {
240
- boot.onRuntimeFileLoad(url) as any;
241
- },
242
- 'loaded': (url, state) => {
243
- boot.onRuntimeFileLoaded(url, state) as any;
244
- }
245
- });
246
- const cg = loader.require('clickgo', files, {
247
- 'dir': __dirname + '/',
248
- 'map': map
249
- })[0] as typeof import('../dist/clickgo');
250
- // --- 加载 clickgo 的 global css ---
251
- try {
252
- let style = await (await fetch(__dirname + '/global.css' + (__dirname.startsWith(loader.cdn) ? '' : '?' + Math.random().toString()))).text();
253
- // --- 将 style 里的 url 转换一下路径 ---
254
- const reg = /url\(["']{0,1}(.+?)["']{0,1}\)/ig;
255
- let match: RegExpExecArray | null = null;
256
- while ((match = reg.exec(style))) {
257
- style = style.replace(match[0], `url('${__dirname}/${match[1]}')`);
258
- }
259
- document.getElementById('cg-global')?.insertAdjacentHTML('afterbegin', style);
260
- }
261
- catch {
262
- alert(`ClickGo: "${__dirname}/global.css'" failed.`);
263
- }
264
- // --- 设置一些项目 ---
265
- clickgo = cg;
266
- control = cg.control;
267
- core = cg.core;
268
- dom = cg.dom;
269
- form = cg.form;
270
- fs = cg.fs;
271
- native = cg.native;
272
- task = cg.task;
273
- theme = cg.theme;
274
- tool = cg.tool;
275
- zip = cg.zip;
276
- core.boot = boot;
277
- // --- 执行回调 ---
278
- await boot.main();
279
- })().catch(function(e) {
280
- console.log('launcher', e);
281
- });
282
- }