diff --git a/.eslintrc.json b/.eslintrc.json index b9f18e8..3402098 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,6 +9,7 @@ "eslint-config-airbnb-base", "plugin:@typescript-eslint/recommended" ], + "plugins": ["@typescript-eslint"], "rules": { "lines-between-class-members": [ @@ -24,8 +25,17 @@ } ], "no-promise-executor-return": 1, + "import/extensions": "off", + "max-classes-per-file": "off", "no-shadow": "off", "no-underscore-dangle": "off", "@typescript-eslint/no-var-requires": "off" + }, + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".ts"] + } + } } } \ No newline at end of file diff --git a/package.json b/package.json index 75f4c49..c277991 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,10 @@ "version": "1.0.0", "scripts": { "build": "tsc", - "start": "node lib/app.js" + "start": "node lib/app.js", + "lint": "eslint src" }, "dependencies": { - "eslint": "^8.25.0", - "eslint-config-airbnb-base": "^15.0.0", "express": "^4.18.2", "figlet": "^1.5.2", "typescript": "^4.8.4" @@ -14,6 +13,9 @@ "devDependencies": { "@types/node": "^18.11.2", "@typescript-eslint/eslint-plugin": "^5.40.1", - "@typescript-eslint/parser": "^5.40.1" + "@typescript-eslint/parser": "^5.40.1", + "eslint": "^8.25.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.26.0" } } diff --git a/src/app.ts b/src/app.ts index 976a4a3..457ec4f 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,17 +1,17 @@ -import express from "express"; +import express from 'express'; -import figletontController from "./controllers/figletController"; -import modtFontController from "./controllers/motdController"; -import fontsController from "./controllers/fontsController"; -import requiredQueryMiddleware from "./requiredQueryMiddleware"; +import figletontController from './controllers/figletController'; +import modtFontController from './controllers/motdController'; +import fontsController from './controllers/fontsController'; +import requiredQueryMiddleware from './requiredQueryMiddleware'; const app = express(); const port = 3000; -app.get("/figlet", requiredQueryMiddleware, figletontController); -app.get("/motd", requiredQueryMiddleware, modtFontController); -app.get("/fonts", fontsController); +app.get('/figlet', requiredQueryMiddleware, figletontController); +app.get('/motd', requiredQueryMiddleware, modtFontController); +app.get('/fonts', fontsController); app.listen(port, () => { - console.log(`Figlet generation application listening on port ${port}.`); + console.log(`Figlet generation application listening on port ${port}.`); // eslint-disable-line no-console }); diff --git a/src/controllers/figletController.ts b/src/controllers/figletController.ts index 2585924..ce98f63 100644 --- a/src/controllers/figletController.ts +++ b/src/controllers/figletController.ts @@ -1,19 +1,19 @@ -import FigletFonts from "../figletFonts"; -import IFigletOptions from "../interfaces/IFigletOptions"; +import FigletFonts from '../figletFonts'; +import IFigletOptions from '../interfaces/IFigletOptions'; const figletFonts = new FigletFonts(); const figletTextController = async (req, res) => { const { text, font, width } = req.query; - let options: IFigletOptions | Object = {}; + let options: IFigletOptions; if (font) options = { ...options, font }; if (width) options = { ...options, width }; - - figletFonts.generateText(text, options as IFigletOptions) - .then(data => res.send(data)) + + figletFonts.generateText(text, options) + .then((data) => res.send(data)) .catch((error) => { - const msg = error?.message || "Unexpected error from generating figlet"; - res.status(error?.statusCode || 500).send(msg) + const msg = error?.message || 'Unexpected error from generating figlet'; + res.status(error?.statusCode || 500).send(msg); }); }; diff --git a/src/controllers/fontsController.ts b/src/controllers/fontsController.ts index 39db48e..40648dc 100644 --- a/src/controllers/fontsController.ts +++ b/src/controllers/fontsController.ts @@ -1,14 +1,12 @@ -import FigletFonts from "../figletFonts.js"; +import FigletFonts from '../figletFonts'; const figletFonts = new FigletFonts(); -const fontsController = (req, res) => { - return figletFonts.fonts - .then((fonts) => res.send(fonts)) - .catch((error) => { - const msg = error?.message || "Unexpected error from fetching fonts" - res.status(error?.statusCode || 500).send(msg) - }); -}; +const fontsController = (req, res) => figletFonts.fonts + .then((fonts) => res.send(fonts)) + .catch((error) => { + const msg = error?.message || 'Unexpected error from fetching fonts'; + res.status(error?.statusCode || 500).send(msg); + }); export default fontsController; diff --git a/src/controllers/motdController.ts b/src/controllers/motdController.ts index 62683eb..054f7c2 100644 --- a/src/controllers/motdController.ts +++ b/src/controllers/motdController.ts @@ -1,29 +1,29 @@ -import FigletFonts from "../figletFonts"; -import IFigletOptions from "../interfaces/IFigletOptions"; +import FigletFonts from '../figletFonts'; +import IFigletOptions from '../interfaces/IFigletOptions'; -const figletFonts = new FigletFonts() +const figletFonts = new FigletFonts(); function generateCatOutput(data: string) { return Promise.resolve(`#!/bin/sh cat << 'EOF' ${data} EOF - `) + `); } const modtFontController = (req, res) => { const { text, font, width } = req.query; - let options: IFigletOptions | Object = {}; + let options: IFigletOptions; if (font) options = { ...options, font }; if (width) options = { ...options, width }; - figletFonts.generateText(text, options as IFigletOptions) + figletFonts.generateText(text, options) .then((data) => generateCatOutput(data)) .then((motd) => res.send(motd)) .catch((error) => { - const msg = error?.message || "Unexpected error from generating motd figlet" - res.status(error?.statusCode || 500).send(msg) + const msg = error?.message || 'Unexpected error from generating motd figlet'; + res.status(error?.statusCode || 500).send(msg); }); }; -export default modtFontController; \ No newline at end of file +export default modtFontController; diff --git a/src/errors.ts b/src/errors.ts index aa11083..d02eb1a 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -1,9 +1,9 @@ class MissingTextError extends Error { - error: string - statusCode: number + error: string; + statusCode: number; constructor(error = null) { - const message = `Missing query parameter 'text'.`; + const message = 'Missing query parameter \'text\'.'; super(message); this.error = error; @@ -12,8 +12,8 @@ class MissingTextError extends Error { } class FontNotFoundError extends Error { - error: string - statusCode: number + error: string; + statusCode: number; constructor(font, error = null) { const message = `Font '${font}' not found. Check /fonts.`; @@ -25,23 +25,23 @@ class FontNotFoundError extends Error { } class UnexpectedFigletError extends Error { - error: string - statusCode: number + error: string; + statusCode: number; constructor(error) { - const message = "Unexpected error from figlet!" - super(message) + const message = 'Unexpected error from figlet!'; + super(message); this.error = error; - this.statusCode = 500 + this.statusCode = 500; - console.log(message) - console.log(error) + console.log(message); // eslint-disable-line no-console + console.log(error); // eslint-disable-line no-console } } export { MissingTextError, FontNotFoundError, - UnexpectedFigletError + UnexpectedFigletError, }; diff --git a/src/figletFonts.ts b/src/figletFonts.ts index 81b7db7..cab9052 100644 --- a/src/figletFonts.ts +++ b/src/figletFonts.ts @@ -1,25 +1,24 @@ -import figlet from "figlet"; -import IFigletOptions from "./interfaces/IFigletOptions"; -import { UnexpectedFigletError } from './errors' +import figlet from 'figlet'; +import IFigletOptions from './interfaces/IFigletOptions'; +import { UnexpectedFigletError } from './errors'; class FigletFonts { - cachedFonts: Array; - defaultFontOptions: IFigletOptions + defaultFontOptions: IFigletOptions; constructor() { this.cachedFonts = []; this.defaultFontOptions = { - font: "Larry 3D", - horizontalLayout: "default", - verticalLayout: "default", + font: 'Larry 3D', + horizontalLayout: 'default', + verticalLayout: 'default', width: 80, whitespaceBreak: true, }; } static sanitizeLarry(text: string) { - return text.replaceAll("L", "_"); + return text.replaceAll('L', '_'); } generateText(text: string, options: IFigletOptions): Promise { @@ -34,7 +33,7 @@ class FigletFonts { return reject(new UnexpectedFigletError(err)); } - resolve(data); + return resolve(data); }); }); } @@ -50,7 +49,7 @@ class FigletFonts { return reject(new UnexpectedFigletError(err)); } - resolve(fonts); + return resolve(fonts); }); }); } diff --git a/src/interfaces/IFigletOptions.ts b/src/interfaces/IFigletOptions.ts index 524c9d5..177d6b2 100644 --- a/src/interfaces/IFigletOptions.ts +++ b/src/interfaces/IFigletOptions.ts @@ -1,7 +1,9 @@ -export default interface IFigletOptions { - font: string - horizontalLayout: string - verticalLayout: string - width: number - whitespaceBreak: boolean -} \ No newline at end of file +interface IFigletOptions { + font: string; + width: number; + horizontalLayout?: string; + verticalLayout?: string; + whitespaceBreak?: boolean; +} + +export default IFigletOptions; diff --git a/src/requiredQueryMiddleware.ts b/src/requiredQueryMiddleware.ts index b0f776e..5eb37a3 100644 --- a/src/requiredQueryMiddleware.ts +++ b/src/requiredQueryMiddleware.ts @@ -1,17 +1,17 @@ -import FigletFonts from "./figletFonts"; -import { MissingTextError, FontNotFoundError } from "./errors"; +import FigletFonts from './figletFonts'; +import { MissingTextError, FontNotFoundError } from './errors'; const figletFonts = new FigletFonts(); async function doesFontExist(font: string) { const fontLowercased = font.toLowerCase(); - const fonts: Array = await figletFonts.fonts + const fonts: Array = await figletFonts.fonts; return fonts.findIndex((_font) => _font.toLowerCase() === fontLowercased) === -1; } const requiredQueryMiddleware = async (req, res, next) => { - const { text, font = "" } = req.query; + const { text, font = '' } = req.query; let error = null; if (!text || text?.length === 0) { @@ -24,7 +24,7 @@ const requiredQueryMiddleware = async (req, res, next) => { if (error) return res.status(error?.statusCode || 500).send(error?.message); - next(); + return next(); }; export default requiredQueryMiddleware; diff --git a/yarn.lock b/yarn.lock index 57b2254..6a707c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -62,6 +62,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/node@^18.11.2": version "18.11.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.2.tgz#c59b7641832531264fda3f1ba610362dc9a7dfc8" @@ -204,11 +209,32 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-includes@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -326,13 +352,20 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@2.6.9: +debug@2.6.9, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -370,6 +403,13 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -387,7 +427,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== @@ -417,6 +457,13 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -446,6 +493,40 @@ eslint-config-airbnb-base@^15.0.0: object.entries "^1.1.5" semver "^6.3.0" +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -910,6 +991,13 @@ is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -1009,6 +1097,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -1088,6 +1183,11 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1098,7 +1198,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -1142,6 +1242,15 @@ object.entries@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -1209,6 +1318,11 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -1288,6 +1402,15 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -1428,6 +1551,11 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -1440,6 +1568,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -1457,6 +1590,16 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"