From c8d251e479e8156554ac4b133d41d6b149dad4cd Mon Sep 17 00:00:00 2001 From: groenroos Date: Fri, 18 Mar 2022 01:02:30 +0000 Subject: [PATCH 1/2] #89: Generate thumbnails for image uploads --- core/loadConfig.js | 12 + lib/Uploads.js | 26 +- package-lock.json | 2248 ++++++++++++++++++++++++++------------------ package.json | 1 + 4 files changed, 1397 insertions(+), 890 deletions(-) diff --git a/core/loadConfig.js b/core/loadConfig.js index f81687d..6aa733a 100644 --- a/core/loadConfig.js +++ b/core/loadConfig.js @@ -63,6 +63,18 @@ export function digest() { upload: { type: 'local', destination: 'public/uploads', + thumbnails: [ + { + name: 'web', + width: 1280, + }, + { + name: 'thumb', + width: 128, + height: 128, + fit: 'cover', + }, + ], }, port: argv.port || this.opts.port || 3000, url: '', diff --git a/lib/Uploads.js b/lib/Uploads.js index f3916fe..79b2653 100644 --- a/lib/Uploads.js +++ b/lib/Uploads.js @@ -12,9 +12,11 @@ import fileUpload from 'express-fileupload'; import filenamify from 'filenamify'; import { unusedFilename } from 'unused-filename'; import imageSize from 'image-size'; +import sharp from 'sharp'; import SaplingError from './SaplingError.js'; import Response from './Response.js'; +import Utils from './Utils.js'; import Validation from './Validation.js'; @@ -107,8 +109,9 @@ export default class Uploads { mimetype: file.mimetype, }; - /* If it's an image, get the width and height */ + /* If it's an image */ if (file.group === 'image') { + /* Get the width and height */ const dimensions = await imageSize(file.tempFilePath); fileObject.width = dimensions.width; fileObject.height = dimensions.height; @@ -120,6 +123,27 @@ export default class Uploads { validator.validateFileMinheight(dimensions, fileField, rule); validator.validateFileMaxheight(dimensions, fileField, rule); } + + /* Generate thumbnails, if any */ + const thumbs = new Utils().coerceArray(rule && rule.thumbnails ? rule.thumbnails : this.app.config.upload.thumbnails); + + for (const [i, thumb] of thumbs.entries()) { + /* Construct path for thumbnail */ + const thumbPath = path.join(this.app.uploads.uploadDir, '/thumbs/', thumb.name || i); + if (!fs.existsSync(thumbPath)) { + fs.mkdirSync(thumbPath, { recursive: true }); + } + + /* Resize according to options, and save */ + await sharp(file.tempFilePath) + .rotate() /* Rotate for EXIF orientation */ + .resize({ + width: thumb.width, + height: thumb.height, + fit: thumb.fit || 'cover', + }) + .toFile(await unusedFilename(path.join(thumbPath, filenamify(file.name)))); + } } /* If there are any errors, give up */ diff --git a/package-lock.json b/package-lock.json index 1dba480..8047da9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,12 @@ } }, "@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" } }, "@babel/compat-data": { @@ -51,102 +51,26 @@ "semver": "^6.3.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -159,6 +83,14 @@ "eslint-scope": "^5.1.1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/generator": { @@ -182,6 +114,14 @@ "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-environment-visitor": { @@ -245,14 +185,6 @@ "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - } } }, "@babel/helper-simple-access": { @@ -274,9 +206,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { @@ -297,12 +229,12 @@ } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -347,21 +279,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -380,90 +297,6 @@ "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@babel/traverse": { @@ -484,102 +317,20 @@ "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -591,14 +342,6 @@ "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - } } }, "@bcoe/v8-coverage": { @@ -625,16 +368,16 @@ } }, "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -648,29 +391,23 @@ "dev": true }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -712,9 +449,9 @@ }, "dependencies": { "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -798,8 +535,12 @@ "dev": true, "requires": { "@tinyhttp/app": "^2.0.11", + "@tinyhttp/url": "^2.0.3", "async": "^3.2.0", + "body-parser": "1.19.2", + "chalk": "^5.0.0", "compression": "^1.7.4", + "cookie-parser": "1.4.6", "cron": "^1.7.1", "csurf": "^1.11.0", "express-fileupload": "^1.2.1", @@ -810,8 +551,13 @@ "isobject": "^4.0.0", "moment": "2.29.1", "morgan": "^1.9.1", + "nodemailer": "6.7.2", "path-match": "^1.2.4", "regexparam": "^2.0.0", + "sharp": "^0.30.3", + "sirv": "^2.0.0", + "underscore": "1.13.2", + "unused-filename": "^4.0.0", "yargs": "^17.0.1" } }, @@ -950,9 +696,9 @@ "integrity": "sha512-NXQAaUa7p5pgd1oUF5VuzLyqVVoMqNvraUI8QkSL0TlRSfgOVLg5PQ2xbk0TYU03SGwHm8w1ZBl9lymeJCLphg==" }, "@types/eslint": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", - "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "requires": { "@types/estree": "*", @@ -970,9 +716,9 @@ } }, "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "@types/istanbul-lib-coverage": { @@ -982,9 +728,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", + "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", "dev": true }, "@types/json5": { @@ -1176,18 +922,18 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-import-assertions": { @@ -1255,6 +1001,40 @@ "dev": true, "requires": { "string-width": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "ansi-escapes": { @@ -1275,9 +1055,9 @@ } }, "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "4.3.0", @@ -1297,6 +1077,20 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1464,6 +1258,12 @@ "yargs": "^16.2.0" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -1492,9 +1292,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1508,11 +1308,52 @@ } } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, "yargs": { "version": "16.2.0", @@ -1528,6 +1369,12 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -1558,8 +1405,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64id": { "version": "1.0.0", @@ -1594,18 +1440,21 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } } } }, @@ -1636,40 +1485,6 @@ "qs": "6.9.7", "raw-body": "2.4.3", "type-is": "~1.6.18" - }, - "dependencies": { - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - } } }, "boxen": { @@ -1688,6 +1503,12 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1698,6 +1519,47 @@ "supports-color": "^7.1.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -1726,15 +1588,15 @@ } }, "browserslist": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", - "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001271", - "electron-to-chromium": "^1.3.878", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, @@ -1742,7 +1604,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -1793,6 +1654,12 @@ "yargs-parser": "^20.2.7" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1803,6 +1670,12 @@ "path-exists": "^4.0.0" } }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -1830,6 +1703,32 @@ "p-limit": "^3.0.2" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -1844,6 +1743,12 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -1902,9 +1807,9 @@ "dev": true }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "camelcase-keys": { @@ -1919,12 +1824,6 @@ "type-fest": "^1.2.1" }, "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, "type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", @@ -1934,9 +1833,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001271", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", - "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", + "version": "1.0.30001317", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", + "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", "dev": true }, "chalk": { @@ -1945,9 +1844,9 @@ "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==" }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -1960,6 +1859,11 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -2042,6 +1946,40 @@ "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "cliui": { @@ -2052,6 +1990,36 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "clone": { @@ -2067,6 +2035,14 @@ "dev": true, "requires": { "mimic-response": "^1.0.0" + }, + "dependencies": { + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + } } }, "code-excerpt": { @@ -2078,6 +2054,20 @@ "convert-to-spaces": "^1.0.1" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.1.tgz", + "integrity": "sha512-MFJr0uY4RvTQUKvPq7dh9grVOTYSFeXja2mBXioCGjnjJoXrAp9jJ1NQTDR73c9nwBSAQiNKloKl5zq9WB9UPw==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2091,6 +2081,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", @@ -2197,17 +2196,6 @@ "md5-hex": "^3.0.1", "semver": "^7.3.2", "well-known-symbols": "^2.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "configstore": { @@ -2230,13 +2218,26 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "content-type": { @@ -2260,9 +2261,9 @@ "dev": true }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-parser": { "version": "1.4.6", @@ -2271,13 +2272,6 @@ "requires": { "cookie": "0.4.1", "cookie-signature": "1.0.6" - }, - "dependencies": { - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - } } }, "cookie-signature": { @@ -2291,6 +2285,11 @@ "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -2374,6 +2373,11 @@ "http-errors": "~1.7.3" }, "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -2386,10 +2390,15 @@ "toidentifier": "1.0.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" } } }, @@ -2450,19 +2459,17 @@ } }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" } }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.4", @@ -2522,6 +2529,11 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2533,6 +2545,11 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -2596,9 +2613,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.878", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", - "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==", + "version": "1.4.86", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz", + "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w==", "dev": true }, "emittery": { @@ -2622,7 +2639,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -2739,6 +2755,14 @@ "dev": true, "requires": { "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + } } }, "es-abstract": { @@ -2879,22 +2903,11 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "argparse": { "version": "2.0.1", @@ -2913,9 +2926,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -2959,18 +2972,18 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "js-yaml": { @@ -2988,12 +3001,30 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3003,9 +3034,9 @@ } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true }, "eslint-config-xo": { @@ -3033,14 +3064,71 @@ "supports-hyperlinks": "^2.0.0" }, "dependencies": { + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } @@ -3260,6 +3348,12 @@ "p-limit": "^3.0.2" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "pkg-dir": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", @@ -3388,6 +3482,12 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -3427,15 +3527,6 @@ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -3487,12 +3578,6 @@ "eslint-visitor-keys": "^3.3.0" }, "dependencies": { - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, "eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", @@ -3522,9 +3607,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -3539,9 +3624,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -3595,18 +3680,23 @@ } } }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "dev": true, "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -3620,41 +3710,23 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "path-to-regexp": { @@ -3663,17 +3735,11 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, @@ -3700,11 +3766,6 @@ "uid-safe": "~2.1.5" }, "dependencies": { - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3736,9 +3797,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -3865,6 +3926,14 @@ "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" + }, + "dependencies": { + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, "find-versions": { @@ -3953,6 +4022,11 @@ "js-yaml": "^3.13.1" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3978,6 +4052,21 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4031,6 +4120,11 @@ "get-intrinsic": "^1.1.1" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4067,6 +4161,14 @@ "dev": true, "requires": { "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } } }, "globals": { @@ -4076,16 +4178,16 @@ "dev": true }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, @@ -4106,12 +4208,29 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + } } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "hard-rejection": { @@ -4159,15 +4278,15 @@ "dev": true }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-tostringtag": { @@ -4179,6 +4298,11 @@ "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -4215,16 +4339,15 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" } }, "human-signals": { @@ -4271,6 +4394,12 @@ "path-exists": "^4.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4298,6 +4427,12 @@ "p-limit": "^3.0.2" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "pkg-dir": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", @@ -4306,6 +4441,15 @@ "requires": { "find-up": "^5.0.0" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -4320,13 +4464,12 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "ignore-by-default": { @@ -4368,9 +4511,9 @@ "dev": true }, "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -4412,15 +4555,14 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "internal-slot": { "version": "1.0.3", @@ -4467,10 +4609,9 @@ } }, "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-bigint": { "version": "1.0.4", @@ -4525,9 +4666,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" @@ -4561,9 +4702,12 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-get-set-prop": { "version": "1.0.0", @@ -4826,12 +4970,29 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -4849,6 +5010,12 @@ "supports-color": "^8.0.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4982,23 +5149,23 @@ }, "dependencies": { "type-fest": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.11.2.tgz", - "integrity": "sha512-reW2Y2Mpn0QNA/5fvtm5doROLwDPu2zOm5RtY7xQQS05Q7xgC8MOZ3yPNaP9m/s/sNjjFQtHo7VCNqYW2iI+Ig==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.12.0.tgz", + "integrity": "sha512-Qe5GRT+n/4GoqCNGGVp5Snapg1Omq3V7irBJB3EaKsp7HWDo5Gv2d/67gfNyV+d5EXD+x/RF5l1h4yJ7qNkcGA==", "dev": true } } }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "lint-staged": { - "version": "12.3.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.6.tgz", - "integrity": "sha512-tVNyl/HsAnplKh4oaoRNzyZLm0PE/6VaBUXvd/gA9zhYCC/+ivZwiwpoT6jOxcLzuIOjP19wW+mfOi7/Bw4c1A==", + "version": "12.3.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz", + "integrity": "sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -5040,9 +5207,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -5066,12 +5233,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -5191,6 +5352,21 @@ "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -5206,6 +5382,18 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -5217,6 +5405,26 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5240,7 +5448,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -5291,14 +5498,6 @@ "iconv-lite": "~0.4.24", "mime": "^1.6.0", "uue": "^3.1.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - } } }, "make-dir": { @@ -5308,6 +5507,14 @@ "dev": true, "requires": { "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "map-age-cleaner": { @@ -5470,6 +5677,12 @@ "lines-and-columns": "^1.1.6" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "read-pkg": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", @@ -5493,20 +5706,17 @@ "type-fest": "^1.0.1" } }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, @@ -5551,15 +5761,15 @@ } }, "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", @@ -5567,13 +5777,6 @@ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { "mime-db": "1.52.0" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - } } }, "mimic-fn": { @@ -5583,10 +5786,9 @@ "dev": true }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, "min-indent": { "version": "1.0.1", @@ -5595,9 +5797,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -5606,8 +5808,7 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minimist-options": { "version": "4.1.0", @@ -5628,15 +5829,20 @@ } } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", "requires": { "moment": ">= 2.9.0" } @@ -5670,6 +5876,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5677,9 +5888,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -5687,10 +5898,23 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node-abi": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", + "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", + "requires": { + "semver": "^7.3.5" + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, "nodemailer": { @@ -5739,6 +5963,22 @@ "path-key": "^3.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "obj-props": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.3.0.tgz", @@ -5748,8 +5988,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-component": { "version": "0.0.3", @@ -5758,9 +5997,9 @@ "dev": true }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, "object-keys": { @@ -5809,7 +6048,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -5909,6 +6147,12 @@ "wcwidth": "^1.0.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5918,6 +6162,30 @@ "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -6000,6 +6268,14 @@ "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "parent-module": { @@ -6051,10 +6327,9 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" }, "path-is-absolute": { "version": "1.0.1", @@ -6120,9 +6395,9 @@ "dev": true }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pidtree": { @@ -6216,6 +6491,26 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, + "prebuild-install": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.0.1.tgz", + "integrity": "sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6229,9 +6524,9 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", "dev": true }, "prettier-linter-helpers": { @@ -6252,6 +6547,11 @@ "parse-ms": "^2.1.0" } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "proto-props": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", @@ -6280,7 +6580,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -6302,10 +6601,9 @@ } }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" }, "queue": { "version": "6.0.2", @@ -6356,55 +6654,17 @@ "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - } } }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - } } }, "read-pkg": { @@ -6459,14 +6719,24 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } } }, "readdirp": { @@ -6546,13 +6816,14 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -6664,10 +6935,12 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-compare": { "version": "1.0.0", @@ -6682,6 +6955,14 @@ "dev": true, "requires": { "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "semver-regex": { @@ -6691,9 +6972,9 @@ "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "requires": { "debug": "2.6.9", @@ -6703,24 +6984,18 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" }, "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -6752,21 +7027,41 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "sharp": { + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.3.tgz", + "integrity": "sha512-rjpfJFK58ZOFSG8sxYSo3/JQb4ej095HjXp9X7gVu7gEn1aqSG8TCW29h/Rr31+PXrFADo1H/vKfw0uhMQWFtg==", + "requires": { + "color": "^4.2.1", + "detect-libc": "^2.0.1", + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1", + "semver": "^7.3.5", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + } }, "shebang-command": { "version": "2.0.0", @@ -6795,10 +7090,32 @@ } }, "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } }, "sirv": { "version": "2.0.2", @@ -6825,6 +7142,14 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + } } }, "smtp-connection": { @@ -6974,9 +7299,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -7018,9 +7343,9 @@ } }, "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "sprintf-js": { @@ -7062,13 +7387,13 @@ "dev": true }, "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string.prototype.trimend": { @@ -7092,28 +7417,19 @@ } }, "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "safe-buffer": "~5.1.0" } }, "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -7140,8 +7456,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "strip-outer": { "version": "2.0.0", @@ -7149,9 +7464,9 @@ "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==" }, "superagent": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.0.tgz", - "integrity": "sha512-hbogIdmfjWtAkTfLlpoObeWb5phVJ95JFSkILCTCHoCG1U7s4XnY3WQ5j9C82YaxqLnMMliuFfngI+3liQ12ng==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz", + "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -7174,14 +7489,20 @@ "dev": true }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7197,13 +7518,15 @@ "side-channel": "^1.0.4" } }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } @@ -7219,6 +7542,23 @@ "js-yaml": "^3.14.0", "serialize-error": "^7.0.1", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "supertest": { @@ -7232,12 +7572,12 @@ } }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, "supports-hyperlinks": { @@ -7248,14 +7588,72 @@ "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -7263,9 +7661,9 @@ "dev": true }, "terser": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.0.tgz", - "integrity": "sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", "dev": true, "requires": { "acorn": "^8.5.0", @@ -7376,9 +7774,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "totalist": { "version": "3.0.0", @@ -7406,9 +7804,9 @@ } }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", + "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -7439,6 +7837,14 @@ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7473,9 +7879,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, "uid-safe": { @@ -7530,13 +7936,6 @@ "requires": { "escape-string-regexp": "^5.0.0", "path-exists": "^5.0.0" - }, - "dependencies": { - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - } } }, "update-notifier": { @@ -7571,13 +7970,19 @@ "supports-color": "^7.1.0" } }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "has-flag": "^4.0.0" } } } @@ -7603,8 +8008,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -7637,9 +8041,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -7719,20 +8123,6 @@ "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.3.1", "webpack-sources": "^3.2.3" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - } } }, "webpack-sources": { @@ -7770,11 +8160,19 @@ } }, "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", "dev": true }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -7782,6 +8180,40 @@ "dev": true, "requires": { "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "wildstring": { @@ -7804,13 +8236,42 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -7852,15 +8313,15 @@ "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", - "@typescript-eslint/eslint-plugin": "*", - "@typescript-eslint/parser": "*", + "@typescript-eslint/eslint-plugin": "^5.11.0", + "@typescript-eslint/parser": "^5.11.0", "arrify": "^3.0.0", "cosmiconfig": "^7.0.1", "define-lazy-prop": "^3.0.0", "eslint": "^8.8.0", "eslint-config-prettier": "^8.3.0", "eslint-config-xo": "^0.40.0", - "eslint-config-xo-typescript": "*", + "eslint-config-xo-typescript": "^0.50.0", "eslint-formatter-pretty": "^4.1.0", "eslint-import-resolver-webpack": "^0.13.2", "eslint-plugin-ava": "^13.2.0", @@ -8196,12 +8657,6 @@ "slash": "^4.0.0" } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "bundled": true, @@ -8269,12 +8724,6 @@ "p-limit": "^4.0.0" } }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, "path-type": { "version": "4.0.0", "bundled": true, @@ -8364,8 +8813,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", @@ -8387,18 +8835,40 @@ "yargs-parser": "^21.0.0" }, "dependencies": { - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } } } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" }, "yeast": { "version": "0.1.2", diff --git a/package.json b/package.json index 6cb5c92..06a6eac 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "nodemailer": "6.7.2", "path-match": "^1.2.4", "regexparam": "^2.0.0", + "sharp": "^0.30.3", "sirv": "^2.0.0", "underscore": "1.13.2", "unused-filename": "^4.0.0", From 1195a8eda4e725bbab61b63478df1cb647212afa Mon Sep 17 00:00:00 2001 From: groenroos Date: Sun, 20 Mar 2022 15:01:53 +0000 Subject: [PATCH 2/2] #89: Thumbnail tests --- lib/Uploads.js | 3 ++- test/_data/files/photo.jpg | Bin 0 -> 71759 bytes test/lib/Uploads.test.js | 41 +++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 test/_data/files/photo.jpg diff --git a/lib/Uploads.js b/lib/Uploads.js index 79b2653..2cd207f 100644 --- a/lib/Uploads.js +++ b/lib/Uploads.js @@ -125,7 +125,8 @@ export default class Uploads { } /* Generate thumbnails, if any */ - const thumbs = new Utils().coerceArray(rule && rule.thumbnails ? rule.thumbnails : this.app.config.upload.thumbnails); + const thumbDefinition = rule && rule.thumbnails ? rule.thumbnails : this.app.config.upload.thumbnails; + const thumbs = thumbDefinition ? new Utils().coerceArray(thumbDefinition) : []; for (const [i, thumb] of thumbs.entries()) { /* Construct path for thumbnail */ diff --git a/test/_data/files/photo.jpg b/test/_data/files/photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5a406977c26c48939833ab3ebc75c3c5515972c GIT binary patch literal 71759 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
M!wyrqOWDp~ZM**W)jiiqn+;M_t~ zP^x^7XRoY#oxDwQ6k`%B{51rF`O1*K`;HNWC21-bZw#AdkC;i)a>`;a5NCP-3iPmtaAl9 zTXlt(0JM&>_y!uq6pRC;z4C8284`zCgLaMy(+;>Pg>cgRe9I6MbL#u@5#q*e=oEg3 zzaum*O9(kTM>AJ}MYB%C$h^;SHQmAS80rJpC?B`kh-9S<_EFR8kGMk5!P=YaAp!Ngbjg-7NPS6H~jt39r?{u~r>LwC+GC+h(M41S?J5 zDH4r3F7sPgVDw<5362xTSZ#sot}`~(K#kJk6`G)o^@&Mfxxo~vfEQs1-E}sW1(fR2 z`@!x)>l&e5vUM2iAYYR2I+DxzIz^(x;!Y)P%Bv9T=7MBzd)N5P z9fB=+I5Ycg-cf~=$Z3xObcJpKDvr&g&kmekdI&o1cw!evVEvhd*{b37(i^K77Cr|; zD(t`Jb@=ocNN7IxBV5{-D=z-*prq4VrLgwfPx}a{8kv{os6Ye33>4jac$We2gonWU zEh+e5kqcT<#hjG*qp1c_gQyu^BQb8akhH-ae`uNqvw2&&?9fZKn|~0+ zBdrh?WiC5i!2)1uDJ@$Pl{y_Ygsjb)R+G%z(cgmd9@*!8Fl{Fcq;&@-wjB=F9dr^| za)!Ex)mt&pU1+;yV8!2Jx}+s*3Y)j7zFA(AD~cEkCBK9Z@Q*hi;6Kcx6iD!P0V+H* zbnO9OlTs1ywb-1vQyRr&HXTA}h%+nEyLIh05NK#crNnH}+F5{pddg@MOJmG)VG5W_ z^;wle(1AMu%gF^TyLQP+DzpvbSV?nrzCVtPw)V^G4Vvh+DzzXBICQVXP*z&QIWJgy zT*gX;ZlR!Pf37tRM)va)ZZBD=He=JCHLX@r-aZVMw!wYLK61?b2-HzVq>fH1j@ZXbe3p{rH8iTGHdXd9J zQN7+(f;C{wZrfX)uU6%9v5n5Cywab5j|%5G>QjREQD>z>gT&Sb@!8q_?J)Pt4IcHQ z^BGurAD`j$oj^^pc{M(G5b06>00_?omABA^3f%!Qj8U(P(2PwkR{gI}v^O#2LVOt} zlVhj$&$lR7#(wdy7Rbrn(!8?+M<+h-_gJ{vr{Cu(TG~G^U1f3`TpuByw0;1-f!6ed z;s{Zi{{Hb2sA(?znXmQ5D9{Hj>N?XMfWI&S{IA3;OU2XeFg3F<2))cj1)+6&p^7we=<1)SpL=#DEV$qJBZ z`6Kw5CG}_NL|OI-lqOx+TV&hn_&+{4FqH{$II1|Mv$uz7l8dnRX#2*NLoaT+VJbBX zt#N(d;%yg~8pO|Z+jSA4QOG6qN2{nsTJSmXry39J5?d#o@p@FWD+kb)wdibOUEWM1q0`D4R0&Hd>tw&^mOM~R4(YQ$cfgEp;u zhW>#&;vCNdP8v=4n$7(;*&g<|V!H$?jpiZCPNa>Ewy+6^J@#n*-~x-@{{WQ8zw-X@ z<$N-TEGdUaOV(l&dPl*Pje?7xtNq*3u4>{<0q8CXfOIkSH-RWkKRDThs$suK0M!N? z36NH`E)%>$tX~m9+E8wXpA97rAVV|{1KgUTVo~yroG644DyMn~8Q8{Foanz7(@1GL za$ggZdDDjf0IZx?hGN`bqGw)+S6$v}RJs`ML=SSChrATb&`Lp6h(HaFJ;jji*AauZ6}B%q1KBewK6pJ5T1SqwLX7dv zoC?1nHis~v8WhhhT;1fpFRdU|?xlOC6xf21MaCF92Z=3yemmlICCJ43YX#F5~ z{&5(nEiK&bjxVB~i^O*7R2y15k)H;ws z+j)stnyLWPfqSOB5%h_lNZ0EFY+Tr`4xXO8d;W=1y@hi!qcUr_0=9$%h6uPnW1oq9 zHK;*kE={mp(8nTrFADUPg_%B*_HAzHq>08VaM*1$J7%G)LFY+`BJ^MZp|5yISOxi& zry@=Gz?zP@w^HzZB6RxZp)yxkTFlLqcf%*z4LP1?Nw*X9H{858m8TT;F5Z!mN|Fe~ zP%fPr(6k-ql@%D$3%;svGPyLrxfWrf3h;wL>_Qmsho0Q6PCjt64at3Ot_fx9)|S*m^_FW?rKY5$H9~&#Dq6pqEc(X_)0LWV z86VI#_4oD%wcnZb5>^n19ZgsVv`206$J7s)%Zy6=81T`Fj{@)n3t+oTHUi&>=%uw0 z(MDyK>7;cbh|2FgY|NlVUo`#%XZ`0WmZ&~DhrEz#yIcO{)X5kBZUb4{b z2SShLHrbuNu$*+7F@xDKoo;F)2h@YNw|kTk;A41lMAYg+>O`LMz4`CY|I`7_loHvziwF!DzMTi zJqX>EEn&sX$Eg|F9A;Qf(g>FIYExXZKC{YGN93j+ru=vI4xWSS?a9~EeS^T_dqT%f zd}_tQucvZSQXMX)UR!oJzOEUzM718ez9xRuL4g&SHJA|B;(tOM%;>z#O>SeEF29%z zNNtTTnD;|B_uV)i$A4394>fbWxtp>5Unst*oYw3k+97Nw}L5*A$)fr&Q{iz4#fvl+D~p^RsY+ywT%Uv2a9>n(o9x{jUZP-1wZ0jG zja`3fQ%12uzO$t)#v>%53=vkSqLEU-QRDkaLztV*{{U8fi|?LVyMd=T^)rLV`!U=# z$E+!NZ3|-TbO@Dep+Q!UE6GQ9h^gi>xNxH@U9_;BwdK3_n8Ol;Zl2tku*L`+4sXYZ|a#($ruA>23c26J&qpG0Aeh~Im#BqA2j)%MrAX0_tI;NhVZRA z{>D~$-5xHyHsJeH*goy_4|#Z*kye*~`8EwUZtNZIB^<4rmTf>kJ?0gqOtQ37E#z9n zv3Mn@prI6Ao1n3H1r9^?QJ&CY42(B%k4&L2Jz}-0%Q4?(gL-(+J#uW#y;IiT)P2MH zF8oPu13T&a5JYD@X~eQDBX^cA7i(Ao>7?Bo-e~Hwl6RpEZ-TtRXS0N>KT9>lpHMY_ zFXBFNi}6=jLD*R?zTFM{M7ufKf6#3g`O|7zz9RlT@$26{{{X1Ih0BV~_&C!oXB9Px zj*T$OE?RgZ-xyzMc}7{9Kx^&Z8@9*h7&OJYRvpaumb+`GMX{p%#2L9uEsiwrUlO|b zhK0QPm%T=1$f$Ee@cGOj?k7v8Wknfi61-DabZ>Fdf!Cj}EpXe`eLeW?>F?+~573Sq z$C-?>U7!Y&e+3eVxq~Hq6XsyPD+)xdjb^MylDk@8Xn|P(R4;JHRd-fLW|>X5+#O|U zMLS`1*>3ux5?Py?S{aP~(=b%ftEV5CeD^lxeevu!{T1ZbpLdAItp5N6a|b=8jK&qY zVq7a}reb2A((_O%nkENG+@)-noJ)>jQiVEi37+$|Y+S_27%=10jbq!ccpjeqqs;mb z9~?K2EAFs7Ai*?G#9ijIdw^zXb%Nt`>l(2y>k+du@=ZJN$%t^9EVpQG`E|nh9CwUn z(2t<-J$Lkdc^LYyr18?jPqoV#nnObV5@C#UIti}RkX?+Qs=?2|# zJ6&R?v1@2S6ti9gqu7_zj&Ry-!+tItae31>?soUr!H>4vk>jbu-4R;+lEmo~WLpmM zz)>7BxEbX%am-WMr@SKeyOvGE$6S4mZqr}jgU zbjtP8R3x*I;PNlHKk+o@++v_OVB$Gzth&QVO6tl&RXfY-UBPK_TnlG+)U0d9foN$J zb&g8r2=4Kc=a|AaQaNjb9yjkFUj3uUaO=wQ?acB#<4^&UWqtJfPbsT4%}K0m={B&q z<&4DdGx0Yi+)52%y9mnkZc)J(nBvqldO^oD9Y1T0@xB}S=Qi-*`Wy1^AA0ib4lgsw z)0d|PZN=ch>ou)y99I=zm$ar#FAR~y!z}fQopZs8%y)o{MT3u=%7=XLr9rMAC;B~C z(bM!}*V~hR8gYF$(|85I7kB14*GY+Kvgv4utS(cS)fKJ|gwg9W48vr0>d?~Sm`=?z zc!t++;S-6?zZcT!>2%|-vETI#xgJ2@-}zwXrV4bAH!kkew+x&^24dcYObYVcD>!Lf zX6B{rkcjIjb5OmeqQhO*nnTIgmwqm@f6$*m_7CWnQ#;juSPdA8ca+0;(T?eqHx}-9 zh3V?9@{5?*Y=cu)8KkhSp_W@sp{5|j#JfKncj4E8`b*C9KAX?ij@)*X`EbRSy;^Km^wb%r zj{L{yXSd&nUOW2Lht#=n24VipRDCJbh-R@ByP93)e4x5Z?huEYD_+oaLI=TycQsI( zY$ovL;wsD%oVJ0}Nl|qCOuko;ojuihU3vHRog>S)wK-l4!ye9lVR#K9g#!Mqy3B~ z(BktM_a_&ZudBbRansf5>l}|AnQoiR`mq;{rlPlrS(!|i3us-+Sm?|*oEYA14N_uT z#6t=Aj}J1clyT`fl`+-{8Hu6zm~xFdk8!^%%>IYBtFNT#$9Qe5gZYLq#MPlXbU!lM zwjHv{lsFn4A-SZ6nC&%1D^my|k~B;hv>!+vXV8WVMuSl)HHJK0_-7JdE9hV*ctJlfsWx|86q!2pW!ZR(K+&Nxu-O#^HyXi60<*NyGdmHD9cB1Kd&`CqNMl6A z0{0{NT61roZ*8}{-_(6;^)`nVb>K`@XhBL;qW~IVMIZxaA652G3*@Vr7|4iN*D^v_=2^KK6_>YP~fKAXrj1)hr6(mdd)tJ8%G8KE7_!Ha>?U}NSb=_#sp zn#prGgJxl!r$S4tAu8%+`oRxL_m8~amu`274^wVanVx2hYJ>1cOS%(4s+t6&nV&J) z1Hv|4>BG#y>jJnmhDFzC5SmP={{T<^FM7?nclPfWhDEps(3I%JbTD+87D}Mrd%?Rd z)tzFYmuN$zcY1Pq&4Ey3F~W_pcIhp=Xs)c^#4GriJ>Q>(xUt~Py)FL$RNimxw~wc{ z2YQ#Y(EJmk%B0u46$Y;jO0%m+X>SIw^zI|;PTHq!9*XB-I|06Szc6q|w7OE{S%5n6yWG zHa^jtFxLu-?zD`&vh%ylJM5R%IsMYqX*3i=M|n~*5&(=kwHO3onmJ`>N}0iYU^=V( zkgkF~1jVAf$Dp00*4pnogzpoyouuy*w4Jxsc84+S577JYcs{qCvo9{F=Mg4B=5_i_ zTAJqcX0A4!W#F2%(pcQRG1_LTjGbi|hegk1y|W!A*q3S8FuP42`&cB{LwZ!Y_$CJf zt615U4)IqpV(tp3S!@r&ZA&^w$;@g}3^7ZBAXTUqZYiU*yWNm?bxN9BRsI-_G2hMe z0j3^0`lH zkNRU)3dH%r{cH z1e%GlGzWw1mIht0MoS*i(Jtkd7AZ4jl)$8INvr|ci z?xP8)YcC6asZnJ?`pdUi)sC{m=@vK;(#&GcvfF2Vxn)*w;(yqi^S5v>hHzo zc{hVK8$sgtmx%E<8FcwgJWZSHFD%)^dz;u#xwp=cn`5}g1NF<|5@Kw5jzkdg0SkV! zJ=tEZO}xO;Uc445kh8Zj7=6$;`AnT2V};F2YJJlE*l(GB^#ZO>Gh(6ELYJ`l!YORL z+}DPaP?2@>a?0z7X!e>T(X?=Rm$#U;{TF}Hjb-7&_M19H#8}tj4m?Lh?;U){Pno>w z;#^|WyDxxY*!$Z3V@|A(M$gIn%}R}idqXNP6Dtzf#C0IbsbeaO7?!-u)Wr8nh*``s zj<3%PedGTC4(xTr>u~*`zf{+A`$4>=&C_kks=5(p!Zf3X=QiH#&$=}B1hYqEOp(8i z72-dyyOJ~cnMQVE$@Mwr9dELIK$X&P~sRN+qo z8q70JkY|Lws&BOTipvk?j{`)gm40Ah@dSo(FX6yy@Qy>lFmZWy^dDh;CZ3tf?dTi~ z@^9$8i1hj;^_xvlaf#k8hNa*4nIS;G9 zrLQLZA8)@4=`{4tY(6NiJ*R9IY{wr7`{(g4zOshmz8ayU7QFPGCP4~^axK7@)!WT| zLYPx%r4l7GgZ)*+38*}Tf= zb(EF&CJzSkinThxFInpv`&F#d>2;X8UE*)vk4=-T$Wuzz6GITgW9u9yD)e6Q)DF7-cXOV z7H!4aD}P}T0J{2265l&Cfs{kEGrGN{bEh;3+LP*F{%YP|{n4kT-N^cVX8bnw-*dEd zIQ8`2BN$u==GG`NUqm>wx}<~FBW|e|Z*WisdFG>VN0ZYbfD?Hz)4hIa7Ptm(_5Nt;BkQ92|x5tnxS1S1>9Ko^snuOAr<-q_n2xR7O(;EH^D7z$L)U zupSwBW@m#u&;Qy03AOv*kS8D+J&J+RP0CK`j z&>1e`pf-4jhYCS98pt9u049QOa7au5YV92GfGP3M3>lqWu*@hz!aAmt4Z${4J^(!U zAfB7A6QV~_s>eLxiiEXqY5~JEOYSPOz%;NyIEQUJ`6evmDu|Bb1jN@>s)7#ti*O03w!sT_i>ZLBzBN*de`? zMORixy2ubfVJM<>cIn0|%2Zgik1n+{FuA^2GjBen7YYKah+h3FD=s#3lWnrtK_?mj zlByKq1QM@=v@)DbrdZGaarvtcAa&I3WnGC7bt z?Li!%fTiL%qGX(;=`AS~`{%Yi6(5=FssJf5s|Chh3`mkq?@aw?P!o^${tpMF_uh+u z^e(+O0j2ledxsEd(p%^OM0y8-(4}c8fq-?Mnug+L^aD;G0>agO;U6T?qspx9WZvq9$xK3dO`MN3RCykienFb@ zj%wg>G68gzZ^*oHhHaeJntlZcjzVUDOnnB&u%~474mRX8=gYrldLKsJg<~4JlY)F4 zVc_Yj4B5$$a+(j`6#{0FG9HCYAR@TPk2V82j#T2N5~@D+}d znRv+fzDQ4v^;$>6-z_-x(>=~%4Cy;9ZXtLU{>$0@TI6H9J0s|ei3k<`776#Ss3eSz z%JM0Cx2t!qnGUW}VEtMDU0Tq8fd2sM{iQ|&41B0Fc}}WWcOL&+AeN@re)2|rY!e}(Lxnp!dkd{5PLO9?e*#@CO3Z;U zOWBWX{|BJLi7pXp>Yrd*{qjUQ+mtL%BY71-AEaD>6SJc<{$f+)=sxef&Z0G;faP0W zmKvHpdS|Fr;6z9WQzpTP_neU4$CXhNsE*fytI>qdY(SBcJ(cGU#3jHU&*aEDCPuK& zpO?O$gAv%k!M2a;a1A)PdII zD(PL4_vph?il8aEp1W~^i?D=Cige-+O{O)fZ<0ylknLxP`Y>ejx)T$Idr)pN2*08GR zm^i$53=i3}AMuj^gpfco=F#elR@Lzdsmhzy$u3Ug$Ck`CoL`#y*k(@)nz?WH6wW*kw~s^-hnH&;RpfXmAf>cZ_!DWy_BL)R}jG+ypR`%g4l z_dmc}%b~H~bXG+o7UK8>#^3sgxM}{htrG%Lev|G0866yBJ2DyF;LWy4pI$VG1HW02 zV)i;|gK1=&d{~LpW_dxiTcZE?>6QWTlge+Fm^YFKG`~at48YkK4SId3mHFYaB9~-T zM_l6oeCM`@{Ld;JfktZIY>9MBdgE_5olluDf>E|#Vd8|he6--LtIFw6dGr96kn&?K z`3p*Q(p>_hl*b7W5n3HG@i~B3&Ci#{$~wy{%yodfAl8^4%*7GUMs|ZNNXc-Hu2}L#}X9m_}qKY4*>%rQ`0kogwX}wk(ZBL%pxEM^R=$gfj*Sx>MEqaQT=AY+w zc}|o^XZkb#cMY2aC|jiEqeS)FGJqayMqOR8{CU>G$IJ;K{Z0vecRE0WM9+BDqUK}n z3xQ(b+9+PHg}R?aznWX_TPj;_nm`L#vCZH7fTX?mpFSt-A9XzT5n|@YU3ioy0jDkg zZ1#BO)r%SU1~)@Na?Q3TqIIAG|7|U};jPjZUg$i-!S1k9Gub0#3XFnd>$R59iQYLr z{D53j^EtSa*mUG*!tpN-)WX`qLekFX{=s0w{Xg&}?jyhh9`^qcWT_q;HjgDV)E_K1 ziM9U^9!qt(62+34`P0E-(-Gv%Kh@DNV=}BK-UV{o*K}wdxc(rF5o=H_vJT~Ra-UB^ z&itzNH2G(*iQIdCPcTd)+>z?0&0q@}M$8RJi}hM73JKKJ(kbc1>xKAepSYX!zGw61 z(EJ4ix`_-QV6sFR8otn1aQAhWh&Ssz{EXT*w``Wg<@0}A^YMIb-gGn!8MPU!W6-SP z>hgq?XugM^stEtG9J_M53Ad&n4H?$6@Ff)!^l72}IsLhm<>ix&TDc@0W((8sxC|qc z%Z56-z8o{^Z{#v*v#q!~zbHUovV_Z0KBZoXb2S=-dqQX3s-(r&{!-fxljOd8b0{#+ zf`fEBv#tBI{QeKUfcZ>09=|Vfc~c^}7mrt)6^!jrZWCN9FFsZ&zX~ z?(e#0>VmbvwZ+#gRmNXnYm?R_oJwiq+U460RG)tK)r!~pON;)s^~_NtS+*dM@Su8) zmfY>0T_`um30hcjue)@JCJ}GQl$w>4m;9C@9j(==aFqE{hD^Mk7MJ9X@fKf)TTjNG zDO&TXwNMVkFG#o^XbOTbh;bB80NwR9!=Hwi{CoJbv6!4Qbtsl|xN%}Nq~E=1%0Y&4 z$@aJNU!5ZMQ2S$eU5-F4A6FmgPluoV$6lDaCheDt86Cn|Ki$B-J{sX-jj7aWYf_@n z9FG>bvz@eq4^%64DvZY=47JO*0IebgXl@*9;C_L>5E$i&a1;mEUPL-`M*8PW=ju*q zmE|61(V6*=VzdFv8TxfIOw-g}_|r{uuYPXo4(&^+f;Sh#=_~Q=DXF`JB3R4IDv!^$ zH+df@-1}P2Uty!A`Hqsr7?>)BkRK=S#&48((vP=Kit^o8lNLQ|*J*wJ?zrcipnXgo z{FHw>GGVTd6%B922AL+A)*rcgI-niCdR+@|Z_13G`D7N=3ixYn6bSsA=H))?GNuJ? z)s~6WQ-gGr_GQ+xQYTI^GjsYP+G`cxPf-Fu?;agPdgjZ%RoKc*$~93)$^L$>u^a5^ z&i8;-PvejF2WwJaet)o#p{PB=T~^@b&@OU-=?t!tAA>-Stl3Bg`~nj&*Ve@P-eP*~ z%Sh8iqf6BZ%GZ;>VRdQXX-4JPYDF0aFGkCgjyAnLKY9{>y@v(Mvch@O4AcCVK4(qi zo?#9!AXv^ASG&8MLC zA(jKS)HF#!KwH}<%x?tmif%;z+5i5qIcfR> zy%|+Voc~&*V1h2GxbB+rlSNUc@Sd$_sA&vQhh0wH_sjqnBT&QPpER!$T)=My5+q zPR=B^sp6A&T1;gz!ZZ1iuuhh_rUxaO#_YPI<1YWPJ)r(b&-!6Q!uQ`r(=|6({^qq2 zh5${^R)!pcS*QEt3^i3Y59JE!$-Y>~8q#<7_y3T*u^!Ma?+uYg{n6j*m^~gWOa@O+ zT=G_(c*aRJ=B$YHT&vQFW_VV=GX%=`AIG}>bCBUf^reKCj1|zR8cQ^q>&E_!g!%mo zN-49?N@@Rnmj}%xkLCQH`GyzlOHNGq`8B{-C@W7X6IimmBGam? zrOB%Ka&qL;2woHD3%pF0K6CPbApQ^WD+VFzfSEQ`Nch_ZNSIEJO}d z(*3TV1d2}#IsG*k`fc^aoqv*prLS_KcB{I^T$VeQ738kiC4cT#EfKne%@naG_vABE zNS(cB*91=+eti+jV&ES``n7iUp`?vLQ=b?>ooX_DQeuewYKdOR-H5nvT=M0gk`F{K zYBOGuFZN_k$S{s%zg)av?98NmG!(wL>GyU24bpfpt%zaqosNGSc{_q)Ki z!rU_=Ln5m^GnXQ<1SEC8pfwJedn4mXW;23k0b;o$28}i>dQMureZO!nyx2menDfD2{M^88klLg$ zkXR_o_WDwQH}lYhCeYTXX*4xG;-z&x*y6pU$B;-*q~H+RhlTo^ZrkjQwicbKHA4%- zwu_xwU4wzXHm#f2uUb-f5F{z;7gO{qVi0(P~l^a2u7KLV%AJ>=6F)$ib@M}c|9wh znKbQhi$CN(-P>1ZlUsFz*+bZp|g_T1s zJIlEnB&vTzHz&Kf#<@P_rS6Q@VlHJh_>O~BAgYhZEjO>2ApB{{NZrDQ=96`|#U~b> zV?!KaS(@b{LrcPui*ALMMCJtdM28T~VDz8#_?E2Casi<(YC2}OgD5E%^RP5QLwbm=SmfJMd zR@}f=KI#rztxK`6ffN#JF1D@}*FG$GBpIdkO0wLxAl%B>LY*i%#`o2FQov6U*EIQS zFraf{loKUurkKAlYZgR@rj|ToT&@=+7RPu=IafC`)>IOkCM}us6dsT7Yc9=arwF1? ztvDWGOw}C2zSHEOr!e(?*7dnb+ivZvG|)8AB-*4t-~N_Su6!mfhH9GQsc};j@%mzX zExlKkY}!&XXD6`k)``8!dq|8;EYq^gJuKCVlPP9>9R zsKG*!FM|y@RzYq2R@!G|yK^!Ab63S!t>?v5-B9_bUBja1>SH+>Sqxi7p)S7^w)`HU4+BB6lm$}p1? z)P>k~g_aYakkiiiGA8jEqlOjwui;Eeu*0yUtsP|O zz5683IispKa1{ltoT=O2J0rTs?q3M2nIqCMHA_kdP*|AR@E+)h`cR4IDZ;1h-ZQ9) zYL5*O47~@HU=*X^JILu-$?5CcnY-EUo{Q#tUHlWIK@fd*90lZ1j-OT?WSh1HX~O$B zGj@g?a#+`j53RrLLM}W##dHY+u>mNa=9*`V&6qF_*MfcjY0JEtIU7$EFLEqMdEDZ6 zDQw@W@l)}`mz=PzI#V8ChA{E8L(T}Ao&I<>y<9eU;)Wc#u_PATygD}0Z+pVYT8-Yf zoQpVTAHUMdusu`zTu^#*^$p1Uo|h8KwSayBaM>3N3jaGYGk z0GMYe)=0lNj!k0*g}sEFRNc$-vtO`u)F76f_e17Hi%W(S%f}pJ>yJwN3K3K!#S!A7 zqZ=2(_=j6lKTz5+)7G;X!6Xj%0=v${(ID?9va^ct(Cjc_TKFEw7^OUU2_Mq##VE8c zimk!|%3IUKsfUc>8iH529-z$_r5iY=zwj2}X>=H&Sgdrpm76|Lj_w>uZ9Na!>7SyZ zMcwn>%0mW=M{K~2Q(81vX%Mn!-KAD&&{g){j>+%h*Gx9LK(&mhT$&Tozs>Wo3sP3B zHCE9X9=UH}BP3s8)Pr18zNIg@)kiDja#9Yu51ufcDpuL}z|~Hzq%s_JlviAvVDI$N zAf+AZFRViagkk9~4J`~_K{Ah|Zi_1niPMYC$6JsCeJEE2+@0K*XY*wlWVyi249lxT z1>KLcP3O`vG`$Fs3$p9xTCN!ivjfSk@BDO|LeXJuCamMzNF zkG8o16OW&vXD`fma#{9Aj+0x%5iHfR_qfZ;=dEJmm zC@C&t6f?JF^kQ(I65{3-GA1wa3Ow9kN>{B!|IKiHW? zm`-DzF=k)f>kHhOWLczyX&3h}gEOaV*LCAS6hWA-X5>p79=jH4}jC?A|9`$298@I5pZ z`>buw+4SIo>>+?`R_|=i+nR}q|4BS77`}JG5p}<-(|X8{ZfnYzQ>;j2MzpblCq#~+-4TVSqvn6ENcL3MW*VvZU(W4@iJQ7C7Hk7l8UVw|?y z=IwLbF4%+Q5f~@i@#Ayy=_HyTT4x#jtC;&5faR4bD=PqpQs`Xmq^k!A@0|u<&5T73BF&G{#4%Qp+$xX?Ty) zJZpoo8Xh5k&$IL&AWrUrQ0HC=YuVjlIlHC3;2cmRlN3Nu3M?Ha8JHP}Cl!CrQ~!Q| zwkK_$?p@1Gjk+^$Tc}$wX~>0SIa)?$Us;Sh%zWnjk@&viGP2^s3>yQYio>SJ$kV^n^BTgQS4g7>A;_jB zZ((VE`+=rEy1&?D=Y;&-CVFSYJpL|Cl{bh$O!d_jmcZErWwb|ImVz>fowjbG`DesC zZwmJ!kZTUV1(DAR!hDmfGQr;BDn>*hKpA!f=sIl_xeFn7$ipZYqpsU-*)&jZ{Z2?n z=sEZ$P%&LQ{WB=F(3(5#85HpF9+&dTYV+7oaC0gJt~`!Si)D>zE^0|&8}uCdS$nIz zv8eiycUVM`$XKjP8{-S5=Vsyf_KSxQYx@j-Q6BskSz--ar*XX2t+`a2X6T#Z`bqb} z3_x>-j3T%bzRyw!xhdoJ*q1Z7%Udl)pa-Q!QnipRShAhNI5fiJAOnT5BDQ^%;T7e@ zdO^_P7}4-#*n={IsVzPQ%uusA4VogQ0Ml6GCG+O8;?W{4;Bx(`M@zr4mTBf zXXr5p`(^~HQ?4MIW8Oyx||EN_(?5X}wt-PZw%MWjD;dK-gv}6~p>L7{!C9mv?$|UU*?>gFI8MGVrg50=v&wpY`0W z!eV=mwm>SQf)I zcn#yo$&MgZ0Krj1E7d7y4&y*civIw%WgQni{{gzeElgG-KQtz0fPwuu>K<)X_OR(^ z#0!EVJXpSO`2rYr>(`*cnG&XAXU5@O&n$iiEulz=W|)k55oT}5=*7zheZnlV)pAy=(X4BNcdpJ@hi{wWUDr4m$u zSLi$DI(hO`d5dEo>~g$&9iK61e(Fxt&^g84joJ)&hkZ!n&WNLtLNZ5h>M(Tpgv0&L zXfNdSrdTZ_w2RSV{zi=iD6YzPE(FA4Tp<{9;n)}@p3RVTPE+5q3x)6eX!fyI7^aK; zg8hhQa57H8>t6m?m!(KdMqHt)>4tn5+YuT@f5_^p5~iZf@E-tHS`4MT!a7C3y;*Ww z5aTJOan{$){T4%_Tl%ufw7fbs(=8;Vp*t`T1uy842Ceblts7s z5m16M&&+;bhOuM3gMysm8fNBKu$5h)3qohMDjD(1@*oPP{{SW%hrHP_-pq-)GK?Jj z9W4qZ=tVNGxWy2!U{!vdQp;eet3nM7{|VV(p&Et_;V_QeIV8B7mHO^x(Wd3(ondaI zSn2R%PmM)YIGtRfdoQxI#nZ+RguI|UR5?KJx_LkhXDORk(HNF2IZOD5od}Md>#Xc!o=EYs8*XJ>Rn>&R2+CKI@zANhC=3-;k>F7MbL8G)$oIa;tAsaK8wCwxy9O4FHgjzh5?+cHu}iD^^1`XV6FBfX7$nU%iWkV!f3J$tq((^k@vj1;_3b(QP25;_nj); z$V-ts3%b`^KNFvB3yfL~3KW&`7rIt0(c5OPgi3tZ%zEg{UZWbi1$&}+Zr!=F@i-y~ zjr`d1eLE$6lpsNt248cbTQ|ioeq3H;jNL$VCGYeQWyp;y$bW!-MEl%e|A*@=#gdPu zAx2vP#%a_YuJEr+T1tmjM`U*H+mOM__Ao4;atxcH(Pob9K8Udz`IXFJpxL%EZZA$% zdPNNMoeP18%=%Ci5i&*L3-7#zWFTycbrICa1F4~zeR(7IxftE_L3hLnL%KA{qB<2d z16)fK;;Z)bEd5t8;a2EP6=oFa8~TaY=y@I}j~zK_6y)~ilRhRW7v+3Eb2$`bmwDVl zpaxtA1a|qKA=#VA7C+Vo75~y?>X#YlLzoBG*0Sd z1c3hB2r-b0IC`L-f|jomAZQ7U8RQ2ZWIfeHAN8;TAi=V?ZS2?-nuM;SmX?t`0VdyX@(KzYdh9@)Z$P~Gym*$!%75iW!A z+jUL7$BGIwlGa_!Bd9OnLwQT=tl1wQ>MH-C!pD7KlI!A5Gz_d=yFgzbL(4;5%&3u< z?B=&M5Kw4o{{lZ6AE`Xb6+C3~*~9g4pHIZ2%=-Q@i#haM_D#wNT{=mk0*89_0jzSs zSOdUi^o3-(17=M=x;ixL6!pfk@bR-_IYD40x>s;fn!3!lf)r#xkN17iGLUb3+(2(8 zgDU6S}SEqHCXH55{*8_YyEB>DqwMECysO_)x$HWid6Y8Cv)}-*OOU z4BAI(Lpt0w`XBidTTXzCrruCRFl$BC*7y3Jtm~NHrT9%9@h86Ti@S#@&bFJm#Uq2OYvM#)+$x8-z2@AG{cQ~Y)4UZ&x)ZYpQ zFe&Y2s1u5)n+(W^$>BPN)XVp=?8xEuvC5JD5)I#WMB`>GmJ=1{n+!ejtR2WBU#St- zC}1p&Z7m3Szuku+FXQuAP9wAVlt>3~rBLa5ZzT-1&eV5lZ}D2y82vOpsWOp}oc)z5 z-zso=)AjBNg}+eFvqnt4f0R3Xu2PM|wDg+97l7-U$)6Zajwa=QRh3ak%K#38RoUp4{ zV;oTv!4E^&(kKOYJ>+hcB)M~Glstmw&oEac)9)Ch6~@pAi2LWx=&T%WXt8@479z=E z4$82VlED{?HOBaToL^F!R0SExux0bFs)^BroI`)7_1_>J5Dd4P{;N{A*+T25 zBqGCv!ayHS>_sZMJ&<4_%eFg@OkGHG+F7Vho>sI^e2VESFmBebv?fOa6*gpcQmW-% z1F1D9esB*Y;y<G;v(17h{UMS~=I3;AcC*NXb-wD{?$KI6Yf3RVWy-D|$8 z540nHZinr`_vw=k`?uG(kwD<&wn(PYuixstc-%EyX^{1N_Wjd)HA4O?(o^Y&2;jah zL9kJwf@GkO;?5HB_L4x zbjtT#3s?Ev(LS!@5a&`%T^NU3ARN72csmz|?TE_Cm}~UTEEa0_AHCIk&P!Ib)P|oi zCt02*;rGO@d%3Jx|H;-eZl;lm<}O2Bg*~yGfq2oVzKq*9XNh?k0~a(4OnyEjN_%RQ zVRz6>wj9u_32u(z&`alK@6L?XZ^UHNwZP4A=UaCzZ7rm`O$dVphJxX|CA)O`ID-sD zjE24?PocaY0@a!Ezks$<2gw~@{s%B;b38^{()zgWElFCuwZqJ^S&%d*LOU3;ju!qE z6F=+*f6+cXN&~jKh?vUbQBW6%$>n^<8T27(fl~P!S_OV0=w7_0nb~%1^&t{#mtB(v z`)(!sAF@3RJlt1-H3mGDs!f!cTWbdVgbJVPCon zX>yE~QhyEkPqiZ$MdoT%V&Ad)@t!D4EwPSe*dA37E^_nD2UIwdB0%-STQG7u$yh|czz)P8GUXHiDr0az^-2t^zkzeEW2h`W*547n~^ z%(!aD)&KJ{XUpU-Y@#$gAzp7sX8{&TdicWnwE4xuf|ma%WQ zubT)~DT$s6mMeJei%I?R_#H1;KnMsYZICyorg$WlPx7*gUERZ}&co^~amYHI*}wba z&OORTl!|F#dfKWny;#sLVlT_>%K3%4uR_7S)GLF6$lg2>5>j_&($~LSDq(5bn!kh! zQc{M9EtWrs~wDv&-Nl{{CRpyF3g@Hn^J*0Q^)@DtF`@p<+nKJThkJK_=mqLW zx_P58^0x7z2()3`E=>KqXZ%b;kWBpqQ>XX|4awcaY{L7g{{T}4BQ*f4X}YgQQ6;=} z>rA8{S?kLR0YXcW)Abvs;pqcxekq*ck~FyIebsBX4g(T>OWAy-nJ&s)_+JWNKDJGx zBBTs#XRr`j7VuxZxZSFD8LK!K3@WWsfSeg}kYaPmuntGY* zsS`SDozK+)ciV?BXVS|{}@ZYt;oR7S-E7{GrOMx z4;0%0rGOFA$n@Wp$Rh+Io=|eHe^qk+j3V~dFFGZ%VgxZRY=Q}k9XHRFlXlp*+I6{L zGg9kssgSHZQTm9ugb%Dv*W-aaw>32#ktgd`fZK$XX-1KaDe#F zEd71SP@K$M^4Z>ZxwZ^b@nV)}dcVN-c-_0(Nt`-)yH7VFCxlC+Q?FGU8AE?|>@EXk z-O;<9&2z3r3MkK`=DwJTPPkpxz@bTgXs7e%PK<=#ngey=zrO~4fLeBxK^sRV`Dw*y zK%giSDa7A;eEVYfwOFQ|9ocS`zLRwCOxi0^@nGH`jY^FonxzH}f`eK^;~tqGDqGg# z)0fJ`hR zorDvZ4gJ((PxazlTE&NE5LHFo!3UN(={@Z^CrkD z6705!c~yuQB>;(2XM`PE7^uwED}pz%ei6Wls48-J;_a*i)~^*B8s~CZ#nU21iC%C} ztZ);F;2^dL0x3;@y;i-774+Yo3A75D^rSNdJFKI(Bv>_NnYCUmx`#9;1avER5m+T$ zefj(I_*v%zkmze-rES1{i(9-47j_@-UxfGU1kpZm~PhAyv^z-G+yIH$`2x_f&lzf-a z4%XRl>?|4ZYZVaa6Hg?`p7_ZR@C4<}5fn5r8QSA)r!xykTGp>6BgqW7{jC&mX1)PmfN zrlISr$?3mnfC}**+&hg^y3lAe+2cW9eBe%F?2JTfxr}Jr+MqgbG||54EbHS#!sC+2 zOxWXyp3Z9XEA?pag@|yKtbL&nA?kD8UsSx|5!Y_KT-JLA@Q{^JEJXFIDTPU-_RK$B z0d3OFC>^3d{3E?_jWYhFvkT7@g`Rv{7;a~z!d*7}Icr>BwY9GAPlQvGRJU$9H~yl8 z#05cbDg5L=K!h}krqI5)=)UpjyXU$*_$1?Y26>`bSch+9RD+H)`#(u z(K|am=4hTl46BpZ36-NR<-YiT0M~ph1xU%yUzO{1-x=~p8QI;Zm>S;n!qT)m`BB%= z^37h@0$|$9^j*(10|A2vxj-fv=~AW~t9IXRLPIx$ODB|3b8^giMr3)M;p}dP>^W&t z0=>4S4TalokX~4JV{rB)Q^d4^YL34Cz7-WtVC_0~i<--ij60{yZl@fUP_>PJ&=mch zyR~mWNhkF6IuYt6pp+|gBhZ&bGQCivCiSPbuYNSEPU9{`(8pizHpsirF?@v4$#6C?^ z*n!_=ZucwhW!CMcA%lX~-SY=D&Hf_$t~aB$EhT zpZ@>`2nUQI<+Rd|wW zNTNI_bc2?VTH?xm3***>MxEJ0s`iv%NiwlfSf=%w-BJe>He>2|7kyB=n+flzPQB;P zSRT*vrbW9S@=28<%nv2N`o#};PvcF=wU>x$)Zz#-Lgz5*jNvGqlM*3v&i)U3FBkd@J7)bO9WTU>E74$+?#VCp+_9alFmIZ^y7wjr>3{R`vaMfF zPBU)&g6_8NI<6<%2AD`um;!jdhMmVl*9>1DBhz>g;j&g`q+4j6g|52OCvl{}H;PXl zhk&z0*_}}OGmSh)QQ`e>1a<}w z0cL@|2z}!UoVBQN9VgIGmj216opJ9$o z{5h`Ca5Sa27nrl=Se_IInccElH_W9k$@@#!y`RNS>y-y29CO2M$x7+1Z^iP*&Km_e zDy0KleWDa~dB*gD3Ugc>({1XiY}`yzjLiJ%9gO%RVb$etwy|!ajI#C|BNFCkA`I}s z>rHgHilJgzdBtV16aR_a*#X&F^d)KkhpV)aenjc^ZfX9!JZkRz8H>hLDTs znNCY;^2IQ3sV;#g+YjFFJy_ohc@*J)08d*^W%U(q2U)GxNVBuUBx@f&b`;=~fMYu2 zn@%J5(dtRbfGvWGbQ=#5lSctVYOR^v~^&E8F%p`*+u3KpFJswU4k#R0n@V?^R{FxXu1AHD zh(rl55+p4M4XH4?E}Tqk>EIvpWF@TIBveqTZN^Re!qeIb;bg3r=I%& zLXm>ABgjAMnnc99kw}J5CM)fm+ru8I3Mo*^Ij8TaSxOPxAqOEcP&Gkk)h2PO6{Tj| z`A=>>b4UFbCBF}qAouk(XZ@z@Au-|A$WEv!>ZLL4zJ+X}v>5U=nPSKGqn?aqF^6Zh zBDs;KZCS{5#_Zaz-*J~q_+o~q4;kKX`P(;#bba48SoM{XO@-OC2Cba%YdqQWBF5~* zGo}BQ#K>o4DSxeB&z}ch>$tQ$%fT73vLm}CR^(jdAt537 z?p8;8{Uvf?W50*&xW588o0169$YJ^9=eu#loQe0(;EX`WRpta*PE;^$vAYi-d16cy zd?BzwBDZfkSJ^6W^lU6t5D&IoZ5qR4{;XZ95*$}&Q$zFuwynEM2jtb6#7K0A6N zY;(FV1O9Zf3o*jGz#yCH5fCe=mnD^i72E(xRrSDfIZadVF4!U8&S!GB! z|G`}4Fpj#PISyfjmt~YSZ~>a9RUD0%@`~)3;k-)#=s8hV^bnK;zHbiU&XU{HY$6q|9F z^815|q|2lWxfWIe{(;kfJn14L@RYIp{G&Dd^K@xvY{rTWa^Y&~m&j0r-W*Vp0e&M00-ErJIEt}`jPr77vw zdrOse0~xztmC;DHx3cKFR*8wO&lYUO&>=A!d-*D&5bdS@k$-{aZ2F%usvq@}G&~VT z!Z*c9UCrTz58)2Wv^ZE!^vBx~WXlFp>YPH7e0mdf0lzo~y~0>b-NmrYIW_q4V=ZTj zVRFK>-|v;X;0G1R`a1+XyvmL41O9I6du)l!G?8GBgGl{IfVr3Z`0<(Gpo5!$_D+B1p-hg(4OS$mKwSxkXWOa zVp{{pB2vI%r=!+9G+-EY&%|%GWd|_TCP|}kQLfuI><#TtsTRt_P=liEioVhz-Sz@U zK7GDUF`+rvN)Z1;H#M+9{de^88Sif=>QfE)2-1H7EnzPbZ0f`G2>*qLpKLc|ri7zI zvLGPbAHF49D@#VC+$aWdXd^BAr~la5k(Z5y-{i(xB6iloWwLBS(1p}%&-}H@aK6!s z+;%6Dwkh*yq4ODsWuexadiUC5jDzfzQr1)F*G^7Bp>ewh=%Keqs5@P6s%6J#ty#0W z&!mSvmuZG~paXIhh)7AcTKLcJAr@rgkRyI{hzQ?^)cJ{X$q#QiLc9^?^1bcN{)(Pz zs^F>PdwzCf+Ke#MTy{8mIRFpDkTpuod?ef`On>(xZx6LZeb)pV!-kPH8of|nl2V>4OG0XB#*iY0~U^va7 z-N9|(vnCs~f;nBSP~WFMwiI>j9$PjO5traZCQhGs9}zEo$h%WLN4<)vqA&T> zdo43w@mD;($7d%J=8*7&G#vF~i>GSPnS%AaNrs6F;1ZL_^XvG~>a2xJ6G4Z8Eh zmV@gxR!pWb?D|SR4GT&KZcfa`IF}B4?qUe9#IGvGx4%|-t06;C&x_TjBIh`~wmUJ_ z)Djc7TE6#)xQuY;Yy--dRMZ`{;FT}MR>U#r6*Dc!TVXGPtTThK{5P%^2s~)rgc3w= zv_X>o(@u76enaxcn>>@jT`{eOd=sC)z(>DqDvkUCKd@9xx543Y3#ahW$@+H> z%du;B3h7p5oIO2L>Gvfr6C!P&>$kHENc=Vh6k@mt%$kXZgqxPLMx`CEFjm#HsAa9@ z&VOQxZrPx7{K{gMA3|4b_nOyW$@WXfR{)OPZtOmnNbJrTrHG7%=*t%gZWRiYrcUec z@VNjKh5sK#=N`}W|HW|>DtB_9dngKXpL-;Q-0$~GDA&zeu8~V@h;EqsEo`nyvLTmj z7KScEGGQ_`HLZQ+uHSzD@AG)<@%e1;&pEI2dOc6ZPhuL^aC&w_Ct3_FI;n2SJKKBy zx=F*TN5{C+0J`W1V;@(~X;puB_}N$2zp=FwL7W86)xm*b;aPvnHi@&}aEhXr!GC0} zJf|!q1;co<=ANFz#F@58aks5G%eiFi=lf4c`UH|>N8z-Kh1st^q_xz&QV(B8^#Q@L zoJ+05@$8q|f&`GYoGr%wKI01_ zBj$*U{3ln{LMZbIDwFMmWEj22_LRrRUQ)s@5hru)k}e|JZ&YLxxp9zZI3-HueLON- z^qqeOcULWJbNl!M+g*uE5?2~W6Jq#vGk(!ed-d)rD8x?uV`DEO@!H(KS3LeB@6^v+;gzQILc)v`5i4oZqX zC`G6m2n{D;c0DyzCpR&%WmqWXb8q)M*Cj8kxERxP$h!3x{ORgyC z_mgwJ%4WUUP4xi!Kvs;X;W1PEZ^oo9T%OQALMt(fFy#)D(ItyM7f*7EsBrWp83xUX zrCMEOKn)uTCVx>Im$A(QR@`ygo5X&9Kfu&I1tPw1eUzQ9q6%<0gOiA)Zc0?lr^|ga z^G<3b!i=}pNa+dYHF+~-@1UZ-R8ZK_)RQ3-M}MLR@Z{V5vVlX;aZ?9qe79)F?8pZD z11Ep+{ZHE*Ux(G-zP*V&?3RBrEk~|jYJ10Xx6KQ4~lxgZoxAF@}I*m=uF*u zzv5kiU}@`a1c;n7l#)P;PmP1?$*mg~SB;(rKE8PW{^x+W&L0KeLf$QL=H8iqA7mvP z*C}YRxAMYA?uxN;Z3X1@H2y!~7uN(*RU{r1>s3@YZ4)hsJtR>z%G~9u4-a83+m=nU zjKHM-L;#uJ_XRY!k)I9h%m2f~IxJ-%au9lWj{*=#x2d!5|4X%Lva$ zE-xy{V@Z)Mcz`2s+?-oG>h1l*cesUVvs2?<5=jnzZqEjdKXc-dy1orR}oO^x)ijtb5>*IX?w<>dRd#)0YQVu)1!M#n!e zTzhh5hcO6|uY~qOJTQAG?(a zN-n9!*l@dA|NeZqXM!F)iBF!~bXC0%JdP--WD&rXDsLqv{$u-QB`pSiB>))cgj{p4 zYWc2E8fB{c#s@m))1`7fBpN4@axge zx9=NomcFj-;cOYmRQoTZpukS-Q?rcIG`Jjo`$25~e{uUsk^`56S9#3^luN#eTD=#w zdFn?EkoU0+n&4Q>`@x>NUX`2O_Ic=bXqo79X{G+DK>0^NFpI6-_wB0Ao%`T*ZGQLb zOYZF!_>%8gxtiz3Nh?Vc?>V*yCm!A;;akOhfJIl%8y)ZjLhtEn+fAx`LftM&uH?RJ z)mXAy%$axX;edX-C`DdfArQ3=mdl1HHuo%?m8hue~Wq;@Vg|h^{M0&`HTGk2o)4D|m0>dY(B!`~VYslH0n67JviPiPfAed0%M_RO2 zyf0nt$RU8Tl{im2(|HlT9~ zF9p(hkHe4|_sNEIh-@$_rnrX2rLy2#dUC+QkD`O_7H+%e*orh5B16k?6oVKT!ozJ+ z)~HbZt4ew1OFDIl7U%?|dze5pwuDv-$Hyf{N#5PJ8|lRxCpsJ?w=*X{a+j5ko^W(f zABSfdM<glPKAHR#9_lwABlv8+izB{u!&fL!>yY|xMv2^%(ZwSZU`Ct|l>8IKw ztp6zg{aeBP38(WSYkF8}lh7q8O@m$3=ACs(<(pLGsv*_LUN*>H`|^KqKVg^Dt@XQJ z1`Xx8y-#LVal!5=E7!%d zJ1?Df;tE)B_E%PH$~-=3y)dm;=U&0s`>4bjq14rM!B;$$mB6oos2XH>$;W)64%OFQ z<(()~t2(cP!W&1DPGTkN8=(TF`*VSsW$h4Iew9o?$Gw;C@JbqPR0CwLN=2+_$XMOr ztNk587ykC9mF8LC%V)NAP6p>R+l+(Nhe?G_TDd&?Ez~WpTsO>ztL(Vd)Sq?t(;T(a zN|IA%Zk>>IKJFNs-~8e|K<>dI{#vtuxT|w$NR!j(bZz5A{3lJzPlA_1TPr`3{V;5* zR1XDj3P&yn;6udE+#^Lpei8e!%EwTeG{d-kI>FdhuSPfz;3}h+6Hg1ij#xGH0w}s*g8d!Oq$)qy z@8DAGF=-R?6f$g^leFvI8X@xZ@AO(8k%8HQHZWz5+`i#HTj@zBAu40pv~axf+SNCp zYE$odMNzYbUuImedA$4H$Bpm9*q;IXTggGf&k8P5ai1QKg#NaCb^HEuq~~vYEJ6ve zC%ar*W-WPjkb1kPCvy(9&=CE*HZA#DcwN#zmPAk>mPMBVq z$uHw=VW^u$>EKIF{GLqTc0DiGK-H7K?`tqsK3G1=osmd?bvEdvX%o94EV^yLJM52E zM%QiU?++|^9RU+()}=J^pJgWUOzN(h!?W$O4bs1zy!%@9G^Bh8jQ@QCs$B5>@`55Y zhhuhFF{F0TKkZ+sVO!Q|vFFH##3hvC2x@k5B9j-c=%*YaQG z5t78dc!t=p*~(xySB7|K+vM7mRoF(6s|S5sZD4fUt8%~CuqIv9Clo{vBw>>(SqG8_ z6ZF;0uqqWomDC{($k5ZpAux_^851CNNCoP}HRI*Z5 z!pXD*v3v^ub(lVDs8y3abPx9`wCN@co`kbVdG_D#Lu>eO`>P2}oS`9r>!V?mv-CAF zLrB6$bI2>i-KL|q(^eN3PrS=be$W$#eA1?q%*j)^&t9Z=3avJLMgYevgtulHiTZKyJ>(z$3#@1_`-<~q3O^LmUK=+0gd2Cf zuybTP8l12JqiMc(>gk4QMk$kTwdX}4kPq6IfmK8HSc?xJSMJu52kLI4FW*eAh26pn z9*2Z|)X6)FguDv~Gfg3!d>hO0U2|pfqvt<1C6Bs3=b58!UPA?0i^~+c=Z&#HNyI>K zG*cI%zYLFESfXAUR%(@hmT>kGb!CRk>HE$wADO%XycOgCC22Gs0_NY|Xk!{?N0*Yr z9M%phpB@!9%ZA>s6eP8pxTku^4@`E`*A@(e0$F1~w7-M*;a3%=IdXFbzXpue?k3p@ zyPs=a(~5J70>5Aho93qzDLa~?5>)f|g^f9%^J91zFxlVyEj@-v%mEZgr>MoW`y zCD@RggE`RISMl19v|jo-sJqPC{^cEfdltrL_o8jDLVD=f1}?f+I>Ir8>1S1>A>pi_ z`bvS6U&6L2tFi%ryBQ*`#Z|jiiCHJ)0BLK;T^cwsXTkLlw|R`6ciq}HCH!MkHQrsL zNfky$`t$6ww7N2P+IoUvC+=%s=@7ZiVj3wE6?Z#>Q_ZUc+Ky0sE`X<69z&(A3Byn~Ncc{ob-mRnl zhSpc8pg+a=bDYmBxdGc1gO-X;^KW0jpME^oi0I^uJ30<||E#!uaBxjtR63CEG@OV% zF#lzhBg&rGq&Ud?^g+dMtzxJ5*zpBwR8)Lj>^?o{+G|$r$MPY-InFwr_|Hnbw&9an zLrf^qmHXn=uAs((3*)KJvn=IYeqWY^xU!pJ?Jh-+emk19 zvfJOGs?BtCtTdib1vvg3pN{s$k`EN=UV7NX)y}&6cM8=nzb>bp z>d$?CQ@mj?lo*}(D5E~5qi}6-th??@lV>aqltV=!65`+%KlT2~HPxV6?!QNN+XX!ST3BY!Yf+&9Ff>Y`p@pLH65W z9gNhDe{6r^;%R$|Gk+5vc5Td$jN-4R^%pyBEKe5|k+I_xb9fpL8GB6VpPI5?YpGV6 zr$eyqtQs=D)}2W)QzF2-MvS(FF~#;DXdbFiOgcno2M05E-H{Wj-nc|tk64Ru%PBEN zJT0)%e%ZB5ZmB+2*Tj_SMpABW|NcEO7O_`W%M<{@WJ61KPGHLDe5bY$y!KoALaybMeD}|aK|F{cyLS53_^0~$K}YAGYOifE2&>=-iZtX}++|ez zA3OkLw({OD=7B}3??X!q=qZ5vzz%QYPyV&>5KfPUJ{ll_@$yzuKKuu9tgptR2DKq` z$o3VKi~1?{tMGS9u_NQe5R|N^X2MVh`K$Vyshm`fVtaWwsz7|Obat=> z-tKxEI=OeOJmTF>6r135>gN0MH90)PmpVcH$3_o9t_a0+#c%OEkD)1|9rU{*FmQVV zllNZmDy5ZTF{dDulOU%ZHDI!19gWmUFKGGAJ>2*pi(4F9FAhvQ=(AaYZpQhY89rqjM5Cr4y0+1eQS{Y%fEgeByYTX0%CNMuf} zUkh|w0(eY?I*w>ftd)5|xFXKo9Uc*Jtx;i z=7D^VkP^zxVcnf1y{n;~9qHyM&ODL1ti9tP{WAiumr?2L{eN&?#ANk5LU$o2{q=vGmQuJJ+m8o+_wB9Sf{pLy`&)z84=r8mWv8M+wA+*Ny{k1LZ-y8 zZE+@HG*5GWr1o&yezbx(7uu{9+YvAwvPt%Pw16P5@AfM$+2!kMma($aZ_}Ujia1B7 zyE-yVH%R_h(>|5&u2${mQWL2G0nK}IL_eK7Oc#cq4Owqnh6Po4kVgIWKwU)mJHhz_ zc?qU&PNu}sw7ib%d?9N0AaZ2K`4O5QdW6;(3K?I8FPtWf0xBq6$>rEPR-PK8QsWxR z%%Yrzbmvc`bjYxSP>W_t@h2>_(gZJC640ml>9Af~B&2YWalvc^Dim3b&eh`X! zk*D>;`An6FJo#6l?6mcqJp7CNdnI?9Mby{O)*-<>Jr9Qv{gimS=P7hR{0*i!w4yjz zQ+k%r3)%Rpe3NB#8j>t*YFeubDQnz?VN=vM9_N~^O!Pt#R0*}nBnCf3Cz+rXT2b?D zqop_m!ZRXPCp-IaXAo`VvOK~2k+NNYH9qzDmo5DA7=_B~iPp;v8 zb`pZDnO41MPY{tqe-Nj~L5ssV+oX+(L1ms;-`ym7v&^=*0`B9kfq|~u#6sF<~ni0>d|J8w(@6^FHfbYclE9ev6nM1sIFq5Xz5;@Vu((QItG;O2DQ zei1?FXfkWBC}npdes@#o^KnEVW`jle@D3!c?jDC6tL)RyZT*>%APrHVYMDK1w@oc? zMYz_WR>xGG+taSWPo$GVV<|3(#(rGi7dA)#L_>lF^-;Yu$m|pc)KCs)`=FFivWF z`f$3NF>@tphml+wO}gtBVIC-ly*sPp2_glTBRV1UIL4`{t<`>0sGMYF>$c3}NMlkP z3`C3G%l<}z(mfo4>*D}08BaRb`p+6xtXh1pI13fZG@a_Jv^n<*IH=J239#g#G=!m; z+W1e5A21C^w5=KND%?2o$5uecSqZ(9>q0s!22$N+_q6>v)%h>AEk53NCxN5>gdAS3 z%?PUBlr<^{a{9X3)Ux7Do(`~r`Ckp|SdqQ*W~{(fG$qqX6yfxj!Ma!30Bq*kURTkT zZ#pe;$J-aBzHEe^hp|J7a1IhVoJ!xN(i(3wWoX8WnYC3mL8zITY-&I z#}fM^0!Mf|5wB`~GG3eDx+t-`)$<*H9!w_B<6@gDnU#tWagRCQ=6ZSB8M^{Q!xj zrZ!OYk+qf4HXsfHk!@(vQ`gMet-$;+v1?k{+A-T8-(?L5HV7g^d3GyU3aFF9<&2y$ zBAeI$w`bf(M+q&(lJVh z3-L?(z=a+LO-(rITo3g-=jQhynDb#dcg~N$@Ft)^#sk>WB@|Y*R{ai!5b6f}D zZL<>CGo9u?W*w>7EPMivrPHkK=9oqDL~nSbpalWSi8VOXR$@g&z{;f4q9#Muwavy3 z=NH14tK-@c{P;*`uxUL+!x?CZ+bAm91_XC}mwtmpQWYJ|sl@?zr^lT$N@3)m@JY zhVYk35JcrXso{(zpy;oA!r5{O8F`-jD`rgDd3GjHuvFKYs0N7Q2enjb_bpk zkIi@|n`xZlJA5zqvy&=KNr}5trWQj`jE9XYypN@YGkGCbJ}t;R*)nxlU)G}59bNAF z$F}C_yfn)0TZW!TGG&vgqiIvSV9(Kf;fIv_>(gu4#(9S(ka; zp`4O*;Pj5>U;_e{n1AIsG5@d4wr(g?)ezS&mlWj6-VnymNR!@wc2TsX4Y;4(W5CA{ z)CpeExzMcV{CP1^QTO%;7^s$O;JK@#z4s-oO-w16NAcZH+8O1gcKnCWP29Kd|LL9y zSM-SQ%=|Cpm%(EfbWRjmk3S{M6PxnJb9gJU+#E5vk37O-|FJ#YR*xSvcb+HA{$m4E z&F6K886zr8~_+4RfpzzDyAYz+kuP#bjAR z$vJaWnsYT(@&Gre{Ew}BY#bWn=7YjKgc-mkOe{e=>gw@5uWs zXnhZPVFGXLaIMGG2BLi^>UM1HW+ru%yeK{vx|=T(2%MO;Y@soPV%dd3M7K6f+v)3G zQK0O*WibujOIL+vOA@YL(71+(i3C*{+j#R52bZ2|`WS@_*NVB>@Y(q&vQHhagrtT` z-9J*NnJi+Tt#p@HCm0uJnX}fYF*PrS#BU>(oms__>s4C%3kZO+G{T~VByOywBOzl7 zL?$kRVTwo6plQnKPnd>Gb7)yb^~xH_1%mofb#tejp7gcsP0Kd%v6Q$cj=H03Fc?Jdkq*jOT4)_jZTwX_P2hAmi6B@p1AGVE}LTdg?&TUO+# zEL+P-ZA+7JgbQqRP}Ul(wPZQzGC$d?#qJVUC|r*tl?z-RZD}o536o#GB-^JbIb!q6 zWhuc&)2hot5iG2RL$hFxasq><;+Qc&0^Xas(3BuKk8U|ubvkAWebR%9Bd3iE2i(%Z zeHS~ZiVs3Suc5Snx}zH>C6BuDJ0T0QDJ9_&Y1D@EOYCT$+_;P3ETF;}9@%Dd8A4j{ z$bj|uL3tU~Z$W0wd3alh3K%s56~>{RN4AYB|9@kG6N$j2!XXG@$3)IGv*8Ag)&C}N zC*?E^>1>keu|^fsYd5aEX}Hd6{De`x2|Ss{K&(%^OXk?<&|>T3OxSl1!f`g=`Ks4o zhdURidTfp;0rr8w(3>+CAwGJ(&UgIvQc!IxddRaz3-=~C!W7P;@U!Q9??>i$n#tTK zB&qj|6TAvc6gBAo*lL8ntm}Fv090{Wg8KGK$So^!nqN}W?9xJ;{Ifa{CCi?7G=v|2xAO{#e@YER+ zaU{V&m4rBO?vqV;YF9zn%Rl&6Y~tgtWWViOgR8BlJ^fTf#eLg=5H(DH8nj za((Pi9=3B+qI*G;B6yl5$M@Et)~QOI+7;GtvhMbo+LqS~gX6Cv75YB6l?(`z`g|iw ze8XXW>X^n*_Xy`YqqFu+Hd;}lPSYmgQh5SodKV~4ve=UINmojx)L3{fc67xDj0;e{ zxu;o%Xw6x}F^G1RR5PlYP*UL*{O7htNNHJy^9SyG5a}sP>A^_Z2-b3}pQJaqA@Elv zj+jCDnQifeQ*lkVD;;KZaNlw&O4qczxB{A?^CJ}S#D2kml_1qn(yO#!#2n7t%Ndxm zNuUTW;cF-jtTm?KG|F+)ZobEKdkOF`Tn9@^_Zu}QCdd)rhHI#8YYP9}!|4$1ACuoa z<{|q$w8n{YFiBQy+hGr-R-)<~USE0si{q|E0_59=C?rpuat|$n>xpk;@!ug-VITV5 zi>C7!c^pq8&pT(b{K~IBH|wXGkI%M$dnxJkdSbz?Q|u>K?-%G`>XUN)TMDN%3KvR5 z3snn7Fjt+6`~A+uGqg(3FAL>wzOmwc3C9qim*;i#)8iLjb4qR^Ji}ukzyeqEUB@r5 zBFNMmd+6+_0V4fe#6_AkPBPY$VvZ#N_e#515~h@=LsJpZsM3yTnps>0*nDl3rPG_V@t=+ESj%GRFN_ za05074YxTZRJ(MnFhJ#A*A?JdJ8sd1W{YjCe3H^SpC@n5pq{IIMpxm;EVT_Xrz=}uV(pAo zQ5*pKte=J05 z5Z+j?ub20JFD{)zUa>~s`C&7BrX4T!x}K!iYs>wJSa;^ADtML@>Q^ z{sW(hiIoxExLs@T6811)gI`^1V@K`hp)JjGi8% z>#=6xjdZ`c-=p?GJ=xH`90BYL=&AimThtQ0KICw!83%166xK5RY>pWwaU#1|*CRyH zKq_d5Kgee$&?GfLak5Bg8Is_QlU=2s($GPV%s9gFYMVt;~7ajQ~teq+ae!YqvGuz)%lBZ7C*HHqKq)%4@~ zsfzlBAW`=CM`}%U6-OTgV*JteiH{3baaxDY`Vy6(sS&+O<{1$aH{(=ECMZY8eBp4~ z!2BLpl?GIr+$@dQ~_aU#@+>SjNjm9~o8$DM)#q>3MoI#)W# zD&8#qnkLKA;+-$({A2rk>yVIhMupC`v~y6F^O6yRmI`b-o+zJX6H?oisT`I%;1oVV!0{JopI zZPd}!q8W%uqsuUV_gB;q2%SXo62;^CL_pX|IxtQOspcEu@@v1SC9%f4QU=NjvI|9C z3Pj`HTS~(K&z&ike&MEkd#X~+Pu>kA$4A_=-yrqlQrI_i-xlAV6N#%X%h`n@nT6y^kKTH#5e#yGQ7-itq zM)AHCdrAZ7+FzJ%4v@iBrb9lEQwkCw5oLri2*9)L5Q+{}_YE!uVTOc`H%uKusQ}8^ ziDQJ~i8lm$R(TNdsi9xDMN;7LK@ z{v>c>X2dq&NiRnyFvpQ@Nc2mpw22C<=V2QhjnC-msI966S``NOQT&J7=zb}M+=KG|$vLb6 zwq}8Nd@ESDP0MtY-KQAw!JL*=r2X668F^LcBSSB3wQUHTq-R1H3of{!REkDnexh^L zo>W85hL4ut7hVk4cs~G;gyY(FWG&*(DbH!%oDWgM6ObzqWIfH(5^2hALRW|XymjY5NYMlL*92~U`89+Ak>*ra;e&>yqU$Flij3E^4@h09 zHeGP+3^gjS?15&|;j}8a(x3($@AoY$D!kUp@p!i_Bv_6c1$%vHd1^`r!4)n zd1B5o$*1^6n{+Tyf%i%+c}TX|Ora06V|aWl=Rr7Wn3Uh?vPM88r=@I{5$4AxhO(SK z0McC-MeN&-LNs09u3|qU0~5Fd>Pil6Zr)AK?=OzoE$h@FY2A3bU6zz)v?J?9MUHZZ z;p+Rt$2{H%-3^c9gfb`6g~U$l+z)$Gu=tQF{>na<SPp!oX+Zr}#1fI1E-P08@x9iT*GDSK6f zKnQ-av@!@-6bQeC>1RpvI4t?D2m}g6f==Bo)sNFt_qT2_jxdljDnzapqX!%@ z7${)+2%l5G;PU4Hw@AJv0PR@IpWZPfracAhv9;=MkaE5Wc!Afw_ON zeF5MKkhjpN^SzHUO_K5L%f6rXj;Hv2`>09YJZHi|)_-=`$KlIP@gzU%2HK_Ap0kJ% z>ELD{*Gy{NNoa_`X8fp_#uoQ!ROw#;FHDDfW~ax-<*^$Aq}Nh=fb zNuOdqlnca*xYO_L7XdC4Z>gFouJ5)Tf+z7a`>Qp1IJy1iBbp?SS)=1uRi?N(?*^G} za``nDvq=X*N9E|6Ocr@?x$Mq8o3SZJQP(1!!N$KgzU4cA(nliIjFiLI)_kkBbxj$7 zM_~NML4HNW06|oLw=N z46Bs%7n0Rmd_b=+m%DxgG=jAbA%<)7v`b6)2$nGzz2q>%#t(Zq`Qb~2P%j$Cncuy< znmc?Rb+c5DIPA<^_!*|b8(^4;#fBg#*SFA%7>K@`R7H^k#71f~liy7485d_7kIAle zV_4hztHXNh7pZn8V{}b z)2LU=+^_`a&Gsn+P30c=hVvYio1_=LMi6>w_$uFOQD$x-s9r?=b|mq_=+nOzQ9t5; zYB_7^x~@KBcj`mF7d?UM6-S>s+xJk^^L8O%U~IsdE8^;DzYa->yblB3)oUL={VEi< zr|QB4>2>|0f^(K`d`o42(&uR&5R@tGLgHA+=aZiJ=h3O=OzhBf=m$+z=W!I1?w_Vw z#-fmRkrQz&;wMMf306l~c0f!jluvtnZwC~_6uYI&np7yEsY#Iu5~dE3?kZsz!)Kml zOZHQ9q3F9uj?q;3FEoioV6#Fo=m9Wk?6@KM+YTtd29?h8u-)1MlHPVhrXpCPzA-MD z8n}qjaikih}xt+a?`b$;lT$C%opc*c5q?QW;*K4ourH zwVe_gmrW!FVq(8ij;vRAeaIgWEzgXIUi+4vm)>f{g+v!-QdT`rvpCU6^?Z3e$Zt~j zWrv~Ig_fKf^^Ef~{#BE8BAe(q$CoN^BT!dd2F742pPS?Ld@{6;aJBJsioLQ{MElyC z4=j?3Br(LIP9jg&ohd#m9;#mAK`FM8+!}iKCJKYv5{%zA&(B?>Y=cVC39cEZacLs5 z;gS5){S_u|CRch#(L12_%Z)X>o7jF8Okpc!kNJC&2$59>PdA3k*kY)46~&8)VyO)l z9sDcBkVt`0MUXxIqiO_5X%a&-5VxM|smZw`BfP2UQ$q}GGRAJArh15~2CogfiB#pX z&}I_M5Yd9e*%=|=T|l|?n*+;;#9R>8_f4#pZ4KsP3ZkyKgvYAJFyGlGZ1|Uh5&W#s zBjx|jGBjSxs;PS`_)nerput7PH9S52j1rI_#s>3t$VIT{Thy#&$BiTh0xZdI$Uciv7jN@->)qRtW}1893`$KM95gPt6U9yEl;cc>$KOmg zZtL%tUHDK%iEaD}sya;0$m~OOE)&wl5i?iu4_Rv%6o4NMaK$OhZumu#Te$MSs5V zSV5o|inXZ6x%{R8S+9hESUv%>ph{h;#rcux1fkcPtrcqw@(s>_)8#%p?CxL?gFQrp zqlO_g+~M24WYl6qX6v(Qc^$I)`pcM?GQ#P33N4UpRn^u^$ushAUgmk;Wi0^8)p^bx zGQA{)D54t4>KK6h@e}Sa_Kslpl>Ch=iESZq;)v zRZ!Ikc{=tUu95~aF4`=c`KnyB!{10=W^$Edw!qUM?7(i7AKgS~0okp8g&M!jM;^RJ z_i3X`_L0`i8gRS>7_L{wk<>?SBkMtn=#lX(p@6=QuA1|{9<2wHxD`GF9II~L6W0Qn zBO3N|KH-uh8(tb$rOGPW5nIxDB3xQmDdAs()+?H*4W%S~2Ve9g){7MWDOe`|H79Pw zWxe@f7tT`cAs4s3x+k6)QVAHS8ughbY%*GuC@YjE$AYo;ct z(0PKn>l3bfHU%?g;SZ^hZ-tS@rPxH~skGW*n_HpUy+oipX;ZtQQ+ogc+V89e!u2{) zuS10x+^&^lI#+``I>0u!HRfqtoq~Ug&Mj5C-ARxU5iNst5)A?jG&Xehs%4Kgq_-s? zWk2;0BP5u_8{0{)U8;W@_4a<@;2J=^;{Mc{(0^RvsYT5F?B-K%dpRzx%?P%!I)%0@ zHc5#LvDT{%wY?85P7aAhh8M)Iqb--_BbBRUY9&jgC4{nHR%?%-vu**3bTPQ3Ea9}sOTB@;;I(kkyuA@HS zYZ?&Ylrw<;YIgddLe|R!63F{`bdB!P+BR)m!ra!Vt|Nn(IG@va2hAr5dzEh^$hWE- z%ru@fbgMJOaw{FpBJ^ZNqj^K+Qgx`-E3P#{mR-S%X_9;y zNbJ2UOX6@}9**#@n9`RzEF?aZ#5Z{~$xYM2Fyeb=37TGI67x==b!Txh3aOGjwW*Q&?UYzV4ugMg3qBPVucUM7V@Py z57SIqLo_2>7oUrUZf49;)?z(mpVpb^~$f#bSd;= z=RY>ll5`vea42(RJ49S0LIM~fn&=O_T_Gd*SoX}`=ySv z;j&!@;&Qz+bVHc%R)HOEK8H_?Litv?i28whX^3-AwPvuaW6p~88nIk}E3q940;e3* zC)YZfVvGJfL)#tJ@#Y6f>DnOv+D#nZkMyA|2tBH0`IO0I{|-GV43rXd{>75r@8;Ix z6YSK0fkiL!$y;ZoZQP5-MP-n7a*(#(r$ir2O37<){~f?7gR;cxKuWL~#f4({?j{pd zTIO+Nl|+1dEUXgfT2!csjMBMH(?J~C6>sP);|~MO0!+sISPY_RrA-sNl|zCadG+Q6 zY%s=~W1KkgRo;_uF|>$ijAA&yHJyT?BK9AQnL!xdMip5_BFEe2MHGq1G$!A3J0Maw z9ePyM5#oI`@f=i|=}n769~!t>H?zqy*zr zOo4NBv*3~hO>^+Gfr%knl&t*f>@fc`*1lKgN0R(O#V4KY3?pB3nc(H^3Oa7J5I|J% zMzM7%87-KLS7-FMj49_^-F?3F&dm@-oe5we_2jUkn2-oXKd>z~jK}nTcMP3#z-D{Ox=kgCJukzp)`)898QO~lSe8X(*eus z@SB67C35u;gqJOa_f1NLSKL~u&;pI?*r>*dxQ?EIhwl>gr$dPeGBU*CJ2#6TAmCAa zBlt*-^^j(rREq&^rXEWh^Cx+2(#^}JcFT((y zIs~1No~Z|js!2#-8Rl@-)OArd-Gw#?LiHH5X-U*@MUl>Il-Zy{(~&D`kw>Etyj6R+ zfz7>CgQViytB2ErVY!%rNDuMqW~7VC8fOS0Js=?%hWKZxb_Mc)Nc%NE6~LL zrch)@2-}xst)I_7%hWLG0GP|Jes^bnGjW3TjO&e$L$>BrYXsl!=NH3d1Sq$P(!nG> zjUnKifmiW0h(tKEccVmRj|ecA0UZ8_FvgJrlJkpz(*}H_6`QGJz2w^0dL>b(pzyZ5_+kNEzE$jWGEqe!RXZ+z9)yVaeH~3SYDYMSKuN~+%GH) zc0GO|K@CejX~$Mz;N+(8lJ}EWlb=^dA0_rP#ImKT3sxZvySHnsYg7b zL{*g3Z6iQpn16n?mp@7F>!ES_hp+A%ETs)p)pw+a4a+O zW;&unnF1B75gdk|zWD)qSf(87A@Rz3c2uXc(30O2gXk_1tr-5qmO$Bb}50*&vF4`r{o<=_#8Ce8~F8nZI&m+akfYJMNl$r5P%LL_g62 zyLS*k_us0grMRJ)_}+L1RV6SBq63TW#0`Qf9LYx|?sCq4_$ZgZBeK%XaN(5Zl7IWHzX`DY{fP>@-@T$ps!sEWm+^FxvJ$DL- zRqnF*!0A3zc3())?9cO;b6&ZM%D(}!A(4lZ%2^lG4e^%GSvH|VO|qS;kRIG<2Z{aI zsgsy%uq_Br;GF=&3~hKLaQYM|cwK3f0y%Mx-pn+N5T{)76iFfTw1uoaOjF^OgOFAV zn7T?YjRnlPrduh^0Tc?q{a1zJ9fbQXtH*tF!|s4$j)98AGbxRqQ*Wtig%P|KLI2nk z+UW74NUBkVKql=L&ZpAqoWE@NNF{M;dYztNKK?vjkFlShg`~w4+xtD9p@5VrkRw9T zLlHcl{9*bUQ%d~&Br%x+P7d`?${Us^ocYIg-K}vMV0X?dR7hBr@%EMa08}RDLP7h3 zP?&!RI4qRh;`40fXWmT(F9`+VGoOE_Uj2CDF26#_W(6XMwLYT#h~@<@<;=iPIqy)M zI2NX;+{FG4#l4)KLgfg^65i#9QMo79%m1nM#A5wF zz{a(M+C>EJ75YOov=3^aR~baV+gVkVE-qFmL)_hH_lx~V^F=-l`E}L`k+vsv*EK5Dj#eK?gw|s|~m_x-B$%f+mXDAJW>+^7iv2tv>PW;O; zJQwUw07itwnMU3F0`|gLm zP>kZ1L#jQ3g4s>d1;M8?rPOV-e445$*@r--w_eeECRfi~8WLpoeh_&Yby+H+TAo9t z1{>1e33fM%f`@9zhX{CB>~=~hy#6%7p&ui`l)`9uEy90LBvR^q_KQny&3om|wSc*> zH8>wAxvx*@wF%jv%8>#h00_hZ!Gu#V!+WFN6@{i`I*h{KMe$f))-DJwdvpTuVhg9= zr=h+{*#?B=R0sKX4&^Oqu>A2JUfZ&#=u-QYPuj4_GeSF{!VOKxa$W@rnu5sD5bv)} z&Rfd`DGV^l1L^4}gfjWpDmLNa(<(ohLeoL4>p_jPhcOI2f0#LvF&4B4+Am}nIrzth zG@xM#l0>(8c(}>H$SoL7n7B4U1{HQ~&WdN0^)aO4oC0{mx^iEE5gJhRD408mitU;Nmz|e&+p0XQ_D1;g|S^1^0-! zV$q4g7sM9a=fq}`Z5|?L#X*=USbL2!0Dk0#MY@dF23y>ARHp**9ZFm0aX|DrC6%jK zB}SJH;Q@E&nX&pEz%KKfi6{{Z%18;*}~Z1WvG&2PBQNzMMJGdP+jUS;R? z4rTW^JRw@~Uz&rcZ0e%aTrh6>sBs`pTy@7eCOf)%Zo-ga_>I|T9I^)(3Z#QvC$ zv)sM{Iy$+sa`ijJBFp;fUS;C^%i?O|-yB0Pi0zxkJWw?)?qo2NJS-bwB zSjV|Wa9D9tb$A_}L{P2-173TTYF{izOJ!t;FP08TvHv2^mPSOLDF7QUoS9Pcfyiuxyu|wsOGPk zOm{d`6ZJ6n90GsD{mRKIK2Lz(>*H&PL5%pEZXAB5tKKEotB)PdS*%CIV$q z%E5D!-xIDQpSKY(^$umjnaS>Tierz5L&w7oZ|Vkq4^h=|HdHydy8Xq>b6v{HaQ8RO z5yimF+x0!qtaC3i_1r(0;Ab)4j$yKDvGwv5<{4NKC1C0wj7}w0_cok4hJpRWaX6F% zFZhQOnX30La(N-PAGZ+=tPpMl&VpUl6GU(|HNAi2eLD;uKX&xoC2 zn?B-OZmI;SSqQV#xzuw^xp(3(GWv=)urT$Qf?;O+fDQ7Rg>9QZh(IoFS@i~xB@L

W2({W1rssG*3T{_>wSxvS=45burDiuQ;3Dz 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 a!a>c`_bV;IMZ5C>pufZo^2_3tKmXag2G&Oa literal 0 HcmV?d00001 diff --git a/test/lib/Uploads.test.js b/test/lib/Uploads.test.js index e45ff73..2033e70 100644 --- a/test/lib/Uploads.test.js +++ b/test/lib/Uploads.test.js @@ -3,6 +3,7 @@ import path from 'path'; import fs from 'fs'; import _ from 'underscore'; import { fileURLToPath } from 'url'; +import imageSize from 'image-size'; import Response from '../../lib/Response.js'; import SaplingError from '../../lib/SaplingError.js'; @@ -61,6 +62,46 @@ test('uploads an image', async t => { t.is(upload.image.height, 180); }); +test('processes thumbnails', async t => { + t.context.app.uploads = new Uploads(t.context.app); + const request = _.extend({ + files: { + image: getFileObject('photo.jpg') + } + }, t.context.request); + + const upload = await t.context.app.uploads.handleUpload(request, t.context.response, { + image: { + thumbnails: [ + { + name: 'web', + width: 500, + }, + { + name: 'thumb', + width: 128, + height: 128, + fit: 'cover', + }, + ] + } + }); + + const thumbWebPath = path.join(__dirname, 'uploads/thumbs/web/photo.jpg'); + const thumbWebDims = await imageSize(thumbWebPath); + + t.true(fs.existsSync(thumbWebPath)); + t.is(thumbWebDims.width, 500); + t.is(thumbWebDims.height, 375); + + const thumbThumbPath = path.join(__dirname, 'uploads/thumbs/thumb/photo.jpg'); + const thumbThumbDims = await imageSize(thumbThumbPath); + + t.true(fs.existsSync(thumbThumbPath)); + t.is(thumbThumbDims.width, 128); + t.is(thumbThumbDims.height, 128); +}); + test('uploads a video', async t => { t.context.app.uploads = new Uploads(t.context.app); const request = _.extend({