@yumerijs/core 1.1.3 → 1.2.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.
- package/dist/command.d.ts +3 -0
- package/dist/command.js +3 -0
- package/dist/config.d.ts +0 -0
- package/dist/config.js +0 -0
- package/dist/context.d.ts +42 -0
- package/dist/context.js +56 -0
- package/dist/core.d.ts +61 -14
- package/dist/core.js +160 -46
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +16 -116
- package/dist/platform.d.ts +0 -0
- package/dist/platform.js +0 -0
- package/dist/route.d.ts +58 -0
- package/dist/route.js +221 -0
- package/dist/session.d.ts +0 -0
- package/dist/session.js +0 -0
- package/package.json +4 -6
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/command.d.ts
CHANGED
package/dist/command.js
CHANGED
package/dist/config.d.ts
CHANGED
|
File without changes
|
package/dist/config.js
CHANGED
|
File without changes
|
package/dist/context.d.ts
CHANGED
|
@@ -1,17 +1,59 @@
|
|
|
1
1
|
import { Core } from './core';
|
|
2
2
|
import { Command } from './command';
|
|
3
|
+
import { Route } from './route';
|
|
3
4
|
export declare class Context {
|
|
4
5
|
private core;
|
|
5
6
|
pluginname: string;
|
|
7
|
+
/**
|
|
8
|
+
* 创建 Context 实例
|
|
9
|
+
* @param core Core 实例
|
|
10
|
+
* @param pluginname 插件名称
|
|
11
|
+
*/
|
|
6
12
|
constructor(core: Core, pluginname: string);
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated Use route() instead.
|
|
15
|
+
*/
|
|
7
16
|
command(name: string): Command;
|
|
17
|
+
/**
|
|
18
|
+
* 注册路由
|
|
19
|
+
* @param path 路由路径
|
|
20
|
+
* @returns Route
|
|
21
|
+
*/
|
|
22
|
+
route(path: string): Route;
|
|
23
|
+
/**
|
|
24
|
+
* 注册事件
|
|
25
|
+
* @param name 事件名称
|
|
26
|
+
* @param listener 事件监听器
|
|
27
|
+
*/
|
|
8
28
|
on(name: string, listener: (...args: any[]) => Promise<void>): void;
|
|
29
|
+
/**
|
|
30
|
+
* 注册全局中间件
|
|
31
|
+
* @param name 中间件名称
|
|
32
|
+
* @param callback 中间件回调函数
|
|
33
|
+
*/
|
|
9
34
|
use(name: string, callback: Function): void;
|
|
10
35
|
/**
|
|
11
36
|
* Unless nessesary, do not use core directly
|
|
12
37
|
*/
|
|
13
38
|
getCore(): Core;
|
|
39
|
+
/**
|
|
40
|
+
* 触发事件
|
|
41
|
+
* @param event 事件名称
|
|
42
|
+
* @param args 事件参数
|
|
43
|
+
* @returns Promise<void>
|
|
44
|
+
*/
|
|
14
45
|
emit(event: string, ...args: any[]): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* 获取组件实例
|
|
48
|
+
* @param name 组件名称
|
|
49
|
+
* @returns 组件实例
|
|
50
|
+
*/
|
|
15
51
|
getComponent(name: string): any;
|
|
52
|
+
/**
|
|
53
|
+
* 注册组件
|
|
54
|
+
* @param name 组件名称
|
|
55
|
+
* @param component 组件实例
|
|
56
|
+
* @returns void
|
|
57
|
+
*/
|
|
16
58
|
registerComponent(name: string, component: any): void;
|
|
17
59
|
}
|
package/dist/context.js
CHANGED
|
@@ -5,10 +5,18 @@ const command_1 = require("./command");
|
|
|
5
5
|
class Context {
|
|
6
6
|
core;
|
|
7
7
|
pluginname;
|
|
8
|
+
/**
|
|
9
|
+
* 创建 Context 实例
|
|
10
|
+
* @param core Core 实例
|
|
11
|
+
* @param pluginname 插件名称
|
|
12
|
+
*/
|
|
8
13
|
constructor(core, pluginname) {
|
|
9
14
|
this.core = core;
|
|
10
15
|
this.pluginname = pluginname;
|
|
11
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Use route() instead.
|
|
19
|
+
*/
|
|
12
20
|
command(name) {
|
|
13
21
|
if (this.core.commands[name]) {
|
|
14
22
|
this.core.logger.warn(`Plugin "${this.pluginname}" attempt to register command "${name}", but it has been registered by plugin "${this.core.cmdtoplu[name]}."`);
|
|
@@ -19,11 +27,42 @@ class Context {
|
|
|
19
27
|
return this.core.command(name);
|
|
20
28
|
}
|
|
21
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* 注册路由
|
|
32
|
+
* @param path 路由路径
|
|
33
|
+
* @returns Route
|
|
34
|
+
*/
|
|
35
|
+
route(path) {
|
|
36
|
+
if (this.core.routes[path]) {
|
|
37
|
+
this.core.logger.warn(`Plugin "${this.pluginname}" attempt to register route "${path}", but it has been registered by plugin "${this.core.routetoplu[path]}."`);
|
|
38
|
+
return this.core.routes[path];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.core.routetoplu[path] = this.pluginname;
|
|
42
|
+
return this.core.route(path);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 注册事件
|
|
47
|
+
* @param name 事件名称
|
|
48
|
+
* @param listener 事件监听器
|
|
49
|
+
*/
|
|
22
50
|
on(name, listener) {
|
|
23
51
|
// 存储该插件监听的事件,需要注意的是一个事件可由多个插件监听
|
|
52
|
+
if (!this.core.evttoplu[name]) {
|
|
53
|
+
this.core.evttoplu[name] = {};
|
|
54
|
+
}
|
|
55
|
+
if (!this.core.evttoplu[name][this.pluginname]) {
|
|
56
|
+
this.core.evttoplu[name][this.pluginname] = [];
|
|
57
|
+
}
|
|
24
58
|
this.core.evttoplu[name][this.pluginname].push(listener);
|
|
25
59
|
this.core.on(name, listener);
|
|
26
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* 注册全局中间件
|
|
63
|
+
* @param name 中间件名称
|
|
64
|
+
* @param callback 中间件回调函数
|
|
65
|
+
*/
|
|
27
66
|
use(name, callback) {
|
|
28
67
|
this.core.mdwtoplu[name] = this.pluginname;
|
|
29
68
|
this.core.use(name, async (...args) => {
|
|
@@ -36,12 +75,29 @@ class Context {
|
|
|
36
75
|
getCore() {
|
|
37
76
|
return this.core;
|
|
38
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* 触发事件
|
|
80
|
+
* @param event 事件名称
|
|
81
|
+
* @param args 事件参数
|
|
82
|
+
* @returns Promise<void>
|
|
83
|
+
*/
|
|
39
84
|
async emit(event, ...args) {
|
|
40
85
|
return await this.core.emit(event, ...args);
|
|
41
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* 获取组件实例
|
|
89
|
+
* @param name 组件名称
|
|
90
|
+
* @returns 组件实例
|
|
91
|
+
*/
|
|
42
92
|
getComponent(name) {
|
|
43
93
|
return this.core.getComponent(name);
|
|
44
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* 注册组件
|
|
97
|
+
* @param name 组件名称
|
|
98
|
+
* @param component 组件实例
|
|
99
|
+
* @returns void
|
|
100
|
+
*/
|
|
45
101
|
registerComponent(name, component) {
|
|
46
102
|
if (this.core.components[name]) {
|
|
47
103
|
this.core.logger.warn(`Plugin "${this.pluginname}" attempt to register component "${name}", but it has been registered by plugin "${this.core.comtoplu[name]}."`);
|
package/dist/core.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { Command } from './command';
|
|
|
4
4
|
import { Session } from './session';
|
|
5
5
|
import { Platform } from './platform';
|
|
6
6
|
import { Middleware } from './middleware';
|
|
7
|
+
import { Route } from './route';
|
|
7
8
|
import { Context } from './context';
|
|
8
9
|
interface Plugin {
|
|
9
10
|
apply: (ctx: Context, config: Config) => Promise<void>;
|
|
@@ -40,6 +41,7 @@ export declare class Core {
|
|
|
40
41
|
[name: string]: any;
|
|
41
42
|
};
|
|
42
43
|
commands: Record<string, Command>;
|
|
44
|
+
routes: Record<string, Route>;
|
|
43
45
|
pluginLoader: PluginLoader;
|
|
44
46
|
logger: Logger;
|
|
45
47
|
providedComponents: {
|
|
@@ -48,12 +50,39 @@ export declare class Core {
|
|
|
48
50
|
private pluginModules;
|
|
49
51
|
private configPath;
|
|
50
52
|
private globalMiddlewares;
|
|
53
|
+
/**
|
|
54
|
+
* @deprecated 命令与插件对应关系
|
|
55
|
+
*/
|
|
51
56
|
cmdtoplu: Record<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* 路由与插件对应关系
|
|
59
|
+
*/
|
|
60
|
+
routetoplu: Record<string, string>;
|
|
61
|
+
/**
|
|
62
|
+
* 组件与插件对应关系
|
|
63
|
+
*/
|
|
52
64
|
comtoplu: Record<string, string>;
|
|
65
|
+
/**
|
|
66
|
+
* 事件监听器与插件对应关系
|
|
67
|
+
*/
|
|
53
68
|
evttoplu: Record<string, Record<string, ((...args: any[]) => Promise<void>)[]>>;
|
|
69
|
+
/**
|
|
70
|
+
* 中间件与插件对应关系
|
|
71
|
+
*/
|
|
54
72
|
mdwtoplu: Record<string, string>;
|
|
55
73
|
plftoplu: Record<string, string>;
|
|
74
|
+
/**
|
|
75
|
+
* 插件状态
|
|
76
|
+
*/
|
|
56
77
|
pluginStatus: Record<string, PluginStatus>;
|
|
78
|
+
/**
|
|
79
|
+
* 插件监听器
|
|
80
|
+
*/
|
|
81
|
+
private pluginWatchers;
|
|
82
|
+
/**
|
|
83
|
+
* 初始化核心
|
|
84
|
+
* @param pluginLoader 插件加载器
|
|
85
|
+
*/
|
|
57
86
|
constructor(pluginLoader: PluginLoader);
|
|
58
87
|
/**
|
|
59
88
|
* 加载配置文件
|
|
@@ -73,17 +102,19 @@ export declare class Core {
|
|
|
73
102
|
getPluginConfig(pluginName: string): Promise<Config>;
|
|
74
103
|
/**
|
|
75
104
|
* 加载所有在配置文件中启用的插件
|
|
105
|
+
* @returns Promise<void>
|
|
76
106
|
*/
|
|
77
107
|
loadPlugins(): Promise<void>;
|
|
78
108
|
/**
|
|
79
|
-
*
|
|
109
|
+
* 加载单个插件
|
|
80
110
|
* @param pluginName 要加载的插件名
|
|
81
111
|
* @param triggerPendingCheck 是否在加载后触发对其他待定插件的检查,默认为 true
|
|
82
112
|
* @returns Promise<boolean> 是否加载成功
|
|
83
113
|
*/
|
|
84
114
|
loadSinglePlugin(pluginName: string, triggerPendingCheck?: boolean, onlypending?: boolean): Promise<boolean>;
|
|
85
115
|
/**
|
|
86
|
-
*
|
|
116
|
+
* 尝试加载所有处于 PENDING 状态的插件
|
|
117
|
+
* @returns Promise<void>
|
|
87
118
|
*/
|
|
88
119
|
private _loadPendingPlugins;
|
|
89
120
|
/**
|
|
@@ -92,8 +123,9 @@ export declare class Core {
|
|
|
92
123
|
*/
|
|
93
124
|
unloadPlugin(pluginNameToUnload: string, ispending?: boolean): Promise<void>;
|
|
94
125
|
/**
|
|
95
|
-
*
|
|
126
|
+
* 执行单个插件的卸载逻辑
|
|
96
127
|
* @param pluginName 插件名
|
|
128
|
+
* @param ispending 是否处于 PENDING 状态
|
|
97
129
|
*/
|
|
98
130
|
private _unloadSinglePlugin;
|
|
99
131
|
/**
|
|
@@ -102,11 +134,11 @@ export declare class Core {
|
|
|
102
134
|
*/
|
|
103
135
|
reloadPlugin(pluginName: string): Promise<void>;
|
|
104
136
|
/**
|
|
105
|
-
*
|
|
106
|
-
* @param
|
|
107
|
-
* @param
|
|
137
|
+
* 监听插件文件变化
|
|
138
|
+
* @param pluginName 插件名称
|
|
139
|
+
* @param pluginPath 插件路径
|
|
108
140
|
*/
|
|
109
|
-
|
|
141
|
+
private watchPlugin;
|
|
110
142
|
/**
|
|
111
143
|
* 注册组件
|
|
112
144
|
* @param name 组件名称
|
|
@@ -144,19 +176,28 @@ export declare class Core {
|
|
|
144
176
|
*/
|
|
145
177
|
use(name: string, middleware: Middleware): Core;
|
|
146
178
|
/**
|
|
147
|
-
*
|
|
148
|
-
* @param name 命令名称
|
|
149
|
-
* @returns Command 实例
|
|
179
|
+
* @deprecated 已更改为路由
|
|
150
180
|
*/
|
|
151
181
|
command(name: string): Command;
|
|
182
|
+
/**
|
|
183
|
+
* 注册路由
|
|
184
|
+
* @param path 路由路径
|
|
185
|
+
* @returns Route 实例
|
|
186
|
+
*/
|
|
187
|
+
route(path: string): Route;
|
|
152
188
|
/**
|
|
153
189
|
* 执行命令
|
|
154
|
-
* @
|
|
155
|
-
* @param session 会话对象
|
|
156
|
-
* @param args 传递给命令处理函数的参数
|
|
157
|
-
* @returns 会话对象或 null
|
|
190
|
+
* @deprecated
|
|
158
191
|
*/
|
|
159
192
|
executeCommand(name: string, session: any, ...args: any[]): Promise<Session | null>;
|
|
193
|
+
/**
|
|
194
|
+
* 执行路由
|
|
195
|
+
* @param pathname 需要匹配的URL
|
|
196
|
+
* @param session 当前会话
|
|
197
|
+
* @param queryParams URL参数
|
|
198
|
+
* @returns 是否匹配成功
|
|
199
|
+
*/
|
|
200
|
+
executeRoute(pathname: string, session: Session, queryParams: URLSearchParams): Promise<boolean>;
|
|
160
201
|
/**
|
|
161
202
|
* 注册平台
|
|
162
203
|
* @param platform 平台实例
|
|
@@ -174,5 +215,11 @@ export declare class Core {
|
|
|
174
215
|
* @returns Command 实例或 null
|
|
175
216
|
*/
|
|
176
217
|
getCommand(name: string): Command | null;
|
|
218
|
+
/**
|
|
219
|
+
* 获取路由
|
|
220
|
+
* @param path 匹配路径
|
|
221
|
+
* @return Route 实例或 false
|
|
222
|
+
*/
|
|
223
|
+
getRoute(path: string): Route | false;
|
|
177
224
|
}
|
|
178
225
|
export {};
|
package/dist/core.js
CHANGED
|
@@ -32,9 +32,6 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.Core = void 0;
|
|
40
37
|
/**
|
|
@@ -48,7 +45,8 @@ const path = __importStar(require("path"));
|
|
|
48
45
|
const config_1 = require("./config");
|
|
49
46
|
const logger_1 = require("./logger");
|
|
50
47
|
const command_1 = require("./command");
|
|
51
|
-
const
|
|
48
|
+
const chokidar = __importStar(require("chokidar"));
|
|
49
|
+
const route_1 = require("./route");
|
|
52
50
|
const context_1 = require("./context");
|
|
53
51
|
class Core {
|
|
54
52
|
plugins = {};
|
|
@@ -57,18 +55,46 @@ class Core {
|
|
|
57
55
|
eventListeners = {};
|
|
58
56
|
components = {};
|
|
59
57
|
commands = {};
|
|
58
|
+
routes = {};
|
|
60
59
|
pluginLoader;
|
|
61
60
|
logger = new logger_1.Logger('core');
|
|
62
61
|
providedComponents = {};
|
|
63
62
|
pluginModules = {};
|
|
64
63
|
configPath = '';
|
|
65
64
|
globalMiddlewares = {};
|
|
65
|
+
/**
|
|
66
|
+
* @deprecated 命令与插件对应关系
|
|
67
|
+
*/
|
|
66
68
|
cmdtoplu = {};
|
|
69
|
+
/**
|
|
70
|
+
* 路由与插件对应关系
|
|
71
|
+
*/
|
|
72
|
+
routetoplu = {};
|
|
73
|
+
/**
|
|
74
|
+
* 组件与插件对应关系
|
|
75
|
+
*/
|
|
67
76
|
comtoplu = {};
|
|
77
|
+
/**
|
|
78
|
+
* 事件监听器与插件对应关系
|
|
79
|
+
*/
|
|
68
80
|
evttoplu = {};
|
|
81
|
+
/**
|
|
82
|
+
* 中间件与插件对应关系
|
|
83
|
+
*/
|
|
69
84
|
mdwtoplu = {};
|
|
70
85
|
plftoplu = {};
|
|
86
|
+
/**
|
|
87
|
+
* 插件状态
|
|
88
|
+
*/
|
|
71
89
|
pluginStatus = {};
|
|
90
|
+
/**
|
|
91
|
+
* 插件监听器
|
|
92
|
+
*/
|
|
93
|
+
pluginWatchers = {};
|
|
94
|
+
/**
|
|
95
|
+
* 初始化核心
|
|
96
|
+
* @param pluginLoader 插件加载器
|
|
97
|
+
*/
|
|
72
98
|
constructor(pluginLoader) {
|
|
73
99
|
this.pluginLoader = pluginLoader;
|
|
74
100
|
}
|
|
@@ -96,7 +122,7 @@ class Core {
|
|
|
96
122
|
* @param configPath 配置文件的路径
|
|
97
123
|
*/
|
|
98
124
|
watchConfig(configPath) {
|
|
99
|
-
const watcher =
|
|
125
|
+
const watcher = chokidar.watch(configPath, {
|
|
100
126
|
persistent: true,
|
|
101
127
|
ignoreInitial: true,
|
|
102
128
|
awaitWriteFinish: {
|
|
@@ -143,6 +169,7 @@ class Core {
|
|
|
143
169
|
}
|
|
144
170
|
/**
|
|
145
171
|
* 加载所有在配置文件中启用的插件
|
|
172
|
+
* @returns Promise<void>
|
|
146
173
|
*/
|
|
147
174
|
async loadPlugins() {
|
|
148
175
|
if (!this.config || typeof this.config.plugins !== 'object' || this.config.plugins === null) {
|
|
@@ -162,6 +189,13 @@ class Core {
|
|
|
162
189
|
}
|
|
163
190
|
}
|
|
164
191
|
const enabledPlugins = allPluginNames.filter(name => !name.startsWith('~'));
|
|
192
|
+
// 卸载配置中已禁用或移除的已加载插件
|
|
193
|
+
const currentlyLoaded = Object.keys(this.plugins);
|
|
194
|
+
for (const loadedName of currentlyLoaded) {
|
|
195
|
+
if (!enabledPlugins.includes(loadedName)) {
|
|
196
|
+
await this.unloadPlugin(loadedName);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
165
199
|
if (enabledPlugins.length === 0) {
|
|
166
200
|
this.logger.info('No enabled plugins found in configuration.');
|
|
167
201
|
return;
|
|
@@ -189,12 +223,9 @@ class Core {
|
|
|
189
223
|
if (pendingPlugins.length > 0) {
|
|
190
224
|
// this.logger.warn('Some plugins could not be loaded due to unresolved dependencies:', pendingPlugins);
|
|
191
225
|
}
|
|
192
|
-
if (process.env.NODE_ENV === 'development') {
|
|
193
|
-
this.watchPlugins(this);
|
|
194
|
-
}
|
|
195
226
|
}
|
|
196
227
|
/**
|
|
197
|
-
*
|
|
228
|
+
* 加载单个插件
|
|
198
229
|
* @param pluginName 要加载的插件名
|
|
199
230
|
* @param triggerPendingCheck 是否在加载后触发对其他待定插件的检查,默认为 true
|
|
200
231
|
* @returns Promise<boolean> 是否加载成功
|
|
@@ -242,6 +273,30 @@ class Core {
|
|
|
242
273
|
if (triggerPendingCheck) {
|
|
243
274
|
await this._loadPendingPlugins();
|
|
244
275
|
}
|
|
276
|
+
// In development mode, watch the plugin for changes.
|
|
277
|
+
if (process.env.NODE_ENV === 'development') {
|
|
278
|
+
let pluginPathToWatch = null;
|
|
279
|
+
try {
|
|
280
|
+
const pkgJsonPath = require.resolve(`${pluginName}/package.json`);
|
|
281
|
+
pluginPathToWatch = path.dirname(pkgJsonPath);
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
const localPluginPath = path.resolve(process.cwd(), pluginName);
|
|
285
|
+
const localPluginPathInPlugins = path.resolve(process.cwd(), 'plugins', pluginName);
|
|
286
|
+
if (fs.existsSync(localPluginPath)) {
|
|
287
|
+
pluginPathToWatch = localPluginPath;
|
|
288
|
+
}
|
|
289
|
+
else if (fs.existsSync(localPluginPathInPlugins)) {
|
|
290
|
+
pluginPathToWatch = localPluginPathInPlugins;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (pluginPathToWatch) {
|
|
294
|
+
this.watchPlugin(pluginName, pluginPathToWatch);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
this.logger.warn(`Could not resolve path for plugin ${pluginName} to watch for changes.`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
245
300
|
return true;
|
|
246
301
|
}
|
|
247
302
|
catch (err) {
|
|
@@ -251,7 +306,8 @@ class Core {
|
|
|
251
306
|
}
|
|
252
307
|
}
|
|
253
308
|
/**
|
|
254
|
-
*
|
|
309
|
+
* 尝试加载所有处于 PENDING 状态的插件
|
|
310
|
+
* @returns Promise<void>
|
|
255
311
|
*/
|
|
256
312
|
async _loadPendingPlugins() {
|
|
257
313
|
const pendingPlugins = Object.keys(this.pluginStatus).filter(p => this.pluginStatus[p] === "pending" /* PluginStatus.PENDING */);
|
|
@@ -298,8 +354,9 @@ class Core {
|
|
|
298
354
|
// await this._loadPendingPlugins();
|
|
299
355
|
}
|
|
300
356
|
/**
|
|
301
|
-
*
|
|
357
|
+
* 执行单个插件的卸载逻辑
|
|
302
358
|
* @param pluginName 插件名
|
|
359
|
+
* @param ispending 是否处于 PENDING 状态
|
|
303
360
|
*/
|
|
304
361
|
async _unloadSinglePlugin(pluginName, ispending = false) {
|
|
305
362
|
if (this.pluginStatus[pluginName] !== "enabled" /* PluginStatus.ENABLED */) {
|
|
@@ -316,6 +373,11 @@ class Core {
|
|
|
316
373
|
delete this.plugins[pluginName];
|
|
317
374
|
delete this.pluginModules[pluginName];
|
|
318
375
|
this.pluginStatus[pluginName] = ispending ? "pending" /* PluginStatus.PENDING */ : "disabled" /* PluginStatus.DISABLED */;
|
|
376
|
+
// Stop watching the plugin directory
|
|
377
|
+
if (this.pluginWatchers[pluginName]) {
|
|
378
|
+
this.pluginWatchers[pluginName].close();
|
|
379
|
+
delete this.pluginWatchers[pluginName];
|
|
380
|
+
}
|
|
319
381
|
this.emit('plugin-unloaded', pluginName);
|
|
320
382
|
}
|
|
321
383
|
catch (error) {
|
|
@@ -342,14 +404,17 @@ class Core {
|
|
|
342
404
|
}
|
|
343
405
|
}
|
|
344
406
|
/**
|
|
345
|
-
*
|
|
346
|
-
* @param
|
|
347
|
-
* @param
|
|
407
|
+
* 监听插件文件变化
|
|
408
|
+
* @param pluginName 插件名称
|
|
409
|
+
* @param pluginPath 插件路径
|
|
348
410
|
*/
|
|
349
|
-
|
|
411
|
+
watchPlugin(pluginName, pluginPath) {
|
|
412
|
+
if (this.pluginWatchers[pluginName]) {
|
|
413
|
+
return; // Already watching
|
|
414
|
+
}
|
|
350
415
|
const logger = new logger_1.Logger('hmr');
|
|
351
|
-
const watcher =
|
|
352
|
-
ignored: /(^|[
|
|
416
|
+
const watcher = chokidar.watch(pluginPath, {
|
|
417
|
+
ignored: /(^|[\/])\../,
|
|
353
418
|
persistent: true,
|
|
354
419
|
ignoreInitial: true,
|
|
355
420
|
awaitWriteFinish: {
|
|
@@ -357,34 +422,20 @@ class Core {
|
|
|
357
422
|
pollInterval: 100,
|
|
358
423
|
},
|
|
359
424
|
});
|
|
360
|
-
const getPluginNameFromPath = (changePath) => {
|
|
361
|
-
if (!changePath.endsWith('.ts') && !changePath.endsWith('.js'))
|
|
362
|
-
return null;
|
|
363
|
-
const parts = changePath.split(path.sep);
|
|
364
|
-
return parts.length > 1 ? parts[1] : null;
|
|
365
|
-
};
|
|
366
425
|
watcher.on('change', async (changePath) => {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
logger.info(`Plugin file changed: ${changePath}`);
|
|
370
|
-
await core.reloadPlugin(pluginName);
|
|
371
|
-
}
|
|
426
|
+
logger.info(`Plugin file changed: ${changePath}`);
|
|
427
|
+
await this.reloadPlugin(pluginName);
|
|
372
428
|
});
|
|
373
429
|
watcher.on('add', async (changePath) => {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
logger.info(`New plugin file added: ${changePath}`);
|
|
377
|
-
await core.reloadPlugin(pluginName);
|
|
378
|
-
}
|
|
430
|
+
logger.info(`New file added to plugin ${pluginName}: ${changePath}`);
|
|
431
|
+
await this.reloadPlugin(pluginName);
|
|
379
432
|
});
|
|
380
433
|
watcher.on('unlink', async (changePath) => {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
logger.info(`Plugin file removed: ${changePath}`);
|
|
384
|
-
await core.unloadPlugin(pluginName);
|
|
385
|
-
}
|
|
434
|
+
logger.info(`File removed from plugin ${pluginName}: ${changePath}`);
|
|
435
|
+
await this.reloadPlugin(pluginName);
|
|
386
436
|
});
|
|
387
|
-
|
|
437
|
+
this.pluginWatchers[pluginName] = watcher;
|
|
438
|
+
// logger.info(`Watching for changes in plugin: ${pluginName}`);
|
|
388
439
|
}
|
|
389
440
|
/**
|
|
390
441
|
* 注册组件
|
|
@@ -455,21 +506,26 @@ class Core {
|
|
|
455
506
|
return this;
|
|
456
507
|
}
|
|
457
508
|
/**
|
|
458
|
-
*
|
|
459
|
-
* @param name 命令名称
|
|
460
|
-
* @returns Command 实例
|
|
509
|
+
* @deprecated 已更改为路由
|
|
461
510
|
*/
|
|
462
511
|
command(name) {
|
|
463
512
|
const command = new command_1.Command(this, name);
|
|
464
513
|
this.commands[name] = command;
|
|
465
514
|
return command;
|
|
466
515
|
}
|
|
516
|
+
/**
|
|
517
|
+
* 注册路由
|
|
518
|
+
* @param path 路由路径
|
|
519
|
+
* @returns Route 实例
|
|
520
|
+
*/
|
|
521
|
+
route(path) {
|
|
522
|
+
const route = new route_1.Route(path);
|
|
523
|
+
this.routes[path] = route;
|
|
524
|
+
return route;
|
|
525
|
+
}
|
|
467
526
|
/**
|
|
468
527
|
* 执行命令
|
|
469
|
-
* @
|
|
470
|
-
* @param session 会话对象
|
|
471
|
-
* @param args 传递给命令处理函数的参数
|
|
472
|
-
* @returns 会话对象或 null
|
|
528
|
+
* @deprecated
|
|
473
529
|
*/
|
|
474
530
|
async executeCommand(name, session, ...args) {
|
|
475
531
|
const command = this.commands[name];
|
|
@@ -492,6 +548,37 @@ class Core {
|
|
|
492
548
|
}
|
|
493
549
|
return null;
|
|
494
550
|
}
|
|
551
|
+
/**
|
|
552
|
+
* 执行路由
|
|
553
|
+
* @param pathname 需要匹配的URL
|
|
554
|
+
* @param session 当前会话
|
|
555
|
+
* @param queryParams URL参数
|
|
556
|
+
* @returns 是否匹配成功
|
|
557
|
+
*/
|
|
558
|
+
async executeRoute(pathname, session, queryParams) {
|
|
559
|
+
for (const routePath in this.routes) {
|
|
560
|
+
const route = this.routes[routePath];
|
|
561
|
+
const result = route.match(pathname);
|
|
562
|
+
if (result) {
|
|
563
|
+
const globalMiddlewareList = Object.values(this.globalMiddlewares || {});
|
|
564
|
+
const routeMiddlewareList = route.middlewares || [];
|
|
565
|
+
const middlewares = [...globalMiddlewareList, ...routeMiddlewareList];
|
|
566
|
+
let index = 0;
|
|
567
|
+
const runner = async () => {
|
|
568
|
+
if (index < middlewares.length) {
|
|
569
|
+
const middleware = middlewares[index++];
|
|
570
|
+
await middleware(session, runner);
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
await route.executeHandler(session, queryParams, result.pathParams);
|
|
574
|
+
}
|
|
575
|
+
};
|
|
576
|
+
await runner();
|
|
577
|
+
return true;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
495
582
|
/**
|
|
496
583
|
* 注册平台
|
|
497
584
|
* @param platform 平台实例
|
|
@@ -513,6 +600,13 @@ class Core {
|
|
|
513
600
|
delete this.cmdtoplu[cmd];
|
|
514
601
|
delete this.commands[cmd];
|
|
515
602
|
});
|
|
603
|
+
// 清理 routes
|
|
604
|
+
Object.keys(this.routetoplu)
|
|
605
|
+
.filter(path => this.routetoplu[path] === pluginname)
|
|
606
|
+
.forEach(path => {
|
|
607
|
+
delete this.routetoplu[path];
|
|
608
|
+
delete this.routes[path];
|
|
609
|
+
});
|
|
516
610
|
// 清理 components 和 providedComponents
|
|
517
611
|
Object.keys(this.comtoplu)
|
|
518
612
|
.filter(comp => this.comtoplu[comp] === pluginname)
|
|
@@ -521,6 +615,12 @@ class Core {
|
|
|
521
615
|
delete this.components[comp];
|
|
522
616
|
delete this.providedComponents[comp];
|
|
523
617
|
});
|
|
618
|
+
// 清理由 provide 声明的组件提供关系
|
|
619
|
+
Object.keys(this.providedComponents)
|
|
620
|
+
.filter(prov => this.providedComponents[prov] === pluginname)
|
|
621
|
+
.forEach(prov => {
|
|
622
|
+
delete this.providedComponents[prov];
|
|
623
|
+
});
|
|
524
624
|
// 清理 event listeners
|
|
525
625
|
for (const evt in this.evttoplu) {
|
|
526
626
|
if (this.evttoplu[evt][pluginname]) {
|
|
@@ -547,5 +647,19 @@ class Core {
|
|
|
547
647
|
getCommand(name) {
|
|
548
648
|
return this.commands[name] || null;
|
|
549
649
|
}
|
|
650
|
+
/**
|
|
651
|
+
* 获取路由
|
|
652
|
+
* @param path 匹配路径
|
|
653
|
+
* @return Route 实例或 false
|
|
654
|
+
*/
|
|
655
|
+
getRoute(path) {
|
|
656
|
+
for (const routePath in this.routes) {
|
|
657
|
+
const route = this.routes[routePath];
|
|
658
|
+
if (route.match(path)) {
|
|
659
|
+
return route;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
return false;
|
|
663
|
+
}
|
|
550
664
|
}
|
|
551
665
|
exports.Core = Core;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -22,6 +22,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
22
22
|
__exportStar(require("./core"), exports);
|
|
23
23
|
__exportStar(require("./session"), exports);
|
|
24
24
|
__exportStar(require("./command"), exports);
|
|
25
|
+
__exportStar(require("./route"), exports);
|
|
25
26
|
__exportStar(require("./config"), exports);
|
|
26
27
|
__exportStar(require("./logger"), exports);
|
|
27
28
|
__exportStar(require("./platform"), exports);
|
package/dist/logger.d.ts
CHANGED
package/dist/logger.js
CHANGED
|
@@ -9,7 +9,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
};
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
11
|
exports.Logger = void 0;
|
|
12
|
-
const
|
|
12
|
+
const picocolors_1 = __importDefault(require("picocolors")); // 轻量颜色库
|
|
13
13
|
class Logger {
|
|
14
14
|
title;
|
|
15
15
|
titleColor;
|
|
@@ -27,126 +27,26 @@ class Logger {
|
|
|
27
27
|
this.titleColor = this.getRandomColor();
|
|
28
28
|
}
|
|
29
29
|
getRandomColor() {
|
|
30
|
-
const availableColors = [
|
|
30
|
+
const availableColors = [
|
|
31
|
+
picocolors_1.default.red, picocolors_1.default.green, picocolors_1.default.yellow, picocolors_1.default.blue,
|
|
32
|
+
picocolors_1.default.magenta, picocolors_1.default.cyan, picocolors_1.default.white, picocolors_1.default.gray
|
|
33
|
+
];
|
|
31
34
|
const randomIndex = Math.floor(Math.random() * availableColors.length);
|
|
32
35
|
return availableColors[randomIndex];
|
|
33
36
|
}
|
|
34
|
-
|
|
37
|
+
getTimestamp() {
|
|
35
38
|
const now = new Date();
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
Logger.coreInstance?.emit('log', { level, message: args.join(' ') });
|
|
39
|
-
}
|
|
40
|
-
info(...args) {
|
|
41
|
-
this.log('I', ...args);
|
|
42
|
-
}
|
|
43
|
-
warn(...args) {
|
|
44
|
-
this.log('W', ...args);
|
|
39
|
+
return `${now.getFullYear()}/${String(now.getMonth() + 1).padStart(2, '0')}/${String(now.getDate()).padStart(2, '0')} ` +
|
|
40
|
+
`${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`;
|
|
45
41
|
}
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
log(level, ...args) {
|
|
43
|
+
const levelColor = level === 'E' ? picocolors_1.default.red : level === 'W' ? picocolors_1.default.yellow : picocolors_1.default.cyan;
|
|
44
|
+
const timestamp = this.getTimestamp();
|
|
45
|
+
console.log(`${picocolors_1.default.gray(timestamp)} [${levelColor(level)}] ${this.titleColor(this.title)}`, ...args);
|
|
46
|
+
Logger.coreInstance?.emit('log', { level, message: args.join(' ') });
|
|
48
47
|
}
|
|
48
|
+
info(...args) { this.log('I', ...args); }
|
|
49
|
+
warn(...args) { this.log('W', ...args); }
|
|
50
|
+
error(...args) { this.log('E', ...args); }
|
|
49
51
|
}
|
|
50
52
|
exports.Logger = Logger;
|
|
51
|
-
function stringifyDebug(value, seen = new WeakSet(), depth = 0, indent = 2, maxDepth = 5) {
|
|
52
|
-
const pad = ' '.repeat(depth * indent);
|
|
53
|
-
const nextPad = ' '.repeat((depth + 1) * indent);
|
|
54
|
-
// --- 1. 处理基本类型和 null ---
|
|
55
|
-
if (value === null) {
|
|
56
|
-
return 'null';
|
|
57
|
-
}
|
|
58
|
-
const type = typeof value;
|
|
59
|
-
if (type === 'string') {
|
|
60
|
-
// 确保 value 是字符串,并正确转义内部单引号
|
|
61
|
-
return `'${value.replace(/'/g, "\\'")}'`;
|
|
62
|
-
}
|
|
63
|
-
if (type === 'number' || type === 'boolean') {
|
|
64
|
-
return String(value);
|
|
65
|
-
}
|
|
66
|
-
if (type === 'undefined') {
|
|
67
|
-
return 'undefined';
|
|
68
|
-
}
|
|
69
|
-
if (type === 'symbol') {
|
|
70
|
-
return value.toString();
|
|
71
|
-
}
|
|
72
|
-
if (type === 'function') {
|
|
73
|
-
// 类型断言,确保可以访问函数的 name 属性
|
|
74
|
-
return `[Function: ${value.name || '(anonymous)'}]`;
|
|
75
|
-
}
|
|
76
|
-
if (type === 'bigint') {
|
|
77
|
-
// BigInt 的特殊表示,确保 value 是 BigInt 类型
|
|
78
|
-
return `${String(value)}n`;
|
|
79
|
-
}
|
|
80
|
-
// At this point, 'value' must be a non-primitive object type (object, array, Map, Set, Date, RegExp, custom class)
|
|
81
|
-
// --- 2. 处理简单的内置对象 (它们不会有循环引用问题) ---
|
|
82
|
-
if (value instanceof RegExp) {
|
|
83
|
-
return value.toString();
|
|
84
|
-
}
|
|
85
|
-
if (value instanceof Date) {
|
|
86
|
-
return value.toISOString();
|
|
87
|
-
}
|
|
88
|
-
// --- 3. 深度限制检查 ---
|
|
89
|
-
// 此时 value 确定是一个可以被 seen WeakSet 存储的对象
|
|
90
|
-
if (depth >= maxDepth) {
|
|
91
|
-
return '[Object]';
|
|
92
|
-
}
|
|
93
|
-
// --- 4. 循环引用检测 ---
|
|
94
|
-
// 将当前对象添加到 seen Set,以便在后续递归中检测循环引用
|
|
95
|
-
// 这里需要断言 value 是一个 object 类型,因为 WeakSet 只能存储对象
|
|
96
|
-
if (seen.has(value)) {
|
|
97
|
-
return '[Circular]';
|
|
98
|
-
}
|
|
99
|
-
seen.add(value); // 添加到已访问集合
|
|
100
|
-
// --- 5. 处理复杂内置对象 (Array, Map, Set) ---
|
|
101
|
-
if (Array.isArray(value)) {
|
|
102
|
-
// 在这一分支中,TypeScript 已经把 value 缩小为 unknown[] 类型
|
|
103
|
-
if (value.length === 0)
|
|
104
|
-
return '[]';
|
|
105
|
-
const elements = value.map(el => stringifyDebug(el, seen, depth + 1, indent, maxDepth));
|
|
106
|
-
return `[\n${nextPad}${elements.join(`,\n${nextPad}`)}\n${pad}]`;
|
|
107
|
-
}
|
|
108
|
-
if (value instanceof Map) {
|
|
109
|
-
// 在这一分支中,TypeScript 已经把 value 缩小为 Map<unknown, unknown> 类型
|
|
110
|
-
if (value.size === 0)
|
|
111
|
-
return 'Map(0) {}';
|
|
112
|
-
const entries = Array.from(value.entries()).map(([k, v]) => `${stringifyDebug(k, seen, depth + 1, indent, maxDepth)} => ${stringifyDebug(v, seen, depth + 1, indent, maxDepth)}`);
|
|
113
|
-
return `Map(${value.size}) {\n${nextPad}${entries.join(`,\n${nextPad}`)}\n${pad}}`;
|
|
114
|
-
}
|
|
115
|
-
if (value instanceof Set) {
|
|
116
|
-
// 在这一分支中,TypeScript 已经把 value 缩小为 Set<unknown> 类型
|
|
117
|
-
if (value.size === 0)
|
|
118
|
-
return 'Set(0) {}';
|
|
119
|
-
const elements = Array.from(value.values()).map(el => stringifyDebug(el, seen, depth + 1, indent, maxDepth));
|
|
120
|
-
return `Set(${value.size}) {\n${nextPad}${elements.join(`,\n${nextPad}`)}\n${pad}}`;
|
|
121
|
-
}
|
|
122
|
-
// --- 6. 处理普通对象和自定义类的实例 ---
|
|
123
|
-
// 此时,value 确定是一个对象 (除了上面已处理的 Array, Map, Set, Date, RegExp, primitive, null)
|
|
124
|
-
// 并且它已经添加到了 seen 集合
|
|
125
|
-
const keys = Object.keys(value); // 将 value 断言为 object,确保 Object.keys 可以接受
|
|
126
|
-
// 获取构造函数名(如果不是普通的 Object)
|
|
127
|
-
let constructorName = '';
|
|
128
|
-
// 同样,确保 value 被视为 object 以访问 constructor 属性
|
|
129
|
-
if (value.constructor && value.constructor.name && value.constructor.name !== 'Object') {
|
|
130
|
-
constructorName = `${value.constructor.name} `;
|
|
131
|
-
}
|
|
132
|
-
if (keys.length === 0) {
|
|
133
|
-
return `${constructorName}{}`; // 空对象/空类实例
|
|
134
|
-
}
|
|
135
|
-
const properties = keys.map(key => {
|
|
136
|
-
// 将 value 断言为带有索引签名的 Record,以便可以通过字符串键访问属性
|
|
137
|
-
const propValue = value[key];
|
|
138
|
-
return `${nextPad}${normalizeObjectKey(key)}: ${stringifyDebug(propValue, seen, depth + 1, indent, maxDepth)}`;
|
|
139
|
-
});
|
|
140
|
-
return `${constructorName}{\n${properties.join(',\n')}\n${pad}}`;
|
|
141
|
-
}
|
|
142
|
-
// 辅助函数:格式化对象键名,确保它在字面量中是有效的
|
|
143
|
-
function normalizeObjectKey(key) {
|
|
144
|
-
// 检查 key 是否是有效的 JavaScript 标识符,且不是保留字
|
|
145
|
-
// 简化的判断:如果包含非字母数字下划线,或以数字开头,则需要引用。
|
|
146
|
-
// 更严谨的判断需要解析器级别的检查。这里我们简单处理为如果包含特殊字符或空格就引用。
|
|
147
|
-
if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) && !['null', 'undefined', 'true', 'false'].includes(key)) {
|
|
148
|
-
return key; // 不需要引用
|
|
149
|
-
}
|
|
150
|
-
// 引用并转义内部的单引号
|
|
151
|
-
return `'${key.replace(/'/g, "\\'")}'`;
|
|
152
|
-
}
|
package/dist/platform.d.ts
CHANGED
|
File without changes
|
package/dist/platform.js
CHANGED
|
File without changes
|
package/dist/route.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Session } from './session';
|
|
2
|
+
import { Middleware } from './middleware';
|
|
3
|
+
export type RouteHandler = (session: Session, queryParams: URLSearchParams, ...pathParams: string[]) => Promise<void> | void;
|
|
4
|
+
/**
|
|
5
|
+
* Route class using segment-based matching (no fragile capture-group-index mapping).
|
|
6
|
+
* Behavior matches the SimpleRouter in the webpage:
|
|
7
|
+
* - pathname and pattern are split on '/'
|
|
8
|
+
* - supports :param (single required), :param? (single optional), :param+ (one or more segments),
|
|
9
|
+
* :param* (zero or more segments)
|
|
10
|
+
* - honors "no trailing slash" expectation (we normalize input)
|
|
11
|
+
*/
|
|
12
|
+
export declare class Route {
|
|
13
|
+
path: string;
|
|
14
|
+
private segments;
|
|
15
|
+
private paramsInfo;
|
|
16
|
+
private handler;
|
|
17
|
+
middlewares: Middleware[];
|
|
18
|
+
allowedMethods: string[];
|
|
19
|
+
/**
|
|
20
|
+
* 创建路由
|
|
21
|
+
* @param path 路由路径
|
|
22
|
+
*/
|
|
23
|
+
constructor(path: string);
|
|
24
|
+
/**
|
|
25
|
+
* 设置路由处理器
|
|
26
|
+
* @param handler 路由处理器
|
|
27
|
+
* @returns this
|
|
28
|
+
*/
|
|
29
|
+
action(handler: RouteHandler): this;
|
|
30
|
+
/**
|
|
31
|
+
* 挂载中间件
|
|
32
|
+
* @param middleware 中间件
|
|
33
|
+
* @returns this
|
|
34
|
+
*/
|
|
35
|
+
use(middleware: Middleware): this;
|
|
36
|
+
/**
|
|
37
|
+
* 匹配路由
|
|
38
|
+
* @param pathname 请求路径
|
|
39
|
+
* @returns 匹配结果
|
|
40
|
+
*/
|
|
41
|
+
match(pathname: string): {
|
|
42
|
+
params: Record<string, string | undefined>;
|
|
43
|
+
pathParams: string[];
|
|
44
|
+
} | null;
|
|
45
|
+
/**
|
|
46
|
+
* 执行路由处理器
|
|
47
|
+
* @param session 会话对象
|
|
48
|
+
* @param params 查询参数
|
|
49
|
+
* @param pathParams 路由参数
|
|
50
|
+
*/
|
|
51
|
+
executeHandler(session: Session, params: URLSearchParams, pathParams: string[]): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* 设置可用方法
|
|
54
|
+
* @param methods 可用方法
|
|
55
|
+
* @returns this
|
|
56
|
+
*/
|
|
57
|
+
methods(...methods: string[]): Route;
|
|
58
|
+
}
|
package/dist/route.js
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Route = void 0;
|
|
4
|
+
function parsePatternToSegments(pattern) {
|
|
5
|
+
// Normalize: remove leading/trailing slashes for consistent splitting
|
|
6
|
+
const norm = pattern.replace(/^\/+|\/+$/g, '');
|
|
7
|
+
const rawSegs = norm === '' ? [] : norm.split('/');
|
|
8
|
+
const segments = [];
|
|
9
|
+
const params = [];
|
|
10
|
+
for (const seg of rawSegs) {
|
|
11
|
+
if (!seg.startsWith(':')) {
|
|
12
|
+
segments.push({ type: 'static', value: seg });
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
let name = seg.slice(1);
|
|
16
|
+
let modifier = '';
|
|
17
|
+
const lastChar = name[name.length - 1];
|
|
18
|
+
if (lastChar === '?' || lastChar === '*' || lastChar === '+') {
|
|
19
|
+
modifier = lastChar;
|
|
20
|
+
name = name.slice(0, -1);
|
|
21
|
+
}
|
|
22
|
+
segments.push({ type: 'param', name, modifier });
|
|
23
|
+
params.push({ name, modifier });
|
|
24
|
+
}
|
|
25
|
+
return { segments, params };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Route class using segment-based matching (no fragile capture-group-index mapping).
|
|
29
|
+
* Behavior matches the SimpleRouter in the webpage:
|
|
30
|
+
* - pathname and pattern are split on '/'
|
|
31
|
+
* - supports :param (single required), :param? (single optional), :param+ (one or more segments),
|
|
32
|
+
* :param* (zero or more segments)
|
|
33
|
+
* - honors "no trailing slash" expectation (we normalize input)
|
|
34
|
+
*/
|
|
35
|
+
class Route {
|
|
36
|
+
path;
|
|
37
|
+
segments;
|
|
38
|
+
paramsInfo;
|
|
39
|
+
handler = null;
|
|
40
|
+
middlewares = [];
|
|
41
|
+
allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'];
|
|
42
|
+
/**
|
|
43
|
+
* 创建路由
|
|
44
|
+
* @param path 路由路径
|
|
45
|
+
*/
|
|
46
|
+
constructor(path) {
|
|
47
|
+
this.path = path;
|
|
48
|
+
const { segments, params } = parsePatternToSegments(path);
|
|
49
|
+
this.segments = segments;
|
|
50
|
+
this.paramsInfo = params;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 设置路由处理器
|
|
54
|
+
* @param handler 路由处理器
|
|
55
|
+
* @returns this
|
|
56
|
+
*/
|
|
57
|
+
action(handler) {
|
|
58
|
+
this.handler = handler;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 挂载中间件
|
|
63
|
+
* @param middleware 中间件
|
|
64
|
+
* @returns this
|
|
65
|
+
*/
|
|
66
|
+
use(middleware) {
|
|
67
|
+
this.middlewares.push(middleware);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 匹配路由
|
|
72
|
+
* @param pathname 请求路径
|
|
73
|
+
* @returns 匹配结果
|
|
74
|
+
*/
|
|
75
|
+
match(pathname) {
|
|
76
|
+
// normalize pathname: remove leading/trailing slashes
|
|
77
|
+
const normPath = pathname.replace(/^\/+|\/+$/g, '');
|
|
78
|
+
const parts = normPath === '' ? [] : normPath.split('/');
|
|
79
|
+
const params = {};
|
|
80
|
+
const pathParams = [];
|
|
81
|
+
let i = 0; // index into segments (pattern)
|
|
82
|
+
let j = 0; // index into parts (path)
|
|
83
|
+
while (i < this.segments.length) {
|
|
84
|
+
const seg = this.segments[i];
|
|
85
|
+
// static must match exactly
|
|
86
|
+
if (seg.type === 'static') {
|
|
87
|
+
if (j >= parts.length)
|
|
88
|
+
return null;
|
|
89
|
+
if (parts[j] !== seg.value)
|
|
90
|
+
return null;
|
|
91
|
+
i++;
|
|
92
|
+
j++;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
// seg.type === 'param'
|
|
96
|
+
const nextSegIsStatic = (() => {
|
|
97
|
+
const next = this.segments[i + 1];
|
|
98
|
+
return !!next && next.type === 'static';
|
|
99
|
+
})();
|
|
100
|
+
switch (seg.modifier) {
|
|
101
|
+
case '': { // required single segment
|
|
102
|
+
if (j >= parts.length)
|
|
103
|
+
return null;
|
|
104
|
+
params[seg.name] = parts[j];
|
|
105
|
+
pathParams.push(parts[j]);
|
|
106
|
+
i++;
|
|
107
|
+
j++;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case '?': { // optional single segment
|
|
111
|
+
// If next segment is static, we should not consume the part when it equals that static
|
|
112
|
+
if (j < parts.length) {
|
|
113
|
+
if (nextSegIsStatic) {
|
|
114
|
+
// peek: if current part equals next static, then this optional param is absent
|
|
115
|
+
const nextStatic = this.segments[i + 1].value;
|
|
116
|
+
if (parts[j] === nextStatic) {
|
|
117
|
+
params[seg.name] = undefined;
|
|
118
|
+
pathParams.push('');
|
|
119
|
+
i++;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// otherwise consume one segment as the optional param
|
|
124
|
+
params[seg.name] = parts[j];
|
|
125
|
+
pathParams.push(parts[j]);
|
|
126
|
+
j++;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
params[seg.name] = undefined;
|
|
130
|
+
pathParams.push('');
|
|
131
|
+
}
|
|
132
|
+
i++;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case '+': { // required multi (one or more segments)
|
|
136
|
+
if (j >= parts.length)
|
|
137
|
+
return null; // must have at least one
|
|
138
|
+
// find boundary where next static occurs (if any)
|
|
139
|
+
let end = parts.length;
|
|
140
|
+
if (nextSegIsStatic) {
|
|
141
|
+
const nextStatic = this.segments[i + 1].value;
|
|
142
|
+
let found = -1;
|
|
143
|
+
for (let k = j; k < parts.length; k++) {
|
|
144
|
+
if (parts[k] === nextStatic) {
|
|
145
|
+
found = k;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (found === -1)
|
|
150
|
+
return null; // next static not found -> cannot satisfy pattern
|
|
151
|
+
end = found;
|
|
152
|
+
if (end === j)
|
|
153
|
+
return null; // need at least one segment
|
|
154
|
+
}
|
|
155
|
+
// consume parts[j..end-1]
|
|
156
|
+
const value = parts.slice(j, end).join('/');
|
|
157
|
+
params[seg.name] = value;
|
|
158
|
+
pathParams.push(value);
|
|
159
|
+
j = end;
|
|
160
|
+
i++;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case '*': { // optional multi (zero or more)
|
|
164
|
+
// If next static exists, consume until that static; else consume all remainder (may be zero)
|
|
165
|
+
let end = parts.length;
|
|
166
|
+
if (nextSegIsStatic) {
|
|
167
|
+
const nextStatic = this.segments[i + 1].value;
|
|
168
|
+
let found = -1;
|
|
169
|
+
for (let k = j; k < parts.length; k++) {
|
|
170
|
+
if (parts[k] === nextStatic) {
|
|
171
|
+
found = k;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (found === -1) {
|
|
176
|
+
// next static not found => we cannot match the remainder to the next pattern,
|
|
177
|
+
// but '*' can consume all remainder (and then next static will fail later)
|
|
178
|
+
end = parts.length;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
end = found;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const value = parts.slice(j, end).join('/');
|
|
185
|
+
params[seg.name] = value === '' ? undefined : value;
|
|
186
|
+
pathParams.push(value === '' ? '' : value);
|
|
187
|
+
j = end;
|
|
188
|
+
i++;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
default:
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// after finishing pattern, path must be fully consumed (no extra segments)
|
|
196
|
+
if (j !== parts.length)
|
|
197
|
+
return null;
|
|
198
|
+
return { params, pathParams };
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* 执行路由处理器
|
|
202
|
+
* @param session 会话对象
|
|
203
|
+
* @param params 查询参数
|
|
204
|
+
* @param pathParams 路由参数
|
|
205
|
+
*/
|
|
206
|
+
async executeHandler(session, params, pathParams) {
|
|
207
|
+
if (this.handler) {
|
|
208
|
+
await this.handler(session, params, ...pathParams);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* 设置可用方法
|
|
213
|
+
* @param methods 可用方法
|
|
214
|
+
* @returns this
|
|
215
|
+
*/
|
|
216
|
+
methods(...methods) {
|
|
217
|
+
this.allowedMethods = methods;
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
exports.Route = Route;
|
package/dist/session.d.ts
CHANGED
|
File without changes
|
package/dist/session.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yumerijs/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Core module for yumeri",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,13 +31,11 @@
|
|
|
31
31
|
"typescript": "^5.8.2"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@
|
|
35
|
-
"@yumerijs/loader": "1.1.0",
|
|
36
|
-
"ansi-colors": "^4.1.3",
|
|
37
|
-
"chalk": "^5.4.1",
|
|
34
|
+
"@yumerijs/loader": "^1.2.0",
|
|
38
35
|
"chokidar": "^4.0.3",
|
|
39
36
|
"js-sha256": "^0.11.0",
|
|
40
|
-
"js-yaml": "^4.1.0"
|
|
37
|
+
"js-yaml": "^4.1.0",
|
|
38
|
+
"picocolors": "^1.1.1"
|
|
41
39
|
},
|
|
42
40
|
"packageManager": "yarn@4.9.1"
|
|
43
41
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"fileNames":["../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es5.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.dom.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.scripthost.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../../.yarn/berry/cache/typescript-patch-f64146f279-10c0.zip/node_modules/typescript/lib/lib.es2020.full.d.ts","../../../../../.yarn/berry/cache/@types-js-yaml-npm-4.0.9-6a16d01bd2-10c0.zip/node_modules/@types/js-yaml/index.d.ts","../src/config.ts","../../../../../.yarn/berry/cache/ansi-colors-npm-4.1.3-8ffd0ae6c7-10c0.zip/node_modules/ansi-colors/types/index.d.ts","../src/logger.ts","../src/platform.ts","../src/session.ts","../../../../../.yarn/berry/cache/readdirp-npm-4.1.2-3440472afe-10c0.zip/node_modules/readdirp/index.d.ts","../../../../../.yarn/berry/cache/chokidar-npm-4.0.3-962354fbb4-10c0.zip/node_modules/chokidar/handler.d.ts","../../../../../.yarn/berry/cache/chokidar-npm-4.0.3-962354fbb4-10c0.zip/node_modules/chokidar/index.d.ts","../src/core.ts","../src/command.ts","../src/index.ts","../../../../../.yarn/berry/cache/chalk-npm-5.4.1-2f3fe4660a-10c0.zip/node_modules/chalk/source/vendor/ansi-styles/index.d.ts","../../../../../.yarn/berry/cache/chalk-npm-5.4.1-2f3fe4660a-10c0.zip/node_modules/chalk/source/vendor/supports-color/index.d.ts","../../../../../.yarn/berry/cache/chalk-npm-5.4.1-2f3fe4660a-10c0.zip/node_modules/chalk/source/index.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/compatibility/disposable.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/compatibility/indexable.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/compatibility/iterators.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/compatibility/index.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/globals.typedarray.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/buffer.buffer.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/header.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/readable.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/file.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/fetch.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/formdata.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/connector.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/client.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/errors.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/dispatcher.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/global-dispatcher.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/global-origin.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/pool-stats.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/pool.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/handlers.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/balanced-pool.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/agent.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/mock-interceptor.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/mock-agent.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/mock-client.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/mock-pool.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/mock-errors.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/proxy-agent.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/retry-handler.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/retry-agent.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/api.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/interceptors.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/util.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/cookies.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/patch.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/websocket.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/eventsource.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/filereader.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/diagnostics-channel.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/content-type.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/cache.d.ts","../../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/index.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/globals.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/assert.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/assert/strict.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/async_hooks.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/buffer.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/child_process.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/cluster.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/console.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/constants.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/crypto.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/dgram.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/diagnostics_channel.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/dns.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/dns/promises.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/domain.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/dom-events.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/events.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/fs.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/fs/promises.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/http.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/http2.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/https.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/inspector.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/module.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/net.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/os.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/path.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/perf_hooks.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/process.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/punycode.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/querystring.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/readline.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/readline/promises.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/repl.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/sea.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/sqlite.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/stream.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/stream/promises.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/stream/consumers.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/stream/web.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/string_decoder.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/test.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/timers.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/timers/promises.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/tls.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/trace_events.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/tty.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/url.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/util.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/v8.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/vm.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/wasi.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/worker_threads.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/zlib.d.ts","../../../../../.yarn/berry/cache/@types-node-npm-22.15.19-13a5c1edbe-10c0.zip/node_modules/@types/node/index.d.ts"],"fileIdsList":[[72,114],[72,111,114],[72,113,114],[114],[72,114,119,149],[72,114,115,120,126,127,134,146,157],[72,114,115,116,126,134],[67,68,69,72,114],[72,114,117,158],[72,114,118,119,127,135],[72,114,119,146,154],[72,114,120,122,126,134],[72,113,114,121],[72,114,122,123],[72,114,126],[72,114,124,126],[72,113,114,126],[72,114,126,127,128,146,157],[72,114,126,127,128,141,146,149],[72,109,114,162],[72,109,114,122,126,129,134,146,157],[72,114,126,127,129,130,134,146,154,157],[72,114,129,131,146,154,157],[70,71,72,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[72,114,126,132],[72,114,133,157],[72,114,122,126,134,146],[72,114,135],[72,114,136],[72,113,114,137],[72,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[72,114,139],[72,114,140],[72,114,126,141,142],[72,114,141,143,158,160],[72,114,126,146,147,149],[72,114,148,149],[72,114,146,147],[72,114,149],[72,114,150],[72,111,114,146],[72,114,126,152,153],[72,114,152,153],[72,114,119,134,146,154],[72,114,155],[72,114,134,156],[72,114,129,140,157],[72,114,119,158],[72,114,146,159],[72,114,133,160],[72,114,161],[72,114,119,126,128,137,146,157,160,162],[72,114,146,163],[64,65,72,114],[72,114,156],[58,60,72,114,127],[58,59,72,114,126,127],[72,114,127,146],[72,81,85,114,157],[72,81,114,146,157],[72,76,114],[72,78,81,114,154,157],[72,114,134,154],[72,114,164],[72,76,114,164],[72,78,81,114,134,157],[72,73,74,77,80,114,126,146,157],[72,81,88,114],[72,73,79,114],[72,81,102,103,114],[72,77,81,114,149,157,164],[72,102,114,164],[72,75,76,114,164],[72,81,114],[72,75,76,77,78,79,80,81,82,83,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,103,104,105,106,107,108,114],[72,81,96,114],[72,81,88,89,114],[72,79,81,89,90,114],[72,80,114],[72,73,76,81,114],[72,81,85,89,90,114],[72,85,114],[72,79,81,84,114,157],[72,73,78,81,88,114],[72,114,146],[72,76,81,102,114,162,164],[57,61,72,114],[52,53,55,56,57,60,62,72,114,127,136],[53,55,56,57,61,62,72,114],[54,72,114],[53,57,61,72,114],[56,72,114,119]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"7a1dd1e9c8bf5e23129495b10718b280340c7500570e0cfe5cffcdee51e13e48","impliedFormat":1},{"version":"2755386bd9dc5ae5d54ce358921dc18b52ff2c2b8cca334b3772d576535d634b","signature":"950608b9512b2850fab5ebd7c0e294452f2b5e0380e0c50b8d52feb891d6fa11"},{"version":"a3a48fbe8782048f74752a1ef300ade63777f62bca44aadd9bd99a4ebdf9b9eb","impliedFormat":1},{"version":"ca954a2d14ed3f0a9ec98d1a23f2b1103509465bf2e3b7027382e624eb787500","signature":"bcd410519a520cc35483a0b573dba73f5ba871af66a69aeab783fcddd97bfc56"},{"version":"bf92de9e1ca95450d9feef95ef3a5d251f3af076da66271e9293e8cedcd98c44","signature":"9a420dbf8dc4df1e9007e3b2d368907ac5c3a59649db84f714b6ca0dd6091c25"},{"version":"a0c58a2eb7dc2b248c074ae0f0e4b05ab6b283932f6662c122fb6165e7b1196a","signature":"8a453d3a114fdbb17f9ab9b22d2df85d2e6f1b76be02707ec63d214f02dad48d"},{"version":"d3a6e1ff56a0a760b1b36eb34925042a8148d8e0ab4c2d28fcbdbf40fb5a8acc","impliedFormat":1},{"version":"839114ddc4236b8304df6a6c7cc6784913b7c69a63afd4ecb36fc5c9c57276fc","impliedFormat":1},{"version":"cc4ecb6238b32248c6b58577a2ac2a6223c002c1a9e3f1f9424a89f44aa84f0a","impliedFormat":1},{"version":"c644447a6ffe491d262a7a9aea3a3027351f0635811ca2b22c4af3864a826844","signature":"924f00fafbc5b2417ed4f9ddb82d7dab36a422c8dfb5fa07c24dbe7614b3e1a5"},{"version":"aaae1364d5bb7da53e48e2c047f5cd39513c7480d07ad39206c5f7cda113cf37","signature":"eaac27097c672db8f3cc6b30a2d11756bfc56d40ce1b99d92b8a401552a99135"},{"version":"2a8bf5e8ca8fc92f8aae33bc8a60a3dfd2f705de8e42f62e742461d07083abb2","signature":"dd78974c0dc420f1cb91bee53f64633ddfbe7049374a43843248f496aefc485a"},{"version":"acfed6cc001e7f7f26d2ba42222a180ba669bb966d4dd9cb4ad5596516061b13","impliedFormat":99},{"version":"f61a4dc92450609c353738f0a2daebf8cae71b24716dbd952456d80b1e1a48b6","impliedFormat":99},{"version":"f3f76db6e76bc76d13cc4bfa10e1f74390b8ebe279535f62243e8d8acd919314","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"88d9a77d2abc23a7d26625dd6dae5b57199a8693b85c9819355651c9d9bab90f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"b200675fd112ffef97c166d0341fb33f6e29e9f27660adde7868e95c5bc98beb","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"9ba5b6a30cb7961b68ad4fb18dca148db151c2c23b8d0a260fc18b83399d19d3","impliedFormat":1},{"version":"3f3edb8e44e3b9df3b7ca3219ab539710b6a7f4fe16bd884d441af207e03cd57","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"8cf7e92bdb2862c2d28ba4535c43dc599cfbc0025db5ed9973d9b708dcbe3d98","affectsGlobalScope":true,"impliedFormat":1},{"version":"278e70975bd456bba5874eaee17692355432e8d379b809a97f6af0eee2b702d8","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"1dc73f8854e5c4506131c4d95b3a6c24d0c80336d3758e95110f4c7b5cb16397","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"c878f74b6d10b267f6075c51ac1d8becd15b4aa6a58f79c0cfe3b24908357f60","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"8c2ad42d5d1a2e8e6112625767f8794d9537f1247907378543106f7ba6c7df90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"12e8ce658dd17662d82fb0509d2057afc5e6ee30369a2e9e0957eff725b1f11d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"858f999b3e4a45a4e74766d43030941466460bf8768361d254234d5870480a53","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"63b05afa6121657f25e99e1519596b0826cda026f09372c9100dfe21417f4bd6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1}],"root":[53,[55,57],[61,63]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":7},"referencedMap":[[52,1],[111,2],[112,2],[113,3],[72,4],[114,5],[115,6],[116,7],[67,1],[70,8],[68,1],[69,1],[117,9],[118,10],[119,11],[120,12],[121,13],[122,14],[123,14],[125,15],[124,16],[126,17],[127,18],[128,19],[110,20],[71,1],[129,21],[130,22],[131,23],[164,24],[132,25],[133,26],[134,27],[135,28],[136,29],[137,30],[138,31],[139,32],[140,33],[141,34],[142,34],[143,35],[144,1],[145,1],[146,36],[148,37],[147,38],[149,39],[150,40],[151,41],[152,42],[153,43],[154,44],[155,45],[156,46],[157,47],[158,48],[159,49],[160,50],[161,51],[162,52],[163,53],[54,1],[66,54],[64,1],[65,55],[59,56],[60,57],[58,58],[49,1],[50,1],[10,1],[8,1],[9,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[51,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[1,1],[12,1],[11,1],[88,59],[98,60],[87,59],[108,61],[79,62],[78,63],[107,64],[101,65],[106,66],[81,67],[95,68],[80,69],[104,70],[76,71],[75,64],[105,72],[77,73],[82,74],[83,1],[86,74],[73,1],[109,75],[99,76],[90,77],[91,78],[93,79],[89,80],[92,81],[102,64],[84,82],[85,83],[94,84],[74,85],[97,76],[96,74],[100,1],[103,86],[62,87],[53,1],[61,88],[63,89],[55,90],[56,91],[57,92]],"latestChangedDtsFile":"./src/core.d.ts","version":"5.8.3"}
|