Compare commits

...

5 Commits

Author SHA1 Message Date
Zack Schuster 0018bdb14f build: update bundle 2022-10-11 12:41:29 -07:00
Zack Schuster 1f23fa7fb3 tsc: enable noUncheckedIndexAccess 2022-10-11 12:40:58 -07:00
Zack Schuster 18568cdbca chore: upgrade deps 2022-10-11 12:40:40 -07:00
Zack Schuster b59d00f521 smtp: further cleanup 2022-10-11 12:39:21 -07:00
Zack Schuster 5533dce964 smtp: reduce usage of nullish coalescing operator 2022-10-11 09:58:07 -07:00
13 changed files with 329 additions and 329 deletions

140
email.js
View File

@ -32,17 +32,17 @@ const OPERATORS = new Map([
* @return {AddressToken[]} An array of operator|text tokens
*/
function tokenizeAddress(address = '') {
var _a, _b;
const tokens = [];
let token = undefined;
let operator = undefined;
for (const character of address.toString()) {
if (((_a = operator === null || operator === void 0 ? void 0 : operator.length) !== null && _a !== void 0 ? _a : 0) > 0 && character === operator) {
const operatorHasLength = operator != null && operator.length > 0;
if (operatorHasLength === true && character === operator) {
tokens.push({ type: 'operator', value: character });
token = undefined;
operator = undefined;
}
else if (((_b = operator === null || operator === void 0 ? void 0 : operator.length) !== null && _b !== void 0 ? _b : 0) === 0 && OPERATORS.has(character)) {
else if (operatorHasLength === false && OPERATORS.has(character)) {
tokens.push({ type: 'operator', value: character });
token = undefined;
operator = OPERATORS.get(character);
@ -71,7 +71,6 @@ function tokenizeAddress(address = '') {
* @return {AddressObject[]} addresses object array
*/
function convertAddressTokens(tokens) {
var _a, _b;
const addressObjects = [];
const groups = [];
let addresses = [];
@ -134,7 +133,11 @@ function convertAddressTokens(tokens) {
// If no address was found, try to detect one from regular text
if (addresses.length === 0 && texts.length > 0) {
for (let i = texts.length - 1; i >= 0; i--) {
if ((_b = (_a = texts[i]) === null || _a === void 0 ? void 0 : _a.match(/^[^@\s]+@[^@\s]+$/)) !== null && _b !== void 0 ? _b : false) {
const text = texts[i];
if (text == null) {
continue;
}
if (/^[^@\s]+@[^@\s]+$/.test(text)) {
addresses = texts.splice(i, 1);
break;
}
@ -143,7 +146,7 @@ function convertAddressTokens(tokens) {
if (addresses.length === 0) {
for (let i = texts.length - 1; i >= 0; i--) {
const text = texts[i];
if ((text === null || text === void 0 ? void 0 : text.length) > 0) {
if (text != null && text.length > 0) {
texts[i] = text
.replace(/\s*\b[^@\s]+@[^@\s]+\b\s*/, (address) => {
if (addresses.length === 0) {
@ -235,20 +238,15 @@ function addressparser(address) {
* @returns {string} the converted date
*/
function getRFC2822Date(date = new Date(), useUtc = false) {
var _a, _b;
if (useUtc) {
return getRFC2822DateUTC(date);
}
const dates = date
const [zero, one, two, ...rest] = date
.toString()
.replace('GMT', '')
.replace(/\s\(.*\)$/, '')
.split(' ');
dates[0] = dates[0] + ',';
const day = (_a = dates[1]) !== null && _a !== void 0 ? _a : '';
dates[1] = (_b = dates[2]) !== null && _b !== void 0 ? _b : '';
dates[2] = day;
return dates.join(' ');
return [zero + ',', two, one, ...rest].join(' ');
}
/**
* @param {Date} [date] an optional date to convert to RFC2822 format (UTC)
@ -291,22 +289,22 @@ const MAX_CHUNK_LENGTH = 16383; // must be multiple of 3
const MAX_MIME_WORD_LENGTH = 52;
const MAX_B64_MIME_WORD_BYTE_LENGTH = 39;
function tripletToBase64(num) {
var _a, _b;
return (((_a = LOOKUP[(num >> 18) & 0x3f]) !== null && _a !== void 0 ? _a : '') +
((_b = LOOKUP[(num >> 12) & 0x3f]) !== null && _b !== void 0 ? _b : '') +
return ('' +
LOOKUP[(num >> 18) & 0x3f] +
LOOKUP[(num >> 12) & 0x3f] +
LOOKUP[(num >> 6) & 0x3f] +
LOOKUP[num & 0x3f]);
}
function encodeChunk(uint8, start, end) {
var _a, _b, _c;
let output = '';
for (let i = start; i < end; i += 3) {
output += tripletToBase64((((_a = uint8[i]) !== null && _a !== void 0 ? _a : 0) << 16) + (((_b = uint8[i + 1]) !== null && _b !== void 0 ? _b : 0) << 8) + ((_c = uint8[i + 2]) !== null && _c !== void 0 ? _c : 0));
output += tripletToBase64((Number(uint8[i]) << 16) +
(Number(uint8[i + 1]) << 8) +
Number(uint8[i + 2]));
}
return output;
}
function encodeBase64(data) {
var _a, _b, _c;
const len = data.length;
const extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
let output = '';
@ -316,13 +314,13 @@ function encodeBase64(data) {
}
// pad the end with zeros, but make sure to not forget the extra bytes
if (extraBytes === 1) {
const tmp = (_a = data[len - 1]) !== null && _a !== void 0 ? _a : 0;
const tmp = Number(data[len - 1]);
output += LOOKUP[tmp >> 2];
output += LOOKUP[(tmp << 4) & 0x3f];
output += '==';
}
else if (extraBytes === 2) {
const tmp = (((_b = data[len - 2]) !== null && _b !== void 0 ? _b : 0) << 8) + ((_c = data[len - 1]) !== null && _c !== void 0 ? _c : 0);
const tmp = (Number(data[len - 2]) << 8) + Number(data[len - 1]);
output += LOOKUP[tmp >> 10];
output += LOOKUP[(tmp >> 4) & 0x3f];
output += LOOKUP[(tmp << 2) & 0x3f];
@ -338,7 +336,6 @@ function encodeBase64(data) {
* @return {string[]} lines
*/
function splitMimeEncodedString(str, maxlen = 12) {
var _a;
const minWordLength = 12; // require at least 12 symbols to fit possible 4 octet UTF-8 sequences
const maxWordLength = Math.max(maxlen, minWordLength);
const lines = [];
@ -352,9 +349,10 @@ function splitMimeEncodedString(str, maxlen = 12) {
while (!done) {
let chr;
done = true;
const match = str.substring(curLine.length).match(/^=([0-9A-F]{2})/i); // check if not middle of a unicode char sequence
if (match) {
chr = parseInt((_a = match[1]) !== null && _a !== void 0 ? _a : '', 16);
const matchset = str.substring(curLine.length).match(/^=([0-9A-F]{2})/i); // check if not middle of a unicode char sequence
if (matchset != null) {
const [, secondMatch = ''] = matchset;
chr = parseInt(secondMatch, 16);
// invalid sequence, move one char back anc recheck
if (chr < 0xc2 && chr > 0x7f) {
curLine = curLine.substring(0, curLine.length - 3);
@ -377,9 +375,7 @@ function splitMimeEncodedString(str, maxlen = 12) {
function checkRanges(nr) {
return RANGES.reduce((val, range) => val ||
(range.length === 1 && nr === range[0]) ||
(range.length === 2 &&
nr >= range[0] &&
nr <= range[1]), false);
(range.length === 2 && nr >= Number(range[0]) && nr <= Number(range[1])), false);
}
/**
* Encodes all non printable and non ascii bytes to =XX form, where XX is the
@ -550,7 +546,7 @@ class Message {
this.header[header.toLowerCase()] = convertPersonToAddress(headers[header]);
}
else {
// allow any headers the user wants to set??
// allow any headers the user wants to set
this.header[header.toLowerCase()] = headers[header];
}
}
@ -765,10 +761,10 @@ class MessageStream extends Stream {
}
};
const outputFile = (attachment, next) => {
var _a;
const chunk = MIME64CHUNK * 16;
const buffer = Buffer.alloc(chunk);
const inputEncoding = ((_a = attachment === null || attachment === void 0 ? void 0 : attachment.headers) === null || _a === void 0 ? void 0 : _a['content-transfer-encoding']) || 'base64';
const { headers = {} } = attachment;
const inputEncoding = headers['content-transfer-encoding'] || 'base64';
const encoding = inputEncoding === '7bit'
? 'ascii'
: inputEncoding === '8bit'
@ -813,7 +809,7 @@ class MessageStream extends Stream {
*/
const outputStream = (attachment, callback) => {
const { stream } = attachment;
if (stream === null || stream === void 0 ? void 0 : stream.readable) {
if (stream != null && stream.readable) {
let previous = Buffer.alloc(0);
stream.resume();
stream.on('end', () => {
@ -865,11 +861,13 @@ class MessageStream extends Stream {
if (index < list.length) {
output(`--${boundary}${CRLF$1}`);
const item = list[index];
if (item === null || item === void 0 ? void 0 : item.related) {
outputRelated(item, () => outputMessage(boundary, list, index + 1, callback));
}
else if (item) {
outputAttachment(item, () => outputMessage(boundary, list, index + 1, callback));
if (item != null) {
if (item.related) {
outputRelated(item, () => outputMessage(boundary, list, index + 1, callback));
}
else {
outputAttachment(item, () => outputMessage(boundary, list, index + 1, callback));
}
}
}
else {
@ -896,10 +894,8 @@ class MessageStream extends Stream {
* @returns {void}
*/
const outputData = (attachment, callback) => {
var _a, _b;
outputBase64(attachment.encoded
? (_a = attachment.data) !== null && _a !== void 0 ? _a : ''
: Buffer.from((_b = attachment.data) !== null && _b !== void 0 ? _b : '').toString('base64'), callback);
const { data = '' } = attachment;
outputBase64(attachment.encoded ? data : Buffer.from(data).toString('base64'), callback);
};
/**
* @param {Message} message the message to output
@ -927,8 +923,8 @@ class MessageStream extends Stream {
const boundary = generateBoundary();
output(`Content-Type: multipart/related; boundary="${boundary}"${CRLF$1}${CRLF$1}--${boundary}${CRLF$1}`);
outputAttachment(message, () => {
var _a;
outputMessage(boundary, (_a = message.related) !== null && _a !== void 0 ? _a : [], 0, () => {
const { related = [] } = message;
outputMessage(boundary, related, 0, () => {
output(`${CRLF$1}--${boundary}--${CRLF$1}${CRLF$1}`);
callback();
});
@ -959,12 +955,13 @@ class MessageStream extends Stream {
}
};
const close$1 = (err) => {
var _a, _b;
if (err) {
this.emit('error', err);
}
else {
this.emit('data', (_b = (_a = this.buffer) === null || _a === void 0 ? void 0 : _a.toString('utf-8', 0, this.bufferIndex)) !== null && _b !== void 0 ? _b : '');
this.emit('data', this.buffer != null
? this.buffer.toString('utf-8', 0, this.bufferIndex)
: '');
this.emit('end');
}
this.buffer = null;
@ -1084,7 +1081,8 @@ class SMTPError extends Error {
* @returns {SMTPError} error
*/
static create(message, code, error, smtp) {
const msg = (error === null || error === void 0 ? void 0 : error.message) ? `${message} (${error.message})` : message;
const shouldUseError = error != null && error.message != null && error.message.length > 0;
const msg = shouldUseError ? `${message} (${error.message})` : message;
const err = new SMTPError(msg);
err.code = code;
err.smtp = smtp;
@ -1099,14 +1097,11 @@ class SMTPResponseMonitor {
constructor(stream, timeout, onerror) {
let buffer = '';
const notify = () => {
var _a, _b;
if (buffer.length) {
// parse buffer for response codes
const line = buffer.replace('\r', '');
if (!((_b = (_a = line
.trim()
.split(/\n/)
.pop()) === null || _a === void 0 ? void 0 : _a.match(/^(\d{3})\s/)) !== null && _b !== void 0 ? _b : false)) {
const code = line.trim().split(/\n/).pop();
if (code == null || /^(\d{3})\s/.test(code) === false) {
return;
}
const match = line ? line.match(/(\d+)\s?(.*)/) : null;
@ -1212,7 +1207,6 @@ class SMTPConnection extends EventEmitter {
* NOTE: `host` is trimmed before being used to establish a connection; however, the original untrimmed value will still be visible in configuration.
*/
constructor({ timeout, host, user, password, domain, port, ssl, tls, logger, authentication, } = {}) {
var _a;
super();
this.timeout = DEFAULT_TIMEOUT;
this.log = log;
@ -1257,7 +1251,7 @@ class SMTPConnection extends EventEmitter {
}
this.port = port || (ssl ? SMTP_SSL_PORT : tls ? SMTP_TLS_PORT : SMTP_PORT);
this.loggedin = user && password ? false : true;
if (!user && ((_a = password === null || password === void 0 ? void 0 : password.length) !== null && _a !== void 0 ? _a : 0) > 0) {
if (user == null && password != null && password.length > 0) {
throw new Error('`password` cannot be set without `user`');
}
// keep these strings hidden when quicky debugging/logging
@ -1505,7 +1499,6 @@ class SMTPConnection extends EventEmitter {
// MTA's will disconnect on an ehlo. Toss an exception if
// that happens -ddm
data.split('\n').forEach((ext) => {
var _a, _b;
const parse = ext.match(/^(?:\d+[-=]?)\s*?([^\s]+)(?:\s+(.*)\s*?)?$/);
// To be able to communicate with as many SMTP servers as possible,
// we have to take the old-style auth advertisement into account,
@ -1518,7 +1511,8 @@ class SMTPConnection extends EventEmitter {
// It's actually stricter, in that only spaces are allowed between
// parameters, but were not going to check for that here. Note
// that the space isn't present if there are no parameters.
this.features[(_b = (_a = parse[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : ''] = parse[2] || true;
const [, one = '', two = true] = parse;
this.features[one.toLowerCase()] = two;
}
});
}
@ -1551,8 +1545,7 @@ class SMTPConnection extends EventEmitter {
* @returns {boolean} whether the extension exists
*/
has_extn(opt) {
var _a;
return ((_a = this.features) !== null && _a !== void 0 ? _a : {})[opt.toLowerCase()] === undefined;
return this.features != null && this.features[opt.toLowerCase()] != null;
}
/**
* @public
@ -1620,9 +1613,13 @@ class SMTPConnection extends EventEmitter {
* @returns {void}
*/
message(data) {
var _a, _b;
this.log(data);
(_b = (_a = this.sock) === null || _a === void 0 ? void 0 : _a.write(data)) !== null && _b !== void 0 ? _b : this.log('no socket to write to');
if (this.sock != null) {
this.sock.write(data);
}
else {
this.log('no socket to write to');
}
}
/**
* @public
@ -1686,15 +1683,13 @@ class SMTPConnection extends EventEmitter {
* @returns {void}
*/
login(callback, user, password, options = {}) {
var _a, _b;
const login = {
user: user ? () => user : this.user,
password: password ? () => password : this.password,
method: (_b = (_a = options === null || options === void 0 ? void 0 : options.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) !== null && _b !== void 0 ? _b : '',
method: options.method != null ? options.method.toUpperCase() : '',
};
const domain = (options === null || options === void 0 ? void 0 : options.domain) || this.domain;
const domain = options.domain || this.domain;
const initiate = (err, data) => {
var _a;
if (err) {
caller(callback, err);
return;
@ -1722,7 +1717,8 @@ class SMTPConnection extends EventEmitter {
// less preferred methods.
if (!method) {
let auth = '';
if (typeof ((_a = this.features) === null || _a === void 0 ? void 0 : _a['auth']) === 'string') {
if (this.features != null &&
typeof this.features['auth'] === 'string') {
auth = this.features['auth'];
}
for (const authMethod of this.authentication) {
@ -1926,12 +1922,11 @@ class SMTPClient {
createMessageStack(message, callback = function () {
/* ø */
}) {
var _a;
const [firstParsedAddress] = addressparser(message.header.from);
const [{ address: from = '' } = {}] = addressparser(message.header.from);
const stack = {
message,
to: [],
from: firstParsedAddress === null || firstParsedAddress === void 0 ? void 0 : firstParsedAddress.address,
to: new Array(),
from,
callback: callback.bind(this),
};
const { header: { to, cc, bcc, 'return-path': returnPath }, } = message;
@ -1947,8 +1942,8 @@ class SMTPClient {
if (typeof returnPath === 'string' && returnPath.length > 0) {
const parsedAddresses = addressparser(returnPath);
if (parsedAddresses.length > 0) {
const [firstParsedAddress] = parsedAddresses;
stack.returnPath = (_a = firstParsedAddress === null || firstParsedAddress === void 0 ? void 0 : firstParsedAddress.address) !== null && _a !== void 0 ? _a : '';
const [{ address = '' } = {}] = parsedAddresses;
stack.returnPath = address;
}
}
return stack;
@ -2093,12 +2088,11 @@ class SMTPClient {
* @returns {void}
*/
_sendrcpt(stack) {
var _a;
if (stack.to == null || typeof stack.to === 'string') {
throw new TypeError('stack.to must be array');
}
const to = (_a = stack.to.shift()) === null || _a === void 0 ? void 0 : _a.address;
this.smtp.rcpt(this._sendsmtp(stack, stack.to.length ? this._sendrcpt : this._senddata), `<${to}>`);
const to = stack.to.shift();
this.smtp.rcpt(this._sendsmtp(stack, stack.to.length ? this._sendrcpt : this._senddata), `<${to == null ? '' : to.address || ''}>`);
}
/**
* @protected

File diff suppressed because one or more lines are too long

View File

@ -21,10 +21,10 @@
"@types/mailparser": "3.4.0",
"@types/node": "12.12.6",
"@types/smtp-server": "3.5.7",
"@typescript-eslint/eslint-plugin": "5.38.0",
"@typescript-eslint/parser": "5.38.0",
"@typescript-eslint/eslint-plugin": "5.40.0",
"@typescript-eslint/parser": "5.40.0",
"ava": "4.3.3",
"eslint": "8.23.1",
"eslint": "8.25.0",
"eslint-config-prettier": "8.5.0",
"eslint-plugin-prettier": "4.2.1",
"mailparser": "3.5.0",
@ -44,7 +44,7 @@
}
},
"resolutions": {
"nodemailer": "6.7.8"
"nodemailer": "6.8.0"
},
"engines": {
"node": ">=12"

View File

@ -40,11 +40,12 @@ function tokenizeAddress(address: string | string[] = '') {
let operator: string | undefined = undefined;
for (const character of address.toString()) {
if ((operator?.length ?? 0) > 0 && character === operator) {
const operatorHasLength = operator != null && operator.length > 0;
if (operatorHasLength === true && character === operator) {
tokens.push({ type: 'operator', value: character });
token = undefined;
operator = undefined;
} else if ((operator?.length ?? 0) === 0 && OPERATORS.has(character)) {
} else if (operatorHasLength === false && OPERATORS.has(character)) {
tokens.push({ type: 'operator', value: character });
token = undefined;
operator = OPERATORS.get(character);
@ -137,7 +138,11 @@ function convertAddressTokens(tokens: AddressToken[]) {
// If no address was found, try to detect one from regular text
if (addresses.length === 0 && texts.length > 0) {
for (let i = texts.length - 1; i >= 0; i--) {
if (texts[i]?.match(/^[^@\s]+@[^@\s]+$/) ?? false) {
const text = texts[i];
if (text == null) {
continue;
}
if (/^[^@\s]+@[^@\s]+$/.test(text)) {
addresses = texts.splice(i, 1);
break;
}
@ -147,7 +152,7 @@ function convertAddressTokens(tokens: AddressToken[]) {
if (addresses.length === 0) {
for (let i = texts.length - 1; i >= 0; i--) {
const text = texts[i];
if (text?.length > 0) {
if (text != null && text.length > 0) {
texts[i] = text
.replace(/\s*\b[^@\s]+@[^@\s]+\b\s*/, (address: string) => {
if (addresses.length === 0) {

View File

@ -1,4 +1,4 @@
import { addressparser } from './address.js';
import { AddressObject, addressparser } from './address.js';
import type { MessageAttachment, MessageHeaders } from './message.js';
import { Message } from './message.js';
import type { SMTPConnectionOptions } from './connection.js';
@ -113,11 +113,11 @@ export class SMTPClient {
/* ø */
}
) {
const [firstParsedAddress] = addressparser(message.header.from);
const [{ address: from = '' } = {}] = addressparser(message.header.from);
const stack = {
message,
to: [] as ReturnType<typeof addressparser>,
from: firstParsedAddress?.address,
to: new Array<AddressObject>(),
from,
callback: callback.bind(this),
} as MessageStack;
@ -148,8 +148,8 @@ export class SMTPClient {
if (typeof returnPath === 'string' && returnPath.length > 0) {
const parsedAddresses = addressparser(returnPath);
if (parsedAddresses.length > 0) {
const [firstParsedAddress] = parsedAddresses;
stack.returnPath = firstParsedAddress?.address ?? '';
const [{ address = '' } = {}] = parsedAddresses;
stack.returnPath = address;
}
}
@ -314,10 +314,10 @@ export class SMTPClient {
throw new TypeError('stack.to must be array');
}
const to = stack.to.shift()?.address;
const to = stack.to.shift();
this.smtp.rcpt(
this._sendsmtp(stack, stack.to.length ? this._sendrcpt : this._senddata),
`<${to}>`
`<${to == null ? '' : to.address || ''}>`
);
}

View File

@ -174,7 +174,7 @@ export class SMTPConnection extends EventEmitter {
this.port = port || (ssl ? SMTP_SSL_PORT : tls ? SMTP_TLS_PORT : SMTP_PORT);
this.loggedin = user && password ? false : true;
if (!user && (password?.length ?? 0) > 0) {
if (user == null && password != null && password.length > 0) {
throw new Error('`password` cannot be set without `user`');
}
@ -520,7 +520,8 @@ export class SMTPConnection extends EventEmitter {
// It's actually stricter, in that only spaces are allowed between
// parameters, but were not going to check for that here. Note
// that the space isn't present if there are no parameters.
this.features[parse[1]?.toLowerCase() ?? ''] = parse[2] || true;
const [, one = '', two = true] = parse;
this.features[one.toLowerCase()] = two;
}
});
}
@ -554,7 +555,7 @@ export class SMTPConnection extends EventEmitter {
* @returns {boolean} whether the extension exists
*/
public has_extn(opt: string) {
return (this.features ?? {})[opt.toLowerCase()] === undefined;
return this.features != null && this.features[opt.toLowerCase()] != null;
}
/**
@ -631,7 +632,11 @@ export class SMTPConnection extends EventEmitter {
*/
public message(data: string) {
this.log(data);
this.sock?.write(data) ?? this.log('no socket to write to');
if (this.sock != null) {
this.sock.write(data);
} else {
this.log('no socket to write to');
}
}
/**
@ -710,10 +715,10 @@ export class SMTPConnection extends EventEmitter {
const login = {
user: user ? () => user : this.user,
password: password ? () => password : this.password,
method: options?.method?.toUpperCase() ?? '',
method: options.method != null ? options.method.toUpperCase() : '',
};
const domain = options?.domain || this.domain;
const domain = options.domain || this.domain;
const initiate = (err: Error | null | undefined, data: unknown) => {
if (err) {
@ -757,7 +762,10 @@ export class SMTPConnection extends EventEmitter {
if (!method) {
let auth = '';
if (typeof this.features?.['auth'] === 'string') {
if (
this.features != null &&
typeof this.features['auth'] === 'string'
) {
auth = this.features['auth'];
}

View File

@ -8,19 +8,13 @@ export function getRFC2822Date(date = new Date(), useUtc = false) {
return getRFC2822DateUTC(date);
}
const dates = date
const [zero, one, two, ...rest] = date
.toString()
.replace('GMT', '')
.replace(/\s\(.*\)$/, '')
.split(' ');
dates[0] = dates[0] + ',';
const day = dates[1] ?? '';
dates[1] = dates[2] ?? '';
dates[2] = day;
return dates.join(' ');
return [zero + ',', two, one, ...rest].join(' ');
}
/**

View File

@ -42,7 +42,9 @@ export class SMTPError extends Error {
error?: Error | null,
smtp?: unknown
) {
const msg = error?.message ? `${message} (${error.message})` : message;
const shouldUseError =
error != null && error.message != null && error.message.length > 0;
const msg = shouldUseError ? `${message} (${error.message})` : message;
const err = new SMTPError(msg);
err.code = code;

View File

@ -163,7 +163,7 @@ export class Message {
headers[header] as string | string[]
);
} else {
// allow any headers the user wants to set??
// allow any headers the user wants to set
this.header[header.toLowerCase()] = headers[header];
}
}
@ -419,9 +419,9 @@ class MessageStream extends Stream {
) => {
const chunk = MIME64CHUNK * 16;
const buffer = Buffer.alloc(chunk);
const { headers = {} } = attachment;
const inputEncoding =
attachment?.headers?.['content-transfer-encoding'] || 'base64';
const inputEncoding = headers['content-transfer-encoding'] || 'base64';
const encoding =
inputEncoding === '7bit'
? 'ascii'
@ -479,7 +479,7 @@ class MessageStream extends Stream {
callback: () => void
) => {
const { stream } = attachment;
if (stream?.readable) {
if (stream != null && stream.readable) {
let previous = Buffer.alloc(0);
stream.resume();
@ -547,14 +547,16 @@ class MessageStream extends Stream {
if (index < list.length) {
output(`--${boundary}${CRLF}`);
const item = list[index];
if (item?.related) {
outputRelated(item, () =>
outputMessage(boundary, list, index + 1, callback)
);
} else if (item) {
outputAttachment(item, () =>
outputMessage(boundary, list, index + 1, callback)
);
if (item != null) {
if (item.related) {
outputRelated(item, () =>
outputMessage(boundary, list, index + 1, callback)
);
} else {
outputAttachment(item, () =>
outputMessage(boundary, list, index + 1, callback)
);
}
}
} else {
output(`${CRLF}--${boundary}--${CRLF}${CRLF}`);
@ -589,10 +591,9 @@ class MessageStream extends Stream {
attachment: MessageAttachment,
callback: () => void
) => {
const { data = '' } = attachment;
outputBase64(
attachment.encoded
? attachment.data ?? ''
: Buffer.from(attachment.data ?? '').toString('base64'),
attachment.encoded ? data : Buffer.from(data).toString('base64'),
callback
);
};
@ -631,7 +632,8 @@ class MessageStream extends Stream {
`Content-Type: multipart/related; boundary="${boundary}"${CRLF}${CRLF}--${boundary}${CRLF}`
);
outputAttachment(message, () => {
outputMessage(boundary, message.related ?? [], 0, () => {
const { related = [] } = message;
outputMessage(boundary, related, 0, () => {
output(`${CRLF}--${boundary}--${CRLF}${CRLF}`);
callback();
});
@ -675,7 +677,9 @@ class MessageStream extends Stream {
} else {
this.emit(
'data',
this.buffer?.toString('utf-8', 0, this.bufferIndex) ?? ''
this.buffer != null
? this.buffer.toString('utf-8', 0, this.bufferIndex)
: ''
);
this.emit('end');
}

View File

@ -21,8 +21,9 @@ const MAX_B64_MIME_WORD_BYTE_LENGTH = 39;
function tripletToBase64(num: number) {
return (
(LOOKUP[(num >> 18) & 0x3f] ?? '') +
(LOOKUP[(num >> 12) & 0x3f] ?? '') +
'' +
LOOKUP[(num >> 18) & 0x3f] +
LOOKUP[(num >> 12) & 0x3f] +
LOOKUP[(num >> 6) & 0x3f] +
LOOKUP[num & 0x3f]
);
@ -32,7 +33,9 @@ function encodeChunk(uint8: Uint8Array, start: number, end: number) {
let output = '';
for (let i = start; i < end; i += 3) {
output += tripletToBase64(
((uint8[i] ?? 0) << 16) + ((uint8[i + 1] ?? 0) << 8) + (uint8[i + 2] ?? 0)
(Number(uint8[i]) << 16) +
(Number(uint8[i + 1]) << 8) +
Number(uint8[i + 2])
);
}
return output;
@ -54,12 +57,12 @@ function encodeBase64(data: Uint8Array) {
// pad the end with zeros, but make sure to not forget the extra bytes
if (extraBytes === 1) {
const tmp = data[len - 1] ?? 0;
const tmp = Number(data[len - 1]);
output += LOOKUP[tmp >> 2];
output += LOOKUP[(tmp << 4) & 0x3f];
output += '==';
} else if (extraBytes === 2) {
const tmp = ((data[len - 2] ?? 0) << 8) + (data[len - 1] ?? 0);
const tmp = (Number(data[len - 2]) << 8) + Number(data[len - 1]);
output += LOOKUP[tmp >> 10];
output += LOOKUP[(tmp >> 4) & 0x3f];
output += LOOKUP[(tmp << 2) & 0x3f];
@ -93,9 +96,10 @@ function splitMimeEncodedString(str: string, maxlen = 12) {
while (!done) {
let chr;
done = true;
const match = str.substring(curLine.length).match(/^=([0-9A-F]{2})/i); // check if not middle of a unicode char sequence
if (match) {
chr = parseInt(match[1] ?? '', 16);
const matchset = str.substring(curLine.length).match(/^=([0-9A-F]{2})/i); // check if not middle of a unicode char sequence
if (matchset != null) {
const [, secondMatch = ''] = matchset;
chr = parseInt(secondMatch, 16);
// invalid sequence, move one char back anc recheck
if (chr < 0xc2 && chr > 0x7f) {
curLine = curLine.substring(0, curLine.length - 3);
@ -123,9 +127,7 @@ function checkRanges(nr: number) {
(val, range) =>
val ||
(range.length === 1 && nr === range[0]) ||
(range.length === 2 &&
nr >= (range[0] as typeof nr) &&
nr <= (range[1] as typeof nr)),
(range.length === 2 && nr >= Number(range[0]) && nr <= Number(range[1])),
false
);
}

View File

@ -16,15 +16,8 @@ export class SMTPResponseMonitor {
if (buffer.length) {
// parse buffer for response codes
const line = buffer.replace('\r', '');
if (
!(
line
.trim()
.split(/\n/)
.pop()
?.match(/^(\d{3})\s/) ?? false
)
) {
const code = line.trim().split(/\n/).pop();
if (code == null || /^(\d{3})\s/.test(code) === false) {
return;
}

View File

@ -1,5 +1,8 @@
{
"extends": "@ledge/configs/tsconfig.json",
"compilerOptions": {
"noUncheckedIndexedAccess": true,
},
"include": [
"email.ts",
"smtp",

367
yarn.lock
View File

@ -9,10 +9,10 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@eslint/eslintrc@^1.3.2":
version "1.3.2"
resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356"
integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==
"@eslint/eslintrc@^1.3.3":
version "1.3.3"
resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95"
integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
@ -24,20 +24,15 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@humanwhocodes/config-array@^0.10.4":
version "0.10.4"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c"
integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==
"@humanwhocodes/config-array@^0.10.5":
version "0.10.7"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc"
integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1"
minimatch "^3.0.4"
"@humanwhocodes/gitignore-to-minimatch@^1.0.2":
version "1.0.2"
resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d"
integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==
"@humanwhocodes/module-importer@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
@ -118,24 +113,24 @@
selderee "^0.6.0"
"@tsconfig/node10@^1.0.7":
version "1.0.8"
resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
version "1.0.9"
resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
"@tsconfig/node12@^1.0.7":
version "1.0.9"
resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
version "1.0.11"
resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
"@tsconfig/node14@^1.0.0":
version "1.0.1"
resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
version "1.0.3"
resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
"@tsconfig/node16@^1.0.2":
version "1.0.2"
resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
version "1.0.3"
resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
"@types/estree@0.0.39":
version "0.0.39"
@ -161,9 +156,9 @@
integrity sha512-FjsYUPzEJdGXjwKqSpE0/9QEh6kzhTAeObA54rn6j3rR4C/mzpI9L0KNfoeASSPMMdxIsoJuCLDWcM/rVjIsSA==
"@types/nodemailer@*":
version "6.4.4"
resolved "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.4.tgz#c265f7e7a51df587597b3a49a023acaf0c741f4b"
integrity sha512-Ksw4t7iliXeYGvIQcSIgWQ5BLuC/mljIEbjf615svhZL10PE9t+ei8O9gDaD3FPCasUJn9KTLwz2JFJyiiyuqw==
version "6.4.6"
resolved "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.6.tgz#ce21b4b474a08f672f182e15982b7945dde1f288"
integrity sha512-pD6fL5GQtUKvD2WnPmg5bC2e8kWCAPDwMPmHe/ohQbW+Dy0EcHgZ2oCSuPlWNqk74LS5BVMig1SymQbFMPPK3w==
dependencies:
"@types/node" "*"
@ -175,84 +170,85 @@
"@types/node" "*"
"@types/nodemailer" "*"
"@typescript-eslint/eslint-plugin@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz#ac919a199548861012e8c1fb2ec4899ac2bc22ae"
integrity sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==
"@typescript-eslint/eslint-plugin@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.0.tgz#0159bb71410eec563968288a17bd4478cdb685bd"
integrity sha512-FIBZgS3DVJgqPwJzvZTuH4HNsZhHMa9SjxTKAZTlMsPw/UzpEjcf9f4dfgDJEHjK+HboUJo123Eshl6niwEm/Q==
dependencies:
"@typescript-eslint/scope-manager" "5.38.0"
"@typescript-eslint/type-utils" "5.38.0"
"@typescript-eslint/utils" "5.38.0"
"@typescript-eslint/scope-manager" "5.40.0"
"@typescript-eslint/type-utils" "5.40.0"
"@typescript-eslint/utils" "5.40.0"
debug "^4.3.4"
ignore "^5.2.0"
regexpp "^3.2.0"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/parser@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz#5a59a1ff41a7b43aacd1bb2db54f6bf1c02b2ff8"
integrity sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==
"@typescript-eslint/parser@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.0.tgz#432bddc1fe9154945660f67c1ba6d44de5014840"
integrity sha512-Ah5gqyX2ySkiuYeOIDg7ap51/b63QgWZA7w6AHtFrag7aH0lRQPbLzUjk0c9o5/KZ6JRkTTDKShL4AUrQa6/hw==
dependencies:
"@typescript-eslint/scope-manager" "5.38.0"
"@typescript-eslint/types" "5.38.0"
"@typescript-eslint/typescript-estree" "5.38.0"
"@typescript-eslint/scope-manager" "5.40.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/typescript-estree" "5.40.0"
debug "^4.3.4"
"@typescript-eslint/scope-manager@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz#8f0927024b6b24e28671352c93b393a810ab4553"
integrity sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==
"@typescript-eslint/scope-manager@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz#d6ea782c8e3a2371ba3ea31458dcbdc934668fc4"
integrity sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==
dependencies:
"@typescript-eslint/types" "5.38.0"
"@typescript-eslint/visitor-keys" "5.38.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/visitor-keys" "5.40.0"
"@typescript-eslint/type-utils@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz#c8b7f681da825fcfc66ff2b63d70693880496876"
integrity sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==
"@typescript-eslint/type-utils@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.0.tgz#4964099d0158355e72d67a370249d7fc03331126"
integrity sha512-nfuSdKEZY2TpnPz5covjJqav+g5qeBqwSHKBvz7Vm1SAfy93SwKk/JeSTymruDGItTwNijSsno5LhOHRS1pcfw==
dependencies:
"@typescript-eslint/typescript-estree" "5.38.0"
"@typescript-eslint/utils" "5.38.0"
"@typescript-eslint/typescript-estree" "5.40.0"
"@typescript-eslint/utils" "5.40.0"
debug "^4.3.4"
tsutils "^3.21.0"
"@typescript-eslint/types@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz#8cd15825e4874354e31800dcac321d07548b8a5f"
integrity sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==
"@typescript-eslint/types@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz#8de07e118a10b8f63c99e174a3860f75608c822e"
integrity sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==
"@typescript-eslint/typescript-estree@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz#89f86b2279815c6fb7f57d68cf9b813f0dc25d98"
integrity sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==
"@typescript-eslint/typescript-estree@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz#e305e6a5d65226efa5471ee0f12e0ffaab6d3075"
integrity sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==
dependencies:
"@typescript-eslint/types" "5.38.0"
"@typescript-eslint/visitor-keys" "5.38.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/visitor-keys" "5.40.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/utils@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz#5b31f4896471818153790700eb02ac869a1543f4"
integrity sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==
"@typescript-eslint/utils@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.0.tgz#647f56a875fd09d33c6abd70913c3dd50759b772"
integrity sha512-MO0y3T5BQ5+tkkuYZJBjePewsY+cQnfkYeRqS6tPh28niiIwPnQ1t59CSRcs1ZwJJNOdWw7rv9pF8aP58IMihA==
dependencies:
"@types/json-schema" "^7.0.9"
"@typescript-eslint/scope-manager" "5.38.0"
"@typescript-eslint/types" "5.38.0"
"@typescript-eslint/typescript-estree" "5.38.0"
"@typescript-eslint/scope-manager" "5.40.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/typescript-estree" "5.40.0"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
semver "^7.3.7"
"@typescript-eslint/visitor-keys@5.38.0":
version "5.38.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz#60591ca3bf78aa12b25002c0993d067c00887e34"
integrity sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==
"@typescript-eslint/visitor-keys@5.40.0":
version "5.40.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz#dd2d38097f68e0d2e1e06cb9f73c0173aca54b68"
integrity sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==
dependencies:
"@typescript-eslint/types" "5.38.0"
"@typescript-eslint/types" "5.40.0"
eslint-visitor-keys "^3.3.0"
acorn-jsx@^5.3.2:
@ -279,9 +275,9 @@ aggregate-error@^3.0.0:
indent-string "^4.0.0"
aggregate-error@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.0.tgz#83dbdb53a0d500721281d22e19eee9bc352a89cd"
integrity sha512-8DGp7zUt1E9k0NE2q4jlXHk+V3ORErmwolEdRz9iV+LKJ40WhMHh92cxAvhqV2I+zEn/gotIoqoMs0NjF3xofg==
version "4.0.1"
resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e"
integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==
dependencies:
clean-stack "^4.0.0"
indent-string "^5.0.0"
@ -314,9 +310,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
color-convert "^2.0.1"
ansi-styles@^6.0.0, ansi-styles@^6.1.0:
version "6.1.0"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3"
integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==
version "6.2.0"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.0.tgz#24b0517e8156e12520f389a8ddf938f337f03143"
integrity sha512-3MWBO/XxbkDtc/qpECaUwDM0DQ++ujBjdjs0ElZvChUoPv/P7GOnl3x+R2RF2My5UJHEW5R87q556MiR8U3PLw==
anymatch@~3.1.2:
version "3.1.2"
@ -346,7 +342,7 @@ argparse@^2.0.1:
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==
array-union@^2.1.0:
version "2.1.0"
@ -422,7 +418,7 @@ balanced-match@^1.0.0:
base32.js@0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz#b582dec693c2f11e893cf064ee6ac5b6131a2202"
integrity sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=
integrity sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==
binary-extensions@^2.0.0:
version "2.2.0"
@ -475,9 +471,9 @@ chalk@^4.0.0:
supports-color "^7.1.0"
chalk@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6"
integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==
version "5.1.0"
resolved "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz#c4b4a62bfb6df0eeeb5dbc52e6a9ecaff14b9976"
integrity sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==
chokidar@^3.5.3:
version "3.5.3"
@ -500,9 +496,9 @@ chunkd@^2.0.1:
integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==
ci-info@^3.3.1:
version "3.4.0"
resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz#b28484fd436cbc267900364f096c9dc185efb251"
integrity sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==
version "3.5.0"
resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz#bfac2a29263de4c829d806b1ab478e35091e171f"
integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==
ci-parallel-vars@^1.0.1:
version "1.0.1"
@ -515,16 +511,16 @@ clean-stack@^2.0.0:
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
clean-stack@^4.0.0:
version "4.1.0"
resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.1.0.tgz#5ce5a2fd19a12aecdce8570daefddb7ac94b6b4e"
integrity sha512-dxXQYI7mfQVcaF12s6sjNFoZ6ZPDQuBBLp3QJ5156k9EvUFClUoZ11fo8HnLQO241DDVntHEug8MOuFO5PSfRg==
version "4.2.0"
resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31"
integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==
dependencies:
escape-string-regexp "5.0.0"
clean-yaml-object@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68"
integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=
integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==
cli-truncate@^3.1.0:
version "3.1.0"
@ -534,13 +530,13 @@ cli-truncate@^3.1.0:
slice-ansi "^5.0.0"
string-width "^5.0.0"
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
cliui@^8.0.1:
version "8.0.1"
resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
dependencies:
string-width "^4.2.0"
strip-ansi "^6.0.0"
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
code-excerpt@^4.0.0:
@ -575,7 +571,7 @@ common-path-prefix@^3.0.0:
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
concordance@^5.0.4:
version "5.0.4"
@ -613,7 +609,7 @@ cross-spawn@^7.0.2:
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==
dependencies:
array-find-index "^1.0.1"
@ -670,7 +666,7 @@ dir-glob@^3.0.1:
discontinuous-range@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==
doctrine@^3.0.0:
version "3.0.0"
@ -804,14 +800,13 @@ eslint-visitor-keys@^3.3.0:
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
eslint@8.23.1:
version "8.23.1"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz#cfd7b3f7fdd07db8d16b4ac0516a29c8d8dca5dc"
integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==
eslint@8.25.0:
version "8.25.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz#00eb962f50962165d0c4ee3327708315eaa8058b"
integrity sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==
dependencies:
"@eslint/eslintrc" "^1.3.2"
"@humanwhocodes/config-array" "^0.10.4"
"@humanwhocodes/gitignore-to-minimatch" "^1.0.2"
"@eslint/eslintrc" "^1.3.3"
"@humanwhocodes/config-array" "^0.10.5"
"@humanwhocodes/module-importer" "^1.0.1"
ajv "^6.10.0"
chalk "^4.0.0"
@ -908,9 +903,9 @@ fast-diff@^1.1.2, fast-diff@^1.2.0:
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
fast-glob@^3.2.11, fast-glob@^3.2.9:
version "3.2.11"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
version "3.2.12"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@ -926,7 +921,7 @@ fast-json-stable-stringify@^2.0.0:
fast-levenshtein@^2.0.6:
version "2.0.6"
resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fastq@^1.6.0:
version "1.13.0"
@ -982,14 +977,14 @@ flat-cache@^3.0.4:
rimraf "^3.0.2"
flatted@^3.1.0:
version "3.2.5"
resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
version "3.2.7"
resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2:
version "2.3.2"
@ -1021,14 +1016,14 @@ glob-parent@^6.0.1:
is-glob "^4.0.3"
glob@^7.1.3:
version "7.2.0"
resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
version "7.2.3"
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
minimatch "^3.1.1"
once "^1.3.0"
path-is-absolute "^1.0.0"
@ -1052,9 +1047,9 @@ globby@^11.0.1, globby@^11.1.0:
slash "^3.0.0"
globby@^13.1.1:
version "13.1.1"
resolved "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz#7c44a93869b0b7612e38f22ed532bfe37b25ea6f"
integrity sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==
version "13.1.2"
resolved "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515"
integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==
dependencies:
dir-glob "^3.0.1"
fast-glob "^3.2.11"
@ -1139,7 +1134,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
indent-string@^4.0.0:
version "4.0.0"
@ -1154,7 +1149,7 @@ indent-string@^5.0.0:
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
dependencies:
once "^1.3.0"
wrappy "1"
@ -1167,7 +1162,7 @@ inherits@2:
ipv6-normalize@1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz#1b3258290d365fa83239e89907dde4592e7620a8"
integrity sha1-GzJYKQ02X6gyOeiZB93kWS52IKg=
integrity sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==
irregular-plurals@^3.3.0:
version "3.3.0"
@ -1181,10 +1176,10 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
is-core-module@^2.8.1:
version "2.9.0"
resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
is-core-module@^2.9.0:
version "2.10.0"
resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
dependencies:
has "^1.0.3"
@ -1196,7 +1191,7 @@ is-error@^2.2.2:
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
@ -1241,24 +1236,24 @@ is-promise@^4.0.0:
integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==
is-unicode-supported@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014"
integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==
version "1.3.0"
resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
js-sdsl@^4.1.4:
version "4.1.4"
resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6"
integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==
version "4.1.5"
resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a"
integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==
js-string-escape@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef"
integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=
integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==
js-yaml@^3.14.1:
version "3.14.1"
@ -1283,7 +1278,7 @@ json-schema-traverse@^0.4.1:
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
levn@^0.4.1:
version "0.4.1"
@ -1311,7 +1306,7 @@ libmime@5.1.0:
libqp@1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8"
integrity sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=
integrity sha512-4Rgfa0hZpG++t1Vi2IiqXG9Ad1ig4QTmtuZF946QJP4bPqOYC78ixUXgz5TW/wE7lNaNKlplSYTxQ+fR2KZ0EA==
linkify-it@4.0.0:
version "4.0.0"
@ -1333,9 +1328,9 @@ locate-path@^6.0.0:
p-locate "^5.0.0"
locate-path@^7.1.0:
version "7.1.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz#241d62af60739f6097c055efe10329c88b798425"
integrity sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ==
version "7.1.1"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz#8e1e5a75c7343770cef02ff93c4bf1f0aa666374"
integrity sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==
dependencies:
p-locate "^6.0.0"
@ -1432,7 +1427,7 @@ mimic-fn@^4.0.0:
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
minimatch@^3.0.4, minimatch@^3.1.2:
minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@ -1440,14 +1435,14 @@ minimatch@^3.0.4, minimatch@^3.1.2:
brace-expansion "^1.1.7"
minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
version "1.2.7"
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
moo@^0.5.0, moo@^0.5.1:
version "0.5.1"
resolved "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4"
integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==
version "0.5.2"
resolved "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c"
integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==
ms@2.1.2:
version "2.1.2"
@ -1462,7 +1457,7 @@ ms@^2.1.3:
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
nearley@^2.20.1:
version "2.20.1"
@ -1474,10 +1469,10 @@ nearley@^2.20.1:
railroad-diagrams "^1.0.0"
randexp "0.4.6"
nodemailer@6.7.3, nodemailer@6.7.8:
version "6.7.8"
resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.8.tgz#9f1af9911314960c0b889079e1754e8d9e3f740a"
integrity sha512-2zaTFGqZixVmTxpJRCFC+Vk5eGRd/fYtvIR+dl5u9QXLTQWGIf48x/JXvo58g9sa0bU6To04XUv554Paykum3g==
nodemailer@6.7.3, nodemailer@6.8.0:
version "6.8.0"
resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz#804bcc5256ee5523bc914506ee59f8de8f0b1cd5"
integrity sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ==
nofilter@^3.1.0:
version "3.1.0"
@ -1492,7 +1487,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
once@^1.3.0:
version "1.4.0"
resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
wrappy "1"
@ -1511,7 +1506,7 @@ optionator@^0.9.1:
p-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==
p-event@^5.0.1:
version "5.0.1"
@ -1563,9 +1558,9 @@ p-map@^5.4.0:
aggregate-error "^4.0.0"
p-timeout@^5.0.2:
version "5.0.2"
resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.0.2.tgz#d12964c4b2f988e15f72b455c2c428d82a0ec0a0"
integrity sha512-sEmji9Yaq+Tw+STwsGAE56hf7gMy9p0tQfJojIAamB7WHJYJKf1qlsg9jqBWG8q9VCxKPhZaP/AcXwEoBcYQhQ==
version "5.1.0"
resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b"
integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==
parent-module@^1.0.0:
version "1.0.1"
@ -1600,7 +1595,7 @@ path-exists@^5.0.0:
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
path-key@^3.1.0:
version "3.1.1"
@ -1674,7 +1669,7 @@ queue-microtask@^1.2.2:
railroad-diagrams@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==
randexp@0.4.6:
version "0.4.6"
@ -1699,7 +1694,7 @@ regexpp@^3.2.0:
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
resolve-cwd@^3.0.0:
version "3.0.0"
@ -1719,11 +1714,11 @@ resolve-from@^5.0.0:
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
resolve@^1.17.0:
version "1.22.0"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
version "1.22.1"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
dependencies:
is-core-module "^2.8.1"
is-core-module "^2.9.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
@ -1771,9 +1766,9 @@ selderee@^0.6.0:
parseley "^0.7.0"
semver@^7.3.2, semver@^7.3.7:
version "7.3.7"
resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
version "7.3.8"
resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
@ -1831,7 +1826,7 @@ smtp-server@3.11.0:
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
stack-utils@^2.0.5:
version "2.0.5"
@ -1907,12 +1902,12 @@ temp-dir@^2.0.0:
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
time-zone@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d"
integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=
integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==
tlds@1.231.0:
version "1.231.0"
@ -2030,12 +2025,12 @@ wrap-ansi@^7.0.0:
wrappy@1:
version "1.0.2"
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
write-file-atomic@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f"
integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==
version "4.0.2"
resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd"
integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==
dependencies:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
@ -2051,16 +2046,16 @@ yallist@^4.0.0:
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yargs-parser@^21.0.0:
version "21.0.1"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35"
integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==
version "21.1.1"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
yargs@^17.5.1:
version "17.5.1"
resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==
version "17.6.0"
resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c"
integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==
dependencies:
cliui "^7.0.2"
cliui "^8.0.1"
escalade "^3.1.1"
get-caller-file "^2.0.5"
require-directory "^2.1.1"