@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 CHANGED
@@ -52,6 +52,9 @@ export declare enum HttpMethod {
52
52
  /**
53
53
  * 命令类,用于注册和执行命令
54
54
  */
55
+ /**
56
+ * @deprecated Use Route instead.
57
+ */
55
58
  export declare class Command {
56
59
  /** 命令名称 */
57
60
  name: string;
package/dist/command.js CHANGED
@@ -45,6 +45,9 @@ var HttpMethod;
45
45
  /**
46
46
  * 命令类,用于注册和执行命令
47
47
  */
48
+ /**
49
+ * @deprecated Use Route instead.
50
+ */
48
51
  class Command {
49
52
  /** 命令名称 */
50
53
  name;
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
- * 内部函数:尝试加载所有处于 PENDING 状态的插件
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 core Core 实例
107
- * @param pluginsDir 插件目录,默认为 'plugins'
137
+ * 监听插件文件变化
138
+ * @param pluginName 插件名称
139
+ * @param pluginPath 插件路径
108
140
  */
109
- watchPlugins(core: Core, pluginsDir?: string): void;
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
- * @param name 命令名称
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 chokidar_1 = __importDefault(require("chokidar"));
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 = chokidar_1.default.watch(configPath, {
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
- * 内部函数:尝试加载所有处于 PENDING 状态的插件
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 core Core 实例
347
- * @param pluginsDir 插件目录,默认为 'plugins'
407
+ * 监听插件文件变化
408
+ * @param pluginName 插件名称
409
+ * @param pluginPath 插件路径
348
410
  */
349
- watchPlugins(core, pluginsDir = 'plugins') {
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 = chokidar_1.default.watch(pluginsDir, {
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
- const pluginName = getPluginNameFromPath(changePath);
368
- if (pluginName) {
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
- const pluginName = getPluginNameFromPath(changePath);
375
- if (pluginName) {
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
- const pluginName = getPluginNameFromPath(changePath);
382
- if (pluginName) {
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
- logger.info(`Watching for plugin changes in ${pluginsDir}`);
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
- * @param name 命令名称
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
@@ -6,6 +6,7 @@
6
6
  export * from './core';
7
7
  export * from './session';
8
8
  export * from './command';
9
+ export * from './route';
9
10
  export * from './config';
10
11
  export * from './logger';
11
12
  export * from './platform';
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
@@ -12,6 +12,7 @@ export declare class Logger {
12
12
  static setCore(core: Core): void;
13
13
  constructor(title: string);
14
14
  private getRandomColor;
15
+ private getTimestamp;
15
16
  private log;
16
17
  info(...args: any[]): void;
17
18
  warn(...args: any[]): void;
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 ansi_colors_1 = __importDefault(require("ansi-colors")); // 引入 ansi-colors
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 = [ansi_colors_1.default.red, ansi_colors_1.default.green, ansi_colors_1.default.yellow, ansi_colors_1.default.blue, ansi_colors_1.default.magenta, ansi_colors_1.default.cyan, ansi_colors_1.default.white, ansi_colors_1.default.gray];
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
- log(level, ...args) {
37
+ getTimestamp() {
35
38
  const now = new Date();
36
- const timestamp = `${now.getFullYear()}/${String(now.getMonth() + 1).padStart(2, '0')}/${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`;
37
- console.log(`${timestamp} [${level}] ${this.titleColor(this.title)} `, ...args);
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
- error(...args) {
47
- this.log('E', ...args);
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
- }
File without changes
package/dist/platform.js CHANGED
File without changes
@@ -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.1.3",
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
- "@types/chalk": "^2.2.4",
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"}