From 709e858700b6aaeacf1551d5726bed7f2acf5e97 Mon Sep 17 00:00:00 2001 From: gvensan <4477169+gvensan@users.noreply.github.com> Date: Mon, 19 Feb 2024 09:11:39 +0530 Subject: [PATCH] Added support for empty payload on messages Added support for default message with a simple payload (JSON) Added support (fixed issue) with --stdin, a command-line payload option Added support for --file to specify file (content) as payload on send, request and reply commands Added support for --content-type to influence payload print & selection of message type --- PARAMETERS.md | 29 +- package.json | 3 +- src/common/publish-client.ts | 34 +- src/common/receive-client.ts | 15 +- src/common/reply-client.ts | 47 +- src/common/request-client.ts | 36 +- src/lib/publish.ts | 42 +- src/lib/receive.ts | 6 +- src/lib/reply.ts | 55 +- src/lib/request.ts | 58 +- src/types/global.d.ts | 5 +- src/utils/defaults.ts | 29 +- src/utils/instances.ts | 4 + src/utils/logger.ts | 100 ++- src/utils/options.ts | 38 +- src/utils/parse.ts | 12 + src/utils/prettify.ts | 11 +- src/utils/stdinread.ts | 24 + yarn.lock | 1174 +++------------------------------- 19 files changed, 511 insertions(+), 1211 deletions(-) create mode 100644 src/utils/stdinread.ts diff --git a/PARAMETERS.md b/PARAMETERS.md index f3975ac..b0c6e9b 100644 --- a/PARAMETERS.md +++ b/PARAMETERS.md @@ -47,13 +47,17 @@ Options: /* MESSAGE SETTINGS */ --topic the message topic(s) (default: ["solace/try/me"]) - --message the message body (a default payload) - --file the filename containing the message content + --message the message body + --default-message use default message body + --file filename containing the message content --stdin read the message body from stdin (default: false) --count the number of events to publish (default: 1) --interval the time to wait between publish (default: 1000) --time-to-live the time before a message is discarded or moved to a DMQ - --dmq-eligible [BOOLEAN] the DMQ eligible flag + --dmq-eligible [BOOLEAN] the DMQ eligible flag (default: true) + --partition-key the simulated partition key option (SECOND or MILLISECOND, + derives a value from publish time and set as partition key) + --partition-keys the partition key(s) list /* CONFIGURATION SETTINGS */ --config the configuration file (default: "stm-cli-config.json") @@ -104,6 +108,7 @@ Options: --delivery-mode [advanced] the application-requested message delivery mode 'DIRECT' or 'PERSISTENT' (default: "PERSISTENT") --reply-to-topic [advanced] string which is used as the topic name for a response message --user-properties [advanced] the user properties (e.g., "name1: value1" "name2: value2") + --content-type [advanced] payload content type (default: "text/plain") --output-mode [advanced] message print mode: COMPACT, PRETTY, NONE /* HELP OPTIONS */ @@ -128,9 +133,9 @@ Options: --vpn the message VPN name (default: "default") --username the username (default: "default") --password the password (default: "default") - --topic the message topic(s) (default: ["solace/try/me"]) /* QUEUE SETTINGS */ + --topic the message topic(s) (default: ["solace/try/me"]) --queue the message queue /* CONFIGURATION SETTINGS */ @@ -169,8 +174,9 @@ Options: --keepalive-interval-limit [advanced] the maximum number of consecutive Keep-Alive messages that can be sent without receiving a response before the session is declared down --receive-timestamps [BOOLEAN] [advanced] include a receive timestamp on received messages --reapply-subscriptions [BOOLEAN] [advanced] reapply subscriptions upon calling on a disconnected session (default: true) - --output-mode [advanced] message print mode: COMPACT, PRETTY, NONE --acknowledge-mode [advanced] the acknowledgement mode - AUTO or CLIENT (default: "AUTO") + --content-type [advanced] payload content type (default: "text/plain") + --output-mode [advanced] message print mode: COMPACT, PRETTY, NONE --log-level [advanced] solace log level, one of values: FATAL, ERROR, WARN, INFO, DEBUG, TRACE (default: "ERROR") /* HELP OPTIONS */ @@ -199,8 +205,9 @@ Options: /* MESSAGE SETTINGS */ --topic the message topic (default: "solace/try/me/request") - --message the message body (a default payload) - --file the filename containing the message content + --message the message body + --default-message use default message body + --file filename containing the message content --stdin read the message body from stdin (default: false) --time-to-live the time before a message is discarded or moved to a DMQ --timeout the timeout value @@ -256,6 +263,7 @@ Options: --delivery-mode [advanced] the application-requested message delivery mode 'DIRECT' or 'PERSISTENT' (default: "PERSISTENT") --reply-to-topic [advanced] string which is used as the topic name for a response message --user-properties [advanced] the user properties (e.g., "name1: value1" "name2: value2") + --content-type [advanced] payload content type (default: "text/plain") --output-mode [advanced] message print mode: COMPACT, PRETTY, NONE /* HELP OPTIONS */ @@ -283,8 +291,10 @@ Options: /* MESSAGE SETTINGS */ --topic the message topic(s) (default: ["solace/try/me"]) - --message the message body (a default payload) - --file the filename containing the message content + --message the message body + --default-message use default message body + --file filename containing the message content + --stdin read the message body from stdin (default: false) --time-to-live the time before a message is discarded or moved to a DMQ --dmq-eligible [BOOLEAN] the DMQ eligible flag --partition-key the partition key (SECOND or MILLISECOND, derives a value from publish time and set as partition key) @@ -336,6 +346,7 @@ Options: --correlation-key [advanced] the application-provided message correlation key for acknowledgement management --reply-to-topic [advanced] string which is used as the topic name for a response message --user-properties [advanced] the user properties (e.g., "name1: value1" "name2: value2") + --content-type [advanced] payload content type (default: "text/plain") --output-mode [advanced] message print mode: COMPACT, PRETTY, NONE /* HELP OPTIONS */ diff --git a/package.json b/package.json index 9973c5e..d926df4 100644 --- a/package.json +++ b/package.json @@ -31,14 +31,13 @@ "ascii-table": "^0.0.9", "chalk": "~4.1.2", "commander": "^11.1.0", - "concat-stream": "^2.0.0", "core-js": "^3.26.0", "express": "^4.18.2", - "live-server": "^1.2.2", "node-localstorage": "^3.0.5", "opener": "^1.5.2", "pkg": "^5.8.1", "prompt-sync": "^4.2.0", + "readline": "^1.3.0", "signale": "^1.4.0", "solclientjs": "^10.15.0", "ts-node": "^10.9.1", diff --git a/src/common/publish-client.ts b/src/common/publish-client.ts index 3952334..b310e3e 100644 --- a/src/common/publish-client.ts +++ b/src/common/publish-client.ts @@ -2,7 +2,7 @@ import solace, { Message } from "solclientjs"; import { Logger } from '../utils/logger' import { LogLevel, MessageDeliveryModeType } from "solclientjs"; import { STM_CLIENT_CONNECTED, STM_CLIENT_DISCONNECTED, STM_EVENT_PUBLISHED } from "../utils/controlevents"; -import { getDefaultClientName } from "../utils/defaults"; +import { getDefaultClientName, getType } from "../utils/defaults"; import { VisualizeClient } from "./visualize-client"; import { randomUUID } from "crypto"; const { uuid } = require('uuidv4'); @@ -155,7 +155,7 @@ export class SolaceClient extends VisualizeClient { } // Publish a message on a topic - publish(topicName: string, payload: string | Buffer, iteration: number = 0) { + publish(topicName: string, payload: string | Buffer | undefined, contentType: string, iteration: number = 0) { if (this.exited) return; if (!this.session) { @@ -166,7 +166,31 @@ export class SolaceClient extends VisualizeClient { if (!topicName.startsWith('@STM')) Logger.await('publishing...'); let message = solace.SolclientFactory.createMessage(); message.setDestination(solace.SolclientFactory.createTopicDestination(topicName)); - message.setBinaryAttachment(JSON.stringify(payload)); + if (payload) { + if (contentType === 'application/xml' || contentType === 'text/plain') { + if (typeof payload === 'string') + message.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, payload)); + else + message.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, JSON.stringify(payload))); + } else if (contentType === 'application/json') { + message.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, JSON.stringify(payload))); + } else { + if (typeof payload === 'object') { + const encoder = new TextEncoder(); + const result = encoder.encode(JSON.stringify(payload)); + message.setBinaryAttachment(result); + } else if (typeof payload === 'string') { + const encoder = new TextEncoder(); + const result = encoder.encode(payload); + message.setBinaryAttachment(result); + } else { + message.setBinaryAttachment(payload); + } + } + } else { + message.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, "")); + } + message.setCorrelationKey(this.options.correlationKey ? this.options.correlationKey : randomUUID()); this.options.deliveryMode && message.setDeliveryMode(deliveryModeMap.get(this.options.deliveryMode.toUpperCase()) as MessageDeliveryModeType); this.options.timeToLive && message.setTimeToLive(this.options.timeToLive); @@ -207,8 +231,8 @@ export class SolaceClient extends VisualizeClient { message.setUserPropertyMap(propertyMap); } - Logger.logSuccess(`message published to topic ${topicName}`) - Logger.printMessage(message.dump(0), message.getUserPropertyMap(), message.getBinaryAttachment(), this.options.outputMode); + Logger.logSuccess(`message published to topic - ${message.getDestination()}, type - ${getType(message)}`) + Logger.dumpMessage(message, this.options.contentType, this.options.outputMode); this.session.send(message); this.publishVisualizationEvent(this.session, this.options, STM_EVENT_PUBLISHED, { type: 'sender', deliveryMode: message.getDeliveryMode(), topicName, clientName: this.clientName, uuid: uuid(), msgId: message.getApplicationMessageId() diff --git a/src/common/receive-client.ts b/src/common/receive-client.ts index c57b9a9..970ffce 100644 --- a/src/common/receive-client.ts +++ b/src/common/receive-client.ts @@ -1,7 +1,7 @@ import solace, { LogLevel } from "solclientjs"; import { Logger } from '../utils/logger' import { STM_CLIENT_CONNECTED, STM_CLIENT_DISCONNECTED, STM_EVENT_PUBLISHED, STM_EVENT_RECEIVED } from "../utils/controlevents"; -import { getDefaultClientName } from "../utils/defaults"; +import { getDefaultClientName, getType } from "../utils/defaults"; import { VisualizeClient } from "./visualize-client"; const { uuid } = require('uuidv4'); @@ -77,10 +77,10 @@ export class SolaceClient extends VisualizeClient { //The UP_NOTICE dictates whether the session has been established this.session.on(solace.SessionEventCode.UP_NOTICE, (sessionEvent: solace.SessionEvent) => { + Logger.logSuccess('=== ' + this.clientName + ' successfully connected and ready to receive events. ==='); this.publishVisualizationEvent(this.session, this.options, STM_CLIENT_CONNECTED, { type: 'receiver', clientName: this.clientName, uuid: uuid() }) - Logger.logSuccess('=== ' + this.clientName + ' successfully connected and ready to receive events. ==='); resolve(); }); @@ -146,7 +146,7 @@ export class SolaceClient extends VisualizeClient { //Message callback function this.session.on(solace.SessionEventCode.MESSAGE, (message:any) => { - Logger.logSuccess(`message received - ${message.getDestination()}`) + Logger.logSuccess(`message Received - ${message.getDestination()}, type - ${getType(message)}`) //Get the topic name from the message's destination let topicName: string = message.getDestination().getName(); @@ -166,15 +166,12 @@ export class SolaceClient extends VisualizeClient { matched = matched || topicName.match(regexSub) !== null; if (matched) break; } - if (!matched) { - Logger.logError('💣💣 Hmm.. received message on an unsubscribed topic 💥💥') - } } this.publishVisualizationEvent(this.session, this.options, STM_EVENT_RECEIVED, { type: 'receiver', deliveryMode: message.getDeliveryMode(), topicName, clientName: this.clientName, uuid: uuid(), msgId: message.getApplicationMessageId() }) - Logger.printMessage(message.dump(0), message.getUserPropertyMap(), message.getBinaryAttachment(), this.options.outputMode); + Logger.dumpMessage(message, this.options.contentType, this.options.outputMode); }); } catch (error: any) { Logger.logDetailedError('session creation failed - ', error.toString()) @@ -391,8 +388,8 @@ export class SolaceClient extends VisualizeClient { }); // Define message received event listener this.receiver.messageReceiver.on(solace.MessageConsumerEventName.MESSAGE, (message: any) => { - Logger.logSuccess(`message Received - ${message.getDestination()}`) - Logger.printMessage(message.dump(0), message.getUserPropertyMap(), message.getBinaryAttachment(), this.options.outputMode); + Logger.logSuccess(`message Received - ${message.getDestination()}, type - ${getType(message)}`) + Logger.dumpMessage(message, this.options.contentType, this.options.outputMode); this.publishVisualizationEvent(this.session, this.options, STM_EVENT_RECEIVED, { type: 'receiver', deliveryMode: message.getDeliveryMode(), queue: this.receiver.queue, topicName: message.getDestination().getName(), clientName: this.clientName, uuid: uuid(), msgId: message.getApplicationMessageId() diff --git a/src/common/reply-client.ts b/src/common/reply-client.ts index 2806d62..0014653 100644 --- a/src/common/reply-client.ts +++ b/src/common/reply-client.ts @@ -1,6 +1,6 @@ import solace, { LogLevel, MessageDeliveryModeType } from "solclientjs"; import { Logger } from '../utils/logger' -import { getDefaultClientName, getDefaultMessage } from "../utils/defaults"; +import { getDefaultClientName, getDefaultMessage, getType } from "../utils/defaults"; import { VisualizeClient } from "./visualize-client"; import { STM_CLIENT_CONNECTED, STM_CLIENT_DISCONNECTED, STM_EVENT_REPLIED, STM_EVENT_REQUEST_RECEIVED } from "../utils/controlevents"; const { uuid } = require('uuidv4'); @@ -26,7 +26,7 @@ export class SolaceClient extends VisualizeClient { session:any = null; clientName:string = ""; payload:any = null; - defaultMessage:boolean = false; + contentType:string = ""; constructor(options:any) { super(); @@ -115,7 +115,7 @@ export class SolaceClient extends VisualizeClient { type: 'replier', topicName: request.getDestination().getName(), clientName: this.clientName, uuid: uuid(), msgId: message.getApplicationMessageId() }) - this.reply(request, this.payload); + this.reply(request, this.payload, this.contentType); } catch (error:any) { Logger.logDetailedError('send reply failed - ', error.toString()) if (error.cause?.message) Logger.logDetailedError(``, `${error.cause?.message}`) @@ -139,7 +139,7 @@ export class SolaceClient extends VisualizeClient { } // Subscribes to request topic on Solace PubSub+ Event Broker - subscribe = (topicNames: any, payload: any, defaultMessage: boolean) => { + subscribe = (topicNames: any, payload: string | Buffer | undefined, contentType: string) => { //Check if the session has been established if (!this.session) { Logger.logWarn("cannot subscribe because not connected to Solace message router!"); @@ -148,7 +148,7 @@ export class SolaceClient extends VisualizeClient { try { this.payload = payload; - this.defaultMessage = defaultMessage; + this.contentType = contentType; topicNames.forEach((topicName:any) => { Logger.logInfo(`subscribing to ${topicName}`); @@ -189,14 +189,37 @@ export class SolaceClient extends VisualizeClient { } }; - reply = (message:any, payload:any) => { - Logger.logSuccess('request received'); - Logger.printMessage(message.dump(0), message.getUserPropertyMap(), message.getBinaryAttachment(), this.options.outputMode); + reply = (message:any, payload: string | Buffer | undefined, contentType: string) => { + Logger.logSuccess(`request Received - ${message.getDestination()}, type - ${getType(message)}`) + Logger.dumpMessage(message, this.options.contentType, this.options.outputMode); Logger.await(`replying to request on topic '${message.getDestination().getName()}'...`); if (this.session !== null) { - if (this.defaultMessage) payload = getDefaultMessage(); var reply = solace.SolclientFactory.createMessage(); - reply.setBinaryAttachment(JSON.stringify(payload)); + if (payload) { + if (contentType === 'application/xml' || contentType === 'text/plain') { + if (typeof payload === 'string') + reply.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, payload)); + else + reply.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, JSON.stringify(payload))); + } else if (contentType === 'application/json') { + reply.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, JSON.stringify(payload))); + } else { + if (typeof payload === 'object') { + const encoder = new TextEncoder(); + const result = encoder.encode(JSON.stringify(payload)); + reply.setBinaryAttachment(result); + } else if (typeof payload === 'string') { + const encoder = new TextEncoder(); + const result = encoder.encode(payload); + reply.setBinaryAttachment(result); + } else { + reply.setBinaryAttachment(payload); + } + } + } else { + reply.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, "")); + } + reply.setApplicationMessageId(message.getApplicationMessageId()); if (this.options.replyToTopic) reply.setDestination(solace.SolclientFactory.createTopicDestination(this.options.replyToTopic)); @@ -207,7 +230,7 @@ export class SolaceClient extends VisualizeClient { this.session.sendReply(message, reply); // this.session.send(reply) Logger.logSuccess(`reply sent`); - Logger.printMessage(reply.dump(0), reply.getUserPropertyMap(), reply.getBinaryAttachment(), this.options.outputMode); + Logger.dumpMessage(reply, this.options.contentType, this.options.outputMode); this.publishVisualizationEvent(this.session, this.options, STM_EVENT_REPLIED, { type: 'replier', topicName: message.getDestination().getName() + ' [reply]', clientName: this.clientName, uuid: uuid(), msgId: reply.getApplicationMessageId() @@ -246,4 +269,4 @@ export class SolaceClient extends VisualizeClient { process.exit(0); }, 1500); // wait for 1 second to finish }; -} +} \ No newline at end of file diff --git a/src/common/request-client.ts b/src/common/request-client.ts index a8c5be8..34149a9 100644 --- a/src/common/request-client.ts +++ b/src/common/request-client.ts @@ -1,6 +1,6 @@ import solace, { LogLevel, MessageDeliveryModeType } from "solclientjs"; import { Logger } from '../utils/logger' -import { getDefaultClientName, getDefaultTopic } from "../utils/defaults"; +import { getDefaultClientName, getDefaultTopic, getType } from "../utils/defaults"; import { VisualizeClient } from "./visualize-client"; import { STM_CLIENT_CONNECTED, STM_CLIENT_DISCONNECTED, STM_EVENT_REQUESTED, STM_EVENT_REPLY_RECEIVED } from "../utils/controlevents"; import { randomUUID } from "crypto"; @@ -113,7 +113,7 @@ export class SolaceClient extends VisualizeClient { } // sends one request - request = (topicName: string, payload: string | Buffer) => { + request = (topicName: string, payload: string | Buffer | undefined, contentType: string) => { if (!this.session) { Logger.logWarn("cannot subscribe because not connected to Solace message router!"); return; @@ -122,7 +122,31 @@ export class SolaceClient extends VisualizeClient { Logger.await('requesting...'); var request = solace.SolclientFactory.createMessage(); request.setDestination(solace.SolclientFactory.createTopicDestination(topicName)); - request.setBinaryAttachment(JSON.stringify(payload)); + if (payload) { + if (contentType === 'application/xml' || contentType === 'text/plain') { + if (typeof payload === 'string') + request.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, payload)); + else + request.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, JSON.stringify(payload))); + } else if (contentType === 'application/json') { + request.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, JSON.stringify(payload))); + } else { + if (typeof payload === 'object') { + const encoder = new TextEncoder(); + const result = encoder.encode(JSON.stringify(payload)); + request.setBinaryAttachment(result); + } else if (typeof payload === 'string') { + const encoder = new TextEncoder(); + const result = encoder.encode(payload); + request.setBinaryAttachment(result); + } else { + request.setBinaryAttachment(payload); + } + } + } else { + request.setSdtContainer(solace.SDTField.create(solace.SDTFieldType.STRING, "")); + } + this.options.deliveryMode && request.setDeliveryMode(deliveryModeMap.get(this.options.deliveryMode.toUpperCase()) as MessageDeliveryModeType); this.options.timeToLive && request.setTimeToLive(this.options.timeToLive); this.options.dmqEligible && request.setDMQEligible(true); @@ -140,7 +164,7 @@ export class SolaceClient extends VisualizeClient { } Logger.logSuccess(`request sent on topic ${topicName}`) - Logger.printMessage(request.dump(0), request.getUserPropertyMap(), request.getBinaryAttachment(), this.options.outputMode); + Logger.dumpMessage(request, this.options.contentType, this.options.outputMode); try { if (this.options.replyToTopic) { //Session subscription @@ -156,8 +180,8 @@ export class SolaceClient extends VisualizeClient { request, this.options.timeout, // 5 seconds timeout for this operation (session:any, message:any) => { - Logger.logSuccess(`reply received for request on topic '${request.getDestination()?.getName()}'`); - Logger.printMessage(message.dump(0), message.getUserPropertyMap(), message.getBinaryAttachment(), this.options.outputMode); + Logger.logSuccess(`reply Received - ${request.getDestination()}, type - ${getType(request)}`) + Logger.dumpMessage(message, this.options.contentType, this.options.outputMode); this.publishVisualizationEvent(this.session, this.options, STM_EVENT_REPLY_RECEIVED, { type: 'requestor', topicName: topicName + ' [reply]', clientName: this.clientName, uuid: uuid(), msgId: message.getApplicationMessageId() }) diff --git a/src/lib/publish.ts b/src/lib/publish.ts index 9e4262d..acd0836 100644 --- a/src/lib/publish.ts +++ b/src/lib/publish.ts @@ -1,11 +1,11 @@ import * as fs from 'fs' -import concat from 'concat-stream' import { checkConnectionParamsExists, checkForCliTopics, checkPubTopicExists } from '../utils/checkparams' import { SolaceClient } from '../common/publish-client' import { Logger } from '../utils/logger' import { getDefaultMessage, delay } from '../utils/defaults'; import { displayHelpExamplesForPublish } from '../utils/examples'; import { fileExists, saveOrUpdateCommandSettings } from '../utils/config'; +import { StdinRead } from '../utils/stdinread' const publish = async ( options: MessageClientOptions, @@ -13,6 +13,7 @@ const publish = async ( ) => { const { count, interval } = options; const publisher = new SolaceClient(options); + var interrupted = false; try { await publisher.connect() } catch (error:any) { @@ -22,6 +23,8 @@ const publish = async ( process.on('SIGINT', function () { 'use strict'; + if (interrupted) return; + interrupted = true; Logger.logWarn('operation interrupted...') publisher.setExited(true); publisher.exit(); @@ -35,7 +38,9 @@ const publish = async ( } var message:any = options.message as string; - message = optionsSource.message === 'default' ? getDefaultMessage() : message; + message = (optionsSource.defaultMessage === 'cli') ? getDefaultMessage() : message; + + var contentType:any = options.contentType as string; var file:any = options.file as string; if (file) { @@ -46,10 +51,7 @@ const publish = async ( } try { - var content = fs.readFileSync(file, 'utf-8') - var obj = JSON.parse(content); - message = JSON.stringify(obj, null, 2); - optionsSource.message = 'file' + message = fs.readFileSync(file, 'utf-8') } catch (error: any) { Logger.logDetailedError('read file failed', error.toString()) if (error.cause?.message) Logger.logDetailedError(``, `${error.cause?.message}`) @@ -58,10 +60,17 @@ const publish = async ( } } + if (options.stdin) { + Logger.ctrlDToPublish(); + var readLines = new StdinRead(); + await readLines.getData(); + message = readLines.data(); + } + if (count === 1) { for (var i=0; i 0;iter--, n++) { for (var i=0; i { // if subscriptions are specified, remove the default subscription at pos-0 checkForCliTopics('topic', options, optionsSource); - if (options.stdin) { - Logger.ctrlDToPublish(); - process.stdin.pipe( - concat((data) => { - options.message = data.toString().slice(0, -1) - optionsSource.message = 'cli' - publish(options, optionsSource) - }), - ) - } else { - publish(options, optionsSource) - } + publish(options, optionsSource) } export default publisher diff --git a/src/lib/receive.ts b/src/lib/receive.ts index 2247a6a..6af623c 100644 --- a/src/lib/receive.ts +++ b/src/lib/receive.ts @@ -9,6 +9,7 @@ const receive = async ( optionsSource: any ) => { const receiver = new SolaceClient(options); + var interrupted = false; try { await receiver.connect(); receiver.subscribe(options); @@ -16,9 +17,10 @@ const receive = async ( Logger.logError('exiting...') process.exit(1) } - process.stdin.resume(); process.on('SIGINT', function () { 'use strict'; + if (interrupted) return; + interrupted = true; Logger.logWarn('operation interrupted...') receiver.exit(); }); @@ -29,6 +31,8 @@ const receive = async ( receiver.exit(); }, options.exitAfter * 1000); } + + process.stdin.resume(); } const receiver = (options: MessageClientOptions, optionsSource: any) => { diff --git a/src/lib/reply.ts b/src/lib/reply.ts index 173e4a4..4100496 100644 --- a/src/lib/reply.ts +++ b/src/lib/reply.ts @@ -5,14 +5,41 @@ import { fileExists, saveOrUpdateCommandSettings } from '../utils/config' import { SolaceClient } from '../common/reply-client' import { displayHelpExamplesForReply } from '../utils/examples' import { getDefaultMessage } from '../utils/defaults' +import { StdinRead } from '../utils/stdinread' const reply = async ( options: MessageClientOptions, optionsSource: any ) => { const replier = new SolaceClient(options); + var interrupted = false; + + try { + await replier.connect(); + } catch (error:any) { + Logger.logError('exiting...') + process.exit(1) + } + + if (options.exitAfter) { + setTimeout(function exit() { + Logger.logWarn(`exiting session (exit-after set for ${options.exitAfter})...`); + replier.exit(); + }, options.exitAfter * 1000); + } + + process.on('SIGINT', function () { + 'use strict'; + if (interrupted) return; + interrupted = true; + Logger.logWarn('operation interrupted...') + replier.exit(); + }); + var message:any = options.message as string; - optionsSource.message === 'default' ? message = getDefaultMessage() : message; + message = (optionsSource.defaultMessage === 'cli') ? getDefaultMessage() : message; + + var contentType:any = options.contentType as string; var file:any = options.file as string; if (file) { @@ -23,9 +50,7 @@ const reply = async ( } try { - var content = fs.readFileSync(file, 'utf-8') - var obj = JSON.parse(content); - message = JSON.stringify(obj); + message = fs.readFileSync(file, 'utf-8') } catch (error: any) { Logger.logDetailedError('read file failed', error.toString()) if (error.cause?.message) Logger.logDetailedError(``, `${error.cause?.message}`) @@ -34,28 +59,22 @@ const reply = async ( } } + if (options.stdin) { + Logger.ctrlDToPublish(); + var readLines = new StdinRead(); + await readLines.getData(); + message = readLines.data(); + } + try { - await replier.connect(); - replier.subscribe(options.topic, message, optionsSource.message === 'cli'); + replier.subscribe(options.topic, message, contentType); } catch (error:any) { Logger.logError('exiting...') process.exit(1) } - if (options.exitAfter) { - setTimeout(function exit() { - Logger.logWarn(`exiting session (exit-after set for ${options.exitAfter})...`); - replier.exit(); - }, options.exitAfter * 1000); - } - Logger.logInfo('press Ctrl-C to exit'); process.stdin.resume(); - process.on('SIGINT', function () { - 'use strict'; - Logger.logWarn('operation interrupted...') - replier.exit(); - }); } const replier = (options: MessageClientOptions, optionsSource: any) => { diff --git a/src/lib/request.ts b/src/lib/request.ts index b679fe3..d347bbb 100644 --- a/src/lib/request.ts +++ b/src/lib/request.ts @@ -3,17 +3,44 @@ import { Logger } from '../utils/logger' import { checkConnectionParamsExists, checkForCliTopics } from '../utils/checkparams' import { SolaceClient } from '../common/request-client' import { displayHelpExamplesForRequest } from '../utils/examples'; -import { defaultRequestMessage, delay } from '../utils/defaults'; +import { defaultRequestMessage, delay, getDefaultMessage } from '../utils/defaults'; import { fileExists, saveOrUpdateCommandSettings } from '../utils/config'; +import { StdinRead } from '../utils/stdinread' const request = async ( options: MessageClientOptions, optionsSource: any ) => { const requestor = new SolaceClient(options); + var interrupted = false; + + try { + await requestor.connect() + } catch (error:any) { + Logger.logError('exiting...') + process.exit(1) + } + + if (options.exitAfter) { + setTimeout(function exit() { + Logger.logWarn(`exiting session (exit-after set for ${options.exitAfter})...`); + requestor.exit(); + }, options.exitAfter * 1000); + } + + process.on('SIGINT', function () { + 'use strict'; + if (interrupted) return; + interrupted = true; + Logger.logWarn('operation interrupted...') + requestor.exit(); + }); + var message:any = options.message as string; - optionsSource.message === 'default' ? message = defaultRequestMessage : message; + message = (optionsSource.defaultMessage === 'cli') ? getDefaultMessage() : message; + var contentType:any = options.contentType as string; + var file:any = options.file as string; if (file) { if (!fileExists(file)) { @@ -23,9 +50,7 @@ const request = async ( } try { - var content = fs.readFileSync(file, 'utf-8') - var obj = JSON.parse(content); - message = JSON.stringify(obj); + message = fs.readFileSync(file, 'utf-8') } catch (error: any) { Logger.logDetailedError('read file failed', error.toString()) if (error.cause?.message) Logger.logDetailedError(``, `${error.cause?.message}`) @@ -34,29 +59,22 @@ const request = async ( } } + if (options.stdin) { + Logger.ctrlDToPublish(); + var readLines = new StdinRead(); + await readLines.getData(); + message = readLines.data(); + } + try { - await requestor.connect(); // if (options.replyToTopic) // requestor.subscribe(options.replyToTopic) var topicName = (typeof options.topic === 'object') ? options.topic[0] : options.topic; - requestor.request(topicName, message); + requestor.request(topicName, message, contentType); } catch (error:any) { Logger.logError('exiting...') process.exit(1) } - - if (options.exitAfter) { - setTimeout(function exit() { - Logger.logWarn(`exiting session (exit-after set for ${options.exitAfter})...`); - requestor.exit(); - }, options.exitAfter * 1000); - } - - process.on('SIGINT', function () { - 'use strict'; - Logger.logWarn('operation interrupted...') - requestor.exit(); - }); } const requestor = (options: MessageClientOptions, optionsSource: any) => { diff --git a/src/types/global.d.ts b/src/types/global.d.ts index 06566f8..15258f4 100644 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -85,7 +85,8 @@ declare global { queue: any createIfMissing: boolean | undefined file?: string | undefined - message?: string | Buffer + message?: string | Buffer | undefined + defaultMessage?: boolean stdin?: boolean timeToLive?: number dmqEligible?: boolean @@ -97,10 +98,10 @@ declare global { deliveryMode?: string replyToTopic?: string userProperties?: Record - waitBeforeExit?: number exitAfter?: number outputMode?: string + contentType?: string | undefined traceVisualization?: boolean // Help Examples diff --git a/src/utils/defaults.ts b/src/utils/defaults.ts index 65fc655..8f8d303 100644 --- a/src/utils/defaults.ts +++ b/src/utils/defaults.ts @@ -1,3 +1,5 @@ +import solace from "solclientjs"; + const os = require('os'); export const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) @@ -139,7 +141,8 @@ export const defaultMessageConfig:any = { // userCos: NOT CONSIDERED // userData: NOT CONSIDERED userPropertyMap: undefined, - outputMode: 'COMPACT', + outputMode: 'NONE', + contentType: 'text/plain' } @@ -151,7 +154,7 @@ export const defaultMessagePublishConfig:any = { description: 'Publish application created via Solace Try-Me CLI', stdin: false, topic: [ getDefaultTopic('send') ], - message: defaultMessageHint, + message: undefined, queue: undefined, createIfMissing: undefined, @@ -173,7 +176,7 @@ export const defaultMessageReceiveConfig:any = { description: 'Receive application created via Solace Try-Me CLI', topic: [ getDefaultTopic('send') ], - message: defaultMessageHint, + message: undefined, queue: undefined, createIfMissing: undefined, @@ -191,7 +194,7 @@ export const defaultMessageRequestConfig:any = { description: 'Request application created via Solace Try-Me CLI', topic: [ getDefaultTopic('request') ], - message: defaultRequestMessageHint, + message: undefined, queue: undefined, createIfMissing: undefined, @@ -200,6 +203,9 @@ export const defaultMessageRequestConfig:any = { enabled: false, // guaranteed publisher windowSize: 50, + outputMode: 'NONE', + contentType: 'text/plain', + command: 'request', name: 'request', } @@ -209,7 +215,7 @@ export const defaultMessageReplyConfig:any = { description: 'Reply application created via Solace Try-Me CLI', topic: [ getDefaultTopic('reply') ], - message: defaultRequestMessageHint, + message: undefined, file: undefined, queue: undefined, createIfMissing: undefined, @@ -223,6 +229,9 @@ export const defaultMessageReplyConfig:any = { exitAfter: 0, traceVisualization: false, + outputMode: 'NONE', + contentType: 'text/plain', + command: 'reply', name: 'reply', } @@ -362,3 +371,13 @@ export const getCommandDescription = (commandType:any) => { case 'client-username': return "Manage Client Username command" } } + +export const getType = (message:solace.Message) => { + switch (message.getType()) { + case 0: return 'BINARY'; + case 1: return 'MAP'; + case 2: return 'STREAM'; + case 3: return 'TEXT'; + default: return 'UNKNOWN'; + } +} \ No newline at end of file diff --git a/src/utils/instances.ts b/src/utils/instances.ts index d2dfda3..bbea87d 100644 --- a/src/utils/instances.ts +++ b/src/utils/instances.ts @@ -41,6 +41,7 @@ export class MessageClientOptionsEmpty implements StmConfigOptions, MessageConne queue: any createIfMissing: boolean | undefined message?: string | Buffer | undefined + defaultMessage?: boolean | undefined; file?: string | undefined stdin?: boolean | undefined timeToLive?: number | undefined @@ -54,6 +55,7 @@ export class MessageClientOptionsEmpty implements StmConfigOptions, MessageConne replyToTopic?: string | undefined userProperties?: Record | undefined outputMode?: string | undefined + contentType?: string | undefined waitBeforeExit?: number | undefined; exitAfter?: number | undefined traceVisualization?: boolean | undefined; @@ -103,6 +105,7 @@ export class MessageClientOptionsEmpty implements StmConfigOptions, MessageConne this.queue = "" this.createIfMissing = false this.message = "" + this.defaultMessage = false; this.file = "" this.stdin = false this.timeToLive = 1 @@ -116,6 +119,7 @@ export class MessageClientOptionsEmpty implements StmConfigOptions, MessageConne this.replyToTopic = "" this.userProperties = { "key": "value" } this.outputMode = "" + this.contentType = "text/plain" this.waitBeforeExit = 0; this.exitAfter = 0 this.traceVisualization = false; diff --git a/src/utils/logger.ts b/src/utils/logger.ts index 07bf502..b43df10 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -15,14 +15,26 @@ const options = { color: 'cyanBright', label: 'santa', logLevel: 'info' - } + }, + info: { + badge: 'ℹ', + color: 'whiteBright', + label: 'info', + logLevel: 'info', + }, + await: { + badge: '…', + color: 'cyanBright', + label: 'waiting', + logLevel: 'waiting', + }, } }; const Signal = new Signale(options) const Logger = { - ctrlDToPublish: () => Signal.success('Connected, press Ctrl+D to publish, and Ctrl+C to exit'), + ctrlDToPublish: () => Signal.success('Connected, press Ctrl+D to publish, and Ctrl+C to exit\nEnter the payload now...'), success: (message: string) => Signal.success(`${chalk.greenBright('success: ').concat(chalk.greenBright(message))}`), logSuccess: (message: string) => Signal.success(`${chalk.greenBright('success: ').concat(chalk.whiteBright(message))}`), @@ -37,6 +49,9 @@ const Logger = { logError: (error: string) => Signal.error(`${chalk.redBright('error: ').concat(chalk.whiteBright(error))}`), logDetailedError: (message: string, detail: string) => Signal.error(chalk.redBright('error: ').concat(chalk.whiteBright(message)).concat(' - ').concat(chalk.redBright(detail))), + keyPair: (key: string, value: string) => Signal.info('info: ' + chalk.whiteBright(`${key}: `).concat(chalk.whiteBright(`${value}`))), + logKeyPair: (key: string, value: string) => Signal.info('info: ' + chalk.whiteBright(`${key}: `).concat(chalk.whiteBright(`${value}`))), + info: (message: string) => Signal.info(chalk.whiteBright('info: ').concat(chalk.whiteBright(message))), logInfo: (message: string) => Signal.info(chalk.whiteBright('info: ').concat(chalk.whiteBright(message))), @@ -68,7 +83,7 @@ const Logger = { } if (outputMode?.toUpperCase() === 'COMPACT' || !outputMode) { - Logger.logInfo(`Message Payload:\r\n${payload.trim()}`); + payload && Logger.logInfo(`Message Payload:\r\n${payload.trim()}`); } else if (outputMode?.toUpperCase() === 'PRETTY') { Logger.logInfo(`Message Properties\r\n${properties}`) if (userProperties) { @@ -80,11 +95,12 @@ const Logger = { }); Logger.logInfo(`Message User Properties${userProps}`) } + var prettyPayload = prettyJSON(payload); if (prettyPayload) - Logger.logInfo(`Message Payload:\r\n${prettyPayload}`); + payload && Logger.logInfo(`Message Payload:\r\n${prettyPayload}`); else - Logger.logInfo(`Message Payload:\r\n${prettyXML(payload.trimStart(), 2)}`); + payload && Logger.logInfo(`Message Payload:\r\n${prettyXML(payload.trimStart(), 2)}`); } else { if (userProperties) { properties = properties.replace(/User Property Map:.*entries\n/, '') @@ -99,10 +115,80 @@ const Logger = { } else { Logger.logInfo(`Message Properties\r\n${properties}`); } - Logger.logInfo(`Message Payload:\r\n${payload.trim()}`); + payload && Logger.logInfo(`Message Payload:\r\n${payload.trim()}`); } - } + }, + prettyPrintMessage: (properties:any, userProperties:any, payload:any, contentType:string, outputMode:string) => { + if (properties) { + var arr = properties.split('\n'); + var newProps = ''; + arr.forEach((element:any) => { + if (element.startsWith('TimeToLive')) + newProps += newProps ? '\n' + element.replace(/\((Sat|Sun|Mon|Tue|Thu|Fri).*Time\)\)/,'(ms)') : + element.replace(/\((Sat|Sun|Mon|Tue|Thu|Fri).*Time\)\)/,'(ms)') + else if (!element.startsWith('Class Of Service') && + !element.startsWith('Correlation Tag Pointer') && + !element.startsWith('Binary Attachment')) + newProps += newProps ? '\n' + element : element; + }) + properties = newProps; + } + + if (outputMode?.toUpperCase() === 'PRETTY') { + Logger.logInfo(`Message Properties\r\n${properties}`) + if (userProperties) { + properties = properties.replace(/User Property Map:.*entries\n/, '') + let keys = userProperties.getKeys(); + let userProps = ''; + keys.forEach((key: any) => { + userProps += `\r\n${key}:\t\t\t\t\t${userProperties.getField(key).getValue()}`; + }); + Logger.logInfo(`Message User Properties${userProps}`) + } + + Logger.logInfo(`Message Payload (bytes): ${payload ? payload.length : 0}`); + if (contentType === 'application/json') { + var prettyPayload = prettyJSON(payload.trim()); + payload && Logger.logInfo(`Message Payload:\r\n${prettyPayload}`); + } else if (contentType === 'application/xml') { + var prettyPayload = prettyXML(payload.trim(), 2); + payload && Logger.logInfo(`Message Payload:\r\n${prettyPayload}`); + } else { + payload && Logger.logInfo(`Message Payload:\r\n${payload}`); + } + } else if (outputMode?.toUpperCase() === 'COMPACT') { + if (userProperties) { + properties = properties.replace(/User Property Map:.*entries\n/, '') + Logger.logInfo(`Message Properties\r\n${properties}`) + Logger.logInfo(`Message User Properties`) + let keys = userProperties.getKeys(); + let userProps = ''; + keys.forEach((key: any) => { + userProps += `\r\n${key}:\t\t\t\t\t${userProperties.getField(key).getValue()}`; + }); + Logger.logInfo(`Message User Properties${userProps}`) + } else { + Logger.logInfo(`Message Properties\r\n${properties}`); + } + Logger.logInfo(`Message Payload (bytes): ${payload ? payload.length : 0}`); + } else { + Logger.logInfo(`Message Payload (bytes): ${payload ? payload.length : 0}`); + } + }, + + dumpMessage: (message: any, contentType: string, outputMode: string) => { + var payload = undefined; + if (message.getType() === 0) { // binary + payload = message.getBinaryAttachment(); + } else { + payload = message.getSdtContainer().getValue(); + } + + Logger.prettyPrintMessage(message.dump(0), message.getUserPropertyMap(), payload, contentType, outputMode) + }, + + } export { Logger } \ No newline at end of file diff --git a/src/utils/options.ts b/src/utils/options.ts index 78be0e2..1a0faf2 100644 --- a/src/utils/options.ts +++ b/src/utils/options.ts @@ -1,7 +1,7 @@ import { Command, Option, program } from 'commander' import { parseBoolean, parseNumber, parseDeliveryMode, parseLogLevel, parseManageProtocol, - parseMessageProtocol, parseOutputMode, parseSingleTopic, parsePublishTopic, + parseMessageProtocol, parseOutputMode, parseContentType, parseSingleTopic, parsePublishTopic, parseReceiveTopic, parseUserProperties, parseSempQueueNonOwnerPermission, parseSempOperation, parseSempQueueAccessType, parsePublishAcknowledgeMode, parseReceiverAcknowledgeMode, parseSempAllowDefaultAction, parseSempEndpointCreateDurability, parseRequestTopic, parsePartitionKey, parsePartitionKeys @@ -72,9 +72,10 @@ export const addSendOptions = (cmd: Command, advanced: boolean) => { // message options .addOption(new Option(`\n/* ${chalk.whiteBright('MESSAGE SETTINGS')} */`) .hideHelp(advanced)) .addOption(new Option('--topic ', chalk.whiteBright('the message topic(s)')) .default([ getDefaultTopic('send')]) .argParser(parsePublishTopic) .hideHelp(advanced)) - .addOption(new Option('--message ', chalk.whiteBright('the message body')) .default('a default payload') .hideHelp(advanced)) - .addOption(new Option('--file ', chalk.whiteBright('filename containing the message content')) .conflicts('message') .conflicts('stdin') .hideHelp(advanced)) - .addOption(new Option('--stdin', chalk.whiteBright('read the message body from stdin')) .conflicts('message') .conflicts('file').default(false) .hideHelp(advanced)) + .addOption(new Option('--message ', chalk.whiteBright('the message body')) .implies({contentType: 'text/plain'}) .hideHelp(advanced)) + .addOption(new Option('--default-message', chalk.whiteBright('use default message body')) .conflicts('message') .conflicts('stdin') .implies({contentType: 'application/json'}) .default('a default payload') .hideHelp(advanced)) + .addOption(new Option('--file ', chalk.whiteBright('filename containing the message content')) .implies({contentType: 'text/plain'}) .conflicts('message') .conflicts('stdin') .hideHelp(advanced)) + .addOption(new Option('--stdin', chalk.whiteBright('read the message body from stdin')) .implies({contentType: 'text/plain'}) .conflicts('message') .conflicts('defaultMessage') .conflicts('file').default(false) .hideHelp(advanced)) .addOption(new Option('--count ', chalk.whiteBright('the number of events to publish')) .argParser(parseNumber) .default(defaultMessagePublishConfig.count) .hideHelp(advanced)) .addOption(new Option('--interval ', chalk.whiteBright('the time to wait between publish')) .argParser(parseNumber) .default(defaultMessagePublishConfig.interval) .hideHelp(advanced)) .addOption(new Option('--time-to-live ', chalk.whiteBright('the time before a message is discarded or moved to a DMQ')) .argParser(parseNumber) .default(defaultMessageConfig.timeToLive) .hideHelp(advanced)) @@ -118,7 +119,8 @@ export const addSendOptions = (cmd: Command, advanced: boolean) => { .addOption(new Option('--delivery-mode ', chalk.whiteBright(`[advanced] the application-requested message delivery mode 'DIRECT' or 'PERSISTENT'`)) .default(defaultMessageConfig.deliveryMode) .argParser(parseDeliveryMode) .hideHelp(!advanced)) .addOption(new Option('--reply-to-topic ', chalk.whiteBright('[advanced] string which is used as the topic name for a response message')) .argParser(parseSingleTopic) .default(defaultMessageConfig.replyTo) .hideHelp(!advanced)) .addOption(new Option('--user-properties ', chalk.whiteBright('[advanced] the user properties (e.g., "name1: value1" "name2: value2")')) .argParser(parseUserProperties) .hideHelp(!advanced)) - .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY, NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) + .addOption(new Option('--content-type ', chalk.whiteBright('[advanced] payload content type')) .argParser(parseContentType) .default(defaultMessageConfig.contentType) .hideHelp(!advanced)) + .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY OR NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) // config options .addOption(new Option(`\n/* ${chalk.whiteBright('CONFIGURATION SETTINGS')} */`) .hideHelp(advanced)) @@ -141,10 +143,10 @@ export const addReceiveOptions = (cmd: Command, advanced: boolean) => { .addOption(new Option('--vpn ', chalk.whiteBright('the message VPN name')) .default(defaultMessageConnectionConfig.vpn) .hideHelp(advanced)) .addOption(new Option('--username ', chalk.whiteBright('the username')) .default(defaultMessageConnectionConfig.username) .hideHelp(advanced)) .addOption(new Option('--password ', chalk.whiteBright('the password')) .default(defaultMessageConnectionConfig.password) .hideHelp(advanced)) - .addOption(new Option('--topic ', chalk.whiteBright('the message topic(s)')) .default( [ getDefaultTopic('receive') ]) .argParser(parseReceiveTopic) .hideHelp(advanced)) // receive from queue .addOption(new Option(`\n/* ${chalk.whiteBright('QUEUE SETTINGS')} */`)) + .addOption(new Option('--topic ', chalk.whiteBright('the message topic(s)')) .default( [ getDefaultTopic('receive') ]) .argParser(parseReceiveTopic) .hideHelp(advanced)) .addOption(new Option('--queue ', chalk.whiteBright('the message queue')) .hideHelp(advanced)) .addOption(new Option('--create-if-missing [BOOLEAN]', chalk.whiteBright('[advanced] create message queue if missing')) .argParser(parseBoolean) .hideHelp(!advanced)) @@ -160,12 +162,13 @@ export const addReceiveOptions = (cmd: Command, advanced: boolean) => { .addOption(new Option('--keepalive-interval-limit ', chalk.whiteBright('[advanced] the maximum number of consecutive Keep-Alive messages that can be sent without receiving a response before the session is declared down')) .argParser(parseNumber) .default(defaultMessageConnectionConfig.keepAliveIntervalLimit) .hideHelp(!advanced)) .addOption(new Option('--receive-timestamps [BOOLEAN]', chalk.whiteBright('[advanced] include a receive timestamp on received messages')) .argParser(parseBoolean) .default(defaultMessageConnectionConfig.generateReceiveTimestamps) .hideHelp(!advanced)) .addOption(new Option('--reapply-subscriptions [BOOLEAN]', chalk.whiteBright('[advanced] reapply subscriptions upon calling on a disconnected session')) .argParser(parseBoolean) .default(defaultMessageConnectionConfig.reapplySubscriptions) .hideHelp(!advanced)) - .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY, NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) + .addOption(new Option('--acknowledge-mode ', chalk.whiteBright('[advanced] the acknowledgement mode - AUTO or CLIENT')) .argParser( parseReceiverAcknowledgeMode) .default(defaultMessageReceiveConfig.acknowledgeMode) .hideHelp(!advanced)) + .addOption(new Option('--content-type ', chalk.whiteBright('[advanced] payload content type')) .argParser(parseContentType) .default(defaultMessageConfig.contentType) .hideHelp(!advanced)) + .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY OR NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) .addOption(new Option('--log-level ', chalk.whiteBright('[advanced] solace log level, one of values: FATAL, ERROR, WARN, INFO, DEBUG, TRACE')) .argParser(parseLogLevel) .default(defaultMessageConnectionConfig.logLevel) .hideHelp(!advanced)) .addOption(new Option('--trace-visualization [BOOLEAN]', chalk.whiteBright('[advanced] trace visualization events')) .argParser(parseBoolean) .default(defaultMessageConfig.traceVisualization) .hideHelp(true)) // consumer options - .addOption(new Option('--acknowledge-mode ', chalk.whiteBright('[advanced] the acknowledgement mode - AUTO or CLIENT')) .argParser( parseReceiverAcknowledgeMode) .default(defaultMessageReceiveConfig.acknowledgeMode) .hideHelp(!advanced)) .addOption(new Option('--exit-after ', chalk.whiteBright('[advanced] exit the session after specified number of seconds')) .argParser(parseNumber) .hideHelp(true)) // config options @@ -193,9 +196,10 @@ export const addRequestOptions = (cmd: Command, advanced: boolean) => { // message options .addOption(new Option(`\n/* ${chalk.whiteBright('MESSAGE SETTINGS')} */`) .hideHelp(advanced)) .addOption(new Option('--topic ', chalk.whiteBright('the message topic')) .default( getDefaultTopic('request') ) .argParser(parseSingleTopic) .hideHelp(advanced)) - .addOption(new Option('--message ', chalk.whiteBright('the message body')) .default('a default payload') .hideHelp(advanced)) - .addOption(new Option('--file ', chalk.whiteBright('filename containing the message content')) .conflicts('message') .conflicts('stdin') .hideHelp(advanced)) - .addOption(new Option('--stdin', chalk.whiteBright('read the message body from stdin')) .conflicts('message') .conflicts('file') .default(false) .hideHelp(advanced)) + .addOption(new Option('--message ', chalk.whiteBright('the message body')) .implies({contentType: 'text/plain'}) .hideHelp(advanced)) + .addOption(new Option('--default-message', chalk.whiteBright('use default message body')) .conflicts('message') .conflicts('stdin') .implies({contentType: 'application/json'}) .default('a default payload') .hideHelp(advanced)) + .addOption(new Option('--file ', chalk.whiteBright('filename containing the message content')) .implies({contentType: 'text/plain'}) .conflicts('message') .conflicts('stdin') .hideHelp(advanced)) + .addOption(new Option('--stdin', chalk.whiteBright('read the message body from stdin')) .implies({contentType: 'text/plain'}) .conflicts('message') .conflicts('defaultMessage') .conflicts('file').default(false) .hideHelp(advanced)) // .addOption(new Option('--reply-to-topic ', chalk.whiteBright('[advanced] string which is used as the topic name for a response message')) .argParser(parseSingleTopic) .default(defaultMessageConfig.replyTo) .hideHelp(!advanced)) .addOption(new Option('--time-to-live ', chalk.whiteBright('the time before a message is discarded or moved to a DMQ')) .argParser(parseNumber) .default(defaultMessageConfig.timeToLive) .hideHelp(advanced)) .addOption(new Option('--dmq-eligible [BOOLEAN]', chalk.whiteBright('the DMQ eligible flag')) .argParser(parseBoolean) .default(defaultMessageConfig.dmqEligible) .hideHelp(advanced)) @@ -237,7 +241,8 @@ export const addRequestOptions = (cmd: Command, advanced: boolean) => { .addOption(new Option('--delivery-mode ', chalk.whiteBright(`[advanced] the application-requested message delivery mode 'DIRECT' or 'PERSISTENT'`)) .default(defaultMessageConfig.deliveryMode) .argParser(parseDeliveryMode) .hideHelp(!advanced)) .addOption(new Option('--reply-to-topic ', chalk.whiteBright('[advanced] string which is used as the topic name for a response message')) .argParser(parseSingleTopic) .default(defaultMessageConfig.replyTo) .hideHelp(!advanced)) .addOption(new Option('--user-properties ', chalk.whiteBright('[advanced] the user properties (e.g., "name1: value1" "name2: value2")')) .argParser(parseUserProperties) .hideHelp(!advanced)) - .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY, NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) + .addOption(new Option('--content-type ', chalk.whiteBright('[advanced] payload content type')) .argParser(parseContentType) .default(defaultMessageConfig.contentType) .hideHelp(!advanced)) + .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY OR NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) // config options .addOption(new Option(`\n/* ${chalk.whiteBright('CONFIGURATION SETTINGS')} */`) .hideHelp(advanced)) @@ -264,8 +269,10 @@ export const addReplyOptions = (cmd: Command, advanced: boolean) => { // message options .addOption(new Option(`\n/* ${chalk.whiteBright('MESSAGE SETTINGS')} */`) .hideHelp(advanced)) .addOption(new Option('--topic ', chalk.whiteBright('the message topic(s)')) .default([ getDefaultTopic('send')]) .argParser(parseRequestTopic) .hideHelp(advanced)) - .addOption(new Option('--message ', chalk.whiteBright('the message body')) .default('a default payload') .hideHelp(advanced)) - .addOption(new Option('--file ', chalk.whiteBright('filename containing the message content')) .conflicts('message') .hideHelp(advanced)) + .addOption(new Option('--message ', chalk.whiteBright('the message body')) .implies({contentType: 'text/plain'}) .hideHelp(advanced)) + .addOption(new Option('--default-message', chalk.whiteBright('use default message body')) .conflicts('message') .conflicts('stdin') .implies({contentType: 'application/json'}) .default('a default payload') .hideHelp(advanced)) + .addOption(new Option('--file ', chalk.whiteBright('filename containing the message content')) .implies({contentType: 'text/plain'}) .conflicts('message') .hideHelp(advanced)) + .addOption(new Option('--stdin', chalk.whiteBright('read the message body from stdin')) .implies({contentType: 'text/plain'}) .conflicts('message') .conflicts('defaultMessage') .conflicts('file').default(false) .hideHelp(advanced)) .addOption(new Option('--time-to-live ', chalk.whiteBright('the time before a message is discarded or moved to a DMQ')) .argParser(parseNumber) .default(defaultMessageConfig.timeToLive) .hideHelp(advanced)) .addOption(new Option('--dmq-eligible [BOOLEAN]', chalk.whiteBright('the DMQ eligible flag')) .argParser(parseBoolean) .default(defaultMessageConfig.dmqEligible) .hideHelp(advanced)) @@ -304,7 +311,8 @@ export const addReplyOptions = (cmd: Command, advanced: boolean) => { // .addOption(new Option('--delivery-mode ', chalk.whiteBright(`[advanced] the application-requested message delivery mode 'DIRECT' or 'PERSISTENT'`)) .default(defaultMessageConfig.deliveryMode) .argParser(parseDeliveryMode) .hideHelp(!advanced)) .addOption(new Option('--reply-to-topic ', chalk.whiteBright('[advanced] string which is used as the topic name for a response message')) .argParser(parseSingleTopic) .default(defaultMessageConfig.replyTo) .hideHelp(!advanced)) .addOption(new Option('--user-properties ', chalk.whiteBright('[advanced] the user properties (e.g., "name1: value1" "name2: value2")')) .argParser(parseUserProperties) .hideHelp(!advanced)) - .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY, NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) + .addOption(new Option('--content-type ', chalk.whiteBright('[advanced] payload content type')) .argParser(parseContentType) .default(defaultMessageConfig.contentType) .hideHelp(!advanced)) + .addOption(new Option('--output-mode ', chalk.whiteBright('[advanced] message print mode: COMPACT, PRETTY OR NONE')) .argParser(parseOutputMode) .default(defaultMessageConfig.outputMode) .hideHelp(!advanced)) // config options .addOption(new Option(`\n/* ${chalk.whiteBright('CONFIGURATION SETTINGS')} */`) .hideHelp(advanced)) diff --git a/src/utils/parse.ts b/src/utils/parse.ts index b82225f..8f5cf9b 100644 --- a/src/utils/parse.ts +++ b/src/utils/parse.ts @@ -71,6 +71,18 @@ export const parseOutputMode = (value: string) => { return value.toUpperCase(); } +export const parseContentType = (value: string) => { + var contentType = 'text/plain'; + if (value.toLowerCase().match(/application\/[^+]*[+]json/)) + contentType = 'application/json'; + else if (value.toLowerCase().match(/application\/[^+]*[+]xml/)) + contentType = 'application/xml'; + else if (value.toLowerCase().match(/application\/[^+]*[+]binary/) || value.toLowerCase().match(/application\/octet-stream/)) + contentType = 'application/binary'; + + return value.toLowerCase(); +} + export const parseDeliveryMode = (value: any) => { if (!['DIRECT', 'PERSISTENT'].includes(value.toUpperCase())) { Logger.logError(`only 'DIRECT' or 'PERSISTENT' are supported.`) diff --git a/src/utils/prettify.ts b/src/utils/prettify.ts index 3a8d764..698e96d 100644 --- a/src/utils/prettify.ts +++ b/src/utils/prettify.ts @@ -49,14 +49,18 @@ function prettifyXml(xmlInput:string, options: any) { } function prettyXML(str: string, indent: number) { - if (str.startsWith('<')) { + if (!str) return str; + if (str.trim().startsWith('<')) { var result = prettifyXml(str, {indent: indent, newline: '\n'}); return result; - } else + } else { + Logger.warn(`not a valid xml payload`) return str; + } } function prettyJSON(str: string) { + if (!str) return str; try { var obj = JSON.parse(str); return prettyPrint(obj, { @@ -64,8 +68,7 @@ function prettyJSON(str: string) { singleQuotes: false }); } catch (error: any) { - Logger.logDetailedError(`prettyJSON failed, returning original content`, `${error.toString()}`) - if (error.cause?.message) Logger.logDetailedError(``, `${error.cause?.message}`) + Logger.warn(`not a valid json payload`) return str; } } diff --git a/src/utils/stdinread.ts b/src/utils/stdinread.ts new file mode 100644 index 0000000..e1aa089 --- /dev/null +++ b/src/utils/stdinread.ts @@ -0,0 +1,24 @@ +export class StdinRead { + inputArr:string[] = []; + closed = false; + readline = require('readline').createInterface(process.stdin);; + + async getData() { + return new Promise((resolve, reject) => { + this.readline.on('line', (line:string) => { + this.inputArr.unshift(line); + }); + this.readline.on('close', () => { + this.closed = true; + resolve() + }); + this.readline.on('SIGINT', () => { + reject(); + }); + }); + } + + data() { + return this.inputArr.reverse().join('\r\n') + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8555d5d..f63895e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -170,7 +170,7 @@ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== -accepts@~1.3.4, accepts@~1.3.8: +accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -219,49 +219,14 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -apache-crypt@^1.1.2: - version "1.2.6" - resolved "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz" - integrity sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA== - dependencies: - unix-crypt-td-js "^1.1.4" - -apache-md5@^1.0.6: - version "1.1.8" - resolved "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz" - integrity sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA== - arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: @@ -269,83 +234,21 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - ascii-table@^0.0.9: version "0.0.9" resolved "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz" integrity sha512-xpkr6sCDIYTPqzvjG8M3ncw1YOTaloWZOyrUmicoEifBEKzQzt+ooUpRpQ/AbOoJfO/p2ZKiyp79qHThzJDulQ== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async-each@^1.0.1: - version "1.0.6" - resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz" - integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - base64-js@^1.3.1: version "1.5.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -bcryptjs@^2.3.0: - version "2.4.3" - resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz" - integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bl@^4.0.3: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" @@ -357,7 +260,7 @@ bl@^4.0.3: body-parser@1.20.1: version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" @@ -373,22 +276,6 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -396,11 +283,6 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" @@ -411,32 +293,19 @@ buffer@^5.5.0: bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" chalk@^2.3.2: version "2.4.2" @@ -455,40 +324,11 @@ chalk@^4.1.2, chalk@~4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^2.0.4: - version "2.1.8" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -498,14 +338,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -530,68 +362,33 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - commander@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== -component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -connect@^3.6.6: - version "3.7.0" - resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - core-js@^3.26.0: version "3.33.3" resolved "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz" @@ -602,20 +399,12 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cors@latest: - version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -629,11 +418,6 @@ debug@4: dependencies: ms "2.1.2" -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" @@ -646,47 +430,20 @@ deep-extend@^0.6.0: resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -depd@2.0.0, depd@~2.0.0: +depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" @@ -709,11 +466,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" @@ -743,6 +495,18 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -763,32 +527,6 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -event-stream@3.3.4: - version "3.3.4" - resolved "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz" - integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" @@ -796,7 +534,7 @@ expand-template@^2.0.3: express@^4.18.2: version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" @@ -831,35 +569,6 @@ express@^4.18.2: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" @@ -878,13 +587,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@0.11.x: - version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - figures@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" @@ -892,21 +594,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -914,22 +601,9 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -947,23 +621,11 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - fresh@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" @@ -977,11 +639,6 @@ from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" -from@~0: - version "0.1.7" - resolved "https://registry.npmjs.org/from/-/from-0.1.7.tgz" - integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" @@ -997,14 +654,6 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -1015,34 +664,22 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" hasown "^2.0.0" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -1064,12 +701,12 @@ globby@^11.1.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1084,54 +721,23 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/has/-/has-1.0.4.tgz" @@ -1144,16 +750,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -http-auth@3.1.x: - version "3.1.3" - resolved "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz" - integrity sha512-Jbx0+ejo2IOx+cRUYAGS1z6RGc6JfYUNkysZM4u4Sfk1uLlGv814F7/PIjQQAuThLdAWxb74JMGd5J8zex1VQg== - dependencies: - apache-crypt "^1.1.2" - apache-md5 "^1.0.6" - bcryptjs "^2.3.0" - uuid "^3.0.0" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -1165,21 +761,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" @@ -1190,7 +771,7 @@ https-proxy-agent@^5.0.0: iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" @@ -1210,11 +791,6 @@ imurmurhash@^0.1.4: resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" @@ -1235,33 +811,14 @@ into-stream@^6.0.0: ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" - integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-core-module@2.9.0: version "2.9.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" @@ -1276,42 +833,7 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== @@ -1321,66 +843,23 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" - integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== - -isarray@1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -1400,44 +879,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -live-server@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/live-server/-/live-server-1.2.2.tgz" - integrity sha512-t28HXLjITRGoMSrCOv4eZ88viHaBVIjKjdI5PO92Vxlu+twbk6aE0t7dVIaz6ZWkjPilYFV6OSdMYl9ybN2B4w== - dependencies: - chokidar "^2.0.4" - colors "1.4.0" - connect "^3.6.6" - cors latest - event-stream "3.3.4" - faye-websocket "0.11.x" - http-auth "3.1.x" - morgan "^1.9.1" - object-assign latest - opn latest - proxy-middleware latest - send latest - serve-index "^1.9.1" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" @@ -1473,31 +914,14 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz" - integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge2@^1.3.0, merge2@^1.4.1: @@ -1507,28 +931,9 @@ merge2@^1.3.0, merge2@^1.4.1: methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - micromatch@^4.0.4: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" @@ -1542,7 +947,7 @@ mime-db@1.52.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -1564,30 +969,11 @@ minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -morgan@^1.9.1: - version "1.10.0" - resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== - dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -1611,28 +997,6 @@ multistream@^4.1.0: once "^1.4.0" readable-stream "^3.6.0" -nan@^2.12.1: - version "2.18.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" @@ -1664,51 +1028,11 @@ node-localstorage@^3.0.5: dependencies: write-file-atomic "^5.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4, object-assign@latest: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" @@ -1716,18 +1040,6 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -1737,16 +1049,9 @@ once@^1.3.1, once@^1.4.0: opener@^1.5.2: version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -opn@latest: - version "6.0.0" - resolved "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz" - integrity sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ== - dependencies: - is-wsl "^1.1.0" - p-is-promise@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz" @@ -1779,31 +1084,16 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" @@ -1811,7 +1101,7 @@ path-parse@^1.0.7: path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^4.0.0: @@ -1819,13 +1109,6 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz" - integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== - dependencies: - through "~2.3" - picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" @@ -1878,11 +1161,6 @@ pkg@^5.8.1: resolve "^1.22.0" stream-meter "^1.0.4" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - prebuild-install@7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" @@ -1920,17 +1198,12 @@ prompt-sync@^4.2.0: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-middleware@latest: - version "0.15.0" - resolved "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz" - integrity sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q== - pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -1941,7 +1214,7 @@ pump@^3.0.0: qs@6.11.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" @@ -1958,7 +1231,7 @@ range-parser@~1.2.1: raw-body@2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -1976,7 +1249,7 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.1.4: +readable-stream@^2.0.0, readable-stream@^2.1.4: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -1989,7 +1262,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.1.4: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -1998,48 +1271,16 @@ readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== +readline@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz" + integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - resolve@^1.22.0: version "1.22.8" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" @@ -2049,11 +1290,6 @@ resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -2066,26 +1302,19 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== semver@^7.3.5: @@ -2095,7 +1324,7 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" -send@0.18.0, send@latest: +send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== @@ -2114,22 +1343,9 @@ send@0.18.0, send@latest: range-parser "~1.2.1" statuses "2.0.1" -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - serve-static@1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -2137,45 +1353,32 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^4.0.1: version "4.1.0" @@ -2210,101 +1413,16 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - solclientjs@^10.15.0: version "10.15.0" resolved "https://registry.npmjs.org/solclientjs/-/solclientjs-10.15.0.tgz" integrity sha512-6OGJZ6y+LAGACPojImeeiQBbHSFmiimmFzBa43kOQ0HQ26XSbt0ied89YaB3ISQOqzsq2Y1xx0ipKOXYz/5xnw== -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split@0.3: - version "0.3.3" - resolved "https://registry.npmjs.org/split/-/split-0.3.3.tgz" - integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== - dependencies: - through "2" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.4.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" - integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== - dependencies: - duplexer "~0.1.1" - stream-meter@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz" @@ -2399,31 +1517,11 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -through@2, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -2431,16 +1529,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" @@ -2479,17 +1567,12 @@ tunnel-agent@^0.6.0: type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - typescript@^4.7.3: version "4.9.5" resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" @@ -2500,54 +1583,16 @@ undici-types@~5.26.4: resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unix-crypt-td-js@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz" - integrity sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -2563,11 +1608,6 @@ uuid@8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^3.0.0: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuidv4@^6.2.13: version "6.2.13" resolved "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.13.tgz" @@ -2581,7 +1621,7 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -vary@^1, vary@~1.1.2: +vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== @@ -2591,20 +1631,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz"