From 4187eb2c4f217b4fe7ad16a029504d081c07985b Mon Sep 17 00:00:00 2001 From: walker Date: Thu, 16 Nov 2023 17:06:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0MQTT=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=BC=95=E6=93=8E=E5=8F=8A=E5=AE=9E=E7=8E=B0=20=E6=B3=A8?= =?UTF-8?q?=E9=94=80Centrifugo=E6=B6=88=E6=81=AF=E5=BC=95=E6=93=8E=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=B6=88=E6=81=AF=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E9=85=8D=E7=BD=AE=E9=A1=B9=20=E6=B7=BB=E5=8A=A0websoc?= =?UTF-8?q?ket-error=E4=BA=8B=E4=BB=B6(=E6=9C=AA=E5=AE=8C=E5=96=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/jlgraphic/app/JlGraphicApp.ts | 1 + src/jlgraphic/message/BasicMessageClient.ts | 24 +- src/jlgraphic/message/CentrifugeBroker.ts | 124 ++++----- src/jlgraphic/message/MessageBroker.ts | 70 +++-- src/jlgraphic/message/MqttBroker.ts | 118 ++++++++ src/jlgraphic/message/WsMsgBroker.ts | 10 +- yarn.lock | 290 +++++++++++++------- 8 files changed, 440 insertions(+), 199 deletions(-) create mode 100644 src/jlgraphic/message/MqttBroker.ts diff --git a/package.json b/package.json index 2fca73d..ce3867e 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,9 @@ "@stomp/stompjs": "^7.0.0", "alova": "^2.7.1", "axios": "^1.4.0", - "centrifuge": "^4.0.1", "google-protobuf": "^3.21.2", "js-base64": "^3.7.5", + "mqtt": "^5.2.1", "pinia": "^2.0.11", "pixi-viewport": "^5.0.1", "pixi.js": "^7.2.4", diff --git a/src/jlgraphic/app/JlGraphicApp.ts b/src/jlgraphic/app/JlGraphicApp.ts index e306cb8..4d51e69 100644 --- a/src/jlgraphic/app/JlGraphicApp.ts +++ b/src/jlgraphic/app/JlGraphicApp.ts @@ -328,6 +328,7 @@ export interface GraphicAppEvents extends GlobalMixins.GraphicAppEvents { 'pre-menu-handle': [menu: MenuItemOptions]; 'post-menu-handle': [menu: MenuItemOptions]; 'websocket-connect-state-change': [connected: boolean]; + 'websocket-error': [err: Error]; destroy: [app: IGraphicApp]; } diff --git a/src/jlgraphic/message/BasicMessageClient.ts b/src/jlgraphic/message/BasicMessageClient.ts index 3fd71b7..e5ec525 100644 --- a/src/jlgraphic/message/BasicMessageClient.ts +++ b/src/jlgraphic/message/BasicMessageClient.ts @@ -6,6 +6,7 @@ import { CompleteMessageCliOption, IMessageClient } from './MessageBroker'; export interface MessageClientEvents { connected: [ctx: any]; disconnected: [ctx: any]; + error: [err: any]; } export type HandleMessage = (data: any) => void; @@ -37,10 +38,7 @@ export abstract class MessageClient * @param destination * @param handle */ - abstract subscribe( - destination: string, - handle: HandleMessage - ): IUnsubscriptor; + abstract subscribe(destination: string, handle: HandleMessage): boolean; unsubscribe(destination: string): void { this.unsubscribe0(destination); @@ -77,22 +75,12 @@ export abstract class MessageClient abstract close(): void; } -/** - * 订阅取消接口 - */ -export interface IUnsubscriptor { - /** - * 取消订阅 - */ - unsubscribe(): void; -} - export class SubscriptionClient { mc: MessageClient; destination: string; protocol: 'json' | 'protobuf'; handlers: IMessageHandler[] = []; - unsubscriptor?: IUnsubscriptor; + subscripted = false; constructor( mc: MessageClient, destination: string, @@ -109,7 +97,7 @@ export class SubscriptionClient { if (this.handlers.filter((h) => h.App === handler.App).length == 0) { this.handlers.push(handler); } - if (!this.unsubscriptor) { + if (!this.subscripted) { this.trySubscribe(); } } @@ -127,7 +115,7 @@ export class SubscriptionClient { trySubscribe(): void { if (this.mc.connected) { - this.unsubscriptor = this.mc.subscribe(this.destination, (data) => { + this.subscripted = this.mc.subscribe(this.destination, (data) => { this.handleMessage(data); }); } @@ -151,6 +139,6 @@ export class SubscriptionClient { } onDisconnect() { - this.unsubscriptor = undefined; + this.subscripted = false; } } diff --git a/src/jlgraphic/message/CentrifugeBroker.ts b/src/jlgraphic/message/CentrifugeBroker.ts index ece12f5..215a204 100644 --- a/src/jlgraphic/message/CentrifugeBroker.ts +++ b/src/jlgraphic/message/CentrifugeBroker.ts @@ -1,70 +1,68 @@ -import { State, Subscription } from 'centrifuge'; -import Centrifuge from 'centrifuge/build/protobuf'; -import { - HandleMessage, - IUnsubscriptor, - MessageClient, -} from './BasicMessageClient'; -import { CompleteMessageCliOption } from './MessageBroker'; +// import { State } from 'centrifuge'; +// import Centrifuge from 'centrifuge/build/protobuf'; +// import { HandleMessage, MessageClient } from './BasicMessageClient'; +// import { CompleteMessageCliOption } from './MessageBroker'; -export class CentrifugeMessagingClient extends MessageClient { - cli: Centrifuge; +// export class CentrifugeMessagingClient extends MessageClient { +// cli: Centrifuge; - constructor(options: CompleteMessageCliOption) { - super(options); - this.options = options; - if (this.options.protocol === 'json') { - this.cli = new Centrifuge(options.wsUrl, { - token: options.token, - protocol: options.protocol, - }); - } else { - this.cli = new Centrifuge(options.wsUrl, { - token: options.token, - protocol: options.protocol, - }); - } +// constructor(options: CompleteMessageCliOption) { +// super(options); +// this.options = options; +// if (this.options.protocol === 'json') { +// this.cli = new Centrifuge(options.wsUrl, { +// token: options.token, +// protocol: options.protocol, +// }); +// } else { +// this.cli = new Centrifuge(options.wsUrl, { +// token: options.token, +// protocol: options.protocol, +// }); +// } - this.cli - .on('connecting', (ctx) => { - console.debug(`centrifuge连接中: ${ctx}, ${ctx.reason}`); - }) - .on('connected', (ctx) => { - console.debug(`连接成功: ${ctx.transport}`); - this.emit('connected', ctx); - }) - .on('disconnected', (ctx) => { - console.log(`断开连接: ${ctx.code}, ${ctx.reason}`); - this.emit('disconnected', ctx); - }) - .on('error', (ctx) => { - console.error('centrifuge错误', ctx); - }) - .connect(); - } +// this.cli +// .on('connecting', (ctx) => { +// console.debug(`centrifuge连接中: ${ctx}, ${ctx.reason}`); +// }) +// .on('connected', (ctx) => { +// console.debug(`连接成功: ${ctx.transport}`); +// this.emit('connected', ctx); +// }) +// .on('disconnected', (ctx) => { +// console.log(`断开连接: ${ctx.code}, ${ctx.reason}`); +// this.emit('disconnected', ctx); +// }) +// .on('error', (ctx) => { +// console.error('centrifuge错误', ctx); +// }) +// .connect(); +// } - get connected(): boolean { - return this.cli.state === State.Connected; - } +// get connected(): boolean { +// return this.cli.state === State.Connected; +// } - subscribe(destination: string, handle: HandleMessage): IUnsubscriptor { - let sub = this.cli.getSubscription(destination); - if (!sub) { - sub = this.cli.newSubscription(destination); - sub.on('publication', (ctx) => { - handle(ctx.data); - }); - } - sub.subscribe(); - return sub; - } +// subscribe(destination: string, handle: HandleMessage): boolean { +// let sub = this.cli.getSubscription(destination); +// if (!sub) { +// sub = this.cli.newSubscription(destination); +// sub.on('publication', (ctx) => { +// handle(ctx.data); +// }); +// } +// sub.subscribe(); +// return true; +// } - unsubscribe0(destination: string): void { - const subClient = this.getOrNewSubClient(destination); - this.cli.removeSubscription(subClient.unsubscriptor as Subscription); - } +// unsubscribe0(destination: string): void { +// const sub = this.cli.getSubscription(destination); +// if (!sub) { +// this.cli.removeSubscription(sub); +// } +// } - close(): void { - this.cli.disconnect(); - } -} +// close(): void { +// this.cli.disconnect(); +// } +// } diff --git a/src/jlgraphic/message/MessageBroker.ts b/src/jlgraphic/message/MessageBroker.ts index 38867ec..75ae21a 100644 --- a/src/jlgraphic/message/MessageBroker.ts +++ b/src/jlgraphic/message/MessageBroker.ts @@ -2,17 +2,14 @@ import EventEmitter from 'eventemitter3'; import { IGraphicScene } from '../app'; import { GraphicQueryStore, GraphicState, JlGraphic } from '../core'; -import { - IMessageHandler, - IUnsubscriptor, - MessageClientEvents, -} from './BasicMessageClient'; -import { CentrifugeMessagingClient } from './CentrifugeBroker'; +import { IMessageHandler, MessageClientEvents } from './BasicMessageClient'; import { StompMessagingClient } from './WsMsgBroker'; +import { MqttMsgClient } from './MqttBroker'; export enum ClientEngine { Stomp, - Centrifugo, + // Centrifugo, + MQTT, } export interface MessageCliOption { @@ -32,10 +29,34 @@ export interface MessageCliOption { * 认证token */ token?: string; + /** + * 项目名称(可用于订阅客户端识别) + */ + clientName?: string; + /** + * 连接超时,默认30秒,ms + */ + connectTimeout?: number; + /** + * 心跳发送间隔,默认60秒,s + */ + heartbeat?: number; + /** + * 重试间隔,默认2秒,ms + */ + retryPeriod?: number; + /** + * 重试次数,默认30次 + */ + retryTimes?: number; } export interface CompleteMessageCliOption extends MessageCliOption { protocol: 'json' | 'protobuf'; + connectTimeout: number; + heartbeat: number; + retryPeriod: number; + retryTimes: number; } const DefaultStompOption: CompleteMessageCliOption = { @@ -43,6 +64,10 @@ const DefaultStompOption: CompleteMessageCliOption = { protocol: 'protobuf', wsUrl: '', token: '', + connectTimeout: 30 * 1000, + heartbeat: 60, + retryPeriod: 2 * 1000, + retryTimes: 30, }; export interface IMessageClient extends EventEmitter { @@ -80,10 +105,22 @@ export class WsMsgCli { return; } WsMsgCli.options = Object.assign({}, DefaultStompOption, options); - if (WsMsgCli.options.engine == ClientEngine.Centrifugo) { - WsMsgCli.client = new CentrifugeMessagingClient(WsMsgCli.options); - } else { - WsMsgCli.client = new StompMessagingClient(WsMsgCli.options); + switch (WsMsgCli.options.engine) { + // case ClientEngine.Centrifugo: { + // WsMsgCli.client = new CentrifugeMessagingClient(WsMsgCli.options); + // break; + // } + case ClientEngine.MQTT: { + WsMsgCli.client = new MqttMsgClient(WsMsgCli.options); + break; + } + case ClientEngine.Stomp: { + WsMsgCli.client = new StompMessagingClient(WsMsgCli.options); + break; + } + default: { + throw new Error('未知的消息客户端引擎类型', WsMsgCli.options.engine); + } } const cli = WsMsgCli.client; cli.on('connected', () => { @@ -92,6 +129,12 @@ export class WsMsgCli { cli.on('disconnected', () => { WsMsgCli.emitConnectStateChangeEvent(false); }); + cli.on('error', (err) => { + console.warn('websocket 客户端错误消息发布', err); + WsMsgCli.appMsgBroker.forEach((broker) => { + broker.app.emit('websocket-error', err); + }); + }); } static isInitiated(): boolean { @@ -182,11 +225,6 @@ export interface AppStateSubscription { * 订阅消息处理 */ messageHandle?: SubscriptionMessageHandle; - /** - * 订阅成功对象,用于取消订阅 - * 非客户端使用 - */ - subscription?: IUnsubscriptor; } class AppMessageHandler implements IMessageHandler { diff --git a/src/jlgraphic/message/MqttBroker.ts b/src/jlgraphic/message/MqttBroker.ts new file mode 100644 index 0000000..46412f9 --- /dev/null +++ b/src/jlgraphic/message/MqttBroker.ts @@ -0,0 +1,118 @@ +import mqtt from 'mqtt'; +import { HandleMessage, MessageClient } from './BasicMessageClient'; +import { CompleteMessageCliOption } from './MessageBroker'; + +export class MqttMsgClient extends MessageClient { + cli: mqtt.MqttClient; + retryTimes = 0; + timer: NodeJS.Timeout | undefined; + subMsgHandler: Map = new Map(); + + constructor(options: CompleteMessageCliOption) { + super(options); + this.options = options; + try { + this.cli = mqtt.connect(options.wsUrl, { + protocolVersion: 5, + clean: true, + resubscribe: false, + keepalive: options.heartbeat, //ms,心跳 + connectTimeout: options.connectTimeout, // ms,连接超时 + reconnectPeriod: options.retryPeriod, // ms,重连间隔 + username: options.clientName || '', + password: options.token, + }); + this.cli.on('connect', (packet) => { + console.log('MQTT 连接成功!'); + this.retryTimes = 0; // 连接成功,重置 + this.emit('connected', packet); + // mqtt本身的定时发送心跳在浏览器页面后台运行时似乎会发生计时变慢?最终导致心跳超时断连: + // WebSocket connection to 'ws://ip:port/mqtt' failed: Close received after close + // 在此使用自定义定时发送心跳暂时看可以处理超时断连问题 + this.timer = setInterval(() => { + (this.cli as any)._sendPacket({ cmd: 'pingreq' }); + }, (options.heartbeat / 2) * 1000); + }); + this.cli.on('disconnect', (packet) => { + console.log('MQTT 连接断开!'); + this.emit('disconnected', packet); + }); + this.cli.on('close', () => { + console.log('MQTT 关闭!'); + this.emit('disconnected', 'close'); + }); + this.cli.on('reconnect', () => { + this.retryTimes += 1; + if (this.retryTimes > options.retryTimes) { + try { + this.cli.end(); + console.error('MQTT 达到重连最大尝试次数,停止重试'); + } catch (error) { + console.error(error); + } + } + }); + this.cli.on('error', (error) => { + console.log('MQTT 出现错误', error); + console.warn(error); + this.emit('error', error); + }); + this.cli.on('message', (topic, message) => { + const handle = this.subMsgHandler.get(topic); + if (handle) { + if (this.options.protocol === 'json') { + const data = JSON.parse(message.toString()); + handle(data); + } else { + // 字节流 + handle(message); + } + } + }); + } catch (err) { + console.error('MQTT connect error', err); + this.emit('error', err); + throw err; + } + } + + subscribe(destination: string, handle: HandleMessage): boolean { + console.debug('MQTT订阅执行', destination); + this.cli.subscribe(destination, { qos: 0 }, (error, res) => { + if (error) { + console.warn('MQTT 订阅失败', error); + return; + } + console.debug('MQTT 订阅成功', res); + return false; + }); + this.subMsgHandler.set(destination, handle); + return true; + } + unsubscribe0(destination: string): void { + console.debug('MQTT取消订阅执行', destination); + this.cli.unsubscribe(destination, (error, packet) => { + if (error) { + console.warn('MQTT 取消订阅失败', error); + } else { + console.debug('MQTT 取消订阅成功', packet); + this.subMsgHandler.delete(destination); + } + }); + } + get connected(): boolean { + return this.cli.connected; + } + close(): void { + try { + console.debug('MQTT关闭执行'); + clearInterval(this.timer); + this.cli.end(true, () => { + console.debug('MQTT 消息客户端关闭成功'); + this.subMsgHandler.clear(); + }); + } catch (error) { + console.warn('MQTT 消息客户端关闭失败', error); + } + } +} diff --git a/src/jlgraphic/message/WsMsgBroker.ts b/src/jlgraphic/message/WsMsgBroker.ts index ebc7c65..5d1c80f 100644 --- a/src/jlgraphic/message/WsMsgBroker.ts +++ b/src/jlgraphic/message/WsMsgBroker.ts @@ -1,9 +1,5 @@ import { Client as StompClient, type Frame } from '@stomp/stompjs'; -import { - HandleMessage, - IUnsubscriptor, - MessageClient, -} from './BasicMessageClient'; +import { HandleMessage, MessageClient } from './BasicMessageClient'; import { CompleteMessageCliOption } from './MessageBroker'; const ReconnectDelay = 3000; @@ -58,7 +54,7 @@ export class StompMessagingClient extends MessageClient { return this.cli.connected; } - subscribe(destination: string, handle: HandleMessage): IUnsubscriptor { + subscribe(destination: string, handle: HandleMessage): boolean { const sub = this.cli.subscribe( destination, (frame) => { @@ -73,7 +69,7 @@ export class StompMessagingClient extends MessageClient { id: destination, } ); - return sub; + return true; } unsubscribe0(destination: string): void { diff --git a/yarn.lock b/yarn.lock index 7eea660..cec0365 100644 --- a/yarn.lock +++ b/yarn.lock @@ -309,59 +309,6 @@ resolved "https://registry.npmmirror.com/@positron/stack-trace/-/stack-trace-1.0.0.tgz#14fcc712a530038ef9be1ce6952315a839f466a8" integrity sha512-nWlGg+aMfQDhGYa5FtBhZwldeo2MtdjHdxmEQvhBXEnxgD5IhIYl0PHvex8SdwyN7qcSoMykMWdjyAX7ZxkpMw== -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.npmmirror.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.npmmirror.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.npmmirror.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.npmmirror.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - "@quasar/app-vite@^1.0.0": version "1.2.1" resolved "https://registry.npmmirror.com/@quasar/app-vite/-/app-vite-1.2.1.tgz#23a634e16c74b28a38cf1ad1b3633388a220f97f" @@ -532,11 +479,6 @@ resolved "https://registry.npmmirror.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== -"@types/node@>=13.7.0": - version "20.4.2" - resolved "https://registry.npmmirror.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" - integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== - "@types/node@^12.20.21": version "12.20.55" resolved "https://registry.npmmirror.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" @@ -557,6 +499,14 @@ resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== +"@types/readable-stream@^4.0.5": + version "4.0.5" + resolved "https://registry.npmmirror.com/@types/readable-stream/-/readable-stream-4.0.5.tgz#7a82f920748f81e6f6e6d062d6d3961e5731b296" + integrity sha512-QzFG+b0/vKI8myBgHhUja5C8ZJr4vaAeSXNYbqedm3Pr8byTgkNf1OC2/16yQTn2H2ZpQpHr7sLKS13XWpKaCQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" @@ -570,6 +520,13 @@ "@types/mime" "*" "@types/node" "*" +"@types/ws@^8.5.9": + version "8.5.9" + resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" + integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^5.10.0": version "5.59.1" resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" @@ -754,6 +711,13 @@ resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c" integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -928,6 +892,15 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +bl@^6.0.8: + version "6.0.8" + resolved "https://registry.npmmirror.com/bl/-/bl-6.0.8.tgz#737d57f2d1e25b9ca45e0f4c5d84409731a86c04" + integrity sha512-HCRq8z0+3vrGCjEKrbnK6blpDZ1xzhfZKCCuyvPC7upGcfXZSmaCumpVao/jC8o1hs/fOqJoCSPMabl+CQTPXg== + dependencies: + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^4.2.0" + body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -988,6 +961,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -996,6 +974,14 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bytes@3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1032,14 +1018,6 @@ caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== -centrifuge@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/centrifuge/-/centrifuge-4.0.1.tgz#2607756d4b7da6201ca12666bfc6564e4e8ef6a2" - integrity sha512-akAyUfvMnyoCa6X2tdU5WPEccVqjkb9R/xxfm3iJ7ha7EIawjKu1dQmoyMkoLDpgl0jFxhorjmVgRcbojE17DA== - dependencies: - events "^3.3.0" - protobufjs "^7.2.4" - chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1149,6 +1127,11 @@ commander@^2.19.0: resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commist@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/commist/-/commist-3.2.0.tgz#da9c8e5f245ac21510badc4b10c46b5bcc9b56cd" + integrity sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw== + compress-commons@^4.1.0: version "4.1.1" resolved "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" @@ -1184,6 +1167,16 @@ concat-map@0.0.1: resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + content-disposition@0.5.4: version "0.5.4" resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -1250,7 +1243,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1310,6 +1303,16 @@ dot-prop@6.0.1: dependencies: is-obj "^2.0.0" +duplexify@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + earcut@^2.2.4: version "2.2.4" resolved "https://registry.npmmirror.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" @@ -1762,6 +1765,11 @@ etag@~1.8.1: resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -2011,6 +2019,17 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^13.19.0: version "13.20.0" resolved "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -2067,6 +2086,14 @@ he@^1.2.0: resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +help-me@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" + integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== + dependencies: + glob "^8.0.0" + readable-stream "^3.6.0" + html-minifier@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" @@ -2098,7 +2125,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -2275,6 +2302,11 @@ js-base64@^3.7.5: resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== +js-sdsl@4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + js-sdsl@^4.1.4: version "4.4.0" resolved "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" @@ -2391,16 +2423,18 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -long@^5.0.0: - version "5.2.3" - resolved "https://registry.npmmirror.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - lower-case@^1.1.1: version "1.1.4" resolved "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== +lru-cache@^10.0.1: + version "10.0.2" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.0.2.tgz#34504678cc3266b09b8dfd6fab4e1515258271b7" + integrity sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg== + dependencies: + semver "^7.3.5" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2479,11 +2513,43 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6: +minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mqtt-packet@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-9.0.0.tgz#fd841854d8c0f1f5211b00de388c4ced45b59216" + integrity sha512-8v+HkX+fwbodsWAZIZTI074XIoxVBOmPeggQuDFCGg1SqNcC+uoRMWu7J6QlJPqIUIJXmjNYYHxBBLr1Y/Df4w== + dependencies: + bl "^6.0.8" + debug "^4.3.4" + process-nextick-args "^2.0.1" + +mqtt@^5.2.0, mqtt@^5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/mqtt/-/mqtt-5.2.1.tgz#2c7b71bd8903390701677888933644018f5a0a02" + integrity sha512-iXN1dEWDsl6GTMda2ZyhEbpb8BtgSpMuXVZf4c2C8HX/0r3N9SrTBYa+jVEyWhj/5CMiAobBhjtRYgjt9rXvfg== + dependencies: + "@types/readable-stream" "^4.0.5" + "@types/ws" "^8.5.9" + commist "^3.2.0" + concat-stream "^2.0.0" + debug "^4.3.4" + duplexify "^4.1.2" + help-me "^4.2.0" + lru-cache "^10.0.1" + minimist "^1.2.8" + mqtt "^5.2.0" + mqtt-packet "^9.0.0" + number-allocator "^1.0.14" + readable-stream "^4.4.2" + reinterval "^1.1.0" + rfdc "^1.3.0" + split2 "^4.2.0" + ws "^8.14.2" + ms@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2553,6 +2619,14 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +number-allocator@^1.0.14: + version "1.0.14" + resolved "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz#1f2e32855498a7740dcc8c78bed54592d930ee4d" + integrity sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA== + dependencies: + debug "^4.3.1" + js-sdsl "4.3.0" + object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -2789,28 +2863,15 @@ prettier@^2.5.1: resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -process-nextick-args@~2.0.0: +process-nextick-args@^2.0.1, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -protobufjs@^7.2.4: - version "7.2.4" - resolved "https://registry.npmmirror.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" - integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmmirror.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== protoc-gen-ts@^0.8.6: version "0.8.6" @@ -2897,7 +2958,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -2906,6 +2967,17 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.2.0, readable-stream@^4.4.2: + version "4.4.2" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" + integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readdir-glob@^1.0.0: version "1.1.3" resolved "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" @@ -2925,6 +2997,11 @@ register-service-worker@^1.7.2: resolved "https://registry.npmmirror.com/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2" integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== +reinterval@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" + integrity sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ== + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -2967,6 +3044,11 @@ reusify@^1.0.4: resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -3152,11 +3234,21 @@ sourcemap-codec@^1.4.8: resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +split2@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + statuses@2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3166,7 +3258,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -3302,6 +3394,11 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + typescript@^4.5.4: version "4.9.5" resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" @@ -3459,6 +3556,11 @@ wrappy@1: resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@^8.14.2: + version "8.14.2" + resolved "https://registry.npmmirror.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"