diff --git a/libraries/botbuilder-core/package.json b/libraries/botbuilder-core/package.json index c0f74a1af8..a052aa5aaf 100644 --- a/libraries/botbuilder-core/package.json +++ b/libraries/botbuilder-core/package.json @@ -35,8 +35,8 @@ "zod": "^3.22.4" }, "devDependencies": { - "@microsoft/bf-chatdown": "^4.15.0", "axios": "^1.7.2", + "mime-types": "^2.1.35", "unzipper": "^0.10.9" }, "scripts": { diff --git a/libraries/botbuilder-core/tests/chatdown.js b/libraries/botbuilder-core/tests/chatdown.js new file mode 100644 index 0000000000..5987511054 --- /dev/null +++ b/libraries/botbuilder-core/tests/chatdown.js @@ -0,0 +1,774 @@ +/** + * Copyright(c) Microsoft Corporation.All rights reserved. + * Licensed under the MIT License. + */ + +/** + * PORTED AND ADAPTED FROM => "@microsoft/bf-chatdown": "^4.15.0" + */ + +/* eslint-disable */ +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const mime = require('mime-types'); +const { ActivityTypes, AttachmentLayoutTypes } = require('botframework-schema'); +const axios = require('axios'); +const NEWLINE = require('os').EOL; + +let activityId = 1; + +const activityfield = { + attachment: 'attachment', + attachmentlayout: 'attachmentlayout', + suggestions: 'suggestions', + herocard: 'herocard', + thumbnailcard: 'thumbnailcard', + mediacard: 'mediacard', + animationcard: 'animationcard', + audiocard: 'audiocard', + videocard: 'videocard', + oauthcard: 'oauthcard', + signincard: 'signincard', + receiptcard: 'receiptcard', +}; + +const instructions = { + delay: 'delay', +}; + +const activitytypes = { + message: 'message', + contactrelationupdate: 'contactRelationUpdate', + conversationupdate: 'conversationUpdate', + typing: 'typing', + ping: 'ping', + endofconversation: 'endOfConversation', + event: 'event', + invoke: 'invoke', + deleteuserdata: 'deleteUserData', + messageupdate: 'messageUpdate', + messagedelete: 'messageDelete', + installationupdate: 'installationUpdate', + messagereaction: 'messageReaction', + suggestion: 'suggestion', +}; + +const base = 'application/vnd.microsoft.card.'; +const cardContentTypes = { + animation: `${base}animation`, + audio: `${base}audio`, + hero: `${base}hero`, + receipt: `${base}receipt`, + thumbnail: `${base}thumbnail`, + signin: `${base}signin`, + oauth: `${base}oauth`, + media: `${base}media`, + video: `${base}video`, + adaptivecard: `${base}adaptive`, +}; +function isCard(contentType) { + return contentType.includes(base); +} + +const consoleColors = { + BgRed: '\x1b[41m', + Reset: '\x1b[0m', +}; + +// Matches [someActivityOrInstruction=value] +const commandRegExp = /(?:\[)([\s\S]*?)(?:])/i; +const configurationRegExp = /^(bot|user|users|channelId)(?:=)/; +const messageTimeGap = 2000; +let now = Date.now(); +now -= now % 1000; // nearest second +let workingDirectory; + +/** + * Entry for dialog parsing. + * + * @param fileContents UTF-8 encoded bytes to parse. + * @param args The k/v pair representing the configuration options + * @returns {Promise} Resolves with an array of Activity objects. + */ +module.exports = async function readContents(fileContents, args = {}) { + if (args.stamp || args.s) { + now = new Date(2015, 9, 15, 12, 0, 0, 0).getTime(); + } + // Resolve file paths based on the input file with a fallback to the cwd + workingDirectory = args.in ? path.dirname(path.resolve(args.in)) : __dirname; + const activities = []; + const lines = fileLineIterator(fileContents.trim() + NEWLINE); + // Aggregate the contents of each line until + // we reach a new activity. + let aggregate = ''; + // Read each line, derive activities with messages, then + // return them as the payload + const conversationId = getHashCode(fileContents); + + args.bot = 'bot'; + args.users = []; + let inHeader = true; + for (const line of lines) { + // skip line if it is just a comment + if (line.indexOf('>') === 0) continue; + + // pick up settings from the first lines + if (inHeader && configurationRegExp.test(line)) { + const [optionName, value, ...rest] = line.trim().split('='); + if (rest.length) { + throw new Error( + 'Malformed configurations options detected. Options must be in the format optionName=optionValue' + ); + } + switch (optionName.trim()) { + case 'user': + case 'users': + args.users = value.split(','); + break; + case 'bot': + args.bot = value.trim(); + break; + } + continue; + } + + if (inHeader) { + inHeader = false; + if (!Array.isArray(args.users) || !args.users.length) args.users = ['user']; + + // starting the transcript, initialize the bot/user data accounts + initConversation(args, conversationId, activities); + } + + // process transcript lines + if (args.newMessageRegEx.test(line)) { + // process aggregate activites + aggregate = aggregate.trim(); + if (aggregate.length > 0) { + const newActivities = await readCommandsFromAggregate(args, aggregate); + if (newActivities) { + activities.push(...newActivities); + } + } + + const matches = args.newMessageRegEx.exec(line); + const speaker = matches[1]; + const customRecipient = matches[3]; + args.from = args.accounts[speaker.toLowerCase()]; + + if (customRecipient) { + args.recipient = args.accounts[customRecipient.toLowerCase()]; + } else { + // pick recipient based on role + if (args.from.role == 'bot') { + // default for bot is last user + args.recipient = args.accounts[args.user.toLowerCase()]; + } else { + // default recipient for a user is the bot + args.recipient = args.accounts[args.bot.toLowerCase()]; + // remember this user as last user to speak + args.user = args.from.name; + args.accounts.user = args.accounts[args.user.toLowerCase()]; + } + } + // aggregate starts new with this line + aggregate = line.substr(matches[0].length).trim() + NEWLINE; + } else { + // Not a new message but could contain + // an activity on the line by itself. + aggregate += line + NEWLINE; + } + } + + // end of file, process aggregate + if (aggregate && aggregate.trim().length > 0) { + const newActivities = await readCommandsFromAggregate(args, aggregate); + if (newActivities) { + activities.push(...newActivities); + } + } + return activities; +}; + +function initConversation(args, conversationId, activities) { + args.conversation = new ConversationAccount({ id: conversationId }); + args.accounts = {}; + args.accounts.bot = new ChannelAccount({ id: getHashCode(args.bot), name: args.bot, role: 'bot' }); + args.accounts[args.bot.toLowerCase()] = args.accounts.bot; + + // first activity should be a ConversationUpdate, create and add it + const conversationUpdate = createConversationUpdate( + args, + /* membersAdded */ [args.accounts.bot], + /* membersRemoved*/ [] + ); + + for (let user of args.users) { + user = user.trim(); + args.accounts[user.toLowerCase()] = new ChannelAccount({ id: getHashCode(user), name: user, role: 'user' }); + // conversationUpdate.membersAdded.push(args.accounts[user.toLowerCase()]); + if (!args.user) { + // first user is default user + args.user = user; + args.accounts.user = args.accounts[user.toLowerCase()]; + } + } + conversationUpdate.recipient = args.accounts.bot; + conversationUpdate.from = args.accounts.user; + + // define matching statements regex for users + args.newMessageRegEx = new RegExp( + `^(${args.users.join('|')}|${args.bot}|bot|user)(->(${args.users.join('|')}))??:`, + 'i' + ); + activities.push(conversationUpdate); +} + +/** + * create ConversationUpdate Activity + * + * @param {*} args + * @param {ChannelAccount} from + * @param {ChannelAccount[]} membersAdded + * @param {ChannelAccount[]} membersRemoved + */ +function createConversationUpdate(args, membersAdded, membersRemoved) { + const conversationUpdateActivity = createActivity({ + type: activitytypes.conversationupdate, + recipient: args[args.botId], + conversationId: args.conversation.id, + }); + conversationUpdateActivity.membersAdded = membersAdded || []; + conversationUpdateActivity.membersRemoved = membersRemoved || []; + conversationUpdateActivity.timestamp = getIncrementedDate(100); + return conversationUpdateActivity; +} + +/** + * Reads activities from a text aggregate. Aggregates + * form when multiple activities occur in the context of a + * single participant as is the case for attachments. + * + * @param {string} aggregate The aggregate text to derive activities from. + * @param {Activity} currentActivity The Activity currently in context + * @param {string} recipient The recipient of the Activity + * @param {string} from The sender of the Activity + * @param {string} conversationId The id of the channel + * + * @returns {Promise<*>} Resolves to the number of new activities encountered or null if no new activities resulted + */ +async function readCommandsFromAggregate(args, aggregate) { + const newActivities = []; + commandRegExp.lastIndex = 0; + let result; + let delay = messageTimeGap; + let currentActivity = createActivity({ + type: activitytypes.Message, + from: args.from, + recipient: args.recipient, + conversationId: args.conversation.id, + }); + currentActivity.text = ''; + while ((result = commandRegExp.exec(aggregate))) { + // typeOrField should always be listed first + const match = result[1]; // result[] doesn't have [] on it + const lines = match.split(NEWLINE); + const split = lines[0].indexOf('='); + const typeOrField = split > 0 ? lines[0].substring(0, split).trim() : lines[0].trim(); + let rest = split > 0 ? lines[0].substring(split + 1).trim() : undefined; + if (lines.length > 1) rest = match.substr(match.indexOf(NEWLINE) + NEWLINE.length); + const type = activitytypes[typeOrField.toLowerCase()]; + const field = activityfield[typeOrField.toLowerCase()]; + const instruction = instructions[typeOrField.toLowerCase()]; + // This isn't an activity - bail + if (!type && !field && !instruction) { + // skip unknown tag + const value = aggregate.substr(0, result.index + result[0].length); + currentActivity.text += value; + aggregate = aggregate.substring(value.length); + continue; + } + + // Indicates a new activity - + // As more activity types are supported, this should + // become a util or helper class. + if (type) { + const text = aggregate.substr(0, result.index).trim(); + if (text.length > 0) { + currentActivity.text = text; + currentActivity.timestamp = getIncrementedDate(delay); + newActivities.push(currentActivity); + // reset + delay = messageTimeGap; + currentActivity = createActivity({ + type: activitytypes.Message, + from: args.from, + recipient: args.recipient, + conversationId: args.conversation.id, + }); + currentActivity.text = ''; + } + aggregate = aggregate.substr(result.index); + + switch (type) { + case activitytypes.typing: { + const newActivity = createActivity({ + type, + recipient: args.recipient, + from: args.from, + conversationId: args.conversation.id, + }); + newActivity.timestamp = getIncrementedDate(100); + newActivities.push(newActivity); + break; + } + case activitytypes.conversationupdate: + processConversationUpdate(args, newActivities, rest); + break; + } + } else if (instruction) { + switch (instruction) { + case instructions.delay: + delay = parseInt(rest); + break; + } + } else if (field) { + // As more activity fields are supported, + // this should become a util or helper class. + switch (field) { + case activityfield.attachment: + await addAttachment(currentActivity, rest); + break; + case activityfield.attachmentlayout: + addAttachmentLayout(currentActivity, rest); + break; + case activityfield.suggestions: + addSuggestions(currentActivity, rest); + break; + case activityfield.basiccard: + case activityfield.herocard: + addCard(cardContentTypes.hero, currentActivity, rest); + break; + case activityfield.thumbnailcard: + addCard(cardContentTypes.thumbnail, currentActivity, rest); + break; + case activityfield.animationcard: + addCard(cardContentTypes.animation, currentActivity, rest); + break; + case activityfield.mediacard: + addCard(cardContentTypes.media, currentActivity, rest); + break; + case activityfield.audiocard: + addCard(cardContentTypes.audio, currentActivity, rest); + break; + case activityfield.videocard: + addCard(cardContentTypes.video, currentActivity, rest); + break; + // case activityfield.receiptcard: + // addCard(cardContentTypes.receipt, currentActivity, rest); + // break; + case activityfield.signincard: + addCard(cardContentTypes.signin, currentActivity, rest); + break; + case activityfield.oauthcard: + addCard(cardContentTypes.oauth, currentActivity, rest); + break; + } + } + // Trim off this activity or activity field and continue. + aggregate = aggregate.replace(`[${result[1]}]`, ''); + commandRegExp.lastIndex = 0; + } + currentActivity.text += aggregate.trim(); + currentActivity.timestamp = getIncrementedDate(delay); + + // if we have content, then add it + if ( + currentActivity.text.length > 0 || + (currentActivity.attachments && currentActivity.attachments.length > 0) || + (currentActivity.suggestedActions && currentActivity.suggestedActions.actions.length > 0) + ) { + newActivities.push(currentActivity); + } + return newActivities.length ? newActivities : null; +} + +function processConversationUpdate(args, activities, rest) { + const conversationUpdate = createConversationUpdate( + args, + /*from*/ null, + /* membersAdded*/ [], + /* membersRemoved*/ [] + ); + conversationUpdate.timestamp = getIncrementedDate(100); + + const lines = rest.split(NEWLINE); + for (const line of lines) { + const start = line.indexOf('='); + const property = line.substr(0, start).trim().toLowerCase(); + const value = line.substr(start + 1).trim(); + switch (property) { + case 'added': + case 'membersadded': { + const membersAdded = value.split(','); + for (let memberAdded of membersAdded) { + memberAdded = memberAdded.trim(); + + // add the account if we don't know it already + if (!args.accounts[memberAdded.toLowerCase()]) { + args.accounts[memberAdded.toLowerCase()] = new ChannelAccount({ + id: getHashCode(memberAdded), + name: memberAdded, + role: 'user', + }); + } + + conversationUpdate.membersAdded.push(args.accounts[memberAdded.toLowerCase()]); + } + break; + } + case 'removed': + case 'membersremoved': { + const membersRemoved = value.split(','); + for (let memberRemoved of membersRemoved) { + memberRemoved = memberRemoved.trim(); + conversationUpdate.membersRemoved.push(args.accounts[memberRemoved.toLowerCase()]); + } + break; + } + default: + throw new Error(`Unknown ConversationUpdate Property ${property}`); + } + } + activities.push(conversationUpdate); +} + +function addAttachmentLayout(currentActivity, rest) { + if (rest && rest.toLowerCase() == AttachmentLayoutTypes.Carousel) + currentActivity.attachmentLayout = AttachmentLayoutTypes.Carousel; + else if (rest && rest.toLowerCase() == AttachmentLayoutTypes.List) + currentActivity.attachmentLayout = AttachmentLayoutTypes.List; + else console.error(`AttachmentLayout of ${rest[0]} is not List or Carousel`); +} + +/** + * Add suggested actions support + * Example: [suggestions=Option 1|Option 2|Option 3] + * + * @param {*} currentActivity + * @param {*} rest + */ +function addSuggestions(currentActivity, rest) { + currentActivity.suggestedActions = { actions: [] }; + const actions = rest.split('|'); + for (const action of actions) { + currentActivity.suggestedActions.actions.push({ title: action.trim(), type: 'imBack', value: action.trim() }); + } +} + +/** + * Add card + * Example: [herocard= + * Title:xxx + * subtitle: xxx + * Text: xxxx + * image: url + * Buttons: Option 1|Option 2|Option 3] + * + * @param {*} currentActivity + * @param {*} rest + */ +function addCard(contentType, currentActivity, rest) { + const card = { buttons: [] }; + const lines = rest.split('\n'); + for (const line of lines) { + const start = line.indexOf('='); + const property = line.substr(0, start).trim().toLowerCase(); + const value = line.substr(start + 1).trim(); + switch (property) { + case 'title': + case 'subtitle': + case 'text': + case 'aspect': + case 'value': + case 'connectioname': + card[property] = value; + break; + case 'image': + card.image = { url: value }; + break; + case 'images': + if (!card.images) { + card.images = []; + } + card.images.push({ url: value }); + break; + case 'media': + if (!card.media) card.media = []; + card.media.push({ url: value }); + break; + case 'buttons': + for (const button of value.split('|')) { + card.buttons.push({ title: button.trim(), type: 'imBack', value: button.trim() }); + } + break; + case 'autostart': + case 'sharable': + case 'autoloop': + card[property] = value.toLowerCase() == 'true'; + break; + case '': + break; + default: + console.warn( + `${consoleColors.BgRed}%s${consoleColors.Reset}`, + `Skipping unknown card property ${property}\n${line}` + ); + break; + } + } + const attachment = { contentType: contentType, content: card }; + (currentActivity.attachments || (currentActivity.attachments = [])).push(attachment); +} + +/** + * Adds an attachment to the activity. If a mimetype is + * specified, it is used as is. Otherwise, it is derived + * from the file extension. + * + * @param {Activity} activity The activity to add the attachment to + * @param {*} contentUrl contenturl + * @param {*} contentType contentType + * + * @returns {Promise} The new number of attachments for the activity + */ +async function addAttachment(activity, arg) { + const parts = arg.trim().split(' '); + let contentUrl = parts[0].trim(); + let contentType = parts.length > 1 ? parts[1].trim() : undefined; + if (contentType) { + contentType = contentType.toLowerCase(); + if (cardContentTypes[contentType]) contentType = cardContentTypes[contentType]; + } else { + contentType = mime.lookup(contentUrl) || cardContentTypes[path.extname(contentUrl)]; + + if (!contentType && contentUrl && contentUrl.indexOf('http') == 0) { + const response = await axios.get(contentUrl, { method: 'HEAD' }); + contentType = response.headers['content-type'].split(';')[0]; + } + } + + const charset = mime.charset(contentType); + + // if not a url + if (contentUrl.indexOf('http') != 0) { + // read the file + let content = await readAttachmentFile(contentUrl, contentType); + // if it is not a card + if (!isCard(contentType) && charset !== 'UTF-8') { + // send as base64 + contentUrl = `data:${contentType};base64,${Buffer.from(content).toString('base64')}`; + content = undefined; + } else { + contentUrl = undefined; + } + return (activity.attachments || (activity.attachments = [])).push( + new Attachment({ contentType, contentUrl, content }) + ); + } + // send as contentUrl + return (activity.attachments || (activity.attachments = [])).push(new Attachment({ contentType, contentUrl })); +} + +/** + * Utility function for reading the attachment + * + * @param fileLocation + * @param contentType + * @returns {*} + */ +async function readAttachmentFile(fileLocation, contentType) { + let resolvedFileLocation = path.join(workingDirectory, fileLocation); + const exists = fs.existsSync(resolvedFileLocation); + + // fallback to cwd + if (!exists) { + resolvedFileLocation = path.resolve(fileLocation); + } + // Throws if the fallback does not exist. + const content = fs.readFileSync(resolvedFileLocation); + if (contentType.includes('json') || isCard(contentType)) { + return JSON.parse(content); + } else { + return content; + } +} + +/** + * Utility for creating a new serializable Activity. + * + * @param {ActivityTypes} type The Activity type + * @param {string} to The recipient of the Activity + * @param {string} from The sender of the Activity + * @param {string} conversationId The id of the conversation + * @returns {Activity} The newly created activity + */ +function createActivity({ type = ActivityTypes.Message, recipient, from, conversationId }) { + const activity = new Activity({ from, recipient, type, id: '' + activityId++ }); + activity.conversation = new ConversationAccount({ id: conversationId }); + return activity; +} + +function getIncrementedDate(byThisAmount = messageTimeGap) { + return new Date((now += byThisAmount)).toISOString(); +} + +/** + * Generator producing a well-known Symbol for + * iterating each line in the UTF-8 encoded string. + * + * @param {string} fileContents The contents containing the lines to iterate. + */ +function* fileLineIterator(fileContents) { + const parts = fileContents.split(/\r?\n/); + for (const part of parts) { + yield part; + } +} + +function getHashCode(contents) { + return crypto.createHash('sha1').update(contents).digest('base64'); +} + +class Activity { + /** + * + * @property {Attachment[]} attachments + */ + + /** + * @property text + */ + + /** + * @property timestamp + */ + + /** + * @property id + */ + + /** + * @property type + */ + + /** + * @property from + */ + + /** + * @property recipient + */ + + /** + * @property conversation + */ + + /** + * + * @param attachments + * @param conversation + * @param id + * @param recipient + * @param from + * @param text + * @param timestamp + * @param type + * @param channelId + */ + constructor({ + attachments, + conversation, + id, + recipient, + from, + text, + timestamp, + type, + channelId = 'chatdown', + } = {}) { + Object.assign(this, { attachments, conversation, id, recipient, from, text, timestamp, type, channelId }); + } +} + +class ChannelAccount { + /** + * @property id + */ + + /** + * @property name + */ + + /** + * @property role + */ + + /** + * + * @param id + * @param name + * @param role + */ + constructor({ id = 'joe@smith.com', name, role } = {}) { + Object.assign(this, { id, name, role }); + } +} + +class ConversationAccount { + /** + * @property isGroup + */ + /** + * @property name + */ + + /** + * @property id + */ + + /** + * + * @param isGroup + * @param name + * @param id + */ + constructor({ isGroup, name, id } = {}) { + Object.assign(this, { isGroup, name, id }); + } +} + +class Attachment { + /** + * @property contentType + */ + + /** + * @property contentUrl + */ + + /** + * @property content + */ + + /** + * + * @param contentType + * @param contentUrl + * @param content + */ + constructor({ contentType = '', contentUrl = undefined, content = undefined } = {}) { + Object.assign(this, { contentType, contentUrl, content }); + } +} diff --git a/libraries/botbuilder-core/tests/transcriptUtilities.js b/libraries/botbuilder-core/tests/transcriptUtilities.js index f78214e320..1c1614dc8c 100644 --- a/libraries/botbuilder-core/tests/transcriptUtilities.js +++ b/libraries/botbuilder-core/tests/transcriptUtilities.js @@ -13,7 +13,7 @@ const axios = require('axios'); const unzip = require('unzipper'); const rimraf = require('rimraf'); -const chatdown = require('@microsoft/bf-chatdown'); +const chatdown = require('./chatdown'); const { TestAdapter, MemoryStorage, UserState, ConversationState, AutoSaveStateMiddleware } = require('../'); @@ -39,19 +39,10 @@ function getActivitiesFromTranscript(transcriptFilePath) { * * @param {string} chatFilePath Relative or absolute path to .chat file. */ -function getActivitiesFromChat(chatFilePath) { - return readFileAsync(chatFilePath, { encoding: 'utf8' }) - .then((chat) => chatdown(chat, { in: chatFilePath })) - .then((activities) => { - // Clean the last line break (\n) from the last activity.text - // TODO: Remove once issue is resolved: https://github.com/Microsoft/botbuilder-tools/issues/200 - const last = activities[activities.length - 1]; - if (last) { - last.text = last.text.trimRight('\n'); - } - - return activities; - }); +async function getActivitiesFromChat(chatFilePath) { + const chat = await readFileAsync(chatFilePath, { encoding: 'utf8' }); + const activities = await chatdown(chat, { in: chatFilePath }); + return activities; } /** @@ -63,17 +54,10 @@ function getActivitiesFromChat(chatFilePath) { * @param {Function} middlewareRegistrationFun (Optional) Function which accepts the testAdapter, conversationState and userState. */ function assertBotLogicWithBotBuilderTranscript(relativeTranscriptPath, botLogicFactoryFun, middlewareRegistrationFun) { - return function (mochaDoneCallback) { - checkTranscriptResourcesExist() - .then((transcriptsBasePath) => { - const transcriptPath = path.join(transcriptsBasePath, relativeTranscriptPath); - assertBotLogicWithTranscript( - transcriptPath, - botLogicFactoryFun, - middlewareRegistrationFun - )(mochaDoneCallback); - }) - .catch(mochaDoneCallback); + return async function () { + const transcriptsBasePath = await checkTranscriptResourcesExist(); + const transcriptPath = path.join(transcriptsBasePath, relativeTranscriptPath); + return assertBotLogicWithTranscript(transcriptPath, botLogicFactoryFun, middlewareRegistrationFun); }; } @@ -88,28 +72,25 @@ function assertBotLogicWithBotBuilderTranscript(relativeTranscriptPath, botLogic async function assertBotLogicWithTranscript(transcriptPath, botLogicFactoryFun, middlewareRegistrationFun) { const loadFun = transcriptPath.endsWith('.chat') ? getActivitiesFromChat : getActivitiesFromTranscript; - // return a Mocha Test Definition, which accepts the done callback to indicate success or error - return async function () { - const activities = loadFun(transcriptPath); - // State - const storage = new MemoryStorage(); - const conversationState = new ConversationState(storage); - const userState = new UserState(storage); - const state = new AutoSaveStateMiddleware(conversationState, userState); - - // Bot logic + adapter - const botLogic = botLogicFactoryFun(conversationState, userState); - const adapter = new TestAdapter(botLogic); - adapter.use(state); - - // Middleware registration - if (typeof middlewareRegistrationFun === 'function') { - middlewareRegistrationFun(adapter, conversationState, userState); - } - - // Assert chain of activities - return adapter.testActivities(activities); - }; + const activities = await loadFun(transcriptPath); + // State + const storage = new MemoryStorage(); + const conversationState = new ConversationState(storage); + const userState = new UserState(storage); + const state = new AutoSaveStateMiddleware(conversationState, userState); + + // Bot logic + adapter + const botLogic = botLogicFactoryFun(conversationState, userState); + const adapter = new TestAdapter(botLogic); + adapter.use(state); + + // Middleware registration + if (typeof middlewareRegistrationFun === 'function') { + middlewareRegistrationFun(adapter, conversationState, userState); + } + + // Assert chain of activities + return adapter.testActivities(activities); } // **** PRIVATE **** // diff --git a/libraries/botbuilder-dialogs-adaptive-testing/package.json b/libraries/botbuilder-dialogs-adaptive-testing/package.json index ae5e039f55..2eea2f7e9e 100644 --- a/libraries/botbuilder-dialogs-adaptive-testing/package.json +++ b/libraries/botbuilder-dialogs-adaptive-testing/package.json @@ -39,8 +39,7 @@ }, "devDependencies": { "botbuilder": "4.1.6", - "@microsoft/recognizers-text-suite": "1.1.4", - "@types/nock": "^11.1.0" + "@microsoft/recognizers-text-suite": "1.1.4" }, "author": "Microsoft", "license": "MIT", diff --git a/libraries/botbuilder-dialogs-adaptive-testing/tests/adaptiveDialog.test.js b/libraries/botbuilder-dialogs-adaptive-testing/tests/adaptiveDialog.test.js index a2b1a500c1..bba70f36c1 100644 --- a/libraries/botbuilder-dialogs-adaptive-testing/tests/adaptiveDialog.test.js +++ b/libraries/botbuilder-dialogs-adaptive-testing/tests/adaptiveDialog.test.js @@ -147,6 +147,10 @@ describe('AdaptiveDialogTests', function () { await TestUtils.runTestScript(resourceExplorer, 'AdaptiveDialog_TopLevelFallbackMultipleActivities'); }); + it('TestOnQnAMatch', async function () { + await TestUtils.runTestScript(resourceExplorer, 'AdaptiveDialog_OnQnAMatch'); + }); + it('TestBindingTwoWayAcrossAdaptiveDialogs', async function () { await TestUtils.runTestScript(resourceExplorer, 'TestBindingTwoWayAcrossAdaptiveDialogs'); }); diff --git a/libraries/botbuilder-dialogs-adaptive-testing/tests/resources/AdaptiveDialogTests/AdaptiveDialog_OnQnAMatch.test.dialog b/libraries/botbuilder-dialogs-adaptive-testing/tests/resources/AdaptiveDialogTests/AdaptiveDialog_OnQnAMatch.test.dialog new file mode 100644 index 0000000000..dea824b31a --- /dev/null +++ b/libraries/botbuilder-dialogs-adaptive-testing/tests/resources/AdaptiveDialogTests/AdaptiveDialog_OnQnAMatch.test.dialog @@ -0,0 +1,74 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "outer", + "autoEndDialog": false, + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "BeginIntent", + "pattern": "begin" + }, + { + "intent": "QnAMatch", + "pattern": "qna" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "BeginIntent", + "actions": [ + { + "$kind": "Microsoft.TextInput", + "maxTurnCount": 3, + "alwaysPrompt": true, + "allowInterruptions": false, + "prompt": "Which event should I emit?", + "validations": [] + }, + { + "$kind": "Microsoft.EmitEvent", + "eventName": "activityReceived", + "eventValue": "=turn.activity", + "handledProperty": "turn.eventHandled", + "bubbleEvent": true + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "QnAMatch", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "QnAMatch event triggered" + } + ] + } + ], + "defaultResultProperty": "dialog.result" + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "begin" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Which event should I emit?" + }, + { + "$kind": "Microsoft.Test.UserSays", + "text": "qna" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "QnAMatch event triggered" + } + ] +} \ No newline at end of file diff --git a/libraries/botbuilder-dialogs-adaptive/.eslintrc.json b/libraries/botbuilder-dialogs-adaptive/.eslintrc.json index 0fd2056611..6e210e057e 100644 --- a/libraries/botbuilder-dialogs-adaptive/.eslintrc.json +++ b/libraries/botbuilder-dialogs-adaptive/.eslintrc.json @@ -1,4 +1,8 @@ { "extends": "../../.eslintrc.json", - "plugins": ["only-warn"] + "plugins": ["only-warn"], + "ignorePatterns": [ + "tests/choiceSet.test.js", + "tests/expressionProperty.test.js" + ] } diff --git a/libraries/botbuilder-dialogs-adaptive/etc/botbuilder-dialogs-adaptive.api.md b/libraries/botbuilder-dialogs-adaptive/etc/botbuilder-dialogs-adaptive.api.md index ae1372d70b..6c1b94edda 100644 --- a/libraries/botbuilder-dialogs-adaptive/etc/botbuilder-dialogs-adaptive.api.md +++ b/libraries/botbuilder-dialogs-adaptive/etc/botbuilder-dialogs-adaptive.api.md @@ -1877,6 +1877,8 @@ export class OnQnAMatch extends OnIntent { // (undocumented) static $kind: string; constructor(actions?: Dialog[], condition?: string); + // (undocumented) + static qnaMatchIntent: string; } // @public diff --git a/libraries/botbuilder-dialogs-adaptive/src/adaptiveDialog.ts b/libraries/botbuilder-dialogs-adaptive/src/adaptiveDialog.ts index 0b44e000cd..ff69c5b504 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/adaptiveDialog.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/adaptiveDialog.ts @@ -42,7 +42,7 @@ import isEqual from 'lodash/isEqual'; import { ActionContext } from './actionContext'; import { AdaptiveDialogState } from './adaptiveDialogState'; import { AdaptiveEvents } from './adaptiveEvents'; -import { OnCondition, OnIntent } from './conditions'; +import { OnCondition, OnIntent, OnQnAMatch } from './conditions'; import { DialogSetConverter, LanguageGeneratorConverter, RecognizerConverter } from './converters'; import { EntityAssignment } from './entityAssignment'; import { EntityAssignmentComparer } from './entityAssignmentComparer'; @@ -547,16 +547,28 @@ export class AdaptiveDialog extends DialogContainer im break; case AdaptiveEvents.activityReceived: if (activity.type === ActivityTypes.Message) { - // Recognize utterance (ignore handled) - const recognizeUtteranceEvent: DialogEvent = { - name: AdaptiveEvents.recognizeUtterance, - value: activity, - bubble: false, - }; - await this.processEvent(actionContext, recognizeUtteranceEvent, true); + let recognized = actionContext.state.getValue(TurnPath.recognized); + const activityProcessed = actionContext.state.getValue(TurnPath.activityProcessed); + + // Avoid reprocessing recognized activity for OnQnAMatch. + const isOnQnAMatchProcessed = + activityProcessed && + Object.prototype.hasOwnProperty.call(recognized?.intents, OnQnAMatch.qnaMatchIntent) === + true; + + if (!isOnQnAMatchProcessed) { + // Recognize utterance (ignore handled) + const recognizeUtteranceEvent: DialogEvent = { + name: AdaptiveEvents.recognizeUtterance, + value: activity, + bubble: false, + }; + await this.processEvent(actionContext, recognizeUtteranceEvent, true); + + // Emit leading RecognizedIntent event + recognized = actionContext.state.getValue(TurnPath.recognized); + } - // Emit leading RecognizedIntent event - const recognized = actionContext.state.getValue(TurnPath.recognized); const recognizedIntentEvent: DialogEvent = { name: AdaptiveEvents.recognizedIntent, value: recognized, diff --git a/libraries/botbuilder-dialogs-adaptive/src/conditions/onQnAMatch.ts b/libraries/botbuilder-dialogs-adaptive/src/conditions/onQnAMatch.ts index f2d90bd82a..1f79148926 100644 --- a/libraries/botbuilder-dialogs-adaptive/src/conditions/onQnAMatch.ts +++ b/libraries/botbuilder-dialogs-adaptive/src/conditions/onQnAMatch.ts @@ -8,13 +8,13 @@ import { Dialog } from 'botbuilder-dialogs'; import { OnIntent } from './onIntent'; -const qnaMatchIntent = 'QnAMatch'; - /** * Actions triggered when a MessageUpdateActivity is received. */ export class OnQnAMatch extends OnIntent { static $kind = 'Microsoft.OnQnAMatch'; + // this is a duplicate of QnAMakerRecognizer.QnAMatchIntent, but copying this here removes need to have dependency between QnA and Adaptive assemblies. + static qnaMatchIntent = 'QnAMatch'; /** * Initializes a new instance of the [OnQnAMatch](xref:botbuilder-dialogs-adaptive.OnQnAMatch) class. @@ -23,6 +23,6 @@ export class OnQnAMatch extends OnIntent { * @param condition Optional. Condition which needs to be met for the actions to be executed. */ constructor(actions: Dialog[] = [], condition?: string) { - super(qnaMatchIntent, [], actions, condition); + super(OnQnAMatch.qnaMatchIntent, [], actions, condition); } } diff --git a/libraries/botbuilder-dialogs-declarative/package.json b/libraries/botbuilder-dialogs-declarative/package.json index 8e83bd25a0..51f47d868a 100644 --- a/libraries/botbuilder-dialogs-declarative/package.json +++ b/libraries/botbuilder-dialogs-declarative/package.json @@ -30,7 +30,7 @@ "dependencies": { "botbuilder-dialogs": "4.1.6", "botbuilder-stdlib": "4.1.6", - "chokidar": "^3.4.0", + "chokidar": "^3.6.0", "zod": "^3.22.4" }, "devDependencies": { diff --git a/package.json b/package.json index 66b667bcf4..8d9d5cae8e 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "functional-test": "yarn build && yarn workspace functional-tests test", "lint": "wsrun -m -l lint --max-warnings=0", "package": "wsrun -e -t -l --if is-not-private --bin yarn pack", - "test": "npm-run-all build test:mocha test:runtime test:runtime test:nyc:report", + "test": "npm-run-all build test:mocha test:runtime test:runtime test:mocha:transcripts test:nyc:report", "test:compat": "wsrun -e -m -t test:compat", "test:consumer": "yarn workspace consumer-test test", "test:devops": "npm-run-all test:mocha:junit test:nyc:cobertura", @@ -29,6 +29,7 @@ "test:mocha": "nyc --silent mocha \"libraries/@(adaptive*|bot*)/tests/**/*.test.js\" --exit --check-leaks", "test:mocha:junit": "yarn test:mocha --reporter mocha-junit-reporter --reporter-options includePending=true", "test:mocha:min": "yarn test:mocha --reporter dot", + "test:mocha:transcripts": "yarn workspace transcript-tests test", "test:nyc:cobertura": "nyc report --reporter=cobertura", "test:nyc:lcov": "nyc report --reporter=text-lcov > .lcov.info", "test:nyc:report": "nyc report", diff --git a/testing/browser-functional/browser-echo-bot/yarn.lock b/testing/browser-functional/browser-echo-bot/yarn.lock index c413798d87..f7ad399e68 100644 --- a/testing/browser-functional/browser-echo-bot/yarn.lock +++ b/testing/browser-functional/browser-echo-bot/yarn.lock @@ -1957,20 +1957,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - browserslist@^4.21.10: version "4.23.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" @@ -2906,13 +2899,6 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" diff --git a/testing/transcripts/tests/core.test.js b/testing/transcripts/tests/core.test.js index 290fe59f5e..37c3f8c44c 100644 --- a/testing/transcripts/tests/core.test.js +++ b/testing/transcripts/tests/core.test.js @@ -1,7 +1,7 @@ -const assert = require('assert'); -const assertBotLogicWithTranscript = require('../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; +const { ActivityTypes } = require('botframework-schema'); +const assertBotLogicWithTranscript = require('../../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; -xdescribe(`Core Tests using transcripts`, function () { +describe(`Core Tests using transcripts`, function () { this.timeout(10000); it('BotAdapted_Bracketing', assertBotLogicWithTranscript('CoreTests/BotAdapted_Bracketing.chat', BotAdapted_Bracketing_Logic, (adapter) => { @@ -12,6 +12,11 @@ xdescribe(`Core Tests using transcripts`, function () { function BotAdapted_Bracketing_Logic(state) { return async (context) => { + if(context.activity.type == ActivityTypes.ConversationUpdate){ + await context.sendActivity(context.activity.type); + return; + } + var userMessage = context.activity.text; switch (userMessage) { case 'use middleware': diff --git a/testing/transcripts/tests/coreExtensions.test.js b/testing/transcripts/tests/coreExtensions.test.js index bc2dfbd8ec..e092e10dea 100644 --- a/testing/transcripts/tests/coreExtensions.test.js +++ b/testing/transcripts/tests/coreExtensions.test.js @@ -1,48 +1,63 @@ -const assert = require('assert'); -const assertBotLogicWithTranscript = require('../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; +const assertBotLogicWithTranscript = require('../../../libraries/botbuilder-core/tests/transcriptUtilities') + .assertBotLogicWithBotBuilderTranscript; -xdescribe(`Core Extensions Tests using transcripts`, function () { +describe(`Core Extensions Tests using transcripts`, function () { this.timeout(10000); - it('UserStateTest', assertBotLogicWithTranscript('CoreExtensionsTests/UserStateTest.chat', (conversationState, userState) => TestLogic(userState))); + it( + 'UserStateTest', + assertBotLogicWithTranscript('CoreExtensionsTests/UserStateTest.chat', (conversationState, userState) => + TestLogic(userState) + ) + ); - it('ConversationStateTest', assertBotLogicWithTranscript('CoreExtensionsTests/ConversationStateTest.chat', (conversationState, userState) => TestLogic(conversationState))); + it( + 'ConversationStateTest', + assertBotLogicWithTranscript('CoreExtensionsTests/ConversationStateTest.chat', (conversationState, userState) => + TestLogic(conversationState) + ) + ); }); function TestLogic(botState) { return async (context) => { var cmd = getCommand(context); + if (!cmd.name) { + return; + } + + await botState.load(context); const state = botState.get(context); switch (cmd.name) { case 'delete': delete state.value; - await botState.write(context); + await botState.saveChanges(context); break; case 'set': state.value = cmd.value; - await botState.write(context); + await botState.saveChanges(context); break; case 'read': await context.sendActivity(`value:${state.value || ''}`); break; default: - await context.sendActivity('bot message') + await context.sendActivity('bot message'); break; } - } + }; } function getCommand(context) { - var message = context.activity.text.split(' '); + var message = context.activity.text ? context.activity.text.split(' ') : []; if (message.length > 1) { return { name: message[0], - value: message[1] + value: message[1], }; } return { name: message[0], - value: null + value: null, }; -} \ No newline at end of file +} diff --git a/testing/transcripts/tests/dialogs.test.js b/testing/transcripts/tests/dialogs.test.js index 34e1e24958..ed2be210fc 100644 --- a/testing/transcripts/tests/dialogs.test.js +++ b/testing/transcripts/tests/dialogs.test.js @@ -1,12 +1,19 @@ -const assert = require('assert'); -//const { createChoicePrompt, ListStyle } = require('botbuilder-prompts'); +const { ActivityTypes } = require('botbuilder'); const { - DialogSet, TextPrompt, ConfirmPrompt, ChoicePrompt, DatetimePrompt, NumberPrompt, - AttachmentPrompt, FoundChoice, Choice, FoundDatetime + DialogSet, + TextPrompt, + ConfirmPrompt, + ChoicePrompt, + NumberPrompt, + AttachmentPrompt, + WaterfallDialog, + ListStyle, + DateTimePrompt, } = require('botbuilder-dialogs'); -const assertBotLogicWithTranscript = require('../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; +const assertBotLogicWithTranscript = require('../../../libraries/botbuilder-core/tests/transcriptUtilities') + .assertBotLogicWithBotBuilderTranscript; -xdescribe(`Prompt Tests using transcripts`, function () { +describe(`Prompt Tests using transcripts`, function () { this.timeout(10000); it('AttachmentPrompt', assertBotLogicWithTranscript('DialogsTests/AttachmentPrompt.chat', AttachmentPromptLogic)); @@ -21,282 +28,344 @@ xdescribe(`Prompt Tests using transcripts`, function () { it('Text', assertBotLogicWithTranscript('DialogsTests/TextPrompt.chat', TextPromptCustomValidatorLogic)); - it('Waterfall', assertBotLogicWithTranscript('DialogsTests/Waterfall.chat', WaterfallLogic)) - it('WaterfallPrompt', assertBotLogicWithTranscript('DialogsTests/WaterfallPrompt.chat', WaterfallPromptLogic)) - it('WaterfallNested', assertBotLogicWithTranscript('DialogsTests/WaterfallNested.chat', WaterfallNestedLogic)) + it('Waterfall', assertBotLogicWithTranscript('DialogsTests/Waterfall.chat', WaterfallLogic)); + it('WaterfallPrompt', assertBotLogicWithTranscript('DialogsTests/WaterfallPrompt.chat', WaterfallPromptLogic)); + it('WaterfallNested', assertBotLogicWithTranscript('DialogsTests/WaterfallNested.chat', WaterfallNestedLogic)); }); function AttachmentPromptLogic(state) { + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + dialogs.add(new AttachmentPrompt('prompt')); + dialogs.add( + new WaterfallDialog('start', [ + async function (dc) { + await dc.prompt('prompt', 'please add an attachment.'); + }, + async function (dc) { + const [attachment] = dc.context.activity.attachments; + await dc.context.sendActivity(attachment.content); + await dc.endDialog(); + }, + ]) + ); - const dialogs = new DialogSet(); - const prompt = new AttachmentPrompt(); - dialogs.add('prompt', prompt); - dialogs.add('start', [ - async function (dc) { - await dc.prompt('prompt', 'please add an attachment.'); - }, - async function (dc, attachment) { - await dc.context.sendActivity(attachment[0].content); - await dc.endDialog(); + return async (context) => { + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; } - ]); - return async (context) => { - const dc = dialogs.createContext(context, state); + const dc = await dialogs.createContext(context); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } -}; + }; +} function ChoicePromptLogic(state) { - const colorChoices = ['red', 'green', 'blue']; - const dialogs = new DialogSet(); - const choicePrompt = new ChoicePrompt().style(ListStyle.inline); - dialogs.add('choicePrompt', choicePrompt); - dialogs.add('start', [ - async function (dc) { - await dc.prompt('choicePrompt', 'favorite color?', colorChoices, { - retryPrompt: `I didn't catch that. Select a color from the list.` - }); - }, - async function (dc, choice) { - const color = choice.value; - await dc.context.sendActivity(`Bot received the choice '${color}'.`); - await dc.endDialog(); - } - ]); + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const choicePrompt = new ChoicePrompt('prompt'); + choicePrompt.style = ListStyle.inline; + dialogs.add(choicePrompt); + dialogs.add( + new WaterfallDialog('start', [ + async function (dc) { + await dc.prompt( + 'prompt', + { prompt: 'favorite color?', retryPrompt: "I didn't catch that. Select a color from the list." }, + colorChoices + ); + }, + async function (dc) { + const color = dc.result.value; + await dc.context.sendActivity(`Bot received the choice '${color}'.`); + await dc.endDialog(); + }, + ]) + ); return async (context) => { - const dc = dialogs.createContext(context, state); + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; + } + + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } -}; + }; +} function DateTimePromptLogic(state) { + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + dialogs.add(new DateTimePrompt('prompt')); + dialogs.add( + new WaterfallDialog('start', [ + async function (dc) { + await dc.prompt('prompt', { + prompt: 'What date would you like?', + retryPrompt: 'Sorry, but that is not a date. What date would you like?', + }); + }, + async function (dc) { + var [resolution] = dc.result; + await dc.context.sendActivity(`Timex:'${resolution.timex}' Value:'${resolution.value}'`); + await dc.endDialog(); + }, + ]) + ); - const dialogs = new DialogSet(); - const prompt = new DatetimePrompt(); - dialogs.add('prompt', prompt); - dialogs.add('start', [ - async function (dc) { - await dc.prompt('prompt', 'What date would you like?', { retryPrompt: `Sorry, but that is not a date. What date would you like?` }); - }, - async function (dc, dateTimeResult) { - var resolution = dateTimeResult[0]; - await dc.context.sendActivity(`Timex:'${resolution.timex}' Value:'${resolution.value}'`); - await dc.endDialog(); + return async (context) => { + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; } - ]); - return async (context) => { - const dc = dialogs.createContext(context, state); + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } + }; } function NumberPromptCustomValidatorLogic(state) { + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const prompt = new NumberPrompt('prompt', (prompt) => { + if (prompt.recognized.value < 0) return undefined; + if (prompt.recognized.value > 100) return undefined; - const dialogs = new DialogSet(); - const prompt = new NumberPrompt((context, result) => { - if (result < 0) - return undefined; - if (result > 100) - return undefined; - - return result; + return prompt.recognized.value; }); - dialogs.add('prompt', prompt); - dialogs.add('start', [ - async function (dc) { - await dc.prompt('prompt', 'Enter a number.', { retryPrompt: `You must enter a valid positive number less than 100.` }); - }, - async function (dc, numberResult - ) { - await dc.context.sendActivity(`Bot received the number '${numberResult}'.`); - await dc.endDialog(); - } - ]); + dialogs.add(prompt); + dialogs.add( + new WaterfallDialog('start', [ + async function (dc) { + await dc.prompt('prompt', { + prompt: 'Enter a number.', + retryPrompt: 'You must enter a valid positive number less than 100.', + }); + }, + async function (dc) { + await dc.context.sendActivity(`Bot received the number '${dc.result}'.`); + await dc.endDialog(); + }, + ]) + ); return async (context) => { - const dc = dialogs.createContext(context, state); + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; + } + + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } + }; } function TextPromptCustomValidatorLogic(state) { - - const dialogs = new DialogSet(); - const prompt = new TextPrompt((context, text) => { - if (text.length <= 3) { + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const prompt = new TextPrompt('prompt', (prompt) => { + if (prompt.recognized.value.length <= 3) { return undefined; } - return text; + return prompt.recognized.value; }); - dialogs.add('prompt', prompt); - dialogs.add('start', [ - async function (dc) { - await dc.prompt('prompt', 'Enter some text.', { retryPrompt: `Make sure the text is greater than three characters.` }); - }, - async function (dc, text - ) { - await dc.context.sendActivity(`Bot received the text '${text}'.`); - await dc.endDialog(); - } - ]); + dialogs.add(prompt); + dialogs.add( + new WaterfallDialog('start', [ + async function (dc) { + await dc.prompt('prompt', { + prompt: 'Enter some text.', + retryPrompt: 'Make sure the text is greater than three characters.', + }); + }, + async function (dc) { + await dc.context.sendActivity(`Bot received the text '${dc.result}'.`); + await dc.endDialog(); + }, + ]) + ); return async (context) => { - const dc = dialogs.createContext(context, state); + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; + } + + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } + }; } function ConfirmPromptLogic(state) { + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + const confirmPrompt = new ConfirmPrompt('prompt'); + confirmPrompt.style = ListStyle.none; + dialogs.add(confirmPrompt); + dialogs.add( + new WaterfallDialog('start', [ + async function (dc) { + await dc.prompt('prompt', { + prompt: 'Please confirm.', + retryPrompt: "Please confirm, say 'yes' or 'no' or something like that.", + }); + }, + async function (dc) { + const confirmed = dc.result; + await dc.context.sendActivity(confirmed ? 'Confirmed.' : 'Not confirmed.'); + await dc.endDialog(); + }, + ]) + ); - const dialogs = new DialogSet(); - const confirmPrompt = new ConfirmPrompt().style(ListStyle.none); - dialogs.add('confirmPrompt', confirmPrompt); - dialogs.add('start', [ - async function (dc) { - await dc.prompt('confirmPrompt', 'Please confirm.', { - retryPrompt: `Please confirm, say 'yes' or 'no' or something like that.` - }); - }, - async function (dc, confirmed) { - await dc.context.sendActivity(confirmed ? 'Confirmed.' : 'Not confirmed.'); - await dc.endDialog(); + return async (context) => { + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; } - ]); - return async (context) => { - const dc = dialogs.createContext(context, state); + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } -}; + }; +} function WaterfallLogic(state) { - const dialogs = new DialogSet(); - dialogs.add('start', [ - (dc) => dc.context.sendActivity('step1'), - (dc) => dc.context.sendActivity('step2'), - (dc) => dc.context.sendActivity('step3') - ]); + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + dialogs.add( + new WaterfallDialog('start', [ + (dc) => dc.context.sendActivity('step1'), + (dc) => dc.context.sendActivity('step2'), + (dc) => dc.context.sendActivity('step3'), + ]) + ); return async (context) => { - const dc = dialogs.createContext(context, state); + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; + } + + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('start'); } - } + }; } function WaterfallPromptLogic(state) { - const dialogs = new DialogSet(); - dialogs.add('number', new NumberPrompt()); - dialogs.add('test-waterfall', [ - async (dc) => { - await dc.context.sendActivity('step1'); - await dc.prompt('number', 'Enter a number.', { retryPrompt: 'It must be a number' }) - }, - async (dc, args) => { - if (args != null) { - var numberResult = args; - await dc.context.sendActivity(`Thanks for '${numberResult}'`); - } - - await dc.context.sendActivity('step2'); - await dc.prompt('number', 'Enter a number.', { retryPrompt: 'It must be a number' }); - }, - async (dc, args) => { - if (args != null) { - var numberResult = args; - await dc.context.sendActivity(`Thanks for '${numberResult}'`); - } - - await dc.context.sendActivity('step3'); - await dc.endDialog({ value: 'All Done!' }); - } - - ]); + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + dialogs.add(new NumberPrompt('number')); + dialogs.add( + new WaterfallDialog('start', [ + async (dc) => { + await dc.context.sendActivity('step1'); + await dc.prompt('number', { prompt: 'Enter a number.', retryPrompt: 'It must be a number' }); + }, + async (dc) => { + if (dc.result != null) { + await dc.context.sendActivity(`Thanks for '${dc.result}'`); + } + + await dc.context.sendActivity('step2'); + await dc.prompt('number', { prompt: 'Enter a number.', retryPrompt: 'It must be a number' }); + }, + async (dc) => { + if (dc.result != null) { + await dc.context.sendActivity(`Thanks for '${dc.result}'`); + } + + await dc.context.sendActivity('step3'); + await dc.endDialog({ value: 'All Done!' }); + }, + ]) + ); return async (context) => { - const dc = dialogs.createContext(context, state); + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; + } + + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { - await dc.beginDialog('test-waterfall'); + await dc.beginDialog('start'); } - } + }; } function WaterfallNestedLogic(state) { - const dialogs = new DialogSet(); - dialogs.add('test-waterfall-a', WaterfallNestedA); - dialogs.add('test-waterfall-b', WaterfallNestedB); - dialogs.add('test-waterfall-c', WaterfallNestedC); + const dialogState = state.createProperty('dialogState'); + const dialogs = new DialogSet(dialogState); + dialogs.add( + new WaterfallDialog('test-waterfall-a', [ + async (dc) => { + dc.context.sendActivity('step1'); + await dc.beginDialog('test-waterfall-b'); + }, + async (dc) => { + await dc.context.sendActivity('step2'); + await dc.beginDialog('test-waterfall-c'); + }, + ]) + ); + dialogs.add( + new WaterfallDialog('test-waterfall-b', [ + async (dc) => dc.context.sendActivity('step1.1'), + async (dc) => dc.context.sendActivity('step1.2'), + ]) + ); + dialogs.add( + new WaterfallDialog('test-waterfall-c', [ + async (dc) => dc.context.sendActivity('step2.1'), + async (dc) => dc.context.sendActivity('step2.2'), + ]) + ); return async (context) => { - const dc = dialogs.createContext(context, state); + if (context.activity.type == ActivityTypes.ConversationUpdate) { + return; + } + + const dc = await dialogs.createContext(context, state); await dc.continueDialog(); // Check to see if anyone replied. If not then start echo dialog if (!context.responded) { await dc.beginDialog('test-waterfall-a'); } - } + }; } - -const WaterfallNestedA = [ - async (dc) => { - dc.context.sendActivity('step1'); - await dc.beginDialog('test-waterfall-b'); - }, - async (dc) => { - await dc.context.sendActivity("step2"); - await dc.beginDialog("test-waterfall-c"); - } -]; - -const WaterfallNestedB = [ - async (dc) => dc.context.sendActivity('step1.1'), - async (dc) => dc.context.sendActivity('step1.2') -]; - -const WaterfallNestedC = [ - async (dc) => dc.context.sendActivity('step2.1'), - async (dc) => dc.context.sendActivity('step2.2') -]; \ No newline at end of file diff --git a/testing/transcripts/tests/luis.test.js b/testing/transcripts/tests/luis.test.js index 747a21bd6c..85582c95bf 100644 --- a/testing/transcripts/tests/luis.test.js +++ b/testing/transcripts/tests/luis.test.js @@ -1,13 +1,13 @@ const assert = require('assert'); const { LuisRecognizer } = require('botbuilder-ai'); -const assertBotLogicWithTranscript = require('../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; +const assertBotLogicWithTranscript = require('../../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; var luisAppId = process.env['LUISAPPID_TRANSCRIPT']; var luisSubscriptionKey = process.env['LUISAPPKEY_TRANSCRIPT']; var luisUriBase = process.env['LUISURIBASE_TRANSCRIPT']; var recognizer; -xdescribe(`LUIS Tests using transcripts`, function () { +describe(`LUIS Tests using transcripts`, function () { if (!luisAppId || !luisSubscriptionKey) { console.warn('* Missing LUIS Environment variables (LUISAPPID_TRANSCRIPT, LUISAPPKEY_TRANSCRIPT) - Skipping LUIS Tests'); return; diff --git a/testing/transcripts/tests/qna.test.js b/testing/transcripts/tests/qna.test.js index a97f827e42..a434d3a0ae 100644 --- a/testing/transcripts/tests/qna.test.js +++ b/testing/transcripts/tests/qna.test.js @@ -1,6 +1,6 @@ const assert = require('assert'); const { QnAMaker } = require('botbuilder-ai'); -const assertBotLogicWithTranscript = require('../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; +const assertBotLogicWithTranscript = require('../../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; var qnaKnowledgeBaseId = process.env['QNAKNOWLEDGEBASEID_TRANSCRIPT']; var qnaEndpointKey = process.env['QNAENDPOINTKEY_TRANSCRIPT']; diff --git a/testing/transcripts/tests/translation.test.js b/testing/transcripts/tests/translation.test.js index b296ec1062..99a08557c1 100644 --- a/testing/transcripts/tests/translation.test.js +++ b/testing/transcripts/tests/translation.test.js @@ -1,9 +1,9 @@ const assert = require('assert'); const { LanguageTranslator, LocaleConverter } = require('botbuilder-ai'); -const assertBotLogicWithTranscript = require('../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; +const assertBotLogicWithTranscript = require('../../../libraries/botbuilder-core/tests/transcriptUtilities').assertBotLogicWithBotBuilderTranscript; var translatorKey = process.env['TRANSLATORKEY_TRANSCRIPT']; -xdescribe(`Translation Tests using transcripts`, function () { +describe(`Translation Tests using transcripts`, function () { if (!translatorKey) { console.warn('* Missing Translator Environment variable (TRANSLATORKEY_TRANSCRIPT) - Skipping Translation Tests'); return; diff --git a/tools/package.json b/tools/package.json index b6e245e457..2820cb7796 100644 --- a/tools/package.json +++ b/tools/package.json @@ -46,7 +46,7 @@ "glob": "^7.1.3", "gulp": "^5.0.0", "gulp-exec": "^5.0.0", - "jshint": "^2.9.6", + "jshint": "^2.13.6", "minami": "github:devigned/minami#master", "mocha": "^10.4.0", "nock": "^11.9.1", diff --git a/yarn.lock b/yarn.lock index 395b1aff30..4ae20dd2ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1718,46 +1718,6 @@ source-map "~0.6.1" typescript "~5.0.4" -"@microsoft/bf-chatdown@^4.15.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@microsoft/bf-chatdown/-/bf-chatdown-4.15.0.tgz#000db3d884b6096cdf6c18a4971146145773fdf7" - integrity sha512-LvdSjgx2Ta6u0kWauBv/5XPFmCHxlMEyEuNDMsEhDnUMTeiBAbGwOssFaCyUd8izbSCwe3y7eZz+Bzzc9jVcBg== - dependencies: - "@microsoft/bf-cli-command" "4.15.0" - "@oclif/command" "~1.5.19" - "@oclif/config" "~1.13.3" - "@oclif/errors" "~1.2.2" - axios "~0.21.1" - botframework-schema "^4.5.1" - chalk "2.4.1" - cli-table3 "^0.5.1" - fs-extra "^5.0.0" - glob "^7.1.3" - https-proxy-agent "^5.0.0" - intercept-stdout "^0.1.2" - latest-version "^4.0.0" - mime-types "^2.1.18" - minimist "^1.2.0" - please-upgrade-node "^3.0.1" - semver "^5.5.1" - tslib "^2.0.3" - window-size "^1.1.0" - -"@microsoft/bf-cli-command@4.15.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@microsoft/bf-cli-command/-/bf-cli-command-4.15.0.tgz#6f9332c1250b19c4336979e8b9d2d5528e67c7ee" - integrity sha512-Mp1fzS2/P1cMd0bC/FOCrQpdPf0jZVllM8ZM3YYlcxRb8HdvW6UUfiOGf4NOQRKUeSQoHzJAYk+IgVnJ2ouoYA== - dependencies: - "@oclif/command" "~1.5.19" - "@oclif/config" "~1.13.3" - "@oclif/errors" "~1.2.2" - applicationinsights "^1.0.8" - chalk "2.4.1" - cli-ux "~4.9.3" - debug "^4.1.1" - fs-extra "^7.0.1" - tslib "^2.0.3" - "@microsoft/orchestrator-core@~4.14.4": version "4.14.4" resolved "https://registry.yarnpkg.com/@microsoft/orchestrator-core/-/orchestrator-core-4.14.4.tgz#11358d91be7346481f0a66d6d5913282b1a6dde3" @@ -1925,134 +1885,6 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@oclif/command@^1.5.13": - version "1.8.35" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.35.tgz#7023f48a6b058d33ccb578c28a1522fba192efd2" - integrity sha512-oILFTe3n6WjEbhXaSJd6FPsU4H97WxkC3Q0+Y63pfTXIZ424Fb9Hlg1CazscWcJqCrhuuUag6mItdgYo0kpinw== - dependencies: - "@oclif/config" "^1.18.2" - "@oclif/errors" "^1.3.6" - "@oclif/help" "^1.0.1" - "@oclif/parser" "^3.8.16" - debug "^4.1.1" - semver "^7.5.4" - -"@oclif/command@~1.5.19": - version "1.5.20" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.5.20.tgz#bb0693586d7d66a457c49b719e394c02ff0169a7" - integrity sha512-lzst5RU/STfoutJJv4TLE/cm1WtW3xy6Aqvqy3r1lPsGdNifgbEq4dCOYyc/ZEuhV/IStQLDFTnAlqTdolkz1Q== - dependencies: - "@oclif/config" "^1" - "@oclif/errors" "^1.2.2" - "@oclif/parser" "^3.8.3" - "@oclif/plugin-help" "^2" - debug "^4.1.1" - semver "^5.6.0" - -"@oclif/config@1.18.15": - version "1.18.15" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.15.tgz#3be95862dda32d759fc61bcadff1e7819915a112" - integrity sha512-eBTiFXGfXSzghc4Yjp3EutYU+6MrHX1kzk4j5i4CsR5AEor43ynXFrzpO6v7IwbR1KyUo+9SYE2D69Y+sHIMpg== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.15" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.5.0" - -"@oclif/config@^1", "@oclif/config@^1.18.2": - version "1.18.16" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.16.tgz#3235d260ab1eb8388ebb6255bca3dd956249d796" - integrity sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.16" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.6.1" - -"@oclif/config@~1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.13.3.tgz#1b13e18d0e4242ddbd9cbd100f0eec819aa2bf8c" - integrity sha512-qs5XvGRw+1M41abOKCjd0uoeHCgsMxa2MurD2g2K8CtQlzlMXl0rW5idVeimIg5208LLuxkfzQo8TKAhhRCWLg== - dependencies: - "@oclif/parser" "^3.8.0" - debug "^4.1.1" - tslib "^1.9.3" - -"@oclif/errors@1.3.6", "@oclif/errors@^1.2.2", "@oclif/errors@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.6.tgz#e8fe1fc12346cb77c4f274e26891964f5175f75d" - integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -"@oclif/errors@~1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.2.2.tgz#9d8f269b15f13d70aa93316fed7bebc24688edc2" - integrity sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg== - dependencies: - clean-stack "^1.3.0" - fs-extra "^7.0.0" - indent-string "^3.2.0" - strip-ansi "^5.0.0" - wrap-ansi "^4.0.0" - -"@oclif/help@^1.0.1": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@oclif/help/-/help-1.0.14.tgz#da5f9fdf6f57b40b133f095cbb9c78c480975ca3" - integrity sha512-Hu2/Dyo91cgLNaqN3wkvkBGuZ7eqb0TQNVKrzGButZyaBpJzmwW4L6D4tAF390WDYZG7EubmLePlNYb+rNB4jw== - dependencies: - "@oclif/config" "1.18.15" - "@oclif/errors" "1.3.6" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/linewrap@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" - integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== - -"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.15", "@oclif/parser@^3.8.16", "@oclif/parser@^3.8.3": - version "3.8.16" - resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.16.tgz#bedfc55153075b8b2925657f8865035aa877515c" - integrity sha512-jeleXSh5izmBQ6vwyCJmbFPahPpd/ajxASi25FaYAWcvwVMzP/vKAKQXKWZun6T9K/gd6ywSsTpfAXiZAjBd6g== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/linewrap" "^1.0.0" - chalk "^4.1.0" - tslib "^2.6.1" - -"@oclif/plugin-help@^2": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-2.2.3.tgz#b993041e92047f0e1762668aab04d6738ac06767" - integrity sha512-bGHUdo5e7DjPJ0vTeRBMIrfqTRDBfyR5w0MP41u0n3r7YG5p14lvMmiCXxi6WDaP2Hw5nqx3PnkAIntCKZZN7g== - dependencies: - "@oclif/command" "^1.5.13" - chalk "^2.4.1" - indent-string "^4.0.0" - lodash.template "^4.4.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - widest-line "^2.0.1" - wrap-ansi "^4.0.0" - -"@oclif/screen@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" - integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== - "@opencensus/web-types@0.0.7": version "0.0.7" resolved "https://registry.yarnpkg.com/@opencensus/web-types/-/web-types-0.0.7.tgz#4426de1fe5aa8f624db395d2152b902874f0570a" @@ -2106,11 +1938,6 @@ colors "~1.2.1" string-argv "~0.3.1" -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -2818,13 +2645,6 @@ resolved "https://registry.yarnpkg.com/@types/nconf/-/nconf-0.10.0.tgz#a5c9753a09c59d44c8e6dc94b57d73f70eb12ebe" integrity sha512-Qh0/DWkz7fQm5h+IPFBIO5ixaFdv86V6gpbA8TPA1hhgXYtzGviv9yriqN1B+KTtmLweemKZD5XxY1cTAQPNMg== -"@types/nock@^11.1.0": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@types/nock/-/nock-11.1.0.tgz#0a8c1056a31ba32a959843abccf99626dd90a538" - integrity sha512-jI/ewavBQ7X5178262JQR0ewicPAcJhXS/iFaNJl0VHLfyosZ/kwSrsa6VNQNSO8i9d8SqdRgOtZSOKJ/+iNMw== - dependencies: - nock "*" - "@types/node-fetch@^2.5.0", "@types/node-fetch@^2.5.3", "@types/node-fetch@^2.5.7": version "2.5.7" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" @@ -3413,18 +3233,6 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-escapes@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" @@ -3471,11 +3279,6 @@ ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - antlr4ts-cli@0.5.0-alpha.3: version "0.5.0-alpha.3" resolved "https://registry.yarnpkg.com/antlr4ts-cli/-/antlr4ts-cli-0.5.0-alpha.3.tgz#1f581b2a3c840d3921a2f3b1e739e48c7e7c18cd" @@ -3494,14 +3297,6 @@ anymatch@^3.1.3: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -3517,16 +3312,6 @@ append-transform@^2.0.0: dependencies: default-require-extensions "^3.0.0" -applicationinsights@^1.0.8: - version "1.8.10" - resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.8.10.tgz#fffa482cd1519880fb888536a87081ac05130667" - integrity sha512-ZLDA7mShh4mP2Z/HlFolmvhBPX1LfnbIWXrselyYVA7EKjHhri1fZzpu2EiWAmfbRxNBY6fRjoPJWbx5giKy4A== - dependencies: - cls-hooked "^4.2.2" - continuation-local-storage "^3.2.1" - diagnostic-channel "0.3.1" - diagnostic-channel-publishers "0.4.4" - applicationinsights@^1.7.5: version "1.8.7" resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.8.7.tgz#f98774b2da03fdb95afb9d9042ae9d6f10025db6" @@ -3765,7 +3550,7 @@ axe-core@^4.7.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== -axios@^1.4.0, axios@^1.7.2, axios@~0.21.1: +axios@^1.4.0, axios@^1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== @@ -4005,14 +3790,6 @@ body-parser@1.20.2, body-parser@^1.19.0: type-is "~1.6.18" unpipe "1.0.0" -botframework-schema@^4.5.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/botframework-schema/-/botframework-schema-4.20.0.tgz#cf691599aa23cb5e7b1aa6e7d8bda87c0e1d9ac1" - integrity sha512-Tda488691XFlkBKdMLdlGWRI8IebLprxqQf57LpuRQHqK2ttbvmfwjFiW5V3VcTBBz1SVzMhwJBAWVDG+MexLA== - dependencies: - uuid "^8.3.2" - zod "~1.11.17" - boxen@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" @@ -4043,11 +3820,11 @@ brace-expansion@^2.0.1: balanced-match "^1.0.0" braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" @@ -4324,19 +4101,6 @@ cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" @@ -4400,14 +4164,6 @@ capture-stack-trace@^1.0.0: resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - chai-nightwatch@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.5.3.tgz#980ecf63dde5a04e7f3524370682c7ff01178ffb" @@ -4434,15 +4190,6 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4493,22 +4240,7 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.1.2" - -chokidar@^3.5.3: +chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -4558,23 +4290,11 @@ cldrjs@^0.5.4: resolved "https://registry.yarnpkg.com/cldrjs/-/cldrjs-0.5.5.tgz#5c92ca2de89a8a16dea76cb2dfc4e00104428e52" integrity sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA== -clean-stack@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" - integrity sha512-4CCmhqt4yqbQQI9REDKCf+N6U3SToC5o7PoKCq4veHvr30TJ2Vmz1mYYF23VC0E7Z13tf4CXh9jXY0VC+Jtdng== - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-stack@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" - integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== - dependencies: - escape-string-regexp "4.0.0" - clean-webpack-plugin@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" @@ -4599,16 +4319,6 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== -cli-table3@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-table3@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -4618,33 +4328,6 @@ cli-table3@^0.6.3: optionalDependencies: "@colors/colors" "1.5.0" -cli-ux@~4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-4.9.3.tgz#4c3e070c1ea23eef010bbdb041192e0661be84ce" - integrity sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA== - dependencies: - "@oclif/errors" "^1.2.2" - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.3" - ansi-escapes "^3.1.0" - ansi-styles "^3.2.1" - cardinal "^2.1.1" - chalk "^2.4.1" - clean-stack "^2.0.0" - extract-stack "^1.0.0" - fs-extra "^7.0.0" - hyperlinker "^1.0.0" - indent-string "^3.2.0" - is-wsl "^1.1.0" - lodash "^4.17.11" - password-prompt "^1.0.7" - semver "^5.6.0" - strip-ansi "^5.0.0" - supports-color "^5.5.0" - supports-hyperlinks "^1.0.1" - treeify "^1.1.0" - tslib "^1.9.3" - cli@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" @@ -4689,13 +4372,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" @@ -4759,11 +4435,6 @@ colors@1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - colors@~1.2.1: version "1.2.5" resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" @@ -5154,18 +4825,6 @@ decimal.js@^10.3.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -5228,13 +4887,6 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -5369,11 +5021,6 @@ diagnostic-channel-publishers@0.4.1: resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.1.tgz#a1147ee0d5a4a06cd2b0795433bc1aee1dbc9801" integrity sha512-NpZ7IOVUfea/kAx4+ub4NIYZyRCSymjXM5BZxnThs3ul9gAKqjm7J8QDDQW3Ecuo2XxjNLoWLeKmrPUWKNZaYw== -diagnostic-channel-publishers@0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.4.tgz#57c3b80b7e7f576f95be3a257d5e94550f0082d6" - integrity sha512-l126t01d2ZS9EreskvEtZPrcgstuvH3rbKy82oUhUrVmBaGx4hO9wECdl3cvZbKDYjMF3QJDB5z5dL9yWAjvZQ== - diagnostic-channel@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.3.1.tgz#7faa143e107f861be3046539eb4908faab3f53fd" @@ -5548,11 +5195,6 @@ duplexer2@^0.1.2, duplexer2@^0.1.4, duplexer2@~0.1.0, duplexer2@~0.1.2, duplexer dependencies: readable-stream "^2.0.2" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - each-props@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/each-props/-/each-props-3.0.0.tgz#a88fb17634a4828307610ec68269fba2f7280cd8" @@ -6020,7 +5662,7 @@ espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -6179,11 +5821,6 @@ extend@^3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extract-stack@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-1.0.0.tgz#b97acaf9441eea2332529624b732fc5a1c8165fa" - integrity sha512-M5Ge0JIrn12EtIVpje2G+hI5X78hmX4UDzynZ7Vnp1MiPSqleEonmgr2Rh59eygEEgq3YJ1GDP96rnM8tnVg/Q== - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -6226,17 +5863,6 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" -fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-json-patch@^3.0.0-1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" @@ -6318,10 +5944,10 @@ filenamify@^4.1.0: strip-outer "^1.0.1" trim-repeated "^1.0.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -6518,14 +6144,6 @@ fresh@0.5.2, fresh@^0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fromentries@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.1.tgz#b14c6d4d606c771ce85597f13794fb10200a0ccc" @@ -6554,7 +6172,7 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0, fs-extra@^7.0.1, fs-extra@~7.0.1: +fs-extra@^7.0.1, fs-extra@~7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -6563,15 +6181,6 @@ fs-extra@^7.0.0, fs-extra@^7.0.1, fs-extra@~7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -6592,11 +6201,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -6710,11 +6314,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@3.0.0, get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -6739,7 +6338,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@5.1.2, glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@^6.0.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@5.1.2, glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^6.0.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6882,18 +6481,6 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -6934,29 +6521,6 @@ got@5.6.0: unzip-response "^1.0.0" url-parse-lax "^1.0.0" -got@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -7042,11 +6606,6 @@ handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -7057,11 +6616,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -7072,13 +6626,6 @@ has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -7204,15 +6751,10 @@ htmlparser2@^6.0.1: domutils "^2.4.4" entities "^2.0.0" -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" @@ -7295,11 +6837,6 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -hyperlinker@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" - integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -7336,7 +6873,7 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -7372,11 +6909,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ== - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -7443,13 +6975,6 @@ insert-module-globals@^7.2.1: undeclared-identifiers "^1.1.2" xtend "^4.0.0" -intercept-stdout@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/intercept-stdout/-/intercept-stdout-0.1.2.tgz#126abf1fae6c509a428a98c61a631559042ae9fd" - integrity sha1-Emq/H65sUJpCipjGGmMVWQQq6f0= - dependencies: - lodash.toarray "^3.0.0" - interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -7460,14 +6985,6 @@ interpret@^3.1.1: resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - ip-address@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" @@ -7489,13 +7006,6 @@ is-absolute@^1.0.0: is-relative "^1.0.0" is-windows "^1.0.1" -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -7513,7 +7023,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.0, is-buffer@^1.1.5, is-buffer@~1.1.6: +is-buffer@^1.1.0, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -7544,27 +7054,11 @@ is-core-module@^2.12.0, is-core-module@^2.13.0: dependencies: hasown "^2.0.0" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -is-descriptor@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -7633,23 +7127,11 @@ is-negative-zero@^2.0.0: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= - is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -7715,7 +7197,7 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: +is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== @@ -7779,12 +7261,7 @@ is-windows@^1.0.1, is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -7872,14 +7349,6 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -8004,25 +7473,19 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -jshint@^2.9.6: - version "2.12.0" - resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.12.0.tgz#52e75bd058d587ef81a0e2f95e5cf18eb5dc5c37" - integrity sha512-TwuuaUDmra0JMkuqvqy+WGo2xGHSNjv1BA1nTIgtH2K5z1jHuAEeAgp7laaR+hLRmajRjcrM71+vByBDanCyYA== +jshint@^2.13.6: + version "2.13.6" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.13.6.tgz#3679a2687a3066fa9034ef85d8c305613a31eec6" + integrity sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ== dependencies: cli "~1.0.0" console-browserify "1.1.x" exit "0.1.x" htmlparser2 "3.8.x" - lodash "~4.17.19" + lodash "~4.17.21" minimatch "~3.0.2" - shelljs "0.3.x" strip-json-comments "1.0.x" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -8181,21 +7644,7 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== - dependencies: - json-buffer "3.0.0" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -8213,13 +7662,6 @@ last-run@^2.0.0: resolved "https://registry.yarnpkg.com/last-run/-/last-run-2.0.0.tgz#f82dcfbfce6e63d041bd83d64c82e34cdba6572e" integrity sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ== -latest-version@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-4.0.0.tgz#9542393ac55a585861a4c4ebc02389a0b4a9c332" - integrity sha512-b4Myk7aQiQJvgssw2O8yITjELdqKRX4JQJUF1IUplgLaA8unv7s+UsAOwH6Q0/a09czSvlxEm306it2LBXrCzg== - dependencies: - package-json "^5.0.0" - lead@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/lead/-/lead-4.0.0.tgz#5317a49effb0e7ec3a0c8fb9c1b24fb716aab939" @@ -8372,11 +7814,6 @@ lodash._basefor@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= - lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" @@ -8392,11 +7829,6 @@ lodash._isiterateecall@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.clone@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043" @@ -8515,40 +7947,11 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash.pick@4.4.0, "lodash.pick@npm:lodash@^4.17.21", lodash@^4.1.2, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.15, lodash@~4.17.19: +lodash.pick@4.4.0, "lodash.pick@npm:lodash@^4.17.21", lodash@^4.1.2, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.15, lodash@~4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.template@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.toarray@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-3.0.2.tgz#2b204f0fa4f51c285c6f00c81d1cea5a23041179" - integrity sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk= - dependencies: - lodash._arraycopy "^3.0.0" - lodash._basevalues "^3.0.0" - lodash.keys "^3.0.0" - lodash.tonumber@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz#0b96b31b35672793eb7f5a63ee791f1b9e9025d9" @@ -8574,11 +7977,6 @@ loupe@2.3.4: dependencies: get-func-name "^2.0.0" -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= - lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -8708,7 +8106,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -8752,14 +8150,14 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@~2.1.24: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: mime-db "1.44.0" -mime-types@^2.1.27, mime-types@~2.1.34: +mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8791,11 +8189,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -8822,7 +8215,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@~3.0.2: +"minimatch@2 || 3": version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8872,12 +8265,19 @@ minimatch@^7.4.3, minimatch@^7.4.6: brace-expansion "^2.0.1" minimatch@^9.0.0: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" +minimatch@~3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + minimist@0.0.5, minimist@1.2.6, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" @@ -9243,16 +8643,6 @@ nise@^4.0.4: just-extend "^4.0.2" path-to-regexp "^1.7.0" -nock@*: - version "13.0.5" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.0.5.tgz#a618c6f86372cb79fac04ca9a2d1e4baccdb2414" - integrity sha512-1ILZl0zfFm2G4TIeJFW0iHknxr2NyA+aGCMTjDVUsBY4CkMRispF1pfIYkTRdAR/3Bg+UzdEuK0B6HczMQZcCg== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - lodash.set "^4.3.2" - propagate "^2.0.0" - nock@^11.9.1: version "11.9.1" resolved "https://registry.yarnpkg.com/nock/-/nock-11.9.1.tgz#2b026c5beb6d0dbcb41e7e4cefa671bc36db9c61" @@ -9386,15 +8776,6 @@ normalize-path@3.0.0, normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - now-and-later@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-3.0.0.tgz#cdc045dc5b894b35793cf276cc3206077bb7302d" @@ -9482,7 +8863,7 @@ nyc@^15.1.0: test-exclude "^6.0.0" yargs "^15.0.2" -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -9618,21 +8999,11 @@ os-browserify@~0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -p-cancelable@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -9701,13 +9072,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -9728,16 +9092,6 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -package-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-5.0.0.tgz#a7dbe2725edcc7dc9bcee627672275e323882433" - integrity sha512-EeHQFFTlEmLrkIQoxbE9w0FuAWHoc1XpthDqnZ/i9keOt701cteyXwAxQFLpVqVjj3feh2TodkihjLaRUtIgLg== - dependencies: - got "^8.3.1" - registry-auth-token "^3.3.2" - registry-url "^3.1.0" - semver "^5.5.0" - pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -9817,14 +9171,6 @@ parseurl@^1.3.3, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -password-prompt@^1.0.7: - version "1.1.3" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" - integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== - dependencies: - ansi-escapes "^4.3.2" - cross-spawn "^7.0.3" - path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -10009,7 +9355,7 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -please-upgrade-node@^3.0.1, please-upgrade-node@^3.2.0: +please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== @@ -10063,11 +9409,6 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -10204,15 +9545,6 @@ qs@^6.10.2, qs@^6.7.0: dependencies: side-channel "^1.0.4" -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -10283,7 +9615,7 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -10402,13 +9734,6 @@ readdirp@^3.6.0, readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -10423,13 +9748,6 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== - dependencies: - esprima "~4.0.0" - regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" @@ -10486,21 +9804,6 @@ regextras@^0.7.1: resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== -registry-auth-token@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -10621,13 +9924,6 @@ resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.3, resolve@~1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - restify-errors@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/restify-errors/-/restify-errors-8.0.2.tgz#0b9678738e37888e4fefe52aa6ee92771ec954e9" @@ -10850,7 +10146,7 @@ semver-store@^0.3.0: resolved "https://registry.yarnpkg.com/semver-store/-/semver-store-0.3.0.tgz#ce602ff07df37080ec9f4fb40b29576547befbe9" integrity sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg== -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -11024,15 +10320,10 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== -shelljs@0.3.x: - version "0.3.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" - integrity sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E= - shelljs@^0.8.3, shelljs@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -11233,13 +10524,6 @@ socks@^2.6.2: ip-address "^9.0.5" smart-buffer "^4.2.0" -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -11486,11 +10770,6 @@ streamx@^2.12.0, streamx@^2.12.5, streamx@^2.13.2, streamx@^2.14.0: optionalDependencies: bare-events "^2.2.0" -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - string-argv@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -11505,14 +10784,6 @@ string-argv@~0.3.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -11658,7 +10929,7 @@ supports-color@8.1.1, supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -11672,14 +10943,6 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== - dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -11877,11 +11140,6 @@ timed-out@^2.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" integrity sha1-84sK6B03R9YoAB9B2vxlKs5nHAo= -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" @@ -11979,11 +11237,6 @@ tree-sitter@=0.20.4: nan "^2.17.0" prebuild-install "^7.1.1" -treeify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" - integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== - trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" @@ -12052,11 +11305,6 @@ tslib@^2.0.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== -tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" - integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== - tslib@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" @@ -12108,11 +11356,6 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" @@ -12374,13 +11617,6 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -12397,11 +11633,6 @@ url-parse@^1.5.9: querystringify "^2.1.1" requires-port "^1.0.0" -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= - url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -12767,13 +11998,6 @@ wide-align@^1.1.2, wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - widest-line@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" @@ -12786,14 +12010,6 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -window-size@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-1.1.1.tgz#9858586580ada78ab26ecd6978a6e03115c1af20" - integrity sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA== - dependencies: - define-property "^1.0.0" - is-number "^3.0.0" - word-wrap@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" @@ -12814,15 +12030,6 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -wrap-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131" - integrity sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg== - dependencies: - ansi-styles "^3.2.0" - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -13065,8 +12272,3 @@ zod@^3.22.4: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - -zod@~1.11.17: - version "1.11.17" - resolved "https://registry.yarnpkg.com/zod/-/zod-1.11.17.tgz#2aae9e91fc66128116ae9844e8f416a95f453f8e" - integrity sha512-UzIwO92D0dSFwIRyyqAfRXICITLjF0IP8tRbEK/un7adirMssWZx8xF/1hZNE7t61knWZ+lhEuUvxlu2MO8qqA==