From 0086bcfa19ea2914063753f10fba75c8b5d58b4c Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 24 Jan 2023 17:22:34 +0000 Subject: [PATCH 01/25] Integrated new email template in cli Signed-off-by: Rupal Mahajan --- src/arguments.js | 14 +- src/constants.js | 4 +- src/download-helpers.js | 15 +- src/email-helpers.js | 57 +++-- src/index.js | 6 +- src/views/index.hbs | 446 +++++++++++++++++++++++++++++++++++++++- 6 files changed, 489 insertions(+), 53 deletions(-) diff --git a/src/arguments.js b/src/arguments.js index e153cba9..e3ed3d77 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -7,7 +7,7 @@ import { program, Option } from 'commander'; import { exit } from 'process'; import ora from 'ora'; -import { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT } from './constants.js'; +import { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } from './constants.js'; import dotenv from "dotenv"; dotenv.config(); @@ -56,9 +56,12 @@ export async function getCommandArguments() { .env(ENV_VAR.SMTP_USERNAME)) .addOption(new Option('--smtppassword ', 'smtp password') .env(ENV_VAR.SMTP_PASSWORD)) - .addOption(new Option('--subject ', 'email Subject') + .addOption(new Option('--subject ', 'email subject') .default(DEFAULT_EMAIL_SUBJECT) .env(ENV_VAR.EMAIL_SUBJECT)) + .addOption(new Option('--note ', 'email note') + .default(DEFAULT_EMAIL_NOTE) + .env(ENV_VAR.EMAIL_NOTE)) program.addHelpText('after', ` Note: The tenant in the url has the higher priority than tenant value provided as command option.`); @@ -90,6 +93,7 @@ function getOptions(options) { smtppassword: null, subject: null, time: null, + note: null } // Set url. @@ -145,8 +149,7 @@ function getOptions(options) { commandOptions.filename = options.filename || process.env[ENV_VAR.FILENAME]; commandOptions.filename = options.filename === DEFAULT_FILENAME ? `${commandOptions.filename}-${commandOptions.time.toISOString()}.${commandOptions.format}` - : `${commandOptions.filename}.${commandOptions.format}` - + : `${commandOptions.filename}.${commandOptions.format}`; // Set width and height of the window commandOptions.width = Number(options.width); @@ -169,6 +172,9 @@ function getOptions(options) { // Set email subject. commandOptions.subject = options.subject || process.env[ENV_VAR.EMAIL_SUBJECT]; + // Set email note. + commandOptions.note = options.note || process.env[ENV_VAR.EMAIL_NOTE]; + spinner.succeed('Fetched argument values') return commandOptions; } \ No newline at end of file diff --git a/src/constants.js b/src/constants.js index eb2ddeba..a6910783 100644 --- a/src/constants.js +++ b/src/constants.js @@ -11,6 +11,7 @@ export const DEFAULT_WIDTH = '1680'; export const DEFAULT_MIN_HEIGHT = '600'; export const DEFAULT_FILENAME = 'opensearch-report'; export const DEFAULT_EMAIL_SUBJECT = 'This is an email containing your opensearch dashboard report'; +export const DEFAULT_EMAIL_NOTE = 'Hi,
Here is the latest report!'; export const REPORT_TYPE = { DASHBOARD: 'Dashboard', @@ -60,7 +61,8 @@ export const ENV_VAR = { SMTP_SECURE: 'OPENSEARCH_SMTP_SECURE', SMTP_USERNAME: 'OPENSEARCH_SMTP_USERNAME', SMTP_PASSWORD: 'OPENSEARCH_SMTP_PASSWORD', - EMAIL_SUBJECT: 'OPENSEARCH_EMAIL_SUBJECT' + EMAIL_SUBJECT: 'OPENSEARCH_EMAIL_SUBJECT', + EMAIL_NOTE: 'OPENSEARCH_EMAIL_NOTE', } export const TRANSPORT_TYPE = { diff --git a/src/download-helpers.js b/src/download-helpers.js index d3fc4501..91719584 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -11,7 +11,7 @@ import ora from 'ora'; const spinner = ora(); -export async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time) { +export async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport) { spinner.start('Connecting to url ' + url); try { const browser = await puppeteer.launch({ @@ -132,12 +132,19 @@ export async function downloadReport(url, format, width, height, filename, authT } } - await browser.close(); - const timeCreated = time.valueOf(); const data = { timeCreated, dataUrl: buffer.toString('base64'), }; - await readStreamToFile(data.dataUrl, filename, format); + + if (transport !== undefined) { + let emailTemplateImageBuffer = await page.screenshot({ + fullPage: true, + }); + const data = { timeCreated, dataUrl: emailTemplateImageBuffer.toString('base64'), }; + await readStreamToFile(data.dataUrl, 'email_body.png', FORMAT.PNG); + } + + await browser.close(); spinner.succeed('The report is downloaded'); } catch (e) { spinner.fail('Downloading report failed. ' + e); diff --git a/src/email-helpers.js b/src/email-helpers.js index 7fedf2a3..0fe776a2 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -6,7 +6,7 @@ import nodemailer from "nodemailer"; import hbs from "nodemailer-express-handlebars"; import ora from 'ora'; -import { FORMAT } from './constants.js'; +import fs from 'fs'; import AWS from "aws-sdk"; import path from 'path'; import { fileURLToPath } from 'url'; @@ -22,7 +22,7 @@ try { // Do not set AWS_SDK_LOAD_CONFIG if aws config file is missing. } -export async function sendEmail(filename, format, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject) { +export async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note) { if (transport !== undefined && (transport === 'smtp' || ses !== undefined) && sender !== undefined && recipient !== undefined) { spinner.start('Sending email...'); } else { @@ -39,7 +39,7 @@ export async function sendEmail(filename, format, sender, recipient, transport, return; } - let mailOptions = getmailOptions(format, sender, recipient, filename, subject); + let mailOptions = getmailOptions(url, sender, recipient, filename, subject, note); let transporter = getTransporter(transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword); @@ -59,6 +59,7 @@ export async function sendEmail(filename, format, sender, recipient, transport, } else { spinner.succeed('Email sent successfully'); } + fs.unlinkSync('email_body.png'); }); } @@ -81,33 +82,27 @@ const getTransporter = (transport, smtphost, smtpport, smtpsecure, smtpusername, return transporter; } -const getmailOptions = (format, sender, recipient, file, emailSubject, mailOptions = {}) => { - if (format === FORMAT.PNG) { - mailOptions = { - from: sender, - subject: emailSubject, - to: recipient, - attachments: [ - { - filename: file, - path: file, - cid: 'report' - }], - template: 'index' - }; - } else { - mailOptions = { - from: sender, - subject: emailSubject, - to: recipient, - attachments: [ - { - filename: file, - path: file, - contentType: 'application/pdf' - }], - template: 'index' - }; - } +const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOptions = {}) => { + mailOptions = { + from: sender, + subject: emailSubject, + to: recipient, + attachments: [ + { + filename: 'email_body.png', + path: 'email_body.png', + cid: 'email_body' + }, + { + filename: file, + path: file + }], + template: 'index', + context: { + REPORT_TITLE: file, + DASHBOARD_URL: url, + NOTE: note + } + }; return mailOptions; } \ No newline at end of file diff --git a/src/index.js b/src/index.js index 3b5c38d8..bca4abbe 100755 --- a/src/index.js +++ b/src/index.js @@ -22,12 +22,13 @@ await downloadReport( options.username, options.password, options.tenant, - options.time + options.time, + options.transport ); await sendEmail( options.filename, - options.format, + options.url, options.sender, options.recipient, options.transport, @@ -37,4 +38,5 @@ await sendEmail( options.smtpusername, options.smtppassword, options.subject, + options.note ); diff --git a/src/views/index.hbs b/src/views/index.hbs index 09227bec..fe48419e 100644 --- a/src/views/index.hbs +++ b/src/views/index.hbs @@ -1,11 +1,435 @@ - - - - - - - - - - - \ No newline at end of file + + + + + + OpenSearch Dashboards Report: {{{REPORT_TITLE}}} + + + + + A new OpenSearch report is available + + + + + + + + + + + + \ No newline at end of file From 14a0dbbd8375bfbcbba3364593045f75ecb18345 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 24 Jan 2023 17:37:19 +0000 Subject: [PATCH 02/25] Update help test Signed-off-by: Rupal Mahajan --- test/help.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/help.test.js b/test/help.test.js index 710cd13d..cba6f07b 100644 --- a/test/help.test.js +++ b/test/help.test.js @@ -30,7 +30,8 @@ Options: --smtpsecure use TLS when connecting to server (env: OPENSEARCH_SMTP_SECURE) --smtpusername smtp username (env: OPENSEARCH_SMTP_USERNAME) --smtppassword smtp password (env: OPENSEARCH_SMTP_PASSWORD) - --subject email Subject (default: "This is an email containing your opensearch dashboard report", env: OPENSEARCH_EMAIL_SUBJECT) + --subject email subject (default: "This is an email containing your opensearch dashboard report", env: OPENSEARCH_EMAIL_SUBJECT) + --note email note (default: "Hi,
Here is the latest report!", env: OPENSEARCH_EMAIL_NOTE) -h, --help display help for command Note: The tenant in the url has the higher priority than tenant value provided as command option. From cfc7aff53f66e6fdfbe3b9dd2df1b9caadfe7daa Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 24 Jan 2023 18:10:10 +0000 Subject: [PATCH 03/25] Delete temp img in for error case Signed-off-by: Rupal Mahajan --- src/email-helpers.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/email-helpers.js b/src/email-helpers.js index 0fe776a2..d9c8f9d9 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -27,6 +27,7 @@ export async function sendEmail(filename, url, sender, recipient, transport, smt spinner.start('Sending email...'); } else { if (transport === undefined && sender === undefined && recipient === undefined) { + deleteTemporaryImage(); return; } else if (transport === undefined) { spinner.warn('Transport value is missing'); @@ -36,6 +37,7 @@ export async function sendEmail(filename, url, sender, recipient, transport, smt spinner.warn('Sender/Recipient value is missing'); } spinner.fail('Skipped sending email'); + deleteTemporaryImage(); return; } @@ -59,7 +61,7 @@ export async function sendEmail(filename, url, sender, recipient, transport, smt } else { spinner.succeed('Email sent successfully'); } - fs.unlinkSync('email_body.png'); + deleteTemporaryImage(); }); } @@ -105,4 +107,11 @@ const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOp } }; return mailOptions; +} + +function deleteTemporaryImage() { + // Delete temporary image created for email body + if (fs.existsSync('email_body.png')) { + fs.unlinkSync('email_body.png'); + } } \ No newline at end of file From 991ae6f9415594fcb84d58de9574aa28517012af Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 24 Jan 2023 21:47:29 +0000 Subject: [PATCH 04/25] use const for emailTemplateImageBuffer Signed-off-by: Rupal Mahajan --- src/download-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/download-helpers.js b/src/download-helpers.js index 91719584..ed796d3b 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -137,7 +137,7 @@ export async function downloadReport(url, format, width, height, filename, authT await readStreamToFile(data.dataUrl, filename, format); if (transport !== undefined) { - let emailTemplateImageBuffer = await page.screenshot({ + const emailTemplateImageBuffer = await page.screenshot({ fullPage: true, }); const data = { timeCreated, dataUrl: emailTemplateImageBuffer.toString('base64'), }; From 6594bb5a0940a8eccd8464ec5cff9ba7bf88327b Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 25 Jan 2023 22:26:37 +0000 Subject: [PATCH 05/25] embed opensearch logo Signed-off-by: Rupal Mahajan --- src/email-helpers.js | 5 +++++ src/views/index.hbs | 2 +- src/views/opensearch_logo_darkmode.png | Bin 0 -> 34461 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/views/opensearch_logo_darkmode.png diff --git a/src/email-helpers.js b/src/email-helpers.js index d9c8f9d9..9e9a881d 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -95,6 +95,11 @@ const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOp path: 'email_body.png', cid: 'email_body' }, + { + filename: 'opensearch_logo_darkmode.png', + path: path.join(__dirname, './views/opensearch_logo_darkmode.png'), + cid: 'opensearch_logo_darkmode' + }, { filename: file, path: file diff --git a/src/views/index.hbs b/src/views/index.hbs index fe48419e..9909d079 100644 --- a/src/views/index.hbs +++ b/src/views/index.hbs @@ -379,7 +379,7 @@ diff --git a/src/views/opensearch_logo_darkmode.png b/src/views/opensearch_logo_darkmode.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd60e07fd2aeb8d91339645257bf06cddbd50c2 GIT binary patch literal 34461 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 U)=2IL|CUifRz;>t$|U6f1IaYq4*&oF literal 0 HcmV?d00001 From 0695340c6620c76e0915749b90a804fd46835309 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Thu, 26 Jan 2023 06:23:15 +0000 Subject: [PATCH 06/25] Accept text file for email body and add logic to convert text to html Signed-off-by: Rupal Mahajan --- src/arguments.js | 19 ++++++++++++++++++- src/constants.js | 2 +- src/email-helpers.js | 2 +- test/help.test.js | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/arguments.js b/src/arguments.js index e3ed3d77..fed030fc 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -7,6 +7,7 @@ import { program, Option } from 'commander'; import { exit } from 'process'; import ora from 'ora'; +import fs from 'fs'; import { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } from './constants.js'; import dotenv from "dotenv"; dotenv.config(); @@ -59,7 +60,7 @@ export async function getCommandArguments() { .addOption(new Option('--subject ', 'email subject') .default(DEFAULT_EMAIL_SUBJECT) .env(ENV_VAR.EMAIL_SUBJECT)) - .addOption(new Option('--note ', 'email note') + .addOption(new Option('--note ', 'email body (string or path to text file)') .default(DEFAULT_EMAIL_NOTE) .env(ENV_VAR.EMAIL_NOTE)) @@ -174,7 +175,23 @@ function getOptions(options) { // Set email note. commandOptions.note = options.note || process.env[ENV_VAR.EMAIL_NOTE]; + if (commandOptions.note !== DEFAULT_EMAIL_NOTE && fs.existsSync(commandOptions.note)) { + commandOptions.note = fs.readFileSync(commandOptions.note, "utf8"); + } + commandOptions.note = getHtml(commandOptions.note); spinner.succeed('Fetched argument values') return commandOptions; +} + +// Convert text to html +function getHtml(text) { + text = (text || ""); + return text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/\t/g, " ") + .replace(/ /g, "​ ​") + .replace(/\r\n|\r|\n/g, "
"); } \ No newline at end of file diff --git a/src/constants.js b/src/constants.js index a6910783..47046544 100644 --- a/src/constants.js +++ b/src/constants.js @@ -11,7 +11,7 @@ export const DEFAULT_WIDTH = '1680'; export const DEFAULT_MIN_HEIGHT = '600'; export const DEFAULT_FILENAME = 'opensearch-report'; export const DEFAULT_EMAIL_SUBJECT = 'This is an email containing your opensearch dashboard report'; -export const DEFAULT_EMAIL_NOTE = 'Hi,
Here is the latest report!'; +export const DEFAULT_EMAIL_NOTE = 'Hi,\nHere is the latest report!'; export const REPORT_TYPE = { DASHBOARD: 'Dashboard', diff --git a/src/email-helpers.js b/src/email-helpers.js index 9e9a881d..f2e0b85f 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -114,8 +114,8 @@ const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOp return mailOptions; } +// Delete temporary image created for email body function deleteTemporaryImage() { - // Delete temporary image created for email body if (fs.existsSync('email_body.png')) { fs.unlinkSync('email_body.png'); } diff --git a/test/help.test.js b/test/help.test.js index cba6f07b..54c920b4 100644 --- a/test/help.test.js +++ b/test/help.test.js @@ -31,7 +31,7 @@ Options: --smtpusername smtp username (env: OPENSEARCH_SMTP_USERNAME) --smtppassword smtp password (env: OPENSEARCH_SMTP_PASSWORD) --subject email subject (default: "This is an email containing your opensearch dashboard report", env: OPENSEARCH_EMAIL_SUBJECT) - --note email note (default: "Hi,
Here is the latest report!", env: OPENSEARCH_EMAIL_NOTE) + --note email body (string or path to text file) (default: "Hi,\\nHere is the latest report!", env: OPENSEARCH_EMAIL_NOTE) -h, --help display help for command Note: The tenant in the url has the higher priority than tenant value provided as command option. From 546cffda0d07251fcad10baa67144dc0b3f8babe Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Thu, 26 Jan 2023 06:43:32 +0000 Subject: [PATCH 07/25] Increase wait time after dom modification Signed-off-by: Rupal Mahajan --- src/download-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/download-helpers.js b/src/download-helpers.js index ed796d3b..aa596a99 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -93,7 +93,7 @@ export async function downloadReport(url, format, width, height, filename, authT } // force wait for any resize to load after the above DOM modification. - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise(resolve => setTimeout(resolve, 2000)); await waitForDynamicContent(page); let buffer; spinner.text = `Downloading Report...`; From 114e9e58ec10f35fcdab16764f9dde67a81e4a14 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Fri, 27 Jan 2023 00:04:44 +0000 Subject: [PATCH 08/25] Add dockerfile Signed-off-by: Rupal Mahajan --- Dockerfile | 25 +++++++++++++++++++++++++ src/download-helpers.js | 15 +++++++++------ src/email-helpers.js | 6 +++--- 3 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..8472edb6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +# Base image of the docker container +FROM node:lts-slim + +# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) +# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer +# installs, work. +RUN apt-get update \ + && apt-get install -y wget gnupg \ + && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ + && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ + && apt-get update \ + && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ + --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* + +# Copy the contents of the repo into the /app folder inside the container +COPY . /app + +# Update the current working directory to the /app folder +WORKDIR /app + +# Add CLI's installation steps here +RUN npm cache clean --force +RUN npm install && npm link +ENTRYPOINT ["/usr/local/bin/opensearch-reporting-cli"] \ No newline at end of file diff --git a/src/download-helpers.js b/src/download-helpers.js index aa596a99..4d22cdd8 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -6,13 +6,13 @@ import puppeteer from 'puppeteer'; import fs from 'fs'; import { FORMAT, REPORT_TYPE, SELECTOR, AUTH, URL_SOURCE } from './constants.js'; -import { exit } from "process"; +import { exit } from 'process'; import ora from 'ora'; const spinner = ora(); export async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport) { - spinner.start('Connecting to url ' + url); + spinner.start('Launching browser '); try { const browser = await puppeteer.launch({ headless: true, @@ -20,10 +20,12 @@ export async function downloadReport(url, format, width, height, filename, authT '--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu', + '--disable-dev-shm-usage', '--no-zygote', '--font-render-hinting=none', '--enable-features=NetworkService', '--ignore-certificate-errors', + '--single-process' ], executablePath: process.env.CHROMIUM_PATH, ignoreHTTPSErrors: true, @@ -39,6 +41,7 @@ export async function downloadReport(url, format, width, height, filename, authT overridePage.setDefaultNavigationTimeout(0); overridePage.setDefaultTimeout(300000); + spinner.info('Connecting to url ' + url); // auth if (authType !== undefined && authType !== AUTH.NONE && username !== undefined && password !== undefined) { if (authType === AUTH.BASIC) { @@ -128,7 +131,7 @@ export async function downloadReport(url, format, width, height, filename, authT buffer = payload.data; } else { spinner.fail('Please save search and retry'); - process.exit(1); + exit(1); } } @@ -141,14 +144,14 @@ export async function downloadReport(url, format, width, height, filename, authT fullPage: true, }); const data = { timeCreated, dataUrl: emailTemplateImageBuffer.toString('base64'), }; - await readStreamToFile(data.dataUrl, 'email_body.png', FORMAT.PNG); + await readStreamToFile(data.dataUrl, '/tmp/email_body.png', FORMAT.PNG); } await browser.close(); spinner.succeed('The report is downloaded'); } catch (e) { spinner.fail('Downloading report failed. ' + e); - process.exit(1); + exit(1); } } @@ -309,7 +312,7 @@ const readStreamToFile = async ( ) => { if (fs.existsSync(filename)) { spinner.fail('File with same name already exists.'); - exit(1); + return 1 ; } if (format === FORMAT.PDF || format === FORMAT.PNG) { let base64Image = stream.split(';base64,').pop(); diff --git a/src/email-helpers.js b/src/email-helpers.js index f2e0b85f..ad46b3a4 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -92,7 +92,7 @@ const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOp attachments: [ { filename: 'email_body.png', - path: 'email_body.png', + path: '/tmp/email_body.png', cid: 'email_body' }, { @@ -116,7 +116,7 @@ const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOp // Delete temporary image created for email body function deleteTemporaryImage() { - if (fs.existsSync('email_body.png')) { - fs.unlinkSync('email_body.png'); + if (fs.existsSync('/tmp/email_body.png')) { + fs.unlinkSync('/tmp/email_body.png'); } } \ No newline at end of file From d523ef4c0366596f8f177d8a6bf178a7dfeb1f3a Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 31 Jan 2023 06:51:34 +0000 Subject: [PATCH 09/25] Updates required for working with lambda Signed-off-by: Rupal Mahajan --- .gitignore | 3 +- DEVELOPER_GUIDE.md | 14 +- Dockerfile | 54 ++- package.json | 3 +- src/arguments.js | 51 ++- src/cli.js | 9 + src/constants.js | 37 +- src/download-helpers.js | 43 +- src/email-helpers.js | 33 +- src/index.js | 42 +- src/run.js | 44 +++ yarn.lock | 856 ++++++++++++++++++++-------------------- 12 files changed, 640 insertions(+), 549 deletions(-) create mode 100644 src/cli.js mode change 100755 => 100644 src/index.js create mode 100755 src/run.js diff --git a/.gitignore b/.gitignore index 65111c46..fe2b2bd2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ .env -opensearch-report* \ No newline at end of file +opensearch-report* +package-lock.json \ No newline at end of file diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 02d2addd..065354fd 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -48,4 +48,16 @@ curl -XPOST -u 'admin:admin' 'http://localhost:5601/api/sample_data/ecommerce' - curl -XPOST -u 'admin:admin' 'http://localhost:5601/api/sample_data/logs' -H 'osd-xsrf:true' -H 'securitytenant: global' curl -XPOST -u 'admin:admin' 'http://localhost:5601/api/sample_data/flights' -H 'osd-xsrf:true' -H 'securitytenant: admin_tenant' ``` -Run `yarn test` inside `reporting-cli`. \ No newline at end of file +Run `yarn test` inside `reporting-cli`. + +### Assemble docker image + +1. Checkout this package from version control + ``` + git clone git@github.com:opensearch-project/reporting-cli.git + cd reporting-cli + ``` +2. Run the command + ``` + docker build -t opensearch-reporting-cli . + ``` \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8472edb6..d7798290 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,46 @@ +# Define function directory +ARG FUNCTION_DIR="/function" + # Base image of the docker container +FROM node:lts-slim as build-image + +# Include global arg in this stage of the build +ARG FUNCTION_DIR + +# AWS Lambda runtime dependencies +RUN apt-get update && \ + apt-get install -y \ + g++ \ + make \ + unzip \ + libcurl4-openssl-dev \ + autoconf \ + automake \ + libtool \ + cmake \ + python3 \ + libkrb5-dev \ + curl + +# Copy function code +RUN mkdir -p ${FUNCTION_DIR}/ + +COPY package.json src/ ${FUNCTION_DIR}/ +RUN ls ${FUNCTION_DIR}/ +WORKDIR ${FUNCTION_DIR} +RUN npm install + +RUN npm install aws-lambda-ric + +# Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chromium dependencies and chromium. FROM node:lts-slim +# Include global arg in this stage of the build +ARG FUNCTION_DIR +# Set working directory to function root directory +WORKDIR ${FUNCTION_DIR} +# Copy in the build image dependencies +COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} +RUN ls ${FUNCTION_DIR}/ # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) # Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer @@ -13,13 +54,8 @@ RUN apt-get update \ --no-install-recommends \ && rm -rf /var/lib/apt/lists/* -# Copy the contents of the repo into the /app folder inside the container -COPY . /app - -# Update the current working directory to the /app folder -WORKDIR /app +ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] -# Add CLI's installation steps here -RUN npm cache clean --force -RUN npm install && npm link -ENTRYPOINT ["/usr/local/bin/opensearch-reporting-cli"] \ No newline at end of file +ENV IS_LAMBDA=true +ENV HOME="/tmp" +CMD [ "/function/index.handler" ] \ No newline at end of file diff --git a/package.json b/package.json index 75778e8c..9e0ee92f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,6 @@ "name": "@opensearch-project/reporting-cli", "description": "Opensearch Reporting CLI to download and email OpenSearch Dashboards reports.", "main": "index.js", - "type": "module", "homepage": "https://www.opensearch.org/", "version": "1.0.0", "keywords": [ @@ -37,7 +36,7 @@ "puppeteer": "^18.2.0" }, "bin": { - "opensearch-reporting-cli": "./src/index.js" + "opensearch-reporting-cli": "./src/cli.js" }, "devDependencies": { "jest": "^29.3.1" diff --git a/src/arguments.js b/src/arguments.js index fed030fc..8c4d049d 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -4,17 +4,14 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { program, Option } from 'commander'; -import { exit } from 'process'; -import ora from 'ora'; -import fs from 'fs'; -import { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } from './constants.js'; -import dotenv from "dotenv"; +var { program, Option } = require('commander'); +var { exit } = require('process'); +var fs = require('fs'); +var { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } = require('./constants.js'); +var dotenv = require("dotenv"); dotenv.config(); -const spinner = ora(); - -export async function getCommandArguments() { +async function getCommandArguments() { program .name(CLI_COMMAND_NAME) @@ -69,10 +66,31 @@ Note: The tenant in the url has the higher priority than tenant value provided a program.parse(process.argv); const options = program.opts(); - spinner.start('Fetching the arguments values'); + console.log('Fetching the arguments values'); return getOptions(options); } +async function getEventArguments(event) { + if (event.auth === undefined) + event['auth'] = DEFAULT_AUTH; + if (event.tenant === undefined) + event['tenant'] = DEFAULT_TENANT; + if (event.format === undefined) + event['format'] = DEFAULT_FORMAT; + if (event.width === undefined) + event['width'] = DEFAULT_WIDTH; + if (event.height === undefined) + event['height'] = DEFAULT_MIN_HEIGHT; + if (event.filename === undefined) + event['filename'] = DEFAULT_FILENAME; + if (event.subject === undefined) + event['subject'] = DEFAULT_EMAIL_SUBJECT; + if (event.note === undefined) + event['note'] = DEFAULT_EMAIL_NOTE; + + return getOptions(event); +} + function getOptions(options) { var commandOptions = { url: null, @@ -100,7 +118,7 @@ function getOptions(options) { // Set url. commandOptions.url = options.url || process.env[ENV_VAR.URL]; if (commandOptions.url === undefined || commandOptions.url.length <= 0) { - spinner.fail('Please specify URL'); + console.log('Please specify URL'); exit(1); } @@ -128,13 +146,13 @@ function getOptions(options) { if ((commandOptions.auth !== undefined && commandOptions.auth !== DEFAULT_AUTH) && ((commandOptions.username == undefined || commandOptions.username.length <= 0) || (commandOptions.password == undefined || commandOptions.password.length <= 0))) { - spinner.fail('Please specify a valid username or password'); + console.log('Please specify a valid username or password'); exit(1); } // If auth type is none and credentials are present, give warning auth type might be missing. if (commandOptions.auth === DEFAULT_AUTH && commandOptions.username !== undefined && commandOptions.password !== undefined) { - spinner.warn('Credentials are present but auth type is missing. Trying to reach url with no authentication.'); + console.log('Credentials are present but auth type is missing. Trying to reach url with no authentication.'); } // Set tenant @@ -180,7 +198,7 @@ function getOptions(options) { } commandOptions.note = getHtml(commandOptions.note); - spinner.succeed('Fetched argument values') + console.log('Fetched argument values'); return commandOptions; } @@ -194,4 +212,9 @@ function getHtml(text) { .replace(/\t/g, " ") .replace(/ /g, "​ ​") .replace(/\r\n|\r|\n/g, "
"); +} + +module.exports = { + getCommandArguments, + getEventArguments } \ No newline at end of file diff --git a/src/cli.js b/src/cli.js new file mode 100644 index 00000000..c66e301b --- /dev/null +++ b/src/cli.js @@ -0,0 +1,9 @@ +#!/usr/bin/env node +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +var run = require('./run.js'); + +run(undefined); \ No newline at end of file diff --git a/src/constants.js b/src/constants.js index 47046544..db1a7609 100644 --- a/src/constants.js +++ b/src/constants.js @@ -3,17 +3,17 @@ * SPDX-License-Identifier: Apache-2.0 */ -export const CLI_COMMAND_NAME = 'opensearch-reporting-cli' -export const DEFAULT_AUTH = 'none'; -export const DEFAULT_TENANT = 'private'; -export const DEFAULT_FORMAT = 'pdf'; -export const DEFAULT_WIDTH = '1680'; -export const DEFAULT_MIN_HEIGHT = '600'; -export const DEFAULT_FILENAME = 'opensearch-report'; -export const DEFAULT_EMAIL_SUBJECT = 'This is an email containing your opensearch dashboard report'; -export const DEFAULT_EMAIL_NOTE = 'Hi,\nHere is the latest report!'; +const CLI_COMMAND_NAME = 'opensearch-reporting-cli' +const DEFAULT_AUTH = 'none'; +const DEFAULT_TENANT = 'private'; +const DEFAULT_FORMAT = 'pdf'; +const DEFAULT_WIDTH = '1680'; +const DEFAULT_MIN_HEIGHT = '600'; +const DEFAULT_FILENAME = 'opensearch-report'; +const DEFAULT_EMAIL_SUBJECT = 'This is an email containing your opensearch dashboard report'; +const DEFAULT_EMAIL_NOTE = 'Hi,\nHere is the latest report!'; -export const REPORT_TYPE = { +const REPORT_TYPE = { DASHBOARD: 'Dashboard', VISUALIZATION: 'Visualization', NOTEBOOK: 'Notebook', @@ -21,34 +21,34 @@ export const REPORT_TYPE = { OTHER: 'Other', } -export const SELECTOR = { +const SELECTOR = { DASHBOARD: '#dashboardViewport', VISUALIZATION: '.visEditor__content', NOTEBOOK: '.euiPageBody', DISCOVER: 'button[id="downloadReport"]' } -export const FORMAT = { +const FORMAT = { PDF: 'pdf', PNG: 'png', CSV: 'csv' } -export const AUTH = { +const AUTH = { BASIC: 'basic', COGNITO: 'cognito', SAML: 'saml', NONE: 'none', } -export const URL_SOURCE = { +const URL_SOURCE = { DASHBOARDS: "/app/dashboards#", VISUALIZE: "/app/visualize#", DISCOVER: "/app/discover#", NOTEBOOKS: "notebooks", } -export const ENV_VAR = { +const ENV_VAR = { URL: 'OPENSEARCH_URL', USERNAME: 'OPENSEARCH_USERNAME', PASSWORD: 'OPENSEARCH_PASSWORD', @@ -65,7 +65,12 @@ export const ENV_VAR = { EMAIL_NOTE: 'OPENSEARCH_EMAIL_NOTE', } -export const TRANSPORT_TYPE = { +const TRANSPORT_TYPE = { SES: 'ses', SMTP: 'smtp' } + +module.exports = { + CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_TENANT, DEFAULT_FORMAT, DEFAULT_WIDTH, DEFAULT_MIN_HEIGHT, DEFAULT_FILENAME, DEFAULT_EMAIL_SUBJECT, + DEFAULT_EMAIL_NOTE, REPORT_TYPE, SELECTOR, FORMAT, AUTH, URL_SOURCE, ENV_VAR, TRANSPORT_TYPE +}; \ No newline at end of file diff --git a/src/download-helpers.js b/src/download-helpers.js index 4d22cdd8..2ab6e044 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -3,16 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import puppeteer from 'puppeteer'; -import fs from 'fs'; -import { FORMAT, REPORT_TYPE, SELECTOR, AUTH, URL_SOURCE } from './constants.js'; -import { exit } from 'process'; -import ora from 'ora'; +var puppeteer = require('puppeteer'); +var fs = require('fs'); +var { FORMAT, REPORT_TYPE, AUTH, URL_SOURCE } = require('./constants.js'); +var exit = require('process'); -const spinner = ora(); - -export async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport) { - spinner.start('Launching browser '); +module.exports = async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport) { try { const browser = await puppeteer.launch({ headless: true, @@ -41,7 +37,7 @@ export async function downloadReport(url, format, width, height, filename, authT overridePage.setDefaultNavigationTimeout(0); overridePage.setDefaultTimeout(300000); - spinner.info('Connecting to url ' + url); + console.log('Connecting to url ' + url); // auth if (authType !== undefined && authType !== AUTH.NONE && username !== undefined && password !== undefined) { if (authType === AUTH.BASIC) { @@ -53,15 +49,14 @@ export async function downloadReport(url, format, width, height, filename, authT else if (authType === AUTH.COGNITO) { await cognitoAuthentication(page, overridePage, url, username, password, tenant); } - spinner.info('Credentials are verified'); + console.log('Credentials are verified'); } // no auth else { await page.goto(url, { waitUntil: 'networkidle0' }); } - spinner.info('Connected to url ' + url); - spinner.start('Loading page'); + console.log('Loading page'); await page.setViewport({ width: width, height: height, @@ -99,7 +94,7 @@ export async function downloadReport(url, format, width, height, filename, authT await new Promise(resolve => setTimeout(resolve, 2000)); await waitForDynamicContent(page); let buffer; - spinner.text = `Downloading Report...`; + console.log('Downloading Report'); // create pdf, png or csv accordingly if (format === FORMAT.PDF) { @@ -130,7 +125,7 @@ export async function downloadReport(url, format, width, height, filename, authT let payload = await response.json(); buffer = payload.data; } else { - spinner.fail('Please save search and retry'); + console.log('Please save search and retry'); exit(1); } } @@ -148,9 +143,9 @@ export async function downloadReport(url, format, width, height, filename, authT } await browser.close(); - spinner.succeed('The report is downloaded'); + console.log('The report is downloaded'); } catch (e) { - spinner.fail('Downloading report failed. ' + e); + console.log('Downloading report failed. ' + e); exit(1); } } @@ -221,7 +216,7 @@ const basicAuthentication = async (page, overridePage, url, username, password, } } catch (err) { - spinner.fail('Invalid username or password'); + console.log('Invalid username or password'); exit(1); } @@ -232,7 +227,7 @@ const basicAuthentication = async (page, overridePage, url, username, password, await overridePage.waitForTimeout(5000); // Check if tenant was selected successfully. if ((await overridePage.$('button[data-test-subj="confirm"]')) !== null) { - spinner.fail('Invalid tenant'); + console.log('Invalid tenant'); exit(1); } await page.goto(url, { waitUntil: 'networkidle0' }); @@ -260,7 +255,7 @@ const samlAuthentication = async (page, url, username, password, tenant) => { } } catch (err) { - spinner.fail('Invalid username or password'); + console.log('Invalid username or password'); exit(1); } await page.waitForTimeout(2000); @@ -287,7 +282,7 @@ const cognitoAuthentication = async (page, overridePage, url, username, password } } catch (err) { - spinner.fail('Invalid username or password'); + console.log('Invalid username or password'); exit(1); } await page.waitForTimeout(2000); @@ -298,7 +293,7 @@ const cognitoAuthentication = async (page, overridePage, url, username, password // Check if tenant was selected successfully. if ((await overridePage.$('button[data-test-subj="confirm"]')) !== null) { - spinner.fail('Invalid tenant'); + console.log('Invalid tenant'); exit(1); } await page.goto(url, { waitUntil: 'networkidle0' }); @@ -311,8 +306,8 @@ const readStreamToFile = async ( format ) => { if (fs.existsSync(filename)) { - spinner.fail('File with same name already exists.'); - return 1 ; + console.log('File with same name already exists.'); + exit(1); } if (format === FORMAT.PDF || format === FORMAT.PNG) { let base64Image = stream.split(';base64,').pop(); diff --git a/src/email-helpers.js b/src/email-helpers.js index ad46b3a4..72a66164 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -3,16 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import nodemailer from "nodemailer"; -import hbs from "nodemailer-express-handlebars"; -import ora from 'ora'; -import fs from 'fs'; -import AWS from "aws-sdk"; -import path from 'path'; -import { fileURLToPath } from 'url'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const spinner = ora(); +var nodemailer = require('nodemailer'); +var hbs = require('nodemailer-express-handlebars'); +var fs = require('fs'); +var AWS = require('aws-sdk'); +var path = require('path'); +const { exit } = require('process'); let ses; try { @@ -22,21 +18,21 @@ try { // Do not set AWS_SDK_LOAD_CONFIG if aws config file is missing. } -export async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note) { +module.exports = async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note) { if (transport !== undefined && (transport === 'smtp' || ses !== undefined) && sender !== undefined && recipient !== undefined) { - spinner.start('Sending email...'); + console.log('Sending email...'); } else { if (transport === undefined && sender === undefined && recipient === undefined) { deleteTemporaryImage(); return; } else if (transport === undefined) { - spinner.warn('Transport value is missing'); + console.log('Transport value is missing'); } else if (transport === 'ses' && ses === undefined) { - spinner.warn('aws config not found'); + console.log('aws config not found'); } else if (sender === undefined || recipient === undefined) { - spinner.warn('Sender/Recipient value is missing'); + console.log('Sender/Recipient value is missing'); } - spinner.fail('Skipped sending email'); + console.log('Skipped sending email'); deleteTemporaryImage(); return; } @@ -57,9 +53,10 @@ export async function sendEmail(filename, url, sender, recipient, transport, smt // send email await transporter.sendMail(mailOptions, function (err, info) { if (err) { - spinner.fail('Error sending email' + err); + console.log('Error sending email' + err); + exit(1); } else { - spinner.succeed('Email sent successfully'); + console.log('Email sent successfully' + info); } deleteTemporaryImage(); }); diff --git a/src/index.js b/src/index.js old mode 100755 new mode 100644 index bca4abbe..c67271fd --- a/src/index.js +++ b/src/index.js @@ -1,42 +1,12 @@ -#!/usr/bin/env node /* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ -import { sendEmail } from './email-helpers.js'; -import { downloadReport } from './download-helpers.js'; -import { getCommandArguments } from './arguments.js'; +var run = require('./run.js'); -"use strict"; - -let options = await getCommandArguments(); - -await downloadReport( - options.url, - options.format, - options.width, - options.height, - options.filename, - options.auth, - options.username, - options.password, - options.tenant, - options.time, - options.transport -); - -await sendEmail( - options.filename, - options.url, - options.sender, - options.recipient, - options.transport, - options.smtphost, - options.smtpport, - options.smtpsecure, - options.smtpusername, - options.smtppassword, - options.subject, - options.note -); +exports.handler = async function (event) { + console.log('IS_LAMBDA: '+process.env.IS_LAMBDA); + await run(event); + return; +} diff --git a/src/run.js b/src/run.js new file mode 100755 index 00000000..39f96730 --- /dev/null +++ b/src/run.js @@ -0,0 +1,44 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +var sendEmail = require('./email-helpers.js'); +var downloadReport = require('./download-helpers.js'); +var { getCommandArguments, getEventArguments } = require('./arguments.js'); + +module.exports = async function run(args) { + var options = args !== undefined ? await getEventArguments(args) : await getCommandArguments(); + if (args !== undefined) { + options.filename = '/tmp/' + options.filename; + } + + await downloadReport( + options.url, + options.format, + options.width, + options.height, + options.filename, + options.auth, + options.username, + options.password, + options.tenant, + options.time, + options.transport + ); + + await sendEmail( + options.filename, + options.url, + options.sender, + options.recipient, + options.transport, + options.smtphost, + options.smtpport, + options.smtpsecure, + options.smtpusername, + options.smtppassword, + options.subject, + options.note + ); +} diff --git a/yarn.lock b/yarn.lock index 226368e2..542cb2ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.1.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" @@ -12,19 +12,19 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.20.5": version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz" integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== "@babel/core@^7.11.6", "@babel/core@^7.12.3": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz" integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== dependencies: "@ampproject/remapping" "^2.1.0" @@ -45,7 +45,7 @@ "@babel/generator@^7.20.7", "@babel/generator@^7.7.2": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz" integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== dependencies: "@babel/types" "^7.20.7" @@ -54,7 +54,7 @@ "@babel/helper-compilation-targets@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz" integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== dependencies: "@babel/compat-data" "^7.20.5" @@ -65,12 +65,12 @@ "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-function-name@^7.19.0": version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: "@babel/template" "^7.18.10" @@ -78,21 +78,21 @@ "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.20.7": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz" integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -106,41 +106,41 @@ "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-simple-access@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.19.4": version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz" integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== dependencies: "@babel/template" "^7.20.7" @@ -149,7 +149,7 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -158,110 +158,110 @@ "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz" integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz" integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== dependencies: "@babel/helper-plugin-utils" "^7.19.0" "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" @@ -270,7 +270,7 @@ "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.10.tgz#2bf98239597fcec12f842756f186a9dde6d09230" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz" integrity sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg== dependencies: "@babel/code-frame" "^7.18.6" @@ -286,7 +286,7 @@ "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz" integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: "@babel/helper-string-parser" "^7.19.4" @@ -295,12 +295,12 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -311,12 +311,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.3.1.tgz#3e3f876e4e47616ea3b1464b9fbda981872e9583" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.3.1.tgz" integrity sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg== dependencies: "@jest/types" "^29.3.1" @@ -328,7 +328,7 @@ "@jest/core@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.3.1.tgz#bff00f413ff0128f4debec1099ba7dcd649774a1" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.3.1.tgz" integrity sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw== dependencies: "@jest/console" "^29.3.1" @@ -362,7 +362,7 @@ "@jest/environment@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.3.1.tgz#eb039f726d5fcd14698acd072ac6576d41cfcaa6" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz" integrity sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag== dependencies: "@jest/fake-timers" "^29.3.1" @@ -372,14 +372,14 @@ "@jest/expect-utils@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.3.1.tgz#531f737039e9b9e27c42449798acb5bba01935b6" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz" integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== dependencies: jest-get-type "^29.2.0" "@jest/expect@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.3.1.tgz#456385b62894349c1d196f2d183e3716d4c6a6cd" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.3.1.tgz" integrity sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg== dependencies: expect "^29.3.1" @@ -387,7 +387,7 @@ "@jest/fake-timers@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.3.1.tgz#b140625095b60a44de820876d4c14da1aa963f67" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz" integrity sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A== dependencies: "@jest/types" "^29.3.1" @@ -399,7 +399,7 @@ "@jest/globals@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.3.1.tgz#92be078228e82d629df40c3656d45328f134a0c6" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.3.1.tgz" integrity sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q== dependencies: "@jest/environment" "^29.3.1" @@ -409,7 +409,7 @@ "@jest/reporters@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.3.1.tgz#9a6d78c109608e677c25ddb34f907b90e07b4310" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.3.1.tgz" integrity sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -439,14 +439,14 @@ "@jest/schemas@^29.0.0": version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz" integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^29.2.0": version "29.2.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz" integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== dependencies: "@jridgewell/trace-mapping" "^0.3.15" @@ -455,7 +455,7 @@ "@jest/test-result@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.3.1.tgz#92cd5099aa94be947560a24610aa76606de78f50" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.3.1.tgz" integrity sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw== dependencies: "@jest/console" "^29.3.1" @@ -465,7 +465,7 @@ "@jest/test-sequencer@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz#fa24b3b050f7a59d48f7ef9e0b782ab65123090d" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz" integrity sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA== dependencies: "@jest/test-result" "^29.3.1" @@ -475,7 +475,7 @@ "@jest/transform@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.3.1.tgz#1e6bd3da4af50b5c82a539b7b1f3770568d6e36d" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.3.1.tgz" integrity sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug== dependencies: "@babel/core" "^7.11.6" @@ -496,7 +496,7 @@ "@jest/types@^29.3.1": version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz" integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== dependencies: "@jest/schemas" "^29.0.0" @@ -508,7 +508,7 @@ "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" @@ -516,7 +516,7 @@ "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -525,22 +525,22 @@ "@jridgewell/resolve-uri@3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== dependencies: "@jridgewell/resolve-uri" "3.1.0" @@ -548,31 +548,31 @@ "@sinclair/typebox@^0.24.1": version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinonjs/commons@^1.7.0": version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^9.1.2": version "9.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== dependencies: "@sinonjs/commons" "^1.7.0" "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/babel__core@^7.1.14": version "7.1.20" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz" integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== dependencies: "@babel/parser" "^7.1.0" @@ -583,14 +583,14 @@ "@types/babel__generator@*": version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" @@ -598,79 +598,79 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.18.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz" integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" "@types/graceful-fs@^4.1.3": version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/node@*": version "18.11.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.15.tgz#de0e1fbd2b22b962d45971431e2ae696643d3f5d" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz" integrity sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw== "@types/prettier@^2.1.5": version "2.7.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz" integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/stack-utils@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/yargs-parser@*": version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": version "17.0.17" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.17.tgz#5672e5621f8e0fca13f433a8017aae4b7a2a03e7" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz" integrity sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: "@types/node" "*" abab@^2.0.5, abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== acorn-globals@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: acorn "^7.1.1" @@ -678,65 +678,65 @@ acorn-globals@^6.0.0: acorn-walk@^7.1.1: version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn@^7.1.1: version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.5.0: version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -744,24 +744,24 @@ anymatch@^3.0.3: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sdk@^2.1237.0: version "2.1276.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1276.0.tgz#60d32305b687a1c8367370574d2b0d1c40d30e26" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1276.0.tgz" integrity sha512-0TGPsW/uMQy0trfYZD+dvSQ9Bf8NmKK9ISj5xQJGopNt/Kxh0vLKBPy2mFmKdxeFtis6wn4c9uTp7/3p0ADa1w== dependencies: buffer "4.9.2" @@ -777,7 +777,7 @@ aws-sdk@^2.1237.0: babel-jest@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz" integrity sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA== dependencies: "@jest/transform" "^29.3.1" @@ -790,7 +790,7 @@ babel-jest@^29.3.1: babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -801,7 +801,7 @@ babel-plugin-istanbul@^6.1.1: babel-plugin-jest-hoist@^29.2.0: version "29.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz" integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== dependencies: "@babel/template" "^7.3.3" @@ -811,7 +811,7 @@ babel-plugin-jest-hoist@^29.2.0: babel-preset-current-node-syntax@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -829,7 +829,7 @@ babel-preset-current-node-syntax@^1.0.0: babel-preset-jest@^29.2.0: version "29.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz" integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== dependencies: babel-plugin-jest-hoist "^29.2.0" @@ -837,17 +837,17 @@ babel-preset-jest@^29.2.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bl@^4.0.3: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -856,7 +856,7 @@ bl@^4.0.3: bl@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz" integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== dependencies: buffer "^6.0.3" @@ -865,7 +865,7 @@ bl@^5.0.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -873,26 +873,26 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.21.3: version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== dependencies: caniuse-lite "^1.0.30001400" @@ -902,24 +902,24 @@ browserslist@^4.21.3: bser@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@4.9.2: version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" @@ -928,7 +928,7 @@ buffer@4.9.2: buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -936,7 +936,7 @@ buffer@^5.2.1, buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -944,7 +944,7 @@ buffer@^6.0.3: call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -952,27 +952,27 @@ call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001400: version "1.0.30001441" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz" integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -981,7 +981,7 @@ chalk@^2.0.0: chalk@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -989,44 +989,44 @@ chalk@^4.0.0: chalk@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chownr@^1.1.1: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: version "3.7.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.0.tgz#6d01b3696c59915b6ce057e4aa4adfc2fa25f5ef" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz" integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== cjs-module-lexer@^1.0.0: version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== cli-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: restore-cursor "^4.0.0" cli-spinners@^2.6.1: version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -1035,80 +1035,80 @@ cliui@^8.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== co@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^9.4.0: version "9.4.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" + resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cross-fetch@3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== dependencies: node-fetch "2.6.7" cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1117,24 +1117,24 @@ cross-spawn@^7.0.3: cssom@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz" integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" data-urls@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: abab "^2.0.6" @@ -1143,122 +1143,122 @@ data-urls@^3.0.1: debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decimal.js@^10.3.1: version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== dedent@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== detect-newline@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== devtools-protocol@0.0.1045489: version "0.0.1045489" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz#f959ad560b05acd72d55644bc3fb8168a83abf28" + resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz" integrity sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ== diff-sequences@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.3.1.tgz#104b5b95fe725932421a9c6e5b4bef84c3f2249e" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz" integrity sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ== domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" dompurify@^2.1.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.1.tgz#f9cb1a275fde9af6f2d0a2644ef648dd6847b631" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.4.1.tgz" integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA== dotenv@^16.0.3: version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== electron-to-chromium@^1.4.251: version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== emittery@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escodegen@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" @@ -1270,27 +1270,27 @@ escodegen@^2.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" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== events@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz" integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -1305,12 +1305,12 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expect@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" + resolved "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz" integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== dependencies: "@jest/expect-utils" "^29.3.1" @@ -1321,7 +1321,7 @@ expect@^29.3.1: express-handlebars@^6.0.0: version "6.0.6" - resolved "https://registry.yarnpkg.com/express-handlebars/-/express-handlebars-6.0.6.tgz#2589bcc4cf9545918047c767e66fa625f5ace85b" + resolved "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.6.tgz" integrity sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ== dependencies: glob "^8.0.2" @@ -1330,7 +1330,7 @@ express-handlebars@^6.0.0: extract-zip@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: debug "^4.1.1" @@ -1341,38 +1341,38 @@ extract-zip@2.0.1: fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fb-watchman@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -1380,14 +1380,14 @@ find-up@^4.0.0, find-up@^4.1.0: for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -1396,12 +1396,12 @@ form-data@^4.0.0: fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: @@ -1411,22 +1411,22 @@ fsevents@^2.3.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== dependencies: function-bind "^1.1.1" @@ -1435,24 +1435,24 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob@^7.1.3, glob@^7.1.4: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1464,7 +1464,7 @@ glob@^7.1.3, glob@^7.1.4: glob@^8.0.2: version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: fs.realpath "^1.0.0" @@ -1475,24 +1475,24 @@ glob@^8.0.2: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" graceful-fs@^4.2.10, graceful-fs@^4.2.9: version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== handlebars@^4.7.7: version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" @@ -1504,48 +1504,48 @@ handlebars@^4.7.7: has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -1554,7 +1554,7 @@ http-proxy-agent@^5.0.0: https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -1562,29 +1562,29 @@ https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@1.1.13: version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== import-local@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -1592,12 +1592,12 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -1605,12 +1605,12 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-arguments@^1.0.4: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -1618,61 +1618,61 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-callable@^1.1.3: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.9.0: version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-generator-function@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: has-tostringtag "^1.0.0" is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-typed-array@^1.1.10, is-typed-array@^1.1.3: version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -1683,27 +1683,27 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3: is-unicode-supported@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== isarray@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -1714,7 +1714,7 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -1723,7 +1723,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -1732,7 +1732,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" @@ -1740,7 +1740,7 @@ istanbul-reports@^3.1.3: jest-changed-files@^29.2.0: version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz" integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== dependencies: execa "^5.0.0" @@ -1748,7 +1748,7 @@ jest-changed-files@^29.2.0: jest-circus@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.3.1.tgz#177d07c5c0beae8ef2937a67de68f1e17bbf1b4a" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.3.1.tgz" integrity sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg== dependencies: "@jest/environment" "^29.3.1" @@ -1773,7 +1773,7 @@ jest-circus@^29.3.1: jest-cli@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.3.1.tgz#e89dff427db3b1df50cea9a393ebd8640790416d" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.3.1.tgz" integrity sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ== dependencies: "@jest/core" "^29.3.1" @@ -1791,7 +1791,7 @@ jest-cli@^29.3.1: jest-config@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.3.1.tgz#0bc3dcb0959ff8662957f1259947aedaefb7f3c6" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.3.1.tgz" integrity sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg== dependencies: "@babel/core" "^7.11.6" @@ -1819,7 +1819,7 @@ jest-config@^29.3.1: jest-diff@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.3.1.tgz#d8215b72fed8f1e647aed2cae6c752a89e757527" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz" integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== dependencies: chalk "^4.0.0" @@ -1829,14 +1829,14 @@ jest-diff@^29.3.1: jest-docblock@^29.2.0: version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz" integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== dependencies: detect-newline "^3.0.0" jest-each@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.3.1.tgz#bc375c8734f1bb96625d83d1ca03ef508379e132" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.3.1.tgz" integrity sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA== dependencies: "@jest/types" "^29.3.1" @@ -1847,7 +1847,7 @@ jest-each@^29.3.1: jest-environment-node@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.3.1.tgz#5023b32472b3fba91db5c799a0d5624ad4803e74" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.3.1.tgz" integrity sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag== dependencies: "@jest/environment" "^29.3.1" @@ -1859,12 +1859,12 @@ jest-environment-node@^29.3.1: jest-get-type@^29.2.0: version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz" integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== jest-haste-map@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.3.1.tgz#af83b4347f1dae5ee8c2fb57368dc0bb3e5af843" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.3.1.tgz" integrity sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A== dependencies: "@jest/types" "^29.3.1" @@ -1883,7 +1883,7 @@ jest-haste-map@^29.3.1: jest-leak-detector@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz#95336d020170671db0ee166b75cd8ef647265518" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz" integrity sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA== dependencies: jest-get-type "^29.2.0" @@ -1891,7 +1891,7 @@ jest-leak-detector@^29.3.1: jest-matcher-utils@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz#6e7f53512f80e817dfa148672bd2d5d04914a572" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz" integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== dependencies: chalk "^4.0.0" @@ -1901,7 +1901,7 @@ jest-matcher-utils@^29.3.1: jest-message-util@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.3.1.tgz#37bc5c468dfe5120712053dd03faf0f053bd6adb" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz" integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== dependencies: "@babel/code-frame" "^7.12.13" @@ -1916,7 +1916,7 @@ jest-message-util@^29.3.1: jest-mock@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.3.1.tgz#60287d92e5010979d01f218c6b215b688e0f313e" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz" integrity sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA== dependencies: "@jest/types" "^29.3.1" @@ -1925,17 +1925,17 @@ jest-mock@^29.3.1: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^29.2.0: version "29.2.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz" integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== jest-resolve-dependencies@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz#a6a329708a128e68d67c49f38678a4a4a914c3bf" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz" integrity sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA== dependencies: jest-regex-util "^29.2.0" @@ -1943,7 +1943,7 @@ jest-resolve-dependencies@^29.3.1: jest-resolve@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.3.1.tgz#9a4b6b65387a3141e4a40815535c7f196f1a68a7" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.3.1.tgz" integrity sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw== dependencies: chalk "^4.0.0" @@ -1958,7 +1958,7 @@ jest-resolve@^29.3.1: jest-runner@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.3.1.tgz#a92a879a47dd096fea46bb1517b0a99418ee9e2d" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.3.1.tgz" integrity sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA== dependencies: "@jest/console" "^29.3.1" @@ -1985,7 +1985,7 @@ jest-runner@^29.3.1: jest-runtime@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.3.1.tgz#21efccb1a66911d6d8591276a6182f520b86737a" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.3.1.tgz" integrity sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A== dependencies: "@jest/environment" "^29.3.1" @@ -2013,7 +2013,7 @@ jest-runtime@^29.3.1: jest-snapshot@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.3.1.tgz#17bcef71a453adc059a18a32ccbd594b8cc4e45e" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.3.1.tgz" integrity sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA== dependencies: "@babel/core" "^7.11.6" @@ -2043,7 +2043,7 @@ jest-snapshot@^29.3.1: jest-util@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz" integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== dependencies: "@jest/types" "^29.3.1" @@ -2055,7 +2055,7 @@ jest-util@^29.3.1: jest-validate@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.3.1.tgz#d56fefaa2e7d1fde3ecdc973c7f7f8f25eea704a" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.3.1.tgz" integrity sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g== dependencies: "@jest/types" "^29.3.1" @@ -2067,7 +2067,7 @@ jest-validate@^29.3.1: jest-watcher@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.3.1.tgz#3341547e14fe3c0f79f9c3a4c62dbc3fc977fd4a" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.3.1.tgz" integrity sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg== dependencies: "@jest/test-result" "^29.3.1" @@ -2081,7 +2081,7 @@ jest-watcher@^29.3.1: jest-worker@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.3.1.tgz#e9462161017a9bb176380d721cab022661da3d6b" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz" integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== dependencies: "@types/node" "*" @@ -2091,7 +2091,7 @@ jest-worker@^29.3.1: jest@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.3.1.tgz#c130c0d551ae6b5459b8963747fed392ddbde122" + resolved "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz" integrity sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== dependencies: "@jest/core" "^29.3.1" @@ -2101,17 +2101,17 @@ jest@^29.3.1: jmespath@0.16.0: version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz" integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -2119,7 +2119,7 @@ js-yaml@^3.13.1: jsdom@^19.0.0: version "19.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-19.0.0.tgz#93e67c149fe26816d38a849ea30ac93677e16b6a" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz" integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== dependencies: abab "^2.0.5" @@ -2152,32 +2152,32 @@ jsdom@^19.0.0: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json5@^2.2.1: version "2.2.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz" integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== leven@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" @@ -2185,24 +2185,24 @@ levn@~0.3.0: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== dependencies: chalk "^5.0.0" @@ -2210,40 +2210,40 @@ log-symbols@^5.1.0: lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-dir@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" makeerror@1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -2251,123 +2251,123 @@ micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz" integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== dependencies: brace-expansion "^2.0.1" minimist@^1.2.5: version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== mkdirp-classic@^0.5.2: version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== node-fetch@2.6.7: version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.6: version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz" integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== nodemailer-express-handlebars@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nodemailer-express-handlebars/-/nodemailer-express-handlebars-5.0.0.tgz#5dca06b55a4bcc9a95e50ff65bac98aa8e93ba64" + resolved "https://registry.npmjs.org/nodemailer-express-handlebars/-/nodemailer-express-handlebars-5.0.0.tgz" integrity sha512-DMeoCr8kSyLjzXZR+wclDidPDcgy68mIiuSlDZeeDP4IQLJmRzXrlTv+3C2r+uYUnajN5vxqB8pTBdju6aH/yA== dependencies: express-handlebars "^6.0.0" nodemailer@^6.8.0: version "6.8.0" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.8.0.tgz#804bcc5256ee5523bc914506ee59f8de8f0b1cd5" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz" integrity sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ== normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nwsapi@^2.2.0: version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" optionator@^0.8.1: version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -2379,7 +2379,7 @@ optionator@^0.8.1: ora@^6.1.2: version "6.1.2" - resolved "https://registry.yarnpkg.com/ora/-/ora-6.1.2.tgz#7b3c1356b42fd90fb1dad043d5dbe649388a0bf5" + resolved "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz" integrity sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw== dependencies: bl "^5.0.0" @@ -2394,33 +2394,33 @@ ora@^6.1.2: p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -2430,64 +2430,64 @@ parse-json@^5.2.0: parse5@6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== pend@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== pretty-format@^29.3.1: version "29.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz" integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== dependencies: "@jest/schemas" "^29.0.0" @@ -2496,12 +2496,12 @@ pretty-format@^29.3.1: progress@2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -2509,17 +2509,17 @@ prompts@^2.0.1: proxy-from-env@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== psl@^1.1.33: version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -2527,17 +2527,17 @@ pump@^3.0.0: punycode@1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== puppeteer-core@18.2.1: version "18.2.1" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-18.2.1.tgz#9b7827bb2bf478bb615e2c21425e4659555dc1fe" + resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-18.2.1.tgz" integrity sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw== dependencies: cross-fetch "3.1.5" @@ -2553,7 +2553,7 @@ puppeteer-core@18.2.1: puppeteer@^18.2.0: version "18.2.1" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-18.2.1.tgz#08967cd423efe511ee4c6e3a5c882ffaf2e6bbf3" + resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-18.2.1.tgz" integrity sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ== dependencies: https-proxy-agent "5.0.1" @@ -2563,22 +2563,22 @@ puppeteer@^18.2.0: querystring@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== react-is@^18.0.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" @@ -2587,34 +2587,34 @@ readable-stream@^3.1.1, readable-stream@^3.4.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve.exports@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== resolve@^1.20.0: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -2623,7 +2623,7 @@ resolve@^1.20.0: restore-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" @@ -2631,80 +2631,80 @@ restore-cursor@^4.0.0: rimraf@3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== sax@>=0.6.0: version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" semver@^6.0.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.5: version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map-support@0.5.13: version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" @@ -2712,24 +2712,24 @@ source-map-support@0.5.13: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" string-length@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -2737,7 +2737,7 @@ string-length@^4.0.1: string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -2746,74 +2746,74 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.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" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tar-fs@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -2823,7 +2823,7 @@ tar-fs@2.1.1: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -2834,7 +2834,7 @@ tar-stream@^2.1.4: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -2843,29 +2843,29 @@ test-exclude@^6.0.0: through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmpl@1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tough-cookie@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: psl "^1.1.33" @@ -2875,41 +2875,41 @@ tough-cookie@^4.0.0: tr46@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== type-check@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" type-detect@4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== uglify-js@^3.1.4: version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbzip2-stream@1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" @@ -2917,12 +2917,12 @@ unbzip2-stream@1.4.3: universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== update-browserslist-db@^1.0.9: version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" @@ -2930,7 +2930,7 @@ update-browserslist-db@^1.0.9: url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -2938,7 +2938,7 @@ url-parse@^1.5.3: url@0.10.3: version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + resolved "https://registry.npmjs.org/url/-/url-0.10.3.tgz" integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== dependencies: punycode "1.3.2" @@ -2946,12 +2946,12 @@ url@0.10.3: util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.12.4: version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -2962,12 +2962,12 @@ util@^0.12.4: uuid@8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz" integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== v8-to-istanbul@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: "@jridgewell/trace-mapping" "^0.3.12" @@ -2976,57 +2976,57 @@ v8-to-istanbul@^9.0.1: w3c-hr-time@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz" integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== dependencies: xml-name-validator "^4.0.0" walker@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz" integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== dependencies: tr46 "^3.0.0" @@ -3034,7 +3034,7 @@ whatwg-url@^10.0.0: whatwg-url@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== dependencies: tr46 "^3.0.0" @@ -3042,7 +3042,7 @@ whatwg-url@^11.0.0: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -3050,7 +3050,7 @@ whatwg-url@^5.0.0: which-typed-array@^1.1.2: version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: available-typed-arrays "^1.0.5" @@ -3062,24 +3062,24 @@ which-typed-array@^1.1.2: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -3088,12 +3088,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -3101,22 +3101,22 @@ write-file-atomic@^4.0.1: ws@8.9.0: version "8.9.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" + resolved "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz" integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== ws@^8.2.3: version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== xml2js@0.4.19: version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz" integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== dependencies: sax ">=0.6.0" @@ -3124,37 +3124,37 @@ xml2js@0.4.19: xmlbuilder@~9.0.1: version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz" integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.3.1: version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== dependencies: cliui "^8.0.1" @@ -3167,7 +3167,7 @@ yargs@^17.3.1: yauzl@^2.10.0: version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" @@ -3175,5 +3175,5 @@ yauzl@^2.10.0: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From ade0f50a9aa95823b7fa95e7992ed7e3dc15db00 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 31 Jan 2023 07:00:31 +0000 Subject: [PATCH 10/25] Change path to fix test failure Signed-off-by: Rupal Mahajan --- test/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cli.js b/test/cli.js index 9e0a314f..40ac26f7 100644 --- a/test/cli.js +++ b/test/cli.js @@ -8,7 +8,7 @@ const exec = require('child_process').exec; module.exports = function (args, cwd) { return new Promise(resolve => { - exec(`node ${path.resolve('./src/index.js')} ${args.join(' ')}`, + exec(`node ${path.resolve('./src/cli.js')} ${args.join(' ')}`, { cwd }, (error, stdout, stderr) => { resolve({ From e4c03941342bde5840a263b5b1ac9fe58f68966b Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 31 Jan 2023 20:43:59 +0000 Subject: [PATCH 11/25] Add ora spinner back Signed-off-by: Rupal Mahajan --- package.json | 2 +- src/arguments.js | 12 ++-- src/download-helpers.js | 30 +++++---- src/email-helpers.js | 16 ++--- yarn.lock | 134 +++++++++++++++++----------------------- 5 files changed, 89 insertions(+), 105 deletions(-) diff --git a/package.json b/package.json index 9e0ee92f..19a7eec9 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "lodash": "^4.17.21", "nodemailer": "^6.8.0", "nodemailer-express-handlebars": "^5.0.0", - "ora": "^6.1.2", + "ora": "^3.0.0", "puppeteer": "^18.2.0" }, "bin": { diff --git a/src/arguments.js b/src/arguments.js index 8c4d049d..01220091 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -7,9 +7,11 @@ var { program, Option } = require('commander'); var { exit } = require('process'); var fs = require('fs'); +const ora = require('ora'); var { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } = require('./constants.js'); var dotenv = require("dotenv"); dotenv.config(); +const spinner = ora(''); async function getCommandArguments() { @@ -66,7 +68,7 @@ Note: The tenant in the url has the higher priority than tenant value provided a program.parse(process.argv); const options = program.opts(); - console.log('Fetching the arguments values'); + spinner.start('Fetching the arguments values'); return getOptions(options); } @@ -118,7 +120,7 @@ function getOptions(options) { // Set url. commandOptions.url = options.url || process.env[ENV_VAR.URL]; if (commandOptions.url === undefined || commandOptions.url.length <= 0) { - console.log('Please specify URL'); + spinner.fail('Please specify URL'); exit(1); } @@ -146,13 +148,13 @@ function getOptions(options) { if ((commandOptions.auth !== undefined && commandOptions.auth !== DEFAULT_AUTH) && ((commandOptions.username == undefined || commandOptions.username.length <= 0) || (commandOptions.password == undefined || commandOptions.password.length <= 0))) { - console.log('Please specify a valid username or password'); + spinner.fail('Please specify a valid username or password'); exit(1); } // If auth type is none and credentials are present, give warning auth type might be missing. if (commandOptions.auth === DEFAULT_AUTH && commandOptions.username !== undefined && commandOptions.password !== undefined) { - console.log('Credentials are present but auth type is missing. Trying to reach url with no authentication.'); + spinner.fail('Credentials are present but auth type is missing. Trying to reach url with no authentication.'); } // Set tenant @@ -198,7 +200,7 @@ function getOptions(options) { } commandOptions.note = getHtml(commandOptions.note); - console.log('Fetched argument values'); + spinner.succeed('Fetched argument values'); return commandOptions; } diff --git a/src/download-helpers.js b/src/download-helpers.js index 2ab6e044..654ba396 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -7,8 +7,11 @@ var puppeteer = require('puppeteer'); var fs = require('fs'); var { FORMAT, REPORT_TYPE, AUTH, URL_SOURCE } = require('./constants.js'); var exit = require('process'); +const ora = require('ora'); +const spinner = ora(''); module.exports = async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport) { + spinner.start('Launching browser '); try { const browser = await puppeteer.launch({ headless: true, @@ -37,7 +40,7 @@ module.exports = async function downloadReport(url, format, width, height, filen overridePage.setDefaultNavigationTimeout(0); overridePage.setDefaultTimeout(300000); - console.log('Connecting to url ' + url); + spinner.info('Connecting to url ' + url); // auth if (authType !== undefined && authType !== AUTH.NONE && username !== undefined && password !== undefined) { if (authType === AUTH.BASIC) { @@ -49,14 +52,15 @@ module.exports = async function downloadReport(url, format, width, height, filen else if (authType === AUTH.COGNITO) { await cognitoAuthentication(page, overridePage, url, username, password, tenant); } - console.log('Credentials are verified'); + spinner.info('Credentials are verified'); } // no auth else { await page.goto(url, { waitUntil: 'networkidle0' }); } - console.log('Loading page'); + spinner.info('Connected to url ' + url); + spinner.start('Loading page'); await page.setViewport({ width: width, height: height, @@ -94,7 +98,7 @@ module.exports = async function downloadReport(url, format, width, height, filen await new Promise(resolve => setTimeout(resolve, 2000)); await waitForDynamicContent(page); let buffer; - console.log('Downloading Report'); + spinner.text = `Downloading Report...`; // create pdf, png or csv accordingly if (format === FORMAT.PDF) { @@ -125,7 +129,7 @@ module.exports = async function downloadReport(url, format, width, height, filen let payload = await response.json(); buffer = payload.data; } else { - console.log('Please save search and retry'); + spinner.fail('Please save search and retry'); exit(1); } } @@ -143,9 +147,9 @@ module.exports = async function downloadReport(url, format, width, height, filen } await browser.close(); - console.log('The report is downloaded'); + spinner.succeed('The report is downloaded'); } catch (e) { - console.log('Downloading report failed. ' + e); + spinner.fail('Downloading report failed. ' + e); exit(1); } } @@ -216,7 +220,7 @@ const basicAuthentication = async (page, overridePage, url, username, password, } } catch (err) { - console.log('Invalid username or password'); + spinner.fail('Invalid username or password'); exit(1); } @@ -227,7 +231,7 @@ const basicAuthentication = async (page, overridePage, url, username, password, await overridePage.waitForTimeout(5000); // Check if tenant was selected successfully. if ((await overridePage.$('button[data-test-subj="confirm"]')) !== null) { - console.log('Invalid tenant'); + spinner.fail('Invalid tenant'); exit(1); } await page.goto(url, { waitUntil: 'networkidle0' }); @@ -255,7 +259,7 @@ const samlAuthentication = async (page, url, username, password, tenant) => { } } catch (err) { - console.log('Invalid username or password'); + spinner.fail('Invalid username or password'); exit(1); } await page.waitForTimeout(2000); @@ -282,7 +286,7 @@ const cognitoAuthentication = async (page, overridePage, url, username, password } } catch (err) { - console.log('Invalid username or password'); + spinner.fail('Invalid username or password'); exit(1); } await page.waitForTimeout(2000); @@ -293,7 +297,7 @@ const cognitoAuthentication = async (page, overridePage, url, username, password // Check if tenant was selected successfully. if ((await overridePage.$('button[data-test-subj="confirm"]')) !== null) { - console.log('Invalid tenant'); + spinner.fail('Invalid tenant'); exit(1); } await page.goto(url, { waitUntil: 'networkidle0' }); @@ -306,7 +310,7 @@ const readStreamToFile = async ( format ) => { if (fs.existsSync(filename)) { - console.log('File with same name already exists.'); + spinner.fail('File with same name already exists.'); exit(1); } if (format === FORMAT.PDF || format === FORMAT.PNG) { diff --git a/src/email-helpers.js b/src/email-helpers.js index 72a66164..bc0a29e3 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -9,6 +9,8 @@ var fs = require('fs'); var AWS = require('aws-sdk'); var path = require('path'); const { exit } = require('process'); +const ora = require('ora'); +const spinner = ora(''); let ses; try { @@ -20,19 +22,19 @@ try { module.exports = async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note) { if (transport !== undefined && (transport === 'smtp' || ses !== undefined) && sender !== undefined && recipient !== undefined) { - console.log('Sending email...'); + spinner.start('Sending email...'); } else { if (transport === undefined && sender === undefined && recipient === undefined) { deleteTemporaryImage(); return; } else if (transport === undefined) { - console.log('Transport value is missing'); + spinner.warn('Transport value is missing'); } else if (transport === 'ses' && ses === undefined) { - console.log('aws config not found'); + spinner.warn('aws config not found'); } else if (sender === undefined || recipient === undefined) { - console.log('Sender/Recipient value is missing'); + spinner.warn('Sender/Recipient value is missing'); } - console.log('Skipped sending email'); + spinner.fail('Skipped sending email'); deleteTemporaryImage(); return; } @@ -53,10 +55,10 @@ module.exports = async function sendEmail(filename, url, sender, recipient, tran // send email await transporter.sendMail(mailOptions, function (err, info) { if (err) { - console.log('Error sending email' + err); + spinner.fail('Error sending email' + err); exit(1); } else { - console.log('Email sent successfully' + info); + spinner.succeed('Email sent successfully' + info); } deleteTemporaryImage(); }); diff --git a/yarn.lock b/yarn.lock index 542cb2ad..24a13d90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -705,16 +705,16 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -854,15 +854,6 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -934,14 +925,6 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" @@ -970,9 +953,9 @@ caniuse-lite@^1.0.30001400: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz" integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -987,11 +970,6 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" @@ -1012,16 +990,16 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== dependencies: - restore-cursor "^4.0.0" + restore-cursor "^2.0.0" -cli-spinners@^2.6.1: +cli-spinners@^2.0.0: version "2.7.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== cliui@^8.0.1: @@ -1577,7 +1555,7 @@ ieee754@1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -1650,11 +1628,6 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -1681,11 +1654,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3: gopd "^1.0.1" has-tostringtag "^1.0.0" -is-unicode-supported@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - isarray@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -2200,13 +2168,12 @@ lodash@^4.17.21: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" + chalk "^2.0.1" lru-cache@^5.1.1: version "5.1.1" @@ -2261,6 +2228,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -2358,7 +2330,14 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -2377,19 +2356,16 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz" - integrity sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw== - dependencies: - bl "^5.0.0" - chalk "^5.0.0" - cli-cursor "^4.0.0" - cli-spinners "^2.6.1" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.1.0" - strip-ansi "^7.0.1" +ora@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" wcwidth "^1.0.1" p-limit@^2.2.0: @@ -2621,12 +2597,12 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== dependencies: - onetime "^5.1.0" + onetime "^2.0.0" signal-exit "^3.0.2" rimraf@3.0.2: @@ -2751,6 +2727,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2758,13 +2741,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" From 87d6b53bc845a4211670de4684aa8d16650c1405 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Tue, 31 Jan 2023 20:48:31 +0000 Subject: [PATCH 12/25] nit Signed-off-by: Rupal Mahajan --- src/arguments.js | 2 +- src/download-helpers.js | 5 ++--- src/email-helpers.js | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/arguments.js b/src/arguments.js index 01220091..b19dc9af 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -154,7 +154,7 @@ function getOptions(options) { // If auth type is none and credentials are present, give warning auth type might be missing. if (commandOptions.auth === DEFAULT_AUTH && commandOptions.username !== undefined && commandOptions.password !== undefined) { - spinner.fail('Credentials are present but auth type is missing. Trying to reach url with no authentication.'); + spinner.warn('Credentials are present but auth type is missing. Trying to reach url with no authentication.'); } // Set tenant diff --git a/src/download-helpers.js b/src/download-helpers.js index 654ba396..9b5bbeb9 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -40,7 +40,6 @@ module.exports = async function downloadReport(url, format, width, height, filen overridePage.setDefaultNavigationTimeout(0); overridePage.setDefaultTimeout(300000); - spinner.info('Connecting to url ' + url); // auth if (authType !== undefined && authType !== AUTH.NONE && username !== undefined && password !== undefined) { if (authType === AUTH.BASIC) { @@ -130,7 +129,7 @@ module.exports = async function downloadReport(url, format, width, height, filen buffer = payload.data; } else { spinner.fail('Please save search and retry'); - exit(1); + process.exit(1); } } @@ -150,7 +149,7 @@ module.exports = async function downloadReport(url, format, width, height, filen spinner.succeed('The report is downloaded'); } catch (e) { spinner.fail('Downloading report failed. ' + e); - exit(1); + process.exit(1); } } diff --git a/src/email-helpers.js b/src/email-helpers.js index bc0a29e3..768aeb0c 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -58,7 +58,7 @@ module.exports = async function sendEmail(filename, url, sender, recipient, tran spinner.fail('Error sending email' + err); exit(1); } else { - spinner.succeed('Email sent successfully' + info); + spinner.succeed('Email sent successfully'); } deleteTemporaryImage(); }); From 5fb125cb6861f75d387d2edc018d923426611a1e Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 06:33:42 +0000 Subject: [PATCH 13/25] Add promise for sending email, Update Dockerfile with tgz install Signed-off-by: Rupal Mahajan --- DEVELOPER_GUIDE.md | 2 +- Dockerfile | 15 +++++++-------- package.json | 2 +- src/arguments.js | 6 +++++- src/constants.js | 2 +- src/download-helpers.js | 4 ++-- src/email-helpers.js | 42 ++++++++++++++++++++++------------------- src/index.js | 1 - src/run.js | 7 +++++-- yarn.lock | 34 ++++++++++++--------------------- 10 files changed, 57 insertions(+), 58 deletions(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 065354fd..9956f93f 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -31,7 +31,7 @@ The node version "^12.20.0 || >=14" is required. To uninstall, use ``` - npm uninstall -g opensearch-reporting-cli + npm uninstall -g @opensearch-project/reporting-cli ``` ### Running Tests diff --git a/Dockerfile b/Dockerfile index d7798290..ef3f1618 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,17 +19,18 @@ RUN apt-get update && \ libtool \ cmake \ python3 \ - libkrb5-dev \ - curl + libkrb5-dev # Copy function code RUN mkdir -p ${FUNCTION_DIR}/ -COPY package.json src/ ${FUNCTION_DIR}/ +COPY opensearch-reporting-cli-1.0.0.tgz ${FUNCTION_DIR}/ RUN ls ${FUNCTION_DIR}/ WORKDIR ${FUNCTION_DIR} +RUN tar -xzf opensearch-reporting-cli-1.0.0.tgz +RUN mv package/* . +RUN ls RUN npm install - RUN npm install aws-lambda-ric # Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chromium dependencies and chromium. @@ -43,8 +44,7 @@ COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} RUN ls ${FUNCTION_DIR}/ # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) -# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer -# installs, work. +# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work. RUN apt-get update \ && apt-get install -y wget gnupg \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ @@ -56,6 +56,5 @@ RUN apt-get update \ ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] -ENV IS_LAMBDA=true ENV HOME="/tmp" -CMD [ "/function/index.handler" ] \ No newline at end of file +CMD [ "/function/src/index.handler" ] \ No newline at end of file diff --git a/package.json b/package.json index 19a7eec9..cf23c7bd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@opensearch-project/reporting-cli", "description": "Opensearch Reporting CLI to download and email OpenSearch Dashboards reports.", - "main": "index.js", + "main": "./src/index.js", "homepage": "https://www.opensearch.org/", "version": "1.0.0", "keywords": [ diff --git a/src/arguments.js b/src/arguments.js index b19dc9af..9859d940 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -114,7 +114,8 @@ function getOptions(options) { smtppassword: null, subject: null, time: null, - note: null + note: null, + emailbody: null } // Set url. @@ -172,6 +173,9 @@ function getOptions(options) { ? `${commandOptions.filename}-${commandOptions.time.toISOString()}.${commandOptions.format}` : `${commandOptions.filename}.${commandOptions.format}`; + // Set name for email body report image + commandOptions.emailbody = `email-body-${commandOptions.time.toISOString()}.png` + // Set width and height of the window commandOptions.width = Number(options.width); commandOptions.height = Number(options.height); diff --git a/src/constants.js b/src/constants.js index db1a7609..126df325 100644 --- a/src/constants.js +++ b/src/constants.js @@ -71,6 +71,6 @@ const TRANSPORT_TYPE = { } module.exports = { - CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_TENANT, DEFAULT_FORMAT, DEFAULT_WIDTH, DEFAULT_MIN_HEIGHT, DEFAULT_FILENAME, DEFAULT_EMAIL_SUBJECT, + CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_TENANT, DEFAULT_FORMAT, DEFAULT_WIDTH, DEFAULT_MIN_HEIGHT, DEFAULT_FILENAME, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE, REPORT_TYPE, SELECTOR, FORMAT, AUTH, URL_SOURCE, ENV_VAR, TRANSPORT_TYPE }; \ No newline at end of file diff --git a/src/download-helpers.js b/src/download-helpers.js index 9b5bbeb9..30e14b3c 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -10,7 +10,7 @@ var exit = require('process'); const ora = require('ora'); const spinner = ora(''); -module.exports = async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport) { +module.exports = async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport, emailbody) { spinner.start('Launching browser '); try { const browser = await puppeteer.launch({ @@ -142,7 +142,7 @@ module.exports = async function downloadReport(url, format, width, height, filen fullPage: true, }); const data = { timeCreated, dataUrl: emailTemplateImageBuffer.toString('base64'), }; - await readStreamToFile(data.dataUrl, '/tmp/email_body.png', FORMAT.PNG); + await readStreamToFile(data.dataUrl, emailbody, FORMAT.PNG); } await browser.close(); diff --git a/src/email-helpers.js b/src/email-helpers.js index 768aeb0c..3e2c81a2 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -20,12 +20,12 @@ try { // Do not set AWS_SDK_LOAD_CONFIG if aws config file is missing. } -module.exports = async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note) { +module.exports = async function sendEmail(filename, url, sender, recipient, transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, subject, note, emailbody) { if (transport !== undefined && (transport === 'smtp' || ses !== undefined) && sender !== undefined && recipient !== undefined) { spinner.start('Sending email...'); } else { if (transport === undefined && sender === undefined && recipient === undefined) { - deleteTemporaryImage(); + deleteTemporaryImage(emailbody); return; } else if (transport === undefined) { spinner.warn('Transport value is missing'); @@ -35,11 +35,11 @@ module.exports = async function sendEmail(filename, url, sender, recipient, tran spinner.warn('Sender/Recipient value is missing'); } spinner.fail('Skipped sending email'); - deleteTemporaryImage(); + deleteTemporaryImage(emailbody); return; } - let mailOptions = getmailOptions(url, sender, recipient, filename, subject, note); + let mailOptions = getmailOptions(url, sender, recipient, filename, subject, note, emailbody); let transporter = getTransporter(transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword); @@ -53,15 +53,19 @@ module.exports = async function sendEmail(filename, url, sender, recipient, tran })); // send email - await transporter.sendMail(mailOptions, function (err, info) { - if (err) { - spinner.fail('Error sending email' + err); - exit(1); - } else { - spinner.succeed('Email sent successfully'); - } - deleteTemporaryImage(); - }); + return new Promise((success, fail) => { + transporter.sendMail(mailOptions, function (err, info) { + if (err) { + spinner.fail('Error sending email' + err); + fail(err); + exit(1); + } else { + spinner.succeed('Email sent successfully'); + deleteTemporaryImage(emailbody); + success(info); + } + }); + }); } const getTransporter = (transport, smtphost, smtpport, smtpsecure, smtpusername, smtppassword, transporter) => { @@ -83,15 +87,15 @@ const getTransporter = (transport, smtphost, smtpport, smtpsecure, smtpusername, return transporter; } -const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOptions = {}) => { +const getmailOptions = (url, sender, recipient, file, emailSubject, note, emailbody, mailOptions = {}) => { mailOptions = { from: sender, subject: emailSubject, to: recipient, attachments: [ { - filename: 'email_body.png', - path: '/tmp/email_body.png', + filename: emailbody, + path: emailbody, cid: 'email_body' }, { @@ -114,8 +118,8 @@ const getmailOptions = (url, sender, recipient, file, emailSubject, note, mailOp } // Delete temporary image created for email body -function deleteTemporaryImage() { - if (fs.existsSync('/tmp/email_body.png')) { - fs.unlinkSync('/tmp/email_body.png'); +function deleteTemporaryImage(emailbody) { + if (fs.existsSync(emailbody)) { + fs.unlinkSync(emailbody); } } \ No newline at end of file diff --git a/src/index.js b/src/index.js index c67271fd..ed74b655 100644 --- a/src/index.js +++ b/src/index.js @@ -6,7 +6,6 @@ var run = require('./run.js'); exports.handler = async function (event) { - console.log('IS_LAMBDA: '+process.env.IS_LAMBDA); await run(event); return; } diff --git a/src/run.js b/src/run.js index 39f96730..dc6df108 100755 --- a/src/run.js +++ b/src/run.js @@ -11,6 +11,7 @@ module.exports = async function run(args) { var options = args !== undefined ? await getEventArguments(args) : await getCommandArguments(); if (args !== undefined) { options.filename = '/tmp/' + options.filename; + options.emailbody = '/tmp/' + options.emailbody; } await downloadReport( @@ -24,7 +25,8 @@ module.exports = async function run(args) { options.password, options.tenant, options.time, - options.transport + options.transport, + options.emailbody ); await sendEmail( @@ -39,6 +41,7 @@ module.exports = async function run(args) { options.smtpusername, options.smtppassword, options.subject, - options.note + options.note, + options.emailbody ); } diff --git a/yarn.lock b/yarn.lock index 24a13d90..dfdd2fa5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -707,7 +707,7 @@ ansi-escapes@^4.2.1: ansi-regex@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: @@ -955,7 +955,7 @@ caniuse-lite@^1.0.30001400: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -992,14 +992,14 @@ cjs-module-lexer@^1.0.0: cli-cursor@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== dependencies: restore-cursor "^2.0.0" cli-spinners@^2.0.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== cliui@^8.0.1: @@ -1550,16 +1550,11 @@ iconv-lite@0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@1.1.13: +ieee754@1.1.13, ieee754@^1.1.13, ieee754@^1.1.4: version "1.1.13" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.1.13, ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - import-local@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" @@ -2170,7 +2165,7 @@ lodash@^4.17.21: log-symbols@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz" integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" @@ -2230,7 +2225,7 @@ mime-types@^2.1.12: mimic-fn@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-fn@^2.1.0: @@ -2332,7 +2327,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: onetime@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== dependencies: mimic-fn "^1.0.0" @@ -2358,7 +2353,7 @@ optionator@^0.8.1: ora@^3.0.0: version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + resolved "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz" integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== dependencies: chalk "^2.4.2" @@ -2599,7 +2594,7 @@ resolve@^1.20.0: restore-cursor@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== dependencies: onetime "^2.0.0" @@ -2622,16 +2617,11 @@ safe-buffer@~5.2.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@1.2.1: +sax@1.2.1, sax@>=0.6.0: version "1.2.1" resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" @@ -2729,7 +2719,7 @@ string_decoder@^1.1.1: strip-ansi@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" From f591d34e6949b9163e66efc70c5e09cd98fb6c9b Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 06:37:57 +0000 Subject: [PATCH 14/25] nit: log Signed-off-by: Rupal Mahajan --- src/download-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/download-helpers.js b/src/download-helpers.js index 30e14b3c..54b88a06 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -11,7 +11,7 @@ const ora = require('ora'); const spinner = ora(''); module.exports = async function downloadReport(url, format, width, height, filename, authType, username, password, tenant, time, transport, emailbody) { - spinner.start('Launching browser '); + spinner.start('Connecting to url ' + url); try { const browser = await puppeteer.launch({ headless: true, From 1df443cbdf71eaa5a2af1cc73c5c95dc77640613 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 16:50:12 +0000 Subject: [PATCH 15/25] Update doc Signed-off-by: Rupal Mahajan --- DEVELOPER_GUIDE.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 9956f93f..f683499f 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -50,14 +50,10 @@ curl -XPOST -u 'admin:admin' 'http://localhost:5601/api/sample_data/flights' -H ``` Run `yarn test` inside `reporting-cli`. -### Assemble docker image +### Creating Lambda container image -1. Checkout this package from version control - ``` - git clone git@github.com:opensearch-project/reporting-cli.git - cd reporting-cli - ``` -2. Run the command +1. Download the opensearch-reporting-cli-1.0.0.tgz file and get [Dockerfile](./Dockerfile). +2. Run the command in from the directory where Dockerfile and opensearch-reporting-cli-1.0.0.tgz exists. ``` docker build -t opensearch-reporting-cli . ``` \ No newline at end of file From 3435a6b1f0ebd9a97d26cb50aec5c7b7a04f258b Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 18:28:30 +0000 Subject: [PATCH 16/25] Address PR comments Signed-off-by: Rupal Mahajan --- Dockerfile | 3 +- package.json | 2 +- src/arguments.js | 10 ++-- src/cli.js | 2 +- src/download-helpers.js | 8 +-- src/email-helpers.js | 10 ++-- src/index.js | 2 +- src/run.js | 6 +-- yarn.lock | 106 ++++++++++++++++++---------------------- 9 files changed, 69 insertions(+), 80 deletions(-) diff --git a/Dockerfile b/Dockerfile index ef3f1618..3aad992c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,8 +22,6 @@ RUN apt-get update && \ libkrb5-dev # Copy function code -RUN mkdir -p ${FUNCTION_DIR}/ - COPY opensearch-reporting-cli-1.0.0.tgz ${FUNCTION_DIR}/ RUN ls ${FUNCTION_DIR}/ WORKDIR ${FUNCTION_DIR} @@ -52,6 +50,7 @@ RUN apt-get update \ && apt-get update \ && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ --no-install-recommends \ + && apt-get remove -y google-chrome-stable \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] diff --git a/package.json b/package.json index cf23c7bd..cf9f5d9a 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "lodash": "^4.17.21", "nodemailer": "^6.8.0", "nodemailer-express-handlebars": "^5.0.0", - "ora": "^3.0.0", + "ora": "^5.4.1", "puppeteer": "^18.2.0" }, "bin": { diff --git a/src/arguments.js b/src/arguments.js index 9859d940..1a99170a 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -4,12 +4,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -var { program, Option } = require('commander'); -var { exit } = require('process'); -var fs = require('fs'); +const { program, Option } = require('commander'); +const { exit } = require('process'); +const fs = require('fs'); const ora = require('ora'); -var { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } = require('./constants.js'); -var dotenv = require("dotenv"); +const { AUTH, CLI_COMMAND_NAME, DEFAULT_AUTH, DEFAULT_FILENAME, DEFAULT_FORMAT, DEFAULT_MIN_HEIGHT, DEFAULT_TENANT, DEFAULT_WIDTH, ENV_VAR, FORMAT, TRANSPORT_TYPE, DEFAULT_EMAIL_SUBJECT, DEFAULT_EMAIL_NOTE } = require('./constants.js'); +const dotenv = require("dotenv"); dotenv.config(); const spinner = ora(''); diff --git a/src/cli.js b/src/cli.js index c66e301b..8fca0965 100644 --- a/src/cli.js +++ b/src/cli.js @@ -4,6 +4,6 @@ * SPDX-License-Identifier: Apache-2.0 */ -var run = require('./run.js'); +const run = require('./run.js'); run(undefined); \ No newline at end of file diff --git a/src/download-helpers.js b/src/download-helpers.js index 54b88a06..6fbef545 100644 --- a/src/download-helpers.js +++ b/src/download-helpers.js @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -var puppeteer = require('puppeteer'); -var fs = require('fs'); -var { FORMAT, REPORT_TYPE, AUTH, URL_SOURCE } = require('./constants.js'); -var exit = require('process'); +const puppeteer = require('puppeteer'); +const fs = require('fs'); +const { FORMAT, REPORT_TYPE, AUTH, URL_SOURCE } = require('./constants.js'); +const exit = require('process'); const ora = require('ora'); const spinner = ora(''); diff --git a/src/email-helpers.js b/src/email-helpers.js index 3e2c81a2..b3e631ee 100644 --- a/src/email-helpers.js +++ b/src/email-helpers.js @@ -3,11 +3,11 @@ * SPDX-License-Identifier: Apache-2.0 */ -var nodemailer = require('nodemailer'); -var hbs = require('nodemailer-express-handlebars'); -var fs = require('fs'); -var AWS = require('aws-sdk'); -var path = require('path'); +const nodemailer = require('nodemailer'); +const hbs = require('nodemailer-express-handlebars'); +const fs = require('fs'); +const AWS = require('aws-sdk'); +const path = require('path'); const { exit } = require('process'); const ora = require('ora'); const spinner = ora(''); diff --git a/src/index.js b/src/index.js index ed74b655..8450be65 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -var run = require('./run.js'); +const run = require('./run.js'); exports.handler = async function (event) { await run(event); diff --git a/src/run.js b/src/run.js index dc6df108..bf854578 100755 --- a/src/run.js +++ b/src/run.js @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -var sendEmail = require('./email-helpers.js'); -var downloadReport = require('./download-helpers.js'); -var { getCommandArguments, getEventArguments } = require('./arguments.js'); +const sendEmail = require('./email-helpers.js'); +const downloadReport = require('./download-helpers.js'); +const { getCommandArguments, getEventArguments } = require('./arguments.js'); module.exports = async function run(args) { var options = args !== undefined ? await getEventArguments(args) : await getCommandArguments(); diff --git a/yarn.lock b/yarn.lock index dfdd2fa5..a5903803 100644 --- a/yarn.lock +++ b/yarn.lock @@ -705,11 +705,6 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -845,9 +840,9 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -953,7 +948,7 @@ caniuse-lite@^1.0.30001400: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz" integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -962,9 +957,9 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -990,16 +985,16 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - restore-cursor "^2.0.0" + restore-cursor "^3.1.0" -cli-spinners@^2.0.0: +cli-spinners@^2.5.0: version "2.7.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== cliui@^8.0.1: @@ -1623,6 +1618,11 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -1649,6 +1649,11 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + isarray@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -2163,12 +2168,13 @@ lodash@^4.17.21: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.0.1" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" lru-cache@^5.1.1: version "5.1.1" @@ -2223,11 +2229,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -2325,16 +2326,9 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.2: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -2351,16 +2345,19 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^3.0.0: - version "3.4.0" - resolved "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" wcwidth "^1.0.1" p-limit@^2.2.0: @@ -2592,12 +2589,12 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.0" signal-exit "^3.0.2" rimraf@3.0.2: @@ -2717,13 +2714,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" From ba961d07810b7d73447c23fae9142729b30c31d3 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 20:15:05 +0000 Subject: [PATCH 17/25] Update Dockerfile Signed-off-by: Rupal Mahajan --- .gitignore | 3 +- DEVELOPER_GUIDE.md | 4 +- Dockerfile | 5 +- yarn.lock | 903 +++++++++++++++++++++++---------------------- 4 files changed, 456 insertions(+), 459 deletions(-) diff --git a/.gitignore b/.gitignore index fe2b2bd2..65111c46 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ node_modules/ .env -opensearch-report* -package-lock.json \ No newline at end of file +opensearch-report* \ No newline at end of file diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index f683499f..727e7ca7 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -14,11 +14,11 @@ The node version "^12.20.0 || >=14" is required. 2. Run `yarn` inside `reporting-cli/src` 3. You can run the below commands inside `reporting-cli/src` ``` - node index.js --url + node cli.js --url ``` For additional command line parameter options ``` - node index.js -h + node cli.js -h ``` 4. Alternatively, you can use npm install to run this command from any directory. ``` diff --git a/Dockerfile b/Dockerfile index 3aad992c..ed48df82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,13 +23,10 @@ RUN apt-get update && \ # Copy function code COPY opensearch-reporting-cli-1.0.0.tgz ${FUNCTION_DIR}/ -RUN ls ${FUNCTION_DIR}/ WORKDIR ${FUNCTION_DIR} RUN tar -xzf opensearch-reporting-cli-1.0.0.tgz RUN mv package/* . -RUN ls -RUN npm install -RUN npm install aws-lambda-ric +RUN npm install && npm install aws-lambda-ric # Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chromium dependencies and chromium. FROM node:lts-slim diff --git a/yarn.lock b/yarn.lock index a5903803..eb821645 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,35 +18,35 @@ "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== + version "7.20.14" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz" + integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz" - integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== + version "7.20.12" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz" + integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.20.7" "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.11" "@babel/helpers" "^7.20.7" "@babel/parser" "^7.20.7" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" + "@babel/traverse" "^7.20.12" "@babel/types" "^7.20.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" + json5 "^2.2.2" semver "^6.3.0" "@babel/generator@^7.20.7", "@babel/generator@^7.7.2": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== + version "7.20.14" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== dependencies: "@babel/types" "^7.20.7" "@jridgewell/gen-mapping" "^0.3.2" @@ -90,7 +90,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.20.7": +"@babel/helper-module-transforms@^7.20.11": version "7.20.11" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz" integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== @@ -139,12 +139,12 @@ integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== + version "7.20.13" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz" + integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== dependencies: "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" + "@babel/traverse" "^7.20.13" "@babel/types" "^7.20.7" "@babel/highlight@^7.18.6": @@ -156,10 +156,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": + version "7.20.13" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz" + integrity sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -268,10 +268,10 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": - version "7.20.10" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz" - integrity sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg== +"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.7.2": + version "7.20.13" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz" + integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.20.7" @@ -279,7 +279,7 @@ "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.7" + "@babel/parser" "^7.20.13" "@babel/types" "^7.20.7" debug "^4.1.0" globals "^11.1.0" @@ -314,109 +314,109 @@ resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.3.1.tgz" - integrity sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg== +"@jest/console@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.4.1.tgz" + integrity sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + jest-message-util "^29.4.1" + jest-util "^29.4.1" slash "^3.0.0" -"@jest/core@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.3.1.tgz" - integrity sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw== - dependencies: - "@jest/console" "^29.3.1" - "@jest/reporters" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" +"@jest/core@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.4.1.tgz" + integrity sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA== + dependencies: + "@jest/console" "^29.4.1" + "@jest/reporters" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.2.0" - jest-config "^29.3.1" - jest-haste-map "^29.3.1" - jest-message-util "^29.3.1" + jest-changed-files "^29.4.0" + jest-config "^29.4.1" + jest-haste-map "^29.4.1" + jest-message-util "^29.4.1" jest-regex-util "^29.2.0" - jest-resolve "^29.3.1" - jest-resolve-dependencies "^29.3.1" - jest-runner "^29.3.1" - jest-runtime "^29.3.1" - jest-snapshot "^29.3.1" - jest-util "^29.3.1" - jest-validate "^29.3.1" - jest-watcher "^29.3.1" + jest-resolve "^29.4.1" + jest-resolve-dependencies "^29.4.1" + jest-runner "^29.4.1" + jest-runtime "^29.4.1" + jest-snapshot "^29.4.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" + jest-watcher "^29.4.1" micromatch "^4.0.4" - pretty-format "^29.3.1" + pretty-format "^29.4.1" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz" - integrity sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag== +"@jest/environment@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.4.1.tgz" + integrity sha512-pJ14dHGSQke7Q3mkL/UZR9ZtTOxqskZaC91NzamEH4dlKRt42W+maRBXiw/LWkdJe+P0f/zDR37+SPMplMRlPg== dependencies: - "@jest/fake-timers" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/fake-timers" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" - jest-mock "^29.3.1" + jest-mock "^29.4.1" -"@jest/expect-utils@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz" - integrity sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g== +"@jest/expect-utils@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.1.tgz" + integrity sha512-w6YJMn5DlzmxjO00i9wu2YSozUYRBhIoJ6nQwpMYcBMtiqMGJm1QBzOf6DDgRao8dbtpDoaqLg6iiQTvv0UHhQ== dependencies: jest-get-type "^29.2.0" -"@jest/expect@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.3.1.tgz" - integrity sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg== +"@jest/expect@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.4.1.tgz" + integrity sha512-ZxKJP5DTUNF2XkpJeZIzvnzF1KkfrhEF6Rz0HGG69fHl6Bgx5/GoU3XyaeFYEjuuKSOOsbqD/k72wFvFxc3iTw== dependencies: - expect "^29.3.1" - jest-snapshot "^29.3.1" + expect "^29.4.1" + jest-snapshot "^29.4.1" -"@jest/fake-timers@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz" - integrity sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A== +"@jest/fake-timers@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.1.tgz" + integrity sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw== dependencies: - "@jest/types" "^29.3.1" - "@sinonjs/fake-timers" "^9.1.2" + "@jest/types" "^29.4.1" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.3.1" - jest-mock "^29.3.1" - jest-util "^29.3.1" + jest-message-util "^29.4.1" + jest-mock "^29.4.1" + jest-util "^29.4.1" -"@jest/globals@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.3.1.tgz" - integrity sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q== +"@jest/globals@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.4.1.tgz" + integrity sha512-znoK2EuFytbHH0ZSf2mQK2K1xtIgmaw4Da21R2C/NE/+NnItm5mPEFQmn8gmF3f0rfOlmZ3Y3bIf7bFj7DHxAA== dependencies: - "@jest/environment" "^29.3.1" - "@jest/expect" "^29.3.1" - "@jest/types" "^29.3.1" - jest-mock "^29.3.1" + "@jest/environment" "^29.4.1" + "@jest/expect" "^29.4.1" + "@jest/types" "^29.4.1" + jest-mock "^29.4.1" -"@jest/reporters@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.3.1.tgz" - integrity sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA== +"@jest/reporters@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.1.tgz" + integrity sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/console" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -429,20 +429,20 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.3.1" - jest-util "^29.3.1" - jest-worker "^29.3.1" + jest-message-util "^29.4.1" + jest-util "^29.4.1" + jest-worker "^29.4.1" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== +"@jest/schemas@^29.4.0": + version "29.4.0" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.0.tgz" + integrity sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ== dependencies: - "@sinclair/typebox" "^0.24.1" + "@sinclair/typebox" "^0.25.16" "@jest/source-map@^29.2.0": version "29.2.0" @@ -453,53 +453,53 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.3.1.tgz" - integrity sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw== +"@jest/test-result@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.1.tgz" + integrity sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ== dependencies: - "@jest/console" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/console" "^29.4.1" + "@jest/types" "^29.4.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz" - integrity sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA== +"@jest/test-sequencer@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.1.tgz" + integrity sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w== dependencies: - "@jest/test-result" "^29.3.1" + "@jest/test-result" "^29.4.1" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" + jest-haste-map "^29.4.1" slash "^3.0.0" -"@jest/transform@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.3.1.tgz" - integrity sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug== +"@jest/transform@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.4.1.tgz" + integrity sha512-5w6YJrVAtiAgr0phzKjYd83UPbCXsBRTeYI4BXokv9Er9CcrH9hfXL/crCvP2d2nGOcovPUnlYiLPFLZrkG5Hg== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" + jest-haste-map "^29.4.1" jest-regex-util "^29.2.0" - jest-util "^29.3.1" + jest-util "^29.4.1" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" - write-file-atomic "^4.0.1" + write-file-atomic "^5.0.0" -"@jest/types@^29.3.1": - version "29.3.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz" - integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== +"@jest/types@^29.4.1": + version "29.4.1" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.4.1.tgz" + integrity sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA== dependencies: - "@jest/schemas" "^29.0.0" + "@jest/schemas" "^29.4.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -546,24 +546,24 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== +"@sinclair/typebox@^0.25.16": + version "0.25.21" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz" + integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g== -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^2.0.0" "@tootallnate/once@2": version "2.0.0" @@ -571,12 +571,12 @@ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/babel__core@^7.1.14": - version "7.1.20" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz" - integrity sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ== + version "7.20.0" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -604,9 +604,9 @@ "@babel/types" "^7.3.0" "@types/graceful-fs@^4.1.3": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + version "4.1.6" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -630,9 +630,9 @@ "@types/istanbul-lib-report" "*" "@types/node@*": - version "18.11.15" - resolved "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz" - integrity sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw== + version "18.11.18" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz" + integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== "@types/prettier@^2.1.5": version "2.7.2" @@ -650,9 +650,9 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": - version "17.0.17" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz" - integrity sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g== + version "17.0.22" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== dependencies: "@types/yargs-parser" "*" @@ -687,9 +687,9 @@ acorn@^7.1.1: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.5.0: - version "8.8.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== agent-base@6: version "6.0.2" @@ -755,9 +755,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sdk@^2.1237.0: - version "2.1276.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1276.0.tgz" - integrity sha512-0TGPsW/uMQy0trfYZD+dvSQ9Bf8NmKK9ISj5xQJGopNt/Kxh0vLKBPy2mFmKdxeFtis6wn4c9uTp7/3p0ADa1w== + version "2.1307.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1307.0.tgz" + integrity sha512-fRGMLrFrndcl7VXp6ynbFry4S+eO360cIw5sdfI2ZdC86aQlg7vSh5WAdARMExnwKCeaoiGhRe1fTBS3WoLwAw== dependencies: buffer "4.9.2" events "1.1.1" @@ -770,15 +770,15 @@ aws-sdk@^2.1237.0: uuid "8.0.0" xml2js "0.4.19" -babel-jest@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz" - integrity sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA== +babel-jest@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.1.tgz" + integrity sha512-xBZa/pLSsF/1sNpkgsiT3CmY7zV1kAsZ9OxxtrFqYucnOuRftXAfcJqcDVyOPeN4lttWTwhLdu0T9f8uvoPEUg== dependencies: - "@jest/transform" "^29.3.1" + "@jest/transform" "^29.4.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.2.0" + babel-preset-jest "^29.4.0" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -794,10 +794,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.2.0: - version "29.2.0" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz" - integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== +babel-plugin-jest-hoist@^29.4.0: + version "29.4.0" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.0.tgz" + integrity sha512-a/sZRLQJEmsmejQ2rPEUe35nO1+C9dc9O1gplH1SXmJxveQSRUYdBk8yGZG/VOUuZs1u2aHZJusEGoRMbhhwCg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -822,12 +822,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.2.0: - version "29.2.0" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz" - integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== +babel-preset-jest@^29.4.0: + version "29.4.0" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.0.tgz" + integrity sha512-fUB9vZflUSM3dO/6M2TCAepTzvA4VkOvl67PjErcrQMGt9Eve7uazaeyCZ2th3UtI7ljpiBJES0F7A1vBRsLZA== dependencies: - babel-plugin-jest-hoist "^29.2.0" + babel-plugin-jest-hoist "^29.4.0" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -842,7 +842,7 @@ base64-js@^1.0.2, base64-js@^1.3.1: bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -877,14 +877,14 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + version "4.21.5" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" bser@2.1.1: version "2.1.1" @@ -943,10 +943,10 @@ camelcase@^6.2.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001400: - version "1.0.30001441" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz" - integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== +caniuse-lite@^1.0.30001449: + version "1.0.30001450" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz" + integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew== chalk@^2.0.0: version "2.4.2" @@ -959,7 +959,7 @@ chalk@^2.0.0: chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -976,9 +976,9 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^3.2.0: - version "3.7.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz" - integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== + version "3.7.1" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz" + integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== cjs-module-lexer@^1.0.0: version "1.2.2" @@ -987,14 +987,14 @@ cjs-module-lexer@^1.0.0: cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.5.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== cliui@^8.0.1: @@ -1053,9 +1053,9 @@ combined-stream@^1.0.8: delayed-stream "~1.0.0" commander@^9.4.0: - version "9.4.1" - resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz" - integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== + version "9.5.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== concat-map@0.0.1: version "0.0.1" @@ -1137,9 +1137,9 @@ deep-is@~0.1.3: integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.0" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== defaults@^1.0.3: version "1.0.4" @@ -1176,16 +1176,16 @@ domexception@^4.0.0: webidl-conversions "^7.0.0" dompurify@^2.1.1: - version "2.4.1" - resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.4.1.tgz" - integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA== + version "2.4.3" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz" + integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ== dotenv@^16.0.3: version "16.0.3" resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== -electron-to-chromium@^1.4.251: +electron-to-chromium@^1.4.284: version "1.4.284" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== @@ -1281,23 +1281,23 @@ exit@^0.1.2: resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz" - integrity sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA== +expect@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/expect/-/expect-29.4.1.tgz" + integrity sha512-OKrGESHOaMxK3b6zxIq9SOW8kEXztKff/Dvg88j4xIJxur1hspEbedVkR3GpHe5LO+WB2Qw7OWN0RMTdp6as5A== dependencies: - "@jest/expect-utils" "^29.3.1" + "@jest/expect-utils" "^29.4.1" jest-get-type "^29.2.0" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + jest-matcher-utils "^29.4.1" + jest-message-util "^29.4.1" + jest-util "^29.4.1" express-handlebars@^6.0.0: - version "6.0.6" - resolved "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.6.tgz" - integrity sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ== + version "6.0.7" + resolved "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.7.tgz" + integrity sha512-iYeMFpc/hMD+E6FNAZA5fgWeXnXr4rslOSPkeEV6TwdmpJ5lEXuWX0u9vFYs31P2MURctQq2batR09oeNj0LIg== dependencies: - glob "^8.0.2" + glob "^8.1.0" graceful-fs "^4.2.10" handlebars "^4.7.7" @@ -1398,9 +1398,9 @@ get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + version "1.2.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -1435,10 +1435,10 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.2: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1620,7 +1620,7 @@ is-generator-function@^1.0.7: is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: @@ -1651,7 +1651,7 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3: is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isarray@^1.0.0: @@ -1706,94 +1706,94 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^29.2.0: - version "29.2.0" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz" - integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== +jest-changed-files@^29.4.0: + version "29.4.0" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.0.tgz" + integrity sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w== dependencies: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.3.1.tgz" - integrity sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg== +jest-circus@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.1.tgz" + integrity sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA== dependencies: - "@jest/environment" "^29.3.1" - "@jest/expect" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/environment" "^29.4.1" + "@jest/expect" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.3.1" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-runtime "^29.3.1" - jest-snapshot "^29.3.1" - jest-util "^29.3.1" + jest-each "^29.4.1" + jest-matcher-utils "^29.4.1" + jest-message-util "^29.4.1" + jest-runtime "^29.4.1" + jest-snapshot "^29.4.1" + jest-util "^29.4.1" p-limit "^3.1.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.3.1.tgz" - integrity sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ== +jest-cli@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.1.tgz" + integrity sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ== dependencies: - "@jest/core" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/core" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/types" "^29.4.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.3.1" - jest-util "^29.3.1" - jest-validate "^29.3.1" + jest-config "^29.4.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.3.1.tgz" - integrity sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg== +jest-config@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.4.1.tgz" + integrity sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.3.1" - "@jest/types" "^29.3.1" - babel-jest "^29.3.1" + "@jest/test-sequencer" "^29.4.1" + "@jest/types" "^29.4.1" + babel-jest "^29.4.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.3.1" - jest-environment-node "^29.3.1" + jest-circus "^29.4.1" + jest-environment-node "^29.4.1" jest-get-type "^29.2.0" jest-regex-util "^29.2.0" - jest-resolve "^29.3.1" - jest-runner "^29.3.1" - jest-util "^29.3.1" - jest-validate "^29.3.1" + jest-resolve "^29.4.1" + jest-runner "^29.4.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz" - integrity sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw== +jest-diff@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.1.tgz" + integrity sha512-uazdl2g331iY56CEyfbNA0Ut7Mn2ulAG5vUaEHXycf1L6IPyuImIxSz4F0VYBKi7LYIuxOwTZzK3wh5jHzASMw== dependencies: chalk "^4.0.0" diff-sequences "^29.3.1" jest-get-type "^29.2.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" jest-docblock@^29.2.0: version "29.2.0" @@ -1802,94 +1802,94 @@ jest-docblock@^29.2.0: dependencies: detect-newline "^3.0.0" -jest-each@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.3.1.tgz" - integrity sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA== +jest-each@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.4.1.tgz" + integrity sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" chalk "^4.0.0" jest-get-type "^29.2.0" - jest-util "^29.3.1" - pretty-format "^29.3.1" + jest-util "^29.4.1" + pretty-format "^29.4.1" -jest-environment-node@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.3.1.tgz" - integrity sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag== +jest-environment-node@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.1.tgz" + integrity sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg== dependencies: - "@jest/environment" "^29.3.1" - "@jest/fake-timers" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/environment" "^29.4.1" + "@jest/fake-timers" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" - jest-mock "^29.3.1" - jest-util "^29.3.1" + jest-mock "^29.4.1" + jest-util "^29.4.1" jest-get-type@^29.2.0: version "29.2.0" resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz" integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== -jest-haste-map@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.3.1.tgz" - integrity sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A== +jest-haste-map@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.1.tgz" + integrity sha512-imTjcgfVVTvg02khXL11NNLTx9ZaofbAWhilrMg/G8dIkp+HYCswhxf0xxJwBkfhWb3e8dwbjuWburvxmcr58w== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.2.0" - jest-util "^29.3.1" - jest-worker "^29.3.1" + jest-util "^29.4.1" + jest-worker "^29.4.1" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz" - integrity sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA== +jest-leak-detector@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.1.tgz" + integrity sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ== dependencies: jest-get-type "^29.2.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" -jest-matcher-utils@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz" - integrity sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ== +jest-matcher-utils@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.1.tgz" + integrity sha512-k5h0u8V4nAEy6lSACepxL/rw78FLDkBnXhZVgFneVpnJONhb2DhZj/Gv4eNe+1XqQ5IhgUcqj745UwH0HJmMnA== dependencies: chalk "^4.0.0" - jest-diff "^29.3.1" + jest-diff "^29.4.1" jest-get-type "^29.2.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" -jest-message-util@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz" - integrity sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA== +jest-message-util@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.1.tgz" + integrity sha512-H4/I0cXUaLeCw6FM+i4AwCnOwHRgitdaUFOdm49022YD5nfyr8C/DrbXOBEyJaj+w/y0gGJ57klssOaUiLLQGQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.3.1" + pretty-format "^29.4.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz" - integrity sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA== +jest-mock@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.1.tgz" + integrity sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" "@types/node" "*" - jest-util "^29.3.1" + jest-util "^29.4.1" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -1901,88 +1901,89 @@ jest-regex-util@^29.2.0: resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz" integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== -jest-resolve-dependencies@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz" - integrity sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA== +jest-resolve-dependencies@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.1.tgz" + integrity sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg== dependencies: jest-regex-util "^29.2.0" - jest-snapshot "^29.3.1" + jest-snapshot "^29.4.1" -jest-resolve@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.3.1.tgz" - integrity sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw== +jest-resolve@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.1.tgz" + integrity sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" + jest-haste-map "^29.4.1" jest-pnp-resolver "^1.2.2" - jest-util "^29.3.1" - jest-validate "^29.3.1" + jest-util "^29.4.1" + jest-validate "^29.4.1" resolve "^1.20.0" - resolve.exports "^1.1.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.3.1.tgz" - integrity sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA== - dependencies: - "@jest/console" "^29.3.1" - "@jest/environment" "^29.3.1" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" +jest-runner@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.1.tgz" + integrity sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg== + dependencies: + "@jest/console" "^29.4.1" + "@jest/environment" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" jest-docblock "^29.2.0" - jest-environment-node "^29.3.1" - jest-haste-map "^29.3.1" - jest-leak-detector "^29.3.1" - jest-message-util "^29.3.1" - jest-resolve "^29.3.1" - jest-runtime "^29.3.1" - jest-util "^29.3.1" - jest-watcher "^29.3.1" - jest-worker "^29.3.1" + jest-environment-node "^29.4.1" + jest-haste-map "^29.4.1" + jest-leak-detector "^29.4.1" + jest-message-util "^29.4.1" + jest-resolve "^29.4.1" + jest-runtime "^29.4.1" + jest-util "^29.4.1" + jest-watcher "^29.4.1" + jest-worker "^29.4.1" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.3.1.tgz" - integrity sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A== +jest-runtime@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.1.tgz" + integrity sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA== dependencies: - "@jest/environment" "^29.3.1" - "@jest/fake-timers" "^29.3.1" - "@jest/globals" "^29.3.1" + "@jest/environment" "^29.4.1" + "@jest/fake-timers" "^29.4.1" + "@jest/globals" "^29.4.1" "@jest/source-map" "^29.2.0" - "@jest/test-result" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/test-result" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.3.1" - jest-message-util "^29.3.1" - jest-mock "^29.3.1" + jest-haste-map "^29.4.1" + jest-message-util "^29.4.1" + jest-mock "^29.4.1" jest-regex-util "^29.2.0" - jest-resolve "^29.3.1" - jest-snapshot "^29.3.1" - jest-util "^29.3.1" + jest-resolve "^29.4.1" + jest-snapshot "^29.4.1" + jest-util "^29.4.1" + semver "^7.3.5" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.3.1.tgz" - integrity sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA== +jest-snapshot@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.1.tgz" + integrity sha512-l4iV8EjGgQWVz3ee/LR9sULDk2pCkqb71bjvlqn+qp90lFwpnulHj4ZBT8nm1hA1C5wowXLc7MGnw321u0tsYA== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -1990,82 +1991,82 @@ jest-snapshot@^29.3.1: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.3.1" - "@jest/transform" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/expect-utils" "^29.4.1" + "@jest/transform" "^29.4.1" + "@jest/types" "^29.4.1" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.3.1" + expect "^29.4.1" graceful-fs "^4.2.9" - jest-diff "^29.3.1" + jest-diff "^29.4.1" jest-get-type "^29.2.0" - jest-haste-map "^29.3.1" - jest-matcher-utils "^29.3.1" - jest-message-util "^29.3.1" - jest-util "^29.3.1" + jest-haste-map "^29.4.1" + jest-matcher-utils "^29.4.1" + jest-message-util "^29.4.1" + jest-util "^29.4.1" natural-compare "^1.4.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" semver "^7.3.5" -jest-util@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz" - integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== +jest-util@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.4.1.tgz" + integrity sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.3.1.tgz" - integrity sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g== +jest-validate@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.1.tgz" + integrity sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw== dependencies: - "@jest/types" "^29.3.1" + "@jest/types" "^29.4.1" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.2.0" leven "^3.1.0" - pretty-format "^29.3.1" + pretty-format "^29.4.1" -jest-watcher@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.3.1.tgz" - integrity sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg== +jest-watcher@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.1.tgz" + integrity sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw== dependencies: - "@jest/test-result" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/test-result" "^29.4.1" + "@jest/types" "^29.4.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.13.1" - jest-util "^29.3.1" + jest-util "^29.4.1" string-length "^4.0.1" -jest-worker@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz" - integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== +jest-worker@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.1.tgz" + integrity sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ== dependencies: "@types/node" "*" - jest-util "^29.3.1" + jest-util "^29.4.1" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz" - integrity sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA== + version "29.4.1" + resolved "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz" + integrity sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg== dependencies: - "@jest/core" "^29.3.1" - "@jest/types" "^29.3.1" + "@jest/core" "^29.4.1" + "@jest/types" "^29.4.1" import-local "^3.0.2" - jest-cli "^29.3.1" + jest-cli "^29.4.1" jmespath@0.16.0: version "0.16.0" @@ -2128,10 +2129,10 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json5@^2.2.1: - version "2.2.2" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz" - integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== kleur@^3.0.3: version "3.0.3" @@ -2170,7 +2171,7 @@ lodash@^4.17.21: log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -2242,9 +2243,9 @@ minimatch@^3.0.4, minimatch@^3.1.1: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz" - integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" @@ -2285,10 +2286,10 @@ node-int64@^0.4.0: resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.6: - version "2.0.8" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== +node-releases@^2.0.8: + version "2.0.9" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz" + integrity sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA== nodemailer-express-handlebars@^5.0.0: version "5.0.0" @@ -2298,9 +2299,9 @@ nodemailer-express-handlebars@^5.0.0: express-handlebars "^6.0.0" nodemailer@^6.8.0: - version "6.8.0" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz" - integrity sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ== + version "6.9.1" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.1.tgz" + integrity sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA== normalize-path@^3.0.0: version "3.0.0" @@ -2328,7 +2329,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -2347,7 +2348,7 @@ optionator@^0.8.1: ora@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -2453,12 +2454,12 @@ prelude-ls@~1.1.2: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -pretty-format@^29.3.1: - version "29.3.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz" - integrity sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg== +pretty-format@^29.4.1: + version "29.4.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz" + integrity sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg== dependencies: - "@jest/schemas" "^29.0.0" + "@jest/schemas" "^29.4.0" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -2499,9 +2500,9 @@ punycode@1.3.2: integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== puppeteer-core@18.2.1: version "18.2.1" @@ -2575,10 +2576,10 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== +resolve.exports@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz" + integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== resolve@^1.20.0: version "1.22.1" @@ -2591,7 +2592,7 @@ resolve@^1.20.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -2876,7 +2877,7 @@ universalify@^0.2.0: resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -update-browserslist-db@^1.0.9: +update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== @@ -3047,10 +3048,10 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== +write-file-atomic@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz" + integrity sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" @@ -3061,9 +3062,9 @@ ws@8.9.0: integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== ws@^8.2.3: - version "8.11.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + version "8.12.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz" + integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== xml-name-validator@^4.0.0: version "4.0.0" From 7e211adf687a194ed3f120c51983b2c0206f0df1 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 20:20:08 +0000 Subject: [PATCH 18/25] nit: remove ls Signed-off-by: Rupal Mahajan --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ed48df82..694470e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,7 +36,6 @@ ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} # Copy in the build image dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} -RUN ls ${FUNCTION_DIR}/ # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) # Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work. From 6fa7429db4adc39f02ca33e758b9a3e1285955ab Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 22:26:17 +0000 Subject: [PATCH 19/25] Move Dockerfile to example doc Signed-off-by: Rupal Mahajan --- DEVELOPER_GUIDE.md | 8 ----- .../examples/lambda_container_image.md | 30 +++++++++++++++++-- 2 files changed, 27 insertions(+), 11 deletions(-) rename Dockerfile => docs/examples/lambda_container_image.md (68%) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 727e7ca7..661499ec 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -49,11 +49,3 @@ curl -XPOST -u 'admin:admin' 'http://localhost:5601/api/sample_data/logs' -H 'os curl -XPOST -u 'admin:admin' 'http://localhost:5601/api/sample_data/flights' -H 'osd-xsrf:true' -H 'securitytenant: admin_tenant' ``` Run `yarn test` inside `reporting-cli`. - -### Creating Lambda container image - -1. Download the opensearch-reporting-cli-1.0.0.tgz file and get [Dockerfile](./Dockerfile). -2. Run the command in from the directory where Dockerfile and opensearch-reporting-cli-1.0.0.tgz exists. - ``` - docker build -t opensearch-reporting-cli . - ``` \ No newline at end of file diff --git a/Dockerfile b/docs/examples/lambda_container_image.md similarity index 68% rename from Dockerfile rename to docs/examples/lambda_container_image.md index 694470e2..3f23fefe 100644 --- a/Dockerfile +++ b/docs/examples/lambda_container_image.md @@ -1,3 +1,11 @@ +# Scheduling Reports with Lambda + +Opensearch reporting CLI can be used with Lambda for scheduling email reports. + +### Creating Lambda container image + +1. Create a Dockerfile. Sample Dockerfile is as below. +``` # Define function directory ARG FUNCTION_DIR="/function" @@ -19,11 +27,12 @@ RUN apt-get update && \ libtool \ cmake \ python3 \ - libkrb5-dev + libkrb5-dev \ + curl # Copy function code -COPY opensearch-reporting-cli-1.0.0.tgz ${FUNCTION_DIR}/ WORKDIR ${FUNCTION_DIR} +RUN curl -LJO https://artifacts.opensearch.org/reporting-cli/opensearch-reporting-cli-1.0.0.tgz RUN tar -xzf opensearch-reporting-cli-1.0.0.tgz RUN mv package/* . RUN npm install && npm install aws-lambda-ric @@ -52,4 +61,19 @@ RUN apt-get update \ ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] ENV HOME="/tmp" -CMD [ "/function/src/index.handler" ] \ No newline at end of file +CMD [ "/function/src/index.handler" ] +``` +2. Run the command in from the directory where Dockerfile exists. + + ``` + docker build -t opensearch-reporting-cli . + ``` +### Use Lambda container image + +1. Push the Docker image to [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-console.html) + +2. Create a Lambda Function. Select previously created container image ro deploy for you function and architecture x86_64'. + +3. Update Lambda timeout to 5 min and memory size to 4096. + + From 4ce55be33dbd4907823732a09a110289cd04515b Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 22:41:01 +0000 Subject: [PATCH 20/25] Add Dockerfile for building from source Signed-off-by: Rupal Mahajan --- docs/examples/lambda_container_image.md | 129 +++++++++--------- .../lambda_container_image_from_source.md | 72 ++++++++++ 2 files changed, 137 insertions(+), 64 deletions(-) create mode 100644 docs/examples/lambda_container_image_from_source.md diff --git a/docs/examples/lambda_container_image.md b/docs/examples/lambda_container_image.md index 3f23fefe..8f6c386a 100644 --- a/docs/examples/lambda_container_image.md +++ b/docs/examples/lambda_container_image.md @@ -4,70 +4,71 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. ### Creating Lambda container image -1. Create a Dockerfile. Sample Dockerfile is as below. -``` -# Define function directory -ARG FUNCTION_DIR="/function" - -# Base image of the docker container -FROM node:lts-slim as build-image - -# Include global arg in this stage of the build -ARG FUNCTION_DIR - -# AWS Lambda runtime dependencies -RUN apt-get update && \ - apt-get install -y \ - g++ \ - make \ - unzip \ - libcurl4-openssl-dev \ - autoconf \ - automake \ - libtool \ - cmake \ - python3 \ - libkrb5-dev \ - curl - -# Copy function code -WORKDIR ${FUNCTION_DIR} -RUN curl -LJO https://artifacts.opensearch.org/reporting-cli/opensearch-reporting-cli-1.0.0.tgz -RUN tar -xzf opensearch-reporting-cli-1.0.0.tgz -RUN mv package/* . -RUN npm install && npm install aws-lambda-ric - -# Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chromium dependencies and chromium. -FROM node:lts-slim -# Include global arg in this stage of the build -ARG FUNCTION_DIR -# Set working directory to function root directory -WORKDIR ${FUNCTION_DIR} -# Copy in the build image dependencies -COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} - -# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) -# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work. -RUN apt-get update \ - && apt-get install -y wget gnupg \ - && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ - && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ - && apt-get update \ - && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ - --no-install-recommends \ - && apt-get remove -y google-chrome-stable \ - && rm -rf /var/lib/apt/lists/* - -ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] - -ENV HOME="/tmp" -CMD [ "/function/src/index.handler" ] -``` -2. Run the command in from the directory where Dockerfile exists. - - ``` - docker build -t opensearch-reporting-cli . - ``` +1. Create a Dockerfile. Followig Dockerfile can be used to create a container image for v1.0.0. + ``` + # Define function directory + ARG FUNCTION_DIR="/function" + + # Base image of the docker container + FROM node:lts-slim as build-image + + # Include global arg in this stage of the build + ARG FUNCTION_DIR + + # AWS Lambda runtime dependencies + RUN apt-get update && \ + apt-get install -y \ + g++ \ + make \ + unzip \ + libcurl4-openssl-dev \ + autoconf \ + automake \ + libtool \ + cmake \ + python3 \ + libkrb5-dev \ + curl + + # Copy function code + WORKDIR ${FUNCTION_DIR} + RUN curl -LJO https://artifacts.opensearch.org/reporting-cli/opensearch-reporting-cli-1.0.0.tgz + RUN tar -xzf opensearch-reporting-cli-1.0.0.tgz + RUN mv package/* . + RUN npm install && npm install aws-lambda-ric + + # Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chromium dependencies and chromium. + FROM node:lts-slim + # Include global arg in this stage of the build + ARG FUNCTION_DIR + # Set working directory to function root directory + WORKDIR ${FUNCTION_DIR} + # Copy in the build image dependencies + COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} + + # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) + # Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work. + RUN apt-get update \ + && apt-get install -y wget gnupg \ + && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ + && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ + && apt-get update \ + && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ + --no-install-recommends \ + && apt-get remove -y google-chrome-stable \ + && rm -rf /var/lib/apt/lists/* + + ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] + + ENV HOME="/tmp" + CMD [ "/function/src/index.handler" ] + ``` + +2. Run the build command in from the directory where Dockerfile exists. + + ``` + docker build -t opensearch-reporting-cli . + ``` ### Use Lambda container image 1. Push the Docker image to [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-console.html) diff --git a/docs/examples/lambda_container_image_from_source.md b/docs/examples/lambda_container_image_from_source.md new file mode 100644 index 00000000..419b2f2b --- /dev/null +++ b/docs/examples/lambda_container_image_from_source.md @@ -0,0 +1,72 @@ +## Create Lambda container image from source code + +1. Checkout this package from version control + ``` + git clone git@github.com:opensearch-project/reporting-cli.git + cd reporting-cli + ``` +2. Add the following Dockerfile inside `reporting-cli`. + ``` + # Define function directory + ARG FUNCTION_DIR="/function" + + # Base image of the docker container + FROM node:lts-slim as build-image + + # Include global arg in this stage of the build + ARG FUNCTION_DIR + + # AWS Lambda runtime dependencies + RUN apt-get update && \ + apt-get install -y \ + g++ \ + make \ + unzip \ + libcurl4-openssl-dev \ + autoconf \ + automake \ + libtool \ + cmake \ + python3 \ + libkrb5-dev \ + curl + + # Copy function code + COPY package.json src/ ${FUNCTION_DIR}/ + WORKDIR ${FUNCTION_DIR} + RUN npm install && npm install aws-lambda-ric + + # Build Stage 2: Copy Build Stage 1 files in to Stage 2. Install chromium dependencies and chromium. + FROM node:lts-slim + + # Include global arg in this stage of the build + ARG FUNCTION_DIR + + # Set working directory to function root directory + WORKDIR ${FUNCTION_DIR} + + # Copy in the build image dependencies + COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} + RUN ls ${FUNCTION_DIR}/ + + # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) + # Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work. + RUN apt-get update \ + && apt-get install -y wget gnupg \ + && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ + && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ + && apt-get update \ + && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ + --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* + + ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] + + ENV HOME="/tmp" + CMD [ "/function/index.handler" ] + + ``` +3. Run the build command. + ``` + docker build -t opensearch-reporting-cli . + ``` \ No newline at end of file From df689ddbd7856ceabb610c3cab5f0ee1df51ac62 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 22:42:40 +0000 Subject: [PATCH 21/25] Nit: remove ls from Dockerfile Signed-off-by: Rupal Mahajan --- docs/examples/lambda_container_image_from_source.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/examples/lambda_container_image_from_source.md b/docs/examples/lambda_container_image_from_source.md index 419b2f2b..e1e0f262 100644 --- a/docs/examples/lambda_container_image_from_source.md +++ b/docs/examples/lambda_container_image_from_source.md @@ -28,8 +28,7 @@ libtool \ cmake \ python3 \ - libkrb5-dev \ - curl + libkrb5-dev # Copy function code COPY package.json src/ ${FUNCTION_DIR}/ @@ -47,7 +46,6 @@ # Copy in the build image dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} - RUN ls ${FUNCTION_DIR}/ # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) # Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer installs, work. From 14609f73e45b8c50265b42615f65cb6c7000bf6f Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 22:48:20 +0000 Subject: [PATCH 22/25] Adding apt-get remove -y google-chrome-stable Signed-off-by: Rupal Mahajan --- docs/examples/lambda_container_image_from_source.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/examples/lambda_container_image_from_source.md b/docs/examples/lambda_container_image_from_source.md index e1e0f262..4728071d 100644 --- a/docs/examples/lambda_container_image_from_source.md +++ b/docs/examples/lambda_container_image_from_source.md @@ -56,6 +56,7 @@ && apt-get update \ && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \ --no-install-recommends \ + && apt-get remove -y google-chrome-stable \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"] From dcd6b4063da0905de5b3cc2ab1d8e9d975a75c31 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Thu, 2 Feb 2023 00:29:04 +0000 Subject: [PATCH 23/25] Update example docs Signed-off-by: Rupal Mahajan --- docs/examples/lambda_container_image.md | 11 ++++++++--- docs/examples/lambda_container_image_from_source.md | 2 +- src/arguments.js | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/examples/lambda_container_image.md b/docs/examples/lambda_container_image.md index 8f6c386a..10f890f0 100644 --- a/docs/examples/lambda_container_image.md +++ b/docs/examples/lambda_container_image.md @@ -2,9 +2,14 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. +### Prerequisites + +- AMD64 Systems +- Docker + ### Creating Lambda container image -1. Create a Dockerfile. Followig Dockerfile can be used to create a container image for v1.0.0. +1. Create a Dockerfile. Following Dockerfile can be used to create a container image for v1.0.0. ``` # Define function directory ARG FUNCTION_DIR="/function" @@ -62,7 +67,7 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. ENV HOME="/tmp" CMD [ "/function/src/index.handler" ] - ``` + ```dockerfile 2. Run the build command in from the directory where Dockerfile exists. @@ -73,7 +78,7 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. 1. Push the Docker image to [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-console.html) -2. Create a Lambda Function. Select previously created container image ro deploy for you function and architecture x86_64'. +2. Create a Lambda Function. Select previously created container image and architecture x86_64'. 3. Update Lambda timeout to 5 min and memory size to 4096. diff --git a/docs/examples/lambda_container_image_from_source.md b/docs/examples/lambda_container_image_from_source.md index 4728071d..a1100d4c 100644 --- a/docs/examples/lambda_container_image_from_source.md +++ b/docs/examples/lambda_container_image_from_source.md @@ -64,7 +64,7 @@ ENV HOME="/tmp" CMD [ "/function/index.handler" ] - ``` + ```dockerfile 3. Run the build command. ``` docker build -t opensearch-reporting-cli . diff --git a/src/arguments.js b/src/arguments.js index c0ac061c..4bc700a4 100644 --- a/src/arguments.js +++ b/src/arguments.js @@ -174,7 +174,7 @@ function getOptions(options) { : `${commandOptions.filename}.${commandOptions.format}`; // Set name for email body report image - commandOptions.emailbody = `email-body-${commandOptions.time.toISOString()}.png` + commandOptions.emailbody = `email-body-${commandOptions.time.toISOString().replace(/:/g, '-')}.png` // Set width and height of the window commandOptions.width = Number(options.width); From 94687e2b6fe91749235a5af553f2bbd73718020b Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Thu, 2 Feb 2023 00:32:05 +0000 Subject: [PATCH 24/25] nit Signed-off-by: Rupal Mahajan --- docs/examples/lambda_container_image.md | 4 ++-- docs/examples/lambda_container_image_from_source.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/examples/lambda_container_image.md b/docs/examples/lambda_container_image.md index 10f890f0..9138d6f6 100644 --- a/docs/examples/lambda_container_image.md +++ b/docs/examples/lambda_container_image.md @@ -10,7 +10,7 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. ### Creating Lambda container image 1. Create a Dockerfile. Following Dockerfile can be used to create a container image for v1.0.0. - ``` + ```dockerfile # Define function directory ARG FUNCTION_DIR="/function" @@ -67,7 +67,7 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. ENV HOME="/tmp" CMD [ "/function/src/index.handler" ] - ```dockerfile + ``` 2. Run the build command in from the directory where Dockerfile exists. diff --git a/docs/examples/lambda_container_image_from_source.md b/docs/examples/lambda_container_image_from_source.md index a1100d4c..70707c6a 100644 --- a/docs/examples/lambda_container_image_from_source.md +++ b/docs/examples/lambda_container_image_from_source.md @@ -6,7 +6,7 @@ cd reporting-cli ``` 2. Add the following Dockerfile inside `reporting-cli`. - ``` + ```dockerfile # Define function directory ARG FUNCTION_DIR="/function" @@ -64,7 +64,7 @@ ENV HOME="/tmp" CMD [ "/function/index.handler" ] - ```dockerfile + ``` 3. Run the build command. ``` docker build -t opensearch-reporting-cli . From be081142b1be989647e2c254a94957b499581a42 Mon Sep 17 00:00:00 2001 From: Rupal Mahajan Date: Wed, 1 Feb 2023 16:41:47 -0800 Subject: [PATCH 25/25] Update docs/examples/lambda_container_image.md Co-authored-by: Joshua Li --- docs/examples/lambda_container_image.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/lambda_container_image.md b/docs/examples/lambda_container_image.md index 9138d6f6..08ff3ee9 100644 --- a/docs/examples/lambda_container_image.md +++ b/docs/examples/lambda_container_image.md @@ -80,6 +80,6 @@ Opensearch reporting CLI can be used with Lambda for scheduling email reports. 2. Create a Lambda Function. Select previously created container image and architecture x86_64'. -3. Update Lambda timeout to 5 min and memory size to 4096. +3. Update Lambda timeout to 5 min and memory size to at least 1024MB.
- +

Report