diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..e738ad670 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,9 @@ +# Never lint node_modules +node_modules + +# We shouldn't lint assets nor generated files +generated + +**/__tests__/* +**/__mocks__/* +Dangerfile.* diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..6f8422539 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,29 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "node": true + }, + "ignorePatterns": [ + "node_modules", + "generated", + "**/__tests__/*", + "**/__mocks__/*", + "Dangerfile.*", + "*.d.ts" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "extends": [ + "@pagopa/eslint-config/strong", + ], + "rules": { + "prefer-arrow/prefer-arrow-functions": "off", + "@typescript-eslint/naming-convention": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "no-invalid-this": "off" + } +}; diff --git a/.gitignore b/.gitignore index 4f086fd0c..0a9faef27 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ npm-debug.log # Exclude typescript generated javascript files. *.js +!.eslintrc.js !.release-it.js *.js.map @@ -44,3 +45,6 @@ local.* # Exclude Codetour plugin folder .tours + +# Exclude ESLint cache file +.eslintcache diff --git a/package.json b/package.json index e2b431df7..380fcc38f 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "build": "tsc", "build-noemit": "tsc --noEmit", "hot-reload": "nodemon --legacy-watch --watch ./src --inspect=0.0.0.0:5859 --nolazy src/server.js", - "lint": "tslint -p . -c tslint.json -t verbose", - "lint-autofix": "tslint -p . -c tslint.json -t verbose --fix", + "lint": "eslint . -c .eslintrc.js --ext .ts,.tsx --cache", + "lint-autofix": "eslint . -c .eslintrc.js --ext .ts,.tsx --fix", "prettify": "prettier --write \"./**/*.ts\"", "test": "jest -i", "test:coverage": "dotenv -e .env.example -- jest -i --coverage", @@ -89,6 +89,7 @@ "xmldom": "^0.1.27" }, "devDependencies": { + "@pagopa/eslint-config": "^1.1.1", "@types/apicache": "^1.2.0", "@types/dotenv": "^4.0.2", "@types/express": "4.16.0", @@ -119,7 +120,7 @@ "danger": "^4.0.2", "danger-plugin-digitalcitizenship": "^0.3.1", "dotenv-cli": "^3.1.0", - "italia-tslint-rules": "^1.1.3", + "eslint-plugin-prettier": "^3.3.1", "italia-utils": "^6.3.0", "jest": "^23.6.0", "lolex": "4.2.0", @@ -136,7 +137,6 @@ "swagger-parser": "^5.0.5", "ts-jest": "^23.10.4", "ts-node": "^7.0.1", - "tslint": "^5.11.0", "typescript": "^3.6.2" }, "jest": { diff --git a/src/@types/passport-auth-token/index.d.ts b/src/@types/passport-auth-token/index.d.ts index d19503205..95e57bfbf 100644 --- a/src/@types/passport-auth-token/index.d.ts +++ b/src/@types/passport-auth-token/index.d.ts @@ -14,7 +14,6 @@ interface IVerifyOptions { type VerifyFunction = ( token: string, - // tslint:disable-next-line:no-any done: (error: any, user?: any, options?: IVerifyOptions) => void ) => void; diff --git a/src/__mocks__/request.ts b/src/__mocks__/request.ts index e46615d4a..991cd2a50 100644 --- a/src/__mocks__/request.ts +++ b/src/__mocks__/request.ts @@ -1,5 +1,3 @@ -// tslint:disable:no-any - /** * mockReq * @returns {{header, accepts, acceptsEncodings, acceptsEncoding, acceptsCharsets, acceptsCharset, acceptsLanguages, acceptsLanguage, range, param, is, reset: resetMock}} diff --git a/src/__mocks__/response.ts b/src/__mocks__/response.ts index 3d8787d84..d32b79a9d 100644 --- a/src/__mocks__/response.ts +++ b/src/__mocks__/response.ts @@ -1,5 +1,3 @@ -// tslint:disable:no-any - /** * mockRes * @returns {{append, attachment, cookie, clearCookie, download, end, format, get, json, jsonp, links, location, redirect, render, send, sendFile, sendStatus, set, status, type, vary, reset: resetMock}} diff --git a/src/app.ts b/src/app.ts index 8fbf85d9a..4473ed675 100644 --- a/src/app.ts +++ b/src/app.ts @@ -2,33 +2,6 @@ * Main entry point for the Digital Citizenship proxy. */ -import { - API_CLIENT, - appConfig, - BONUS_API_CLIENT, - CACHE_MAX_AGE_SECONDS, - ENABLE_NOTICE_EMAIL_CACHE, - ENV, - FF_BONUS_ENABLED, - getClientProfileRedirectionUrl, - IDP_METADATA_REFRESH_INTERVAL_SECONDS, - NOTIFICATION_DEFAULT_SUBJECT, - NOTIFICATION_DEFAULT_TITLE, - NOTIFICATIONS_QUEUE_NAME, - NOTIFICATIONS_STORAGE_CONNECTION_STRING, - PAGOPA_CLIENT, - samlConfig, - serviceProviderConfig, - SPID_LOG_QUEUE_NAME, - SPID_LOG_STORAGE_CONNECTION_STRING, - TEST_LOGIN_FISCAL_CODES, - TEST_LOGIN_PASSWORD, - tokenDurationSecs, - URL_TOKEN_STRATEGY, - USERS_LOGIN_QUEUE_NAME, - USERS_LOGIN_STORAGE_CONNECTION_STRING -} from "./config"; - import * as apicache from "apicache"; import * as bodyParser from "body-parser"; import * as express from "express"; @@ -43,8 +16,16 @@ import { NodeEnvironmentEnum } from "italia-ts-commons/lib/environment"; import { CIDR } from "italia-ts-commons/lib/strings"; +import { QueueClient } from "@azure/storage-queue"; +import { withSpid } from "@pagopa/io-spid-commons"; +import { getSpidStrategyOption } from "@pagopa/io-spid-commons/dist/utils/middleware"; +import * as appInsights from "applicationinsights"; +import { tryCatch2v } from "fp-ts/lib/Either"; +import { isEmpty, StrMap } from "fp-ts/lib/StrMap"; +import { fromLeft, taskEither, tryCatch } from "fp-ts/lib/TaskEither"; import { ServerInfo } from "../generated/public/ServerInfo"; +import { VersionPerPlatform } from "../generated/public/VersionPerPlatform"; import AuthenticationController from "./controllers/authenticationController"; import MessagesController from "./controllers/messagesController"; import NotificationController from "./controllers/notificationController"; @@ -58,14 +39,32 @@ import UserMetadataController from "./controllers/userMetadataController"; import { log } from "./utils/logger"; import checkIP from "./utils/middleware/checkIP"; -import { QueueClient } from "@azure/storage-queue"; -import { withSpid } from "@pagopa/io-spid-commons"; -import { getSpidStrategyOption } from "@pagopa/io-spid-commons/dist/utils/middleware"; -import * as appInsights from "applicationinsights"; -import { tryCatch2v } from "fp-ts/lib/Either"; -import { isEmpty, StrMap } from "fp-ts/lib/StrMap"; -import { fromLeft, taskEither, tryCatch } from "fp-ts/lib/TaskEither"; -import { VersionPerPlatform } from "../generated/public/VersionPerPlatform"; +import { + API_CLIENT, + appConfig, + BONUS_API_CLIENT, + CACHE_MAX_AGE_SECONDS, + ENABLE_NOTICE_EMAIL_CACHE, + ENV, + FF_BONUS_ENABLED, + getClientProfileRedirectionUrl, + IDP_METADATA_REFRESH_INTERVAL_SECONDS, + NOTIFICATION_DEFAULT_SUBJECT, + NOTIFICATION_DEFAULT_TITLE, + NOTIFICATIONS_QUEUE_NAME, + NOTIFICATIONS_STORAGE_CONNECTION_STRING, + PAGOPA_CLIENT, + samlConfig, + serviceProviderConfig, + SPID_LOG_QUEUE_NAME, + SPID_LOG_STORAGE_CONNECTION_STRING, + TEST_LOGIN_FISCAL_CODES, + TEST_LOGIN_PASSWORD, + tokenDurationSecs, + URL_TOKEN_STRATEGY, + USERS_LOGIN_QUEUE_NAME, + USERS_LOGIN_STORAGE_CONNECTION_STRING +} from "./config"; import BonusController from "./controllers/bonusController"; import SessionLockController from "./controllers/sessionLockController"; import { getUserForBPD, getUserForMyPortal } from "./controllers/ssoController"; @@ -108,6 +107,7 @@ import { makeSpidLogCallback } from "./utils/spid"; import { TimeTracer } from "./utils/timer"; const defaultModule = { + // eslint-disable-next-line @typescript-eslint/no-use-before-define newApp }; @@ -124,22 +124,22 @@ const cachingMiddleware = apicache.options({ }).middleware; export interface IAppFactoryParameters { - env: NodeEnvironment; - appInsightsClient?: appInsights.TelemetryClient; - allowNotifyIPSourceRange: readonly CIDR[]; - allowPagoPAIPSourceRange: readonly CIDR[]; - allowMyPortalIPSourceRange: readonly CIDR[]; - allowBPDIPSourceRange: readonly CIDR[]; - allowSessionHandleIPSourceRange: readonly CIDR[]; - authenticationBasePath: string; - APIBasePath: string; - BonusAPIBasePath: string; - PagoPABasePath: string; - MyPortalBasePath: string; - BPDBasePath: string; + readonly env: NodeEnvironment; + readonly appInsightsClient?: appInsights.TelemetryClient; + readonly allowNotifyIPSourceRange: ReadonlyArray; + readonly allowPagoPAIPSourceRange: ReadonlyArray; + readonly allowMyPortalIPSourceRange: ReadonlyArray; + readonly allowBPDIPSourceRange: ReadonlyArray; + readonly allowSessionHandleIPSourceRange: ReadonlyArray; + readonly authenticationBasePath: string; + readonly APIBasePath: string; + readonly BonusAPIBasePath: string; + readonly PagoPABasePath: string; + readonly MyPortalBasePath: string; + readonly BPDBasePath: string; } -// tslint:disable-next-line: no-big-function +// eslint-disable-next-line max-lines-per-function export function newApp({ env, allowNotifyIPSourceRange, @@ -171,7 +171,6 @@ export function newApp({ // Setup Passport. // Add the strategy to authenticate proxy clients. passport.use( - // tslint:disable-next-line: no-duplicate-string "bearer.session", bearerSessionTokenStrategy(SESSION_STORAGE, attachTrackingData) ); @@ -298,12 +297,11 @@ export function newApp({ // Create the Notification Service const ERROR_OR_NOTIFICATION_SERVICE = tryCatch2v( - () => { - return new NotificationService( + () => + new NotificationService( NOTIFICATIONS_STORAGE_CONNECTION_STRING, NOTIFICATIONS_QUEUE_NAME - ); - }, + ), err => { throw new Error(`Error initializing Notification Service: [${err}]`); } @@ -313,12 +311,11 @@ export function newApp({ // Create the UsersLoginLogService const ERROR_OR_USERS_LOGIN_LOG_SERVICE = tryCatch2v( - () => { - return new UsersLoginLogService( + () => + new UsersLoginLogService( USERS_LOGIN_STORAGE_CONNECTION_STRING, USERS_LOGIN_QUEUE_NAME - ); - }, + ), err => { throw new Error(`Error initializing UsersLoginLogService: [${err}]`); } @@ -336,8 +333,10 @@ export function newApp({ TEST_LOGIN_FISCAL_CODES ); + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerPublicRoutes(app); + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerAuthenticationRoutes( app, authenticationBasePath, @@ -350,6 +349,7 @@ export function newApp({ const PAGOPA_PROXY_SERVICE = new PagoPAProxyService(PAGOPA_CLIENT); // Register the user metadata storage service. const USER_METADATA_STORAGE = new RedisUserMetadataStorage(REDIS_CLIENT); + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerAPIRoutes( app, APIBasePath, @@ -365,6 +365,7 @@ export function newApp({ TOKEN_SERVICE, authMiddlewares.bearerSession ); + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerSessionAPIRoutes( app, APIBasePath, @@ -374,6 +375,7 @@ export function newApp({ USER_METADATA_STORAGE ); if (FF_BONUS_ENABLED) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerBonusAPIRoutes( app, BonusAPIBasePath, @@ -381,6 +383,7 @@ export function newApp({ authMiddlewares.bearerSession ); } + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerPagoPARoutes( app, PagoPABasePath, @@ -390,19 +393,21 @@ export function newApp({ ENABLE_NOTICE_EMAIL_CACHE, authMiddlewares.bearerWallet ); + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerMyPortalRoutes( app, MyPortalBasePath, allowMyPortalIPSourceRange, authMiddlewares.bearerMyPortal ); + // eslint-disable-next-line @typescript-eslint/no-use-before-define registerBPDRoutes( app, BPDBasePath, allowBPDIPSourceRange, authMiddlewares.bearerBPD ); - return { app, acsController }; + return { acsController, app }; }, err => new Error(`Error on app routes setup: [${err}]`) ) @@ -495,14 +500,15 @@ export function newApp({ .run(); } +// eslint-disable-next-line max-params function registerPagoPARoutes( app: Express, basePath: string, - allowPagoPAIPSourceRange: readonly CIDR[], + allowPagoPAIPSourceRange: ReadonlyArray, profileService: ProfileService, sessionStorage: RedisSessionStorage, enableNoticeEmailCache: boolean, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any bearerWalletTokenAuth: any ): void { const pagopaController: PagoPAController = new PagoPAController( @@ -522,8 +528,8 @@ function registerPagoPARoutes( function registerMyPortalRoutes( app: Express, basePath: string, - allowMyPortalIPSourceRange: readonly CIDR[], - // tslint:disable-next-line: no-any + allowMyPortalIPSourceRange: ReadonlyArray, + // eslint-disable-next-line @typescript-eslint/no-explicit-any bearerMyPortalTokenAuth: any ): void { app.get( @@ -537,8 +543,8 @@ function registerMyPortalRoutes( function registerBPDRoutes( app: Express, basePath: string, - allowBPDIPSourceRange: readonly CIDR[], - // tslint:disable-next-line: no-any + allowBPDIPSourceRange: ReadonlyArray, + // eslint-disable-next-line @typescript-eslint/no-explicit-any bearerBPDTokenAuth: any ): void { app.get( @@ -549,12 +555,12 @@ function registerBPDRoutes( ); } -// tslint:disable-next-line: parameters-max-number +// eslint-disable-next-line max-params, max-lines-per-function function registerAPIRoutes( app: Express, basePath: string, - allowNotifyIPSourceRange: readonly CIDR[], - // tslint:disable-next-line: no-any + allowNotifyIPSourceRange: ReadonlyArray, + // eslint-disable-next-line @typescript-eslint/no-explicit-any urlTokenAuth: any, profileService: ProfileService, messagesService: MessagesService, @@ -564,7 +570,7 @@ function registerAPIRoutes( userMetadataStorage: RedisUserMetadataStorage, userDataProcessingService: UserDataProcessingService, tokenService: TokenService, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any bearerSessionTokenAuth: any ): void { const profileController: ProfileController = new ProfileController( @@ -767,12 +773,12 @@ function registerAPIRoutes( ); } -// tslint:disable-next-line: parameters-max-number +// eslint-disable-next-line max-params function registerSessionAPIRoutes( app: Express, basePath: string, - allowSessionHandleIPSourceRange: readonly CIDR[], - // tslint:disable-next-line: no-any + allowSessionHandleIPSourceRange: ReadonlyArray, + // eslint-disable-next-line @typescript-eslint/no-explicit-any urlTokenAuth: any, sessionStorage: RedisSessionStorage, userMetadataStorage: RedisUserMetadataStorage @@ -807,7 +813,7 @@ function registerBonusAPIRoutes( app: Express, basePath: string, bonusService: BonusService, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any bearerSessionTokenAuth: any ): void { const bonusController: BonusController = new BonusController(bonusService); @@ -850,9 +856,9 @@ function registerAuthenticationRoutes( app: Express, authBasePath: string, acsController: AuthenticationController, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any bearerSessionTokenAuth: any, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any localAuth: any ): void { TEST_LOGIN_PASSWORD.map(testLoginPassword => { diff --git a/src/clients/api.ts b/src/clients/api.ts index ee8c7208e..56b48ceb7 100644 --- a/src/clients/api.ts +++ b/src/clients/api.ts @@ -4,8 +4,7 @@ import { Client, createClient } from "../../generated/io-api/client"; export function APIClient( baseUrl: string, token: string, - // tslint:disable-next-line:no-any - fetchApi: typeof fetch = (nodeFetch as any) as typeof fetch // TODO: customize fetch with timeout + fetchApi: typeof fetch = (nodeFetch as unknown) as typeof fetch // TODO: customize fetch with timeout ): Client<"SubscriptionKey"> { return createClient<"SubscriptionKey">({ basePath: "", diff --git a/src/clients/bonus.ts b/src/clients/bonus.ts index b435e2531..c6e5290e1 100644 --- a/src/clients/bonus.ts +++ b/src/clients/bonus.ts @@ -4,8 +4,7 @@ import { Client, createClient } from "../../generated/io-bonus-api/client"; export function BonusAPIClient( token: string, baseUrl: string, - // tslint:disable-next-line:no-any - fetchApi: typeof fetch = (nodeFetch as any) as typeof fetch + fetchApi: typeof fetch = (nodeFetch as unknown) as typeof fetch ): Client<"ApiKey"> { return createClient<"ApiKey">({ basePath: "", diff --git a/src/clients/pagopa.ts b/src/clients/pagopa.ts index ad38d5a82..d0d14cd7a 100644 --- a/src/clients/pagopa.ts +++ b/src/clients/pagopa.ts @@ -3,8 +3,7 @@ import { Client, createClient } from "../../generated/pagopa-proxy/client"; export function PagoPAClient( baseUrl: string, - // tslint:disable-next-line:no-any - fetchApi: typeof fetch = (nodeFetch as any) as typeof fetch + fetchApi: typeof fetch = (nodeFetch as unknown) as typeof fetch ): Client { return createClient({ basePath: "", diff --git a/src/config.ts b/src/config.ts index 5f5813d2a..06e237f60 100644 --- a/src/config.ts +++ b/src/config.ts @@ -18,15 +18,6 @@ import { } from "italia-ts-commons/lib/reporters"; import { UrlFromString } from "italia-ts-commons/lib/url"; -import { BonusAPIClient } from "./clients/bonus"; -import ApiClientFactory from "./services/apiClientFactory"; -import PagoPAClientFactory from "./services/pagoPAClientFactory"; - -import urlTokenStrategy from "./strategies/urlTokenStrategy"; - -import { getRequiredENVVar, readFile } from "./utils/container"; -import { log } from "./utils/logger"; - import { IApplicationConfig, IServiceProviderConfig, @@ -43,6 +34,12 @@ import { IntegerFromString } from "italia-ts-commons/lib/numbers"; import { NonEmptyString } from "italia-ts-commons/lib/strings"; import { FiscalCode } from "italia-ts-commons/lib/strings"; import { Millisecond, Second } from "italia-ts-commons/lib/units"; +import { log } from "./utils/logger"; +import urlTokenStrategy from "./strategies/urlTokenStrategy"; +import { getRequiredENVVar, readFile } from "./utils/container"; +import PagoPAClientFactory from "./services/pagoPAClientFactory"; +import ApiClientFactory from "./services/apiClientFactory"; +import { BonusAPIClient } from "./clients/bonus"; import { STRINGS_RECORD } from "./types/commons"; import { SpidLevelArray } from "./types/spidLevel"; import { decodeCIDRs } from "./utils/cidrs"; @@ -74,22 +71,20 @@ export const ENABLE_NOTICE_EMAIL_CACHE: boolean = fromNullable( .getOrElse(false); // Private key used in SAML authentication to a SPID IDP. -const samlKey = () => { - return fromNullable(process.env.SAML_KEY).getOrElseL(() => +const samlKey = () => + fromNullable(process.env.SAML_KEY).getOrElseL(() => readFile(process.env.SAML_KEY_PATH || "./certs/key.pem", "SAML private key") ); -}; export const SAML_KEY = samlKey(); // Public certificate used in SAML authentication to a SPID IDP. -const samlCert = () => { - return fromNullable(process.env.SAML_CERT).getOrElseL(() => +const samlCert = () => + fromNullable(process.env.SAML_CERT).getOrElseL(() => readFile( process.env.SAML_CERT_PATH || "./certs/cert.pem", "SAML certificate" ) ); -}; export const SAML_CERT = samlCert(); diff --git a/src/controllers/__tests__/notificationController.test.ts b/src/controllers/__tests__/notificationController.test.ts index e32410420..4fbdfdb46 100644 --- a/src/controllers/__tests__/notificationController.test.ts +++ b/src/controllers/__tests__/notificationController.test.ts @@ -19,7 +19,7 @@ import { User } from "../../types/user"; import NotificationController from "../notificationController"; import { right } from "fp-ts/lib/Either"; -import { MessageSubject } from "generated/notifications/MessageSubject"; +import { MessageSubject } from "../../../generated/notifications/MessageSubject"; import * as redis from "redis"; const aTimestamp = 1518010929530; diff --git a/src/controllers/authenticationController.ts b/src/controllers/authenticationController.ts index 9b4bcfd0c..79915e426 100644 --- a/src/controllers/authenticationController.ts +++ b/src/controllers/authenticationController.ts @@ -62,6 +62,7 @@ export const SESSION_TOKEN_LENGTH_BYTES = 48; const SESSION_ID_LENGTH_BYTES = 32; export default class AuthenticationController { + // eslint-disable-next-line max-params constructor( private readonly sessionStorage: ISessionStorage, private readonly tokenService: TokenService, @@ -80,7 +81,6 @@ export default class AuthenticationController { public async acs( userPayload: unknown ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorForbiddenNotAuthorized @@ -253,7 +253,6 @@ export default class AuthenticationController { public async acsTest( userPayload: unknown ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorForbiddenNotAuthorized @@ -338,8 +337,8 @@ export default class AuthenticationController { | IResponseErrorInternal | IResponseSuccessJson > => - withUserFromRequest(req, async user => { - return UserIdentity.decode(user).fold< + withUserFromRequest(req, async user => + UserIdentity.decode(user).fold< IResponseErrorInternal | IResponseSuccessJson >( _ => ResponseErrorInternal("Unexpected User Identity data format."), @@ -350,6 +349,6 @@ export default class AuthenticationController { _1 => ResponseErrorInternal("Exact decode failed."), _1 => ResponseSuccessJson(_1) ) - ); - }); + ) + ); } diff --git a/src/controllers/bonusController.ts b/src/controllers/bonusController.ts index 6cefacb41..5220a5e4a 100644 --- a/src/controllers/bonusController.ts +++ b/src/controllers/bonusController.ts @@ -42,7 +42,6 @@ export default class BonusController { public readonly getBonusEligibilityCheck = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorNotFound | IResponseErrorInternal @@ -62,7 +61,6 @@ export default class BonusController { public readonly getLatestBonusActivationById = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorNotFound | IResponseErrorInternal @@ -82,7 +80,6 @@ export default class BonusController { public readonly getAllBonusActivations = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorInternal | IResponseSuccessJson diff --git a/src/controllers/messagesController.ts b/src/controllers/messagesController.ts index b215b5123..36d1804b9 100644 --- a/src/controllers/messagesController.ts +++ b/src/controllers/messagesController.ts @@ -12,10 +12,10 @@ import { IResponseSuccessJson } from "italia-ts-commons/lib/responses"; +import { CreatedMessageWithContentAndAttachments } from "generated/backend/CreatedMessageWithContentAndAttachments"; import MessagesService from "../services/messagesService"; import { withUserFromRequest } from "../types/user"; -import { CreatedMessageWithContentAndAttachments } from "generated/backend/CreatedMessageWithContentAndAttachments"; import { PaginatedCreatedMessageWithoutContentCollection } from "../../generated/backend/PaginatedCreatedMessageWithoutContentCollection"; export default class MessagesController { @@ -27,7 +27,6 @@ export default class MessagesController { public readonly getMessagesByUser = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound @@ -41,7 +40,6 @@ export default class MessagesController { public readonly getMessage = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound diff --git a/src/controllers/notificationController.ts b/src/controllers/notificationController.ts index 9c3691ae6..340cb6bc3 100644 --- a/src/controllers/notificationController.ts +++ b/src/controllers/notificationController.ts @@ -10,14 +10,14 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; +import { toError } from "fp-ts/lib/Either"; +import { fromEither, tryCatch } from "fp-ts/lib/TaskEither"; import { Installation } from "../../generated/backend/Installation"; import { InstallationID } from "../../generated/backend/InstallationID"; import { Notification } from "../../generated/notifications/Notification"; import { SuccessResponse } from "../../generated/notifications/SuccessResponse"; -import { toError } from "fp-ts/lib/Either"; -import { fromEither, tryCatch } from "fp-ts/lib/TaskEither"; import NotificationService from "../services/notificationService"; import RedisSessionStorage from "../services/redisSessionStorage"; import { withUserFromRequest } from "../types/user"; @@ -28,8 +28,8 @@ import { } from "../utils/responses"; export interface INotificationControllerOptions { - notificationDefaultSubject: string; - notificationDefaultTitle: string; + readonly notificationDefaultSubject: string; + readonly notificationDefaultTitle: string; } export default class NotificationController { diff --git a/src/controllers/pagoPAController.ts b/src/controllers/pagoPAController.ts index 5544a5674..300157772 100644 --- a/src/controllers/pagoPAController.ts +++ b/src/controllers/pagoPAController.ts @@ -32,7 +32,7 @@ const VALIDATION_ERROR_TITLE = "Validation Error"; export default class PagoPAController { constructor( - readonly profileService: ProfileService, + private readonly profileService: ProfileService, private readonly sessionStorage: ISessionStorage, private readonly enableNoticeEmailCache: boolean ) {} @@ -43,7 +43,6 @@ export default class PagoPAController { public readonly getUser = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorNotFound | IResponseErrorInternal diff --git a/src/controllers/pagoPAProxyController.ts b/src/controllers/pagoPAProxyController.ts index 45bda8346..fb044c822 100644 --- a/src/controllers/pagoPAProxyController.ts +++ b/src/controllers/pagoPAProxyController.ts @@ -29,22 +29,20 @@ export default class PagoPAProxyController { public readonly getPaymentInfo = async ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseSuccessJson > => - withValidatedOrInternalError(t.string.decode(req.params.rptId), rptId => { - return this.pagoPAProxyService.getPaymentInfo( + withValidatedOrInternalError(t.string.decode(req.params.rptId), rptId => + this.pagoPAProxyService.getPaymentInfo( rptId, parsePagopaTestParam(req.query.test) - ); - }); + ) + ); public readonly activatePayment = async ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound @@ -52,18 +50,16 @@ export default class PagoPAProxyController { > => withValidatedOrInternalError( PaymentActivationsPostRequest.decode(req.body), - paymentActivationsPostRequest => { - return this.pagoPAProxyService.activatePayment( + paymentActivationsPostRequest => + this.pagoPAProxyService.activatePayment( paymentActivationsPostRequest, parsePagopaTestParam(req.query.test) - ); - } + ) ); public readonly getActivationStatus = async ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound @@ -71,11 +67,10 @@ export default class PagoPAProxyController { > => withValidatedOrInternalError( t.string.decode(req.params.codiceContestoPagamento), - codiceContestoPagamento => { - return this.pagoPAProxyService.getActivationStatus( + codiceContestoPagamento => + this.pagoPAProxyService.getActivationStatus( codiceContestoPagamento, parsePagopaTestParam(req.query.test) - ); - } + ) ); } diff --git a/src/controllers/profileController.ts b/src/controllers/profileController.ts index 55b0ccc0b..648405b35 100644 --- a/src/controllers/profileController.ts +++ b/src/controllers/profileController.ts @@ -37,7 +37,6 @@ export default class ProfileController { public readonly getProfile = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorInternal | IResponseErrorTooManyRequests @@ -57,7 +56,6 @@ export default class ProfileController { public readonly getApiProfile = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorInternal | IResponseErrorTooManyRequests @@ -73,7 +71,6 @@ export default class ProfileController { public readonly updateProfile = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorNotFound | IResponseErrorInternal @@ -97,7 +94,6 @@ export default class ProfileController { public readonly startEmailValidationProcess = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorNotFound | IResponseErrorInternal diff --git a/src/controllers/servicesController.ts b/src/controllers/servicesController.ts index 59775ca63..740788bfd 100644 --- a/src/controllers/servicesController.ts +++ b/src/controllers/servicesController.ts @@ -27,7 +27,6 @@ export default class ServicesController { public readonly getService = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound diff --git a/src/controllers/sessionController.ts b/src/controllers/sessionController.ts index 342eb10a5..1c1a405a7 100644 --- a/src/controllers/sessionController.ts +++ b/src/controllers/sessionController.ts @@ -11,17 +11,16 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; -import { PublicSession } from "../../generated/backend/PublicSession"; -import { SessionsList } from "../../generated/backend/SessionsList"; - import { isLeft } from "fp-ts/lib/Either"; import TokenService from "src/services/tokenService"; import { BPDToken, MyPortalToken } from "src/types/token"; +import { SessionsList } from "../../generated/backend/SessionsList"; +import { PublicSession } from "../../generated/backend/PublicSession"; import RedisSessionStorage from "../services/redisSessionStorage"; import { UserV2, UserV3, withUserFromRequest } from "../types/user"; -import { SESSION_TOKEN_LENGTH_BYTES } from "./authenticationController"; import { log } from "../utils/logger"; +import { SESSION_TOKEN_LENGTH_BYTES } from "./authenticationController"; export default class SessionController { constructor( diff --git a/src/controllers/sessionLockController.ts b/src/controllers/sessionLockController.ts index ae3e39447..b0864f19b 100644 --- a/src/controllers/sessionLockController.ts +++ b/src/controllers/sessionLockController.ts @@ -30,6 +30,7 @@ export default class SessionLockController { /** * Lock a user account and clear all its session data + * * @param req expects fiscal_code as a path param * * @returns a promise with the encoded response object @@ -40,8 +41,8 @@ export default class SessionLockController { | IResponseErrorInternal | IResponseErrorValidation | IResponseSuccessJson - > => { - return taskEither + > => + taskEither .of(void 0) .chain(_ => fromEither( @@ -74,10 +75,10 @@ export default class SessionLockController { | IResponseSuccessJson >(identity, _ => ResponseSuccessJson({ message: "ok" })) .run(); - }; /** * Unlock a user account + * * @param req expects fiscal_code as a path param * * @returns a promise with the encoded response object @@ -88,9 +89,10 @@ export default class SessionLockController { | IResponseErrorInternal | IResponseErrorValidation | IResponseSuccessJson - > => { - return taskEither + > => + taskEither .of(void 0) + // eslint-disable-next-line sonarjs/no-identical-functions .chain(_ => fromEither( FiscalCode.decode(req.params.fiscal_code).mapLeft(err => @@ -113,5 +115,4 @@ export default class SessionLockController { | IResponseSuccessJson >(identity, _ => ResponseSuccessJson({ message: "ok" })) .run(); - }; } diff --git a/src/controllers/supportController.ts b/src/controllers/supportController.ts index 5d721bd26..8b459404a 100644 --- a/src/controllers/supportController.ts +++ b/src/controllers/supportController.ts @@ -29,8 +29,8 @@ export default class SupportController { | IResponseErrorValidation | IResponseSuccessJson > => - withUserFromRequest(req, async user => { - return this.tokenService + withUserFromRequest(req, async user => + this.tokenService .getJwtSupportToken( JWT_SUPPORT_TOKEN_PRIVATE_RSA_KEY, user.fiscal_code, @@ -47,6 +47,6 @@ export default class SupportController { e => ResponseErrorInternal(e.message), ResponseSuccessJson ) - .run(); - }); + .run() + ); } diff --git a/src/controllers/userDataProcessingController.ts b/src/controllers/userDataProcessingController.ts index 824d4f199..a2132903c 100644 --- a/src/controllers/userDataProcessingController.ts +++ b/src/controllers/userDataProcessingController.ts @@ -33,7 +33,6 @@ export default class UserDataProcessingController { public readonly upsertUserDataProcessing = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorInternal | IResponseErrorTooManyRequests @@ -58,7 +57,6 @@ export default class UserDataProcessingController { public readonly getUserDataProcessing = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorValidation | IResponseErrorNotFound | IResponseErrorInternal @@ -82,7 +80,6 @@ export default class UserDataProcessingController { public readonly abortUserDataProcessing = ( req: express.Request ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound diff --git a/src/controllers/userMetadataController.ts b/src/controllers/userMetadataController.ts index 15015b54f..d169018f1 100644 --- a/src/controllers/userMetadataController.ts +++ b/src/controllers/userMetadataController.ts @@ -14,9 +14,9 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; +import { isLeft } from "fp-ts/lib/Either"; import { IResponseNoContent, ResponseNoContent } from "../utils/responses"; -import { isLeft } from "fp-ts/lib/Either"; import { UserMetadata } from "../../generated/backend/UserMetadata"; import { IUserMetadataStorage } from "../services/IUserMetadataStorage"; import { @@ -35,7 +35,6 @@ export default class UserMetadataController { public readonly getMetadata = ( req: express.Request ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorValidation | IResponseErrorInternal | IResponseNoContent @@ -61,7 +60,6 @@ export default class UserMetadataController { public readonly upsertMetadata = ( req: express.Request ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorConflict | IResponseErrorValidation | IResponseErrorInternal diff --git a/src/server.ts b/src/server.ts index df87f71ac..559de5353 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,10 +1,10 @@ /** * Main entry point for the Digital Citizenship proxy. */ -import * as appInsights from "applicationinsights"; -import { fromNullable } from "fp-ts/lib/Option"; import * as http from "http"; import * as https from "https"; +import * as appInsights from "applicationinsights"; +import { fromNullable } from "fp-ts/lib/Option"; import { NodeEnvironmentEnum } from "italia-ts-commons/lib/environment"; import { newApp } from "./app"; import { @@ -54,7 +54,7 @@ const shutdownTimeout: number = process.env.DEFAULT_SHUTDOWN_TIMEOUT_MILLIS ? parseInt(process.env.DEFAULT_SHUTDOWN_TIMEOUT_MILLIS, 10) : DEFAULT_SHUTDOWN_TIMEOUT_MILLIS; -// tslint:disable-next-line: no-let +// eslint-disable-next-line functional/no-let let server: http.Server | https.Server; const timer = TimeTracer(); @@ -63,6 +63,7 @@ const timer = TimeTracer(); * WARNING: When the key is provided several information are collected automatically * and sent to App Insights. * To see what kind of informations are automatically collected + * * @see: utils/appinsights.js into the class AppInsightsClientBuilder */ const maybeAppInsightsClient = fromNullable( @@ -98,7 +99,7 @@ newApp({ // Kubernetes so the proxy has to run on HTTPS to behave correctly. if (ENV === NodeEnvironmentEnum.DEVELOPMENT) { log.info("Starting HTTPS server on port %d", SERVER_PORT); - const options = { key: SAML_KEY, cert: SAML_CERT }; + const options = { cert: SAML_CERT, key: SAML_KEY }; server = https.createServer(options, app).listen(443, () => { log.info("Listening on port 443"); log.info(`Startup time: %sms`, startupTimeMs.toString()); diff --git a/src/services/IPagoPAClientFactory.ts b/src/services/IPagoPAClientFactory.ts index 5494c67a5..214c7941b 100644 --- a/src/services/IPagoPAClientFactory.ts +++ b/src/services/IPagoPAClientFactory.ts @@ -3,6 +3,11 @@ */ import { PagoPAClient } from "../clients/pagopa"; +export enum PagoPAEnvironment { + PRODUCTION = "PRODUCTION", + TEST = "TEST" +} + export interface IPagoPAClientFactoryInterface { /** * Retrieves a configured instance of the API client. @@ -11,8 +16,3 @@ export interface IPagoPAClientFactoryInterface { environment: PagoPAEnvironment ) => ReturnType; } - -export enum PagoPAEnvironment { - PRODUCTION = "PRODUCTION", - TEST = "TEST" -} diff --git a/src/services/apiClientFactory.ts b/src/services/apiClientFactory.ts index fabc8f965..adc9acb49 100644 --- a/src/services/apiClientFactory.ts +++ b/src/services/apiClientFactory.ts @@ -9,12 +9,12 @@ import { IApiClientFactoryInterface } from "./IApiClientFactory"; // TODO: this class is actually useless as APIClient is immutable, it can be removed export default class ApiClientFactory implements IApiClientFactoryInterface { - private apiClient!: ReturnType; + private readonly apiClient!: ReturnType; constructor( apiKey: string, apiUrl: string, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any fetchApi: typeof fetch = nodeFetch as any ) { this.apiClient = APIClient(apiUrl, apiKey, fetchApi); diff --git a/src/services/bonusService.ts b/src/services/bonusService.ts index fdb96b0ca..014ade1fe 100644 --- a/src/services/bonusService.ts +++ b/src/services/bonusService.ts @@ -16,12 +16,13 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; -import { EligibilityCheck } from "../../generated/io-bonus-api/EligibilityCheck"; -import { InstanceId } from "../../generated/io-bonus-api/InstanceId"; - import { BonusActivationWithQrCode } from "generated/bonus/BonusActivationWithQrCode"; import { PaginatedBonusActivationsCollection } from "generated/io-bonus-api/PaginatedBonusActivationsCollection"; import { NonEmptyString } from "italia-ts-commons/lib/strings"; +import { toString } from "fp-ts/lib/function"; +import { EligibilityCheck } from "../../generated/io-bonus-api/EligibilityCheck"; +import { InstanceId } from "../../generated/io-bonus-api/InstanceId"; + import { BonusAPIClient } from "../clients/bonus"; import { User } from "../types/user"; import { withQrcode } from "../utils/qrcode"; @@ -31,15 +32,13 @@ import { withValidatedOrInternalError } from "../utils/responses"; -import { toString } from "fp-ts/lib/function"; - const readableProblem = (problem: ProblemJson) => `${problem.title} (${problem.type || "no problem type specified"})`; const ResponseErrorStatusNotDefinedInSpec = (response: never) => // This case should not happen, so response is of type never. // However, the underlying api may not follow the specs so we might trace the unhandled status - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any unhandledResponseStatus((response as any).status); const ResponseErrorUnexpectedAuthProblem = () => @@ -55,7 +54,6 @@ export default class BonusService { public readonly getBonusEligibilityCheck = ( user: User ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseSuccessAccepted | IResponseErrorNotFound @@ -97,7 +95,6 @@ export default class BonusService { user: User, bonusId: NonEmptyString ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseSuccessAccepted | IResponseErrorNotFound @@ -109,7 +106,6 @@ export default class BonusService { fiscalcode: user.fiscal_code }); - // tslint:disable-next-line: no-identical-functions return withValidatedOrInternalError(validated, response => { switch (response.status) { case 200: @@ -143,13 +139,13 @@ export default class BonusService { }); /** - * Get all IDs of the bonus activations requested by - * the authenticated user or by any between his family member + * Get all IDs of the bonus activations requested by + * the authenticated user or by any between his family member + * */ public readonly getAllBonusActivations = ( user: User ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseSuccessJson > => @@ -158,7 +154,6 @@ export default class BonusService { fiscalcode: user.fiscal_code }); - // tslint:disable-next-line: no-identical-functions return withValidatedOrInternalError(validated, response => { switch (response.status) { case 200: diff --git a/src/services/messagesService.ts b/src/services/messagesService.ts index 96ea78c50..efe4ccdc4 100644 --- a/src/services/messagesService.ts +++ b/src/services/messagesService.ts @@ -12,11 +12,11 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; +import { fromNullable } from "fp-ts/lib/Option"; import { PaginatedCreatedMessageWithoutContentCollection } from "../../generated/backend/PaginatedCreatedMessageWithoutContentCollection"; import { PaginatedServiceTupleCollection } from "../../generated/backend/PaginatedServiceTupleCollection"; import { ServicePublic } from "../../generated/backend/ServicePublic"; -import { fromNullable } from "fp-ts/lib/Option"; import { CreatedMessageWithContentAndAttachments } from "../../generated/backend/CreatedMessageWithContentAndAttachments"; import { getPrescriptionAttachments } from "../../src/utils/attachments"; import { User } from "../types/user"; @@ -36,7 +36,6 @@ export default class MessagesService { public readonly getMessagesByUser = ( user: User ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorNotFound | IResponseErrorTooManyRequests @@ -66,7 +65,6 @@ export default class MessagesService { user: User, messageId: string ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorNotFound | IResponseErrorTooManyRequests @@ -118,7 +116,6 @@ export default class MessagesService { public readonly getService = ( serviceId: string ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorNotFound | IResponseErrorTooManyRequests diff --git a/src/services/notificationService.ts b/src/services/notificationService.ts index eca5f168c..aa5958f12 100644 --- a/src/services/notificationService.ts +++ b/src/services/notificationService.ts @@ -9,6 +9,8 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; +import { QueueClient } from "@azure/storage-queue"; +import { fromNullable } from "fp-ts/lib/Option"; import { FiscalCode } from "../../generated/backend/FiscalCode"; import { Installation } from "../../generated/backend/Installation"; import { @@ -27,13 +29,11 @@ import { import { Notification } from "../../generated/notifications/Notification"; import { SuccessResponse } from "../../generated/notifications/SuccessResponse"; -import { QueueClient } from "@azure/storage-queue"; -import { fromNullable } from "fp-ts/lib/Option"; import { toFiscalCodeHash } from "../types/notification"; import { base64EncodeObject } from "../utils/messages"; export default class NotificationService { - private notificationQueueClient: QueueClient; + private readonly notificationQueueClient: QueueClient; constructor( private readonly queueStorageConnectionString: string, private readonly queueName: string diff --git a/src/services/pagoPAClientFactory.ts b/src/services/pagoPAClientFactory.ts index 8b54e6b02..d873a476f 100644 --- a/src/services/pagoPAClientFactory.ts +++ b/src/services/pagoPAClientFactory.ts @@ -4,23 +4,22 @@ import nodeFetch from "node-fetch"; +import { PagoPAClient } from "../clients/pagopa"; import { IPagoPAClientFactoryInterface, PagoPAEnvironment } from "./IPagoPAClientFactory"; -import { PagoPAClient } from "../clients/pagopa"; - // TODO: this class is actually useless as PagoPAClient is immutable, it can be removed export default class PagoPAClientFactory implements IPagoPAClientFactoryInterface { - private prodApiClient!: ReturnType; - private testApiClient!: ReturnType; + private readonly prodApiClient!: ReturnType; + private readonly testApiClient!: ReturnType; constructor( pagoPAApiUrlProd: string, pagoPAApiUrlTest: string, - // tslint:disable-next-line:no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any fetchApi: typeof fetch = (nodeFetch as any) as typeof fetch ) { this.prodApiClient = PagoPAClient(pagoPAApiUrlProd, fetchApi); diff --git a/src/services/pagoPAProxyService.ts b/src/services/pagoPAProxyService.ts index 5bbdc25c9..46b55f82e 100644 --- a/src/services/pagoPAProxyService.ts +++ b/src/services/pagoPAProxyService.ts @@ -1,5 +1,3 @@ -// tslint:disable:no-duplicate-string - import { IResponseErrorInternal, IResponseErrorNotFound, @@ -11,11 +9,6 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; -import { - IPagoPAClientFactoryInterface, - PagoPAEnvironment -} from "./IPagoPAClientFactory"; - import { PaymentActivationsGetResponse } from "../../generated/backend/PaymentActivationsGetResponse"; import { PaymentActivationsPostResponse } from "../../generated/backend/PaymentActivationsPostResponse"; import { PaymentRequestsGetResponse } from "../../generated/backend/PaymentRequestsGetResponse"; @@ -26,6 +19,10 @@ import { withCatchAsInternalError, withValidatedOrInternalError } from "../utils/responses"; +import { + IPagoPAClientFactoryInterface, + PagoPAEnvironment +} from "./IPagoPAClientFactory"; export default class PagoPAProxyService { constructor(private readonly pagoPAClient: IPagoPAClientFactoryInterface) {} @@ -56,7 +53,9 @@ export default class PagoPAProxyService { ) : response.status === 400 ? ResponseErrorValidation( + // eslint-disable-next-line sonarjs/no-duplicate-string response.value.title || "Bad request (upstream)", + // eslint-disable-next-line sonarjs/no-duplicate-string response.value.detail || "Bad request response from upstream API" ) : ResponseErrorInternal(response.value.detail) @@ -70,7 +69,6 @@ export default class PagoPAProxyService { paymentActivationsPostRequest: PaymentActivationsPostRequest, isTest: boolean ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound @@ -106,7 +104,6 @@ export default class PagoPAProxyService { codiceContestoPagamento: string, isTest: boolean ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorValidation | IResponseErrorNotFound diff --git a/src/services/profileService.ts b/src/services/profileService.ts index 8a4213b2e..7f0453421 100644 --- a/src/services/profileService.ts +++ b/src/services/profileService.ts @@ -18,6 +18,7 @@ import { ResponseSuccessJson } from "italia-ts-commons/lib/responses"; +import { errorsToReadableMessages } from "italia-ts-commons/lib/reporters"; import { ExtendedProfile as ExtendedProfileApi } from "../../generated/io-api/ExtendedProfile"; import { NewProfile } from "../../generated/io-api/NewProfile"; import { Profile as ProfileApi } from "../../generated/io-api/Profile"; @@ -25,7 +26,6 @@ import { Profile as ProfileApi } from "../../generated/io-api/Profile"; import { InitializedProfile } from "../../generated/backend/InitializedProfile"; import { Profile as ProfileBackend } from "../../generated/backend/Profile"; -import { errorsToReadableMessages } from "italia-ts-commons/lib/reporters"; import { toInitializedProfile } from "../types/profile"; import { User } from "../types/user"; import { @@ -44,7 +44,6 @@ export default class ProfileService { public readonly getProfile = ( user: User ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound @@ -88,7 +87,6 @@ export default class ProfileService { public readonly getApiProfile = ( user: User ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound @@ -130,7 +128,6 @@ export default class ProfileService { user: User, newProfile: NewProfile ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorConflict @@ -165,7 +162,6 @@ export default class ProfileService { user: User, profileBackend: ProfileBackend ): Promise< - // tslint:disable-next-line:max-union-size | IResponseErrorInternal | IResponseErrorNotFound | IResponseErrorConflict @@ -208,7 +204,6 @@ export default class ProfileService { public readonly emailValidationProcess = async ( user: User ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound @@ -219,15 +214,15 @@ export default class ProfileService { const validated = await client.startEmailValidationProcess({ fiscal_code: user.fiscal_code }); - return withValidatedOrInternalError(validated, response => { - return response.status === 202 + return withValidatedOrInternalError(validated, response => + response.status === 202 ? ResponseSuccessAccepted() : response.status === 404 ? ResponseErrorNotFound("Not found", "User not found.") : response.status === 429 ? ResponseErrorTooManyRequests() - : unhandledResponseStatus(response.status); - }); + : unhandledResponseStatus(response.status) + ); }); }; } diff --git a/src/services/redisSessionStorage.ts b/src/services/redisSessionStorage.ts index 5ab005145..a2afcf9c0 100644 --- a/src/services/redisSessionStorage.ts +++ b/src/services/redisSessionStorage.ts @@ -2,6 +2,7 @@ * This service uses the Redis client to store and retrieve session information. */ +import { isArray } from "util"; import { array } from "fp-ts/lib/Array"; import { Either, @@ -25,7 +26,6 @@ import { import { errorsToReadableMessages } from "italia-ts-commons/lib/reporters"; import { EmailString, FiscalCode } from "italia-ts-commons/lib/strings"; import * as redis from "redis"; -import { isArray } from "util"; import { SessionInfo } from "../../generated/backend/SessionInfo"; import { SessionsList } from "../../generated/backend/SessionsList"; import { assertUnreachable } from "../types/commons"; @@ -53,13 +53,13 @@ export const sessionNotFoundError = new Error("Session not found"); export default class RedisSessionStorage extends RedisStorageUtils implements ISessionStorage { - private mgetTask: ( + private readonly mgetTask: ( ...args: ReadonlyArray ) => TaskEither>; - private sismemberTask: ( + private readonly sismemberTask: ( ...args: ReadonlyArray ) => TaskEither; - private ttlTask: (key: string) => TaskEither; + private readonly ttlTask: (key: string) => TaskEither; constructor( private readonly redisClient: redis.RedisClient, private readonly tokenDurationSecs: number @@ -152,7 +152,7 @@ export default class RedisSessionStorage extends RedisStorageUtils }); // If is a session update, the session info key doesn't must be updated. - // tslint:disable-next-line: no-let + // eslint-disable-next-line functional/no-let let saveSessionInfoPromise: Promise { - return new Promise>(resolve => { - this.redisClient.exists(_, (err, response) => { - if (err || !response) { - return resolve(left(_)); - } - return resolve(right(_)); - }); - }); - }) + keys.map( + _ => + new Promise>(resolve => { + this.redisClient.exists(_, (err, response) => { + if (err || !response) { + return resolve(left(_)); + } + return resolve(right(_)); + }); + }) + ) ); return await Promise.all( - activeKeys.filter(isLeft).map(_ => { - return new Promise>(resolve => { - this.redisClient.srem(userSessionSetKey, _.value, (err, response) => - resolve(this.integerReply(err, response)) - ); - }); - }) + activeKeys.filter(isLeft).map( + _ => + new Promise>(resolve => { + this.redisClient.srem(userSessionSetKey, _.value, (err, response) => + resolve(this.integerReply(err, response)) + ); + }) + ) ); } @@ -484,6 +488,7 @@ export default class RedisSessionStorage extends RedisStorageUtils /** * Delete all user session data + * * @param fiscalCode */ public async delUserAllSessions( @@ -491,7 +496,9 @@ export default class RedisSessionStorage extends RedisStorageUtils ): Promise> { const errorOrSessions = await this.readSessionInfoKeys(fiscalCode); - const delEverySession = (sessionTokens: readonly SessionToken[]) => + const delEverySession = ( + sessionTokens: ReadonlyArray + ): TaskEither => array .sequence(taskEither)( sessionTokens.map(sessionToken => @@ -530,6 +537,7 @@ export default class RedisSessionStorage extends RedisStorageUtils /** * Update an user session keeping the current session TTL + * * @param updatedUser */ public async update(updatedUser: UserV3): Promise> { @@ -587,6 +595,7 @@ export default class RedisSessionStorage extends RedisStorageUtils NoticeEmail, "EX", sessionTtl, + // eslint-disable-next-line sonarjs/no-identical-functions (err, response) => resolve( this.falsyResponseToError( @@ -646,6 +655,7 @@ export default class RedisSessionStorage extends RedisStorageUtils /** * Return the session token remaining time to live in seconds + * * @param token */ private async getSessionTtl( @@ -659,6 +669,7 @@ export default class RedisSessionStorage extends RedisStorageUtils /** * Given a token, it removes user session token and wallet token + * * @param token */ private async delSingleSession( @@ -789,7 +800,6 @@ export default class RedisSessionStorage extends RedisStorageUtils /** * Remove other user sessions and wallet tokens */ - // tslint:disable-next-line: cognitive-complexity private async removeOtherUserSessions( user: UserV3 ): Promise> { @@ -829,8 +839,8 @@ export default class RedisSessionStorage extends RedisStorageUtils const externalTokens = errorOrDeserializedUsers.fold( _ => [], _ => - _.map(deserializedUser => { - return collect( + _.map(deserializedUser => + collect( this.getUserTokens(deserializedUser).filter( p => !( @@ -848,8 +858,8 @@ export default class RedisSessionStorage extends RedisStorageUtils !(p.prefix === bpdTokenPrefix && p.value === user.bpd_token) ), (_1, { prefix, value }) => `${prefix}${value}` - ); - }).reduce((prev, tokens) => [...prev, ...tokens], []) + ) + ).reduce((prev, tokens) => [...prev, ...tokens], []) ); // Delete all active tokens that are different @@ -901,41 +911,40 @@ export default class RedisSessionStorage extends RedisStorageUtils } private parseUser(value: string): Either { - return parseJSON(value, toError).chain(data => { - return User.decode(data).mapLeft(err => { - return new Error(errorsToReadableMessages(err).join("/")); - }); - }); + return parseJSON(value, toError).chain(data => + User.decode(data).mapLeft( + err => new Error(errorsToReadableMessages(err).join("/")) + ) + ); } private parseUserSessionList( userSessionTokensResult: ReadonlyArray ): SessionsList { return userSessionTokensResult.reduce( - (prev: SessionsList, _) => { - return parseJSON(_, toError) - .chain(data => { - return SessionInfo.decode(data).mapLeft(err => { - return new Error(errorsToReadableMessages(err).join("/")); - }); - }) + (prev: SessionsList, _) => + parseJSON(_, toError) + .chain(data => + SessionInfo.decode(data).mapLeft( + err => new Error(errorsToReadableMessages(err).join("/")) + ) + ) .fold( err => { log.warn("Unable to decode the session info: %s. Skipped.", err); return prev; }, - sessionInfo => { - return { - sessions: [...prev.sessions, sessionInfo] - }; - } - ); - }, + sessionInfo => ({ + sessions: [...prev.sessions, sessionInfo] + }) + ), { sessions: [] } as SessionsList ); } - private getUserTokens(user: User): StrMap<{ prefix: string; value: string }> { + private getUserTokens( + user: User + ): StrMap<{ readonly prefix: string; readonly value: string }> { const requiredTokens = { session_info: { prefix: sessionInfoKeyPrefix, diff --git a/src/services/redisStorageUtils.ts b/src/services/redisStorageUtils.ts index 073326f06..7d681ae2e 100644 --- a/src/services/redisStorageUtils.ts +++ b/src/services/redisStorageUtils.ts @@ -1,5 +1,5 @@ -import { Either, isLeft, left, right } from "fp-ts/lib/Either"; import { isNumber } from "util"; +import { Either, isLeft, left, right } from "fp-ts/lib/Either"; export default class RedisStorageUtils { /** diff --git a/src/services/redisUserMetadataStorage.ts b/src/services/redisUserMetadataStorage.ts index 7889a2150..309aa1806 100644 --- a/src/services/redisUserMetadataStorage.ts +++ b/src/services/redisUserMetadataStorage.ts @@ -115,7 +115,7 @@ export default class RedisUserMetadataStorage extends RedisStorageUtils } const userMetadata = errorOrDeserializedUserMetadata.value; return resolve(right(userMetadata)); - } catch (err) { + } catch (_) { return resolve( left( new Error("Unable to parse the user metadata json") diff --git a/src/services/tokenService.ts b/src/services/tokenService.ts index 5117e454d..cb20d8e6c 100644 --- a/src/services/tokenService.ts +++ b/src/services/tokenService.ts @@ -3,13 +3,13 @@ */ import * as crypto from "crypto"; +import { promisify } from "util"; import { toError } from "fp-ts/lib/Either"; import { TaskEither, taskify } from "fp-ts/lib/TaskEither"; import { FiscalCode, NonEmptyString } from "italia-ts-commons/lib/strings"; import { Second } from "italia-ts-commons/lib/units"; import * as jwt from "jsonwebtoken"; import { ulid } from "ulid"; -import { promisify } from "util"; const asyncRandomBytes = promisify(crypto.randomBytes); @@ -32,6 +32,7 @@ export default class TokenService { /** * Generates a new support token containing the logged user's fiscalCode. + * * @param privateKey: The RSA's private key used to sign this JWT token * @param fiscalCode: The logged user's FiscalCode * @param tokenTtl: Token Time To live (expressed in seconds) diff --git a/src/services/userDataProcessingService.ts b/src/services/userDataProcessingService.ts index 45d86a241..897143ae5 100644 --- a/src/services/userDataProcessingService.ts +++ b/src/services/userDataProcessingService.ts @@ -40,7 +40,6 @@ export default class UserDataProcessingService { user: User, userDataProcessingChoiceRequest: UserDataProcessingChoiceRequest ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorConflict @@ -74,7 +73,6 @@ export default class UserDataProcessingService { user: User, userDataProcessingChoiceParam: UserDataProcessingChoice ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound @@ -106,7 +104,6 @@ export default class UserDataProcessingService { user: User, userDataProcessingChoiceParam: UserDataProcessingChoice ): Promise< - // tslint:disable-next-line: max-union-size | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound diff --git a/src/services/usersLoginLogService.ts b/src/services/usersLoginLogService.ts index efe163a24..636a5cf4b 100644 --- a/src/services/usersLoginLogService.ts +++ b/src/services/usersLoginLogService.ts @@ -19,7 +19,7 @@ export const UserLogin = t.interface({ export type UserLogin = t.TypeOf; export default class UsersLoginLogService { - private queueClient: QueueClient; + private readonly queueClient: QueueClient; constructor( private readonly queueStorageConnectionString: string, diff --git a/src/strategies/urlTokenStrategy.ts b/src/strategies/urlTokenStrategy.ts index fc89a4e27..02f240b94 100644 --- a/src/strategies/urlTokenStrategy.ts +++ b/src/strategies/urlTokenStrategy.ts @@ -5,15 +5,14 @@ import * as passport from "passport"; import { Strategy } from "passport-auth-token"; -const urlTokenStrategy = (preSharedKey: string): passport.Strategy => { - // tslint:disable-next-line:no-any - return new Strategy((token: any, done: any) => { +const urlTokenStrategy = (preSharedKey: string): passport.Strategy => + // eslint-disable-next-line @typescript-eslint/no-explicit-any + new Strategy((token: any, done: any) => { if (typeof token === "string" && token === preSharedKey) { return done(undefined, {}); } return done(undefined, false); }); -}; export default urlTokenStrategy; diff --git a/src/types/profile.ts b/src/types/profile.ts index 6fdf192c3..ec0cd9338 100644 --- a/src/types/profile.ts +++ b/src/types/profile.ts @@ -2,10 +2,6 @@ * This file contains the ProfileWithEmail and ProfileWithoutEmail models and * some functions to validate and convert type to and from them. */ -import { InitializedProfile } from "../../generated/backend/InitializedProfile"; - -import { ExtendedProfile } from "../../generated/io-api/ExtendedProfile"; - import { fromNullable } from "fp-ts/lib/Option"; import { IResponseErrorInternal, @@ -14,6 +10,10 @@ import { IResponseSuccessJson, ResponseErrorInternal } from "italia-ts-commons/lib/responses"; +import { InitializedProfile } from "../../generated/backend/InitializedProfile"; + +import { ExtendedProfile } from "../../generated/io-api/ExtendedProfile"; + import { formatDate } from "../utils/date"; import { User } from "./user"; @@ -50,9 +50,8 @@ export const profileMissingErrorResponse = ResponseErrorInternal( ); export const notFoundProfileToInternalServerError = ( - // tslint:disable-next-line: prettier - getProfileResponse: // tslint:disable-next-line: max-union-size - | IResponseErrorInternal + getProfileResponse: + | IResponseErrorInternal | IResponseErrorTooManyRequests | IResponseErrorNotFound | IResponseSuccessJson diff --git a/src/types/user.ts b/src/types/user.ts index 2c62fd80f..11b8080a6 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -102,6 +102,7 @@ export type SpidUser = t.TypeOf; /** * Converts a SPID User to a Proxy User. */ +// eslint-disable-next-line max-params export function toAppUser( from: SpidUser, sessionToken: SessionToken, @@ -131,6 +132,7 @@ export function toAppUser( /** * Discriminate from a CieUserIdentity and a SpidUserIdentity * checking the spid_email property. + * * @param user */ export function isSpidUserIdentity( @@ -158,6 +160,27 @@ const SpidObject = t.intersection([ }) ]); +/** + * Extract AuthnContextClassRef from SAML response + * + * ie. for https://www.spid.gov.it/SpidL2 + * returns "https://www.spid.gov.it/SpidL2" + */ +function getAuthnContextFromResponse(xml: string): Option { + return fromNullable(xml) + .chain(xmlStr => tryCatch(() => new DOMParser().parseFromString(xmlStr))) + .chain(xmlResponse => + xmlResponse + ? some(xmlResponse.getElementsByTagName("saml:AuthnContextClassRef")) + : none + ) + .chain(responseAuthLevelEl => + responseAuthLevelEl?.[0]?.textContent + ? some(responseAuthLevelEl[0].textContent.trim()) + : none + ); +} + /** * Validates a SPID User extracted from a SAML response. */ @@ -214,12 +237,11 @@ export function validateSpidUser(rawValue: unknown): Either { const result = SpidUser.decode(valueWithDefaultSPIDLevel); - return result.mapLeft(err => { - return ( + return result.mapLeft( + err => "Cannot validate SPID user object: " + errorsToReadableMessages(err).join(" / ") - ); - }); + ); } export const withUserFromRequest = async ( @@ -244,26 +266,3 @@ export const extractUserFromJson = (from: string): Either => )}` ) ); - -/** - * Extract AuthnContextClassRef from SAML response - * - * ie. for https://www.spid.gov.it/SpidL2 - * returns "https://www.spid.gov.it/SpidL2" - */ -function getAuthnContextFromResponse(xml: string): Option { - return fromNullable(xml) - .chain(xmlStr => tryCatch(() => new DOMParser().parseFromString(xmlStr))) - .chain(xmlResponse => - xmlResponse - ? some(xmlResponse.getElementsByTagName("saml:AuthnContextClassRef")) - : none - ) - .chain(responseAuthLevelEl => - responseAuthLevelEl && - responseAuthLevelEl[0] && - responseAuthLevelEl[0].textContent - ? some(responseAuthLevelEl[0].textContent.trim()) - : none - ); -} diff --git a/src/utils/appinsights.ts b/src/utils/appinsights.ts index 40b8a3cc9..e917162ba 100644 --- a/src/utils/appinsights.ts +++ b/src/utils/appinsights.ts @@ -6,23 +6,6 @@ import { import { toFiscalCodeHash } from "../types/notification"; import { User } from "../types/user"; -/** - * App Insights is initialized to collect the following informations: - * - Incoming API calls - * - Server performance information (CPU, RAM) - * - Unandled Runtime Exceptions - * - Outcoming API Calls (dependencies) - * - Realtime API metrics - */ -export function initAppInsights( - instrumentationKey: string, - config: ApplicationInsightsConfig = {} -): appInsights.TelemetryClient { - startAppInsights(instrumentationKey, config); - appInsights.defaultClient.addTelemetryProcessor(sessionIdPreprocessor); - return appInsights.defaultClient; -} - const SESSION_TRACKING_ID_KEY = "session_tracking_id"; const USER_TRACKING_ID_KEY = "user_tracking_id"; @@ -65,8 +48,8 @@ export function attachTrackingData(user: User): void { export function sessionIdPreprocessor( envelope: appInsights.Contracts.Envelope, context?: { - // tslint:disable-next-line: no-any - [name: string]: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + readonly [name: string]: any; } ): boolean { if (context !== undefined) { @@ -75,7 +58,7 @@ export function sessionIdPreprocessor( USER_TRACKING_ID_KEY ); if (userTrackingId !== undefined) { - // tslint:disable-next-line: no-object-mutation + // eslint-disable-next-line functional/immutable-data envelope.tags[ appInsights.defaultClient.context.keys.userId ] = userTrackingId; @@ -84,7 +67,7 @@ export function sessionIdPreprocessor( SESSION_TRACKING_ID_KEY ); if (sessionTrackingId !== undefined) { - // tslint:disable-next-line: no-object-mutation + // eslint-disable-next-line functional/immutable-data envelope.tags[ appInsights.defaultClient.context.keys.sessionId ] = sessionTrackingId; @@ -114,3 +97,20 @@ export const trackStartupTime = ( tagOverrides: { samplingEnabled: "false" } }); }; + +/** + * App Insights is initialized to collect the following informations: + * - Incoming API calls + * - Server performance information (CPU, RAM) + * - Unandled Runtime Exceptions + * - Outcoming API Calls (dependencies) + * - Realtime API metrics + */ +export function initAppInsights( + instrumentationKey: string, + config: ApplicationInsightsConfig = {} +): appInsights.TelemetryClient { + startAppInsights(instrumentationKey, config); + appInsights.defaultClient.addTelemetryProcessor(sessionIdPreprocessor); + return appInsights.defaultClient; +} diff --git a/src/utils/attachments.ts b/src/utils/attachments.ts index f5b201b91..d54e720e2 100644 --- a/src/utils/attachments.ts +++ b/src/utils/attachments.ts @@ -20,8 +20,8 @@ const toBarcodeAttachments = (name: string, value: string) => toBarcode(value).fold( () => [], barcodes => [ - { name, content: barcodes.png, mime_type: MIME_TYPES.png }, - { name, content: barcodes.svg, mime_type: MIME_TYPES.svg } + { content: barcodes.png, mime_type: MIME_TYPES.png, name }, + { content: barcodes.svg, mime_type: MIME_TYPES.svg, name } ] ); @@ -32,8 +32,7 @@ const toBarcodeAttachments = (name: string, value: string) => */ export function getPrescriptionAttachments( prescriptionData: PrescriptionData - // tslint:disable-next-line: readonly-array -): Task { +): Task> { return array .sequence(task)([ toBarcodeAttachments("iup", prescriptionData.iup), diff --git a/src/utils/barcode.ts b/src/utils/barcode.ts index a0cc5d88a..d70ade0f3 100644 --- a/src/utils/barcode.ts +++ b/src/utils/barcode.ts @@ -12,8 +12,8 @@ import { BARCODE_ALGORITHM } from "../../src/config"; import { DrawingSVG } from "./bwipjs-svg"; export interface IBarcodeOutput { - png: string; - svg: string; + readonly png: string; + readonly svg: string; } /** diff --git a/src/utils/bwipjs-svg.ts b/src/utils/bwipjs-svg.ts index 7fb5a8924..c6c0f2c78 100644 --- a/src/utils/bwipjs-svg.ts +++ b/src/utils/bwipjs-svg.ts @@ -1,4 +1,4 @@ -// tslint:disable +/* eslint-disable */ import { ToBufferOptions, IFontLib } from "bwip-js"; diff --git a/src/utils/cidrs.ts b/src/utils/cidrs.ts index b96eecbfb..c4110f506 100644 --- a/src/utils/cidrs.ts +++ b/src/utils/cidrs.ts @@ -5,7 +5,9 @@ import { CIDR } from "italia-ts-commons/lib/strings"; /** * Parse a comma separated string of CIDR(s) or IP(s) into an array */ -export function decodeCIDRs(cidrs?: string): Either { +export function decodeCIDRs( + cidrs?: string +): Either> { return array(CIDR).decode( cidrs // may be a comma separated list of CIDR(s) or IP(s) diff --git a/src/utils/container.ts b/src/utils/container.ts index d3360dd68..f4335c327 100644 --- a/src/utils/container.ts +++ b/src/utils/container.ts @@ -10,7 +10,6 @@ import { log } from "./logger"; */ export function readFile(path: string, type: string): string { log.info("Reading %s file from %s", type, path); - // eslint-disable-next-line security/detect-non-literal-fs-filename return fs.readFileSync(path, "utf-8"); } diff --git a/src/utils/date.ts b/src/utils/date.ts index d2b591355..3c20cf319 100644 --- a/src/utils/date.ts +++ b/src/utils/date.ts @@ -6,18 +6,13 @@ import { FiscalCode } from "generated/backend/FiscalCode"; * Returns a comparator of two dates that returns true if * the difference in years is at least the provided value. */ -export const isOlderThan = (years: number) => ( - dateOfBirth: Date, - when: Date -) => { - return !isAfter(addYears(dateOfBirth, years), when); -}; +export const isOlderThan = (years: number) => (dateOfBirth: Date, when: Date) => + !isAfter(addYears(dateOfBirth, years), when); -export const isValidDate = (d: Date) => { - return d instanceof Date && !isNaN(d.getTime()); -}; +export const isValidDate = (d: Date) => + d instanceof Date && !isNaN(d.getTime()); -const months: { [k: string]: number } = { +const months: { readonly [k: string]: number } = { ["A"]: 1, ["B"]: 2, ["C"]: 3, diff --git a/src/utils/errorsFormatter.ts b/src/utils/errorsFormatter.ts index 25eeb31ed..25f2f50cb 100644 --- a/src/utils/errorsFormatter.ts +++ b/src/utils/errorsFormatter.ts @@ -3,6 +3,7 @@ import { errorsToReadableMessages } from "italia-ts-commons/lib/reporters"; /** * Merge into one single Error several errors provided in input and add a context description + * * @param errors * @param context * @returns A single Error instance with a formatted message. diff --git a/src/utils/express.ts b/src/utils/express.ts index 9415b931e..27759db68 100644 --- a/src/utils/express.ts +++ b/src/utils/express.ts @@ -13,12 +13,12 @@ export function toExpressHandler( handler: (req: express.Request) => Promise>, object?: P ): (req: express.Request, res: express.Response) => void { - return (req, res) => + return (req, res): Promise => handler .call(object, req) .catch(ResponseErrorInternal) .then(response => { - // tslint:disable-next-line:no-object-mutation + // eslint-disable-next-line functional/immutable-data res.locals.detail = response.detail; response.apply(res); }); @@ -31,7 +31,7 @@ export function constantExpressHandler( response: IResponse ): (req: express.Request, res: express.Response) => void { return (_, res) => { - // tslint:disable-next-line:no-object-mutation + // eslint-disable-next-line functional/immutable-data res.locals.detail = response.detail; response.apply(res); }; diff --git a/src/utils/getErrorCodeFromResponse.ts b/src/utils/getErrorCodeFromResponse.ts index 0efb29650..973673cb2 100644 --- a/src/utils/getErrorCodeFromResponse.ts +++ b/src/utils/getErrorCodeFromResponse.ts @@ -19,13 +19,11 @@ export default function getErrorCodeFromResponse( ? some(xmlResponse.getElementsByTagName("StatusMessage")) : none ) - .chain(responseStatusMessageEl => { - return responseStatusMessageEl && - responseStatusMessageEl[0] && - responseStatusMessageEl[0].textContent + .chain(responseStatusMessageEl => + responseStatusMessageEl?.[0]?.textContent ? some(responseStatusMessageEl[0].textContent.trim()) - : none; - }) + : none + ) .chain(errorString => { const indexString = "ErrorCode nr"; const errorCode = errorString.slice( diff --git a/src/utils/gracefulShutdown.ts b/src/utils/gracefulShutdown.ts index c678f82f5..f5d14e5ce 100644 --- a/src/utils/gracefulShutdown.ts +++ b/src/utils/gracefulShutdown.ts @@ -1,7 +1,7 @@ -import { Express } from "express"; import * as http from "http"; -import * as httpGracefulShutdown from "http-graceful-shutdown"; import * as https from "https"; +import { Express } from "express"; +import * as httpGracefulShutdown from "http-graceful-shutdown"; import { log } from "./logger"; export function initHttpGracefulShutdown( diff --git a/src/utils/logger.ts b/src/utils/logger.ts index 4522ff729..3c0506ba7 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -8,9 +8,7 @@ export const log = createLogger({ timestamp(), format.splat(), format.simple(), - printf(nfo => { - return `${nfo.timestamp} [${nfo.level}]: ${nfo.message}`; - }) + printf(nfo => `${nfo.timestamp} [${nfo.level}]: ${nfo.message}`) ), transports: [new transports.Console()] }); diff --git a/src/utils/messages.ts b/src/utils/messages.ts index dc29bf5f2..a5d5a2569 100644 --- a/src/utils/messages.ts +++ b/src/utils/messages.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line: no-any -export const base64EncodeObject = (_: any) => { - return Buffer.from(JSON.stringify(_)).toString("base64"); -}; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const base64EncodeObject = (_: any): string => + Buffer.from(JSON.stringify(_)).toString("base64"); diff --git a/src/utils/middleware/checkIP.ts b/src/utils/middleware/checkIP.ts index e777d855e..217b13337 100644 --- a/src/utils/middleware/checkIP.ts +++ b/src/utils/middleware/checkIP.ts @@ -10,7 +10,7 @@ import * as rangeCheck from "range_check"; import { log } from "../logger"; export default function checkIP( - range: readonly CIDR[] + range: ReadonlyArray ): ( req: express.Request, res: express.Response, @@ -20,7 +20,7 @@ export default function checkIP( req: express.Request, res: express.Response, next: express.NextFunction - ) => { + ): void => { // when the boolean flag "trust proxy" is enabled // express takes this from the leftmost value // contained in the x-forwarded-for header @@ -39,8 +39,7 @@ export default function checkIP( res.status(400).send("Bad request"); } else { const IP = errorOrIPString.value; - // tslint:disable-next-line: readonly-array - if (!rangeCheck.inRange(IP, range as CIDR[])) { + if (!rangeCheck.inRange(IP, Array.from(range))) { log.error(`Blocked source IP ${IP}.`); res.status(401).send("Unauthorized"); } else { diff --git a/src/utils/middleware/express.ts b/src/utils/middleware/express.ts index b2296713f..68993a022 100644 --- a/src/utils/middleware/express.ts +++ b/src/utils/middleware/express.ts @@ -5,6 +5,7 @@ import { log } from "../logger"; /** * Error Handler method for Express Application. * Catch an express error and returns a ResponseErrorInternal response + * * @ref https://expressjs.com/en/guide/error-handling.htmls */ export function expressErrorMiddleware( diff --git a/src/utils/package.ts b/src/utils/package.ts index dc51317cf..4568fa233 100644 --- a/src/utils/package.ts +++ b/src/utils/package.ts @@ -1,21 +1,21 @@ import { none, Option, some } from "fp-ts/lib/Option"; import * as t from "io-ts"; -// tslint:disable-next-line: no-var-requires -const packageJson = require("../../package.json"); +import * as packageJson from "../../package.json"; /** * Parse the string value of a specified key from the package.json file. * If it doesn't exists, returns 'UNKNOWN' */ -export const getValueFromPackageJson = (key: string): string => - t.string.decode(packageJson[key]).getOrElse("UNKNOWN"); +export const getValueFromPackageJson = ( + key: keyof typeof packageJson +): string => t.string.decode(packageJson[key]).getOrElse("UNKNOWN"); /** * Parse a generic Object for a specific key from the package.json file. * If the decode process fails returns none, otherwise some of the required object */ export const getObjectFromPackageJson = ( - key: string, + key: keyof typeof packageJson, type: t.Type ): Option => type.decode(packageJson[key]).fold( diff --git a/src/utils/qrcode.ts b/src/utils/qrcode.ts index 45b2dde8d..b3b47d655 100644 --- a/src/utils/qrcode.ts +++ b/src/utils/qrcode.ts @@ -12,13 +12,14 @@ const MIME_TYPES = { }; // Needed to display the SVG into the mobile App -const fixQrcodeFill = (svgStr: string) => +const fixQrcodeFill = (svgStr: string): string => svgStr.replace(" { - // tslint:disable-next-line: readonly-array no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any, functional/prefer-readonly-type const chunks: any[] = []; return new Promise((resolve, reject) => { + // eslint-disable-next-line functional/immutable-data stream.on("data", chunk => chunks.push(chunk)); stream.on("error", reject); stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8"))); @@ -26,20 +27,23 @@ function streamToString(stream: NodeJS.ReadableStream): Promise { } function streamToBuffer(stream: NodeJS.ReadableStream): Promise { - // tslint:disable-next-line: readonly-array no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any, functional/prefer-readonly-type const chunks: any[] = []; return new Promise((resolve, reject) => { + // eslint-disable-next-line functional/immutable-data stream.on("data", chunk => chunks.push(chunk)); stream.on("error", reject); stream.on("end", () => resolve(Buffer.concat(chunks))); }); } -const streamToBufferTask = (stream: NodeJS.ReadableStream) => - tryCatch(() => streamToBuffer(stream), toError); +const streamToBufferTask = ( + stream: NodeJS.ReadableStream +): TaskEither => tryCatch(() => streamToBuffer(stream), toError); -const streamToStringTask = (stream: NodeJS.ReadableStream) => - tryCatch(() => streamToString(stream), toError); +const streamToStringTask = ( + stream: NodeJS.ReadableStream +): TaskEither => tryCatch(() => streamToString(stream), toError); export function withQrcode( bonus: BonusActivation diff --git a/src/utils/responses.ts b/src/utils/responses.ts index 3a8411b1a..9d1d6ff2a 100644 --- a/src/utils/responses.ts +++ b/src/utils/responses.ts @@ -4,6 +4,8 @@ import { errorsToReadableMessages } from "italia-ts-commons/lib/reporters"; import { HttpStatusCodeEnum, IResponse, + IResponseErrorInternal, + IResponseErrorValidation, ResponseErrorGeneric, ResponseErrorInternal, ResponseErrorNotFound, @@ -14,6 +16,7 @@ import { * Interface for a no content response returning a empty object. */ export interface IResponseNoContent extends IResponse<"IResponseNoContent"> { + // eslint-disable-next-line @typescript-eslint/ban-types readonly value: {}; } /** @@ -21,7 +24,7 @@ export interface IResponseNoContent extends IResponse<"IResponseNoContent"> { */ export function ResponseNoContent(): IResponseNoContent { return { - apply: (res: express.Response) => res.status(204).json({}), + apply: (res: express.Response): unknown => res.status(204).json({}), kind: "IResponseNoContent", value: {} }; @@ -41,14 +44,16 @@ export const ResponseErrorDismissed = ResponseErrorNotFound( export const withCatchAsInternalError = ( f: () => Promise, message: string = "Exception while calling upstream API (likely a timeout)." -) => +): Promise => f().catch(_ => { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.error(_); return ResponseErrorInternal(`${message} [${_}]`); }); -export const unhandledResponseStatus = (status: number) => +export const unhandledResponseStatus = ( + status: number +): IResponseErrorInternal => ResponseErrorInternal(`unhandled API response status [${status}]`); /** @@ -57,8 +62,8 @@ export const unhandledResponseStatus = (status: number) => */ export const withValidatedOrInternalError = ( validated: t.Validation, - f: (t: T) => U -) => + f: (p: T) => U +): U | IResponseErrorInternal => validated.isLeft() ? ResponseErrorInternal( errorsToReadableMessages(validated.value).join(" / ") @@ -71,8 +76,8 @@ export const withValidatedOrInternalError = ( */ export const withValidatedOrValidationError = ( response: t.Validation, - f: (t: T) => U -) => + f: (p: T) => U +): U | IResponseErrorValidation => response.isLeft() ? ResponseErrorValidation( "Bad request", diff --git a/src/utils/spid.ts b/src/utils/spid.ts index f3d704fa5..7f53e0b81 100644 --- a/src/utils/spid.ts +++ b/src/utils/spid.ts @@ -20,10 +20,8 @@ const SAML_NAMESPACE = { PROTOCOL: "urn:oasis:names:tc:SAML:2.0:protocol" }; -export const getFiscalNumberFromPayload = ( - doc: Document -): Option => { - return fromNullable( +export const getFiscalNumberFromPayload = (doc: Document): Option => + fromNullable( doc.getElementsByTagNameNS(SAML_NAMESPACE.ASSERTION, "Attribute") ) .mapNullable(collection => @@ -33,17 +31,15 @@ export const getFiscalNumberFromPayload = ( ) .mapNullable(_ => _.textContent?.trim().replace("TINIT-", "")) .chain(_ => fromEither(FiscalCode.decode(_))); -}; const getRequestIDFromPayload = (tagName: string, attrName: string) => ( doc: Document -): Option => { - return fromNullable( +): Option => + fromNullable( doc.getElementsByTagNameNS(SAML_NAMESPACE.PROTOCOL, tagName).item(0) ).chain(element => fromEither(NonEmptyString.decode(element.getAttribute(attrName))) ); -}; export const getRequestIDFromRequest = getRequestIDFromPayload( "AuthnRequest", diff --git a/src/utils/strategies.ts b/src/utils/strategies.ts index baca8311e..60d746b6a 100644 --- a/src/utils/strategies.ts +++ b/src/utils/strategies.ts @@ -4,9 +4,9 @@ import { IVerifyOptions } from "passport-http-bearer"; import { User } from "../types/user"; export type StrategyDoneFunction = ( - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any error: any, - // tslint:disable-next-line: no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any user?: any, options?: IVerifyOptions | string ) => void; diff --git a/tsconfig.json b/tsconfig.json index 0f587b301..a6f595e7a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,8 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "sourceMap": true, - "baseUrl": "." + "baseUrl": ".", + "resolveJsonModule": true }, "include": [ "./src/**/*" diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 1ebc33c1f..000000000 --- a/tslint.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "italia-tslint-rules/strong" - ], - "jsRules": {}, - "rules": { - "no-submodule-imports": false, - "use-type-alias": false - }, - "rulesDirectory": [], - "linterOptions": { - "exclude": [ - "node_modules/**/*", - "generated/**/*.ts" - ] - } -} diff --git a/yarn.lock b/yarn.lock index c10e90847..ff2ada059 100644 --- a/yarn.lock +++ b/yarn.lock @@ -111,6 +111,22 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@iarna/toml@2.2.3": version "2.2.3" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.3.tgz#f060bf6eaafae4d56a7dac618980838b0696e2ab" @@ -259,6 +275,28 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/types/-/types-0.2.0.tgz#2a0afd40fa7026e39ea56a454642bda72b172f80" integrity sha512-GtwNB6BNDdsIPAYEdpp3JnOGO/3AJxjPvny53s3HERBdXSJTGQw8IRhiaTEX0b3w9P8+FwFZde4k+qkjn67aVw== +"@pagopa/eslint-config@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@pagopa/eslint-config/-/eslint-config-1.1.1.tgz#09fdfa59708f44996c042451d4d16a624b276bcb" + integrity sha512-b4MBnPWFj1I/O3wpQfR475BoLcB7Nmze67eqLl+J1t7ajFKPi4FF8k7+Xpfct6Z1ziVSTYVjQgMuoBJRHADcrA== + dependencies: + "@typescript-eslint/eslint-plugin" "^4.10.0" + "@typescript-eslint/eslint-plugin-tslint" "^4.10.0" + "@typescript-eslint/parser" "^4.10.0" + eslint "^7.15.0" + eslint-config-prettier "^7.0.0" + eslint-plugin-extra-rules "^0.0.0-development" + eslint-plugin-fp "^2.3.0" + eslint-plugin-functional "^2.0.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jsdoc "^30.6.1" + eslint-plugin-no-credentials "^2.0.9" + eslint-plugin-prefer-arrow "^1.2.2" + eslint-plugin-prettier "^3.3.0" + eslint-plugin-react "^7.21.5" + eslint-plugin-sonarjs "^0.5.0" + prettier "^2.1.2" + "@pagopa/io-spid-commons@^5.0.0": version "5.0.0" resolved "https://npm.pkg.github.com/download/@pagopa/io-spid-commons/5.0.0/febc0c8f9c1cd82a5654a57db097273654eab8d6eca5e77ff43cc2b50c75874e#9a4a2cf23a8c4e72ee959d5ad226cf8b82f5924d" @@ -400,6 +438,16 @@ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.14.tgz#37daaf78069e7948520474c87b80092ea912520a" integrity sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug== +"@types/json-schema@^7.0.3": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/jsonwebtoken@7.2.7": version "7.2.7" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-7.2.7.tgz#5dd62e0c0a0c6f211c3c1d13d322360894625b47" @@ -585,6 +633,101 @@ resolved "https://registry.yarnpkg.com/@types/xmldom/-/xmldom-0.1.29.tgz#c4428b0ca86d3b881475726fd94980b38a27c381" integrity sha1-xEKLDKhtO4gUdXJv2UmAs4onw4E= +"@typescript-eslint/eslint-plugin-tslint@^4.10.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-4.12.0.tgz#b893b6da9542938981d6aa6889b6e67ba97dffe9" + integrity sha512-ZkcW+2d8getYROHc+aKQYW+vJHMn5FbnFk6AodrvRlIFX/JsFY6Oms5Yw4RzamBa/Ez9W6yVRzLgMDsUkMFKVg== + dependencies: + "@typescript-eslint/experimental-utils" "4.12.0" + lodash "^4.17.15" + +"@typescript-eslint/eslint-plugin@^4.10.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.12.0.tgz#00d1b23b40b58031e6d7c04a5bc6c1a30a2e834a" + integrity sha512-wHKj6q8s70sO5i39H2g1gtpCXCvjVszzj6FFygneNFyIAxRvNSVz9GML7XpqrB9t7hNutXw+MHnLN/Ih6uyB8Q== + dependencies: + "@typescript-eslint/experimental-utils" "4.12.0" + "@typescript-eslint/scope-manager" "4.12.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.12.0.tgz#372838e76db76c9a56959217b768a19f7129546b" + integrity sha512-MpXZXUAvHt99c9ScXijx7i061o5HEjXltO+sbYfZAAHxv3XankQkPaNi5myy0Yh0Tyea3Hdq1pi7Vsh0GJb0fA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.12.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/typescript-estree" "4.12.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^1.11.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/parser@^4.10.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.12.0.tgz#e1cf30436e4f916c31fcc962158917bd9e9d460a" + integrity sha512-9XxVADAo9vlfjfoxnjboBTxYOiNY93/QuvcPgsiKvHxW6tOZx1W4TvkIQ2jB3k5M0pbFP5FlXihLK49TjZXhuQ== + dependencies: + "@typescript-eslint/scope-manager" "4.12.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/typescript-estree" "4.12.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.12.0.tgz#beeb8beca895a07b10c593185a5612f1085ef279" + integrity sha512-QVf9oCSVLte/8jvOsxmgBdOaoe2J0wtEmBr13Yz0rkBNkl5D8bfnf6G4Vhox9qqMIoG7QQoVwd2eG9DM/ge4Qg== + dependencies: + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/visitor-keys" "4.12.0" + +"@typescript-eslint/types@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.12.0.tgz#fb891fe7ccc9ea8b2bbd2780e36da45d0dc055e5" + integrity sha512-N2RhGeheVLGtyy+CxRmxdsniB7sMSCfsnbh8K/+RUIXYYq3Ub5+sukRCjVE80QerrUBvuEvs4fDhz5AW/pcL6g== + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +"@typescript-eslint/typescript-estree@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.12.0.tgz#3963418c850f564bdab3882ae23795d115d6d32e" + integrity sha512-gZkFcmmp/CnzqD2RKMich2/FjBTsYopjiwJCroxqHZIY11IIoN0l5lKqcgoAPKHt33H2mAkSfvzj8i44Jm7F4w== + dependencies: + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/visitor-keys" "4.12.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.12.0.tgz#a470a79be6958075fa91c725371a83baf428a67a" + integrity sha512-hVpsLARbDh4B9TKYz5cLbcdMIOAoBYgFPCSP9FFS/liSF+b33gVNq8JHY3QGhHNVz85hObvL7BEYLlgx553WCw== + dependencies: + "@typescript-eslint/types" "4.12.0" + eslint-visitor-keys "^2.0.0" + a-sync-waterfall@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" @@ -623,11 +766,28 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-2.0.1.tgz#0edf9878a5866bca625f52955a1ed9e7d8c5117e" + integrity sha1-Dt+YeKWGa8piX1KVWh7Z59jFEX4= + dependencies: + acorn "^2.0.1" + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn@^2.0.1, acorn@^2.6.4: + version "2.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc= + acorn@^5.5.3: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" @@ -638,6 +798,11 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -654,6 +819,16 @@ agentkeepalive@^4.1.2: depd "^1.1.2" humanize-ms "^1.2.1" +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^6.5.5: version "6.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" @@ -664,6 +839,16 @@ ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -678,6 +863,11 @@ ansi-align@^3.0.0: dependencies: string-width "^3.0.0" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -812,6 +1002,17 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-includes@^3.1.1, array-includes@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" + is-string "^1.0.5" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -827,6 +1028,25 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -859,6 +1079,11 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1277,11 +1502,6 @@ buffer-from@1.x, buffer-from@^1.0.0, buffer-from@^1.1.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - bwip-js@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/bwip-js/-/bwip-js-2.0.6.tgz#2189bf1ae9518974a5d73513605939989a98a17e" @@ -1320,6 +1540,14 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -1344,6 +1572,11 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -1404,6 +1637,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + changelog-filename-regex@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/changelog-filename-regex/-/changelog-filename-regex-1.1.2.tgz#19e98e38248cff0c1cf3ae3bf51bfb22c48592d6" @@ -1634,7 +1875,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1, commander@^2.18.0, commander@^2.7.1, commander@^2.9.0, commander@~2.20.3: +commander@^2.18.0, commander@^2.7.1, commander@^2.9.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -1644,6 +1885,11 @@ commander@^3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +comment-parser@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.6.tgz#0e743a53c8e646c899a1323db31f6cd337b10f12" + integrity sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg== + component-emitter@^1.2.0, component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -1678,6 +1924,16 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" +console-assert@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/console-assert/-/console-assert-1.0.0.tgz#70167028ef08ec1667a0c687205a8360eb117367" + integrity sha1-cBZwKO8I7BZnoMaHIFqDYOsRc2c= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -1757,6 +2013,13 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" +create-eslint-index@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/create-eslint-index/-/create-eslint-index-1.0.0.tgz#d954372d86d5792fcd67e9f2b791b1ab162411bb" + integrity sha1-2VQ3LYbVeS/NZ+nyt5GxqxYkEbs= + dependencies: + lodash.get "^4.3.0" + cross-env@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" @@ -1793,6 +2056,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -1925,6 +2197,13 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1947,11 +2226,16 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deepmerge@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" + integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== + default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" @@ -2086,11 +2370,6 @@ diff@^3.1.0, diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2103,13 +2382,27 @@ dns-prefetch-control@0.2.0: resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz#73988161841f3dcc81f47686d539a2c702c88624" integrity sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q== -doctrine@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" - integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: - esutils "^1.1.6" - isarray "0.0.1" + esutils "^2.0.2" + isarray "^1.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" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" domexception@^1.0.1: version "1.0.1" @@ -2245,6 +2538,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + env-variable@0.0.x: version "0.0.6" resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.6.tgz#74ab20b3786c545b62b4a4813ab8cf22726c9808" @@ -2274,6 +2574,24 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + 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" @@ -2320,6 +2638,11 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@^1.9.1: version "1.14.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" @@ -2332,28 +2655,258 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-plugin-prettier@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" - integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== +eslint-ast-utils@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz#3d58ba557801cfb1c941d68131ee9f8c34bd1586" + integrity sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== + dependencies: + lodash.get "^4.4.2" + lodash.zip "^4.2.0" + +eslint-config-prettier@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz#5402eb559aa94b894effd6bddfa0b1ca051c858f" + integrity sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA== + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-extra-rules@^0.0.0-development: + version "0.0.0-development" + resolved "https://registry.yarnpkg.com/eslint-plugin-extra-rules/-/eslint-plugin-extra-rules-0.0.0-development.tgz#c3c1aed3086c39fd83c1b7a4fa3df9884b4abb48" + integrity sha1-w8Gu0whsOf2Dwbek+j35iEtKu0g= + dependencies: + console-assert "1.0.0" + espree "3.0.0-alpha-1" + quote "0.4.0" + +eslint-plugin-fp@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz#376d2a108710e981980bdc3875e3b9920da0489c" + integrity sha1-N20qEIcQ6YGYC9w4deO5kg2gSJw= + dependencies: + create-eslint-index "^1.0.0" + eslint-ast-utils "^1.0.0" + lodash "^4.13.1" + req-all "^0.1.0" + +eslint-plugin-functional@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-functional/-/eslint-plugin-functional-2.0.0.tgz#7f3a8fb4182319cddf11c3b8615f8095b2c740c5" + integrity sha512-8IV3wyYFGWvrx2klByu5O3qG7fo9/tedBaagPssv9MWmOTGVnCdk7r7DCDbVe8VTZe9Mz7r6KS+1tdkgQAqc9A== + dependencies: + "@typescript-eslint/experimental-utils" "^1.11.0" + array.prototype.flatmap "^1.2.1" + deepmerge "^3.3.0" + escape-string-regexp "^2.0.0" + +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jsdoc@^30.6.1: + version "30.7.13" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.13.tgz#52e5c74fb806d3bbeb51d04a0c829508c3c6b563" + integrity sha512-YM4WIsmurrp0rHX6XiXQppqKB8Ne5ATiZLJe2+/fkp9l9ExXFr43BbAbjZaVrpCT+tuPYOZ8k1MICARHnURUNQ== + dependencies: + comment-parser "^0.7.6" + debug "^4.3.1" + jsdoctypeparser "^9.0.0" + lodash "^4.17.20" + regextras "^0.7.1" + semver "^7.3.4" + spdx-expression-parse "^3.0.1" + +eslint-plugin-no-credentials@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-credentials/-/eslint-plugin-no-credentials-2.0.9.tgz#d48980b5e30a64b63768cc88078c9086237acbe1" + integrity sha512-9UtO4ySyWLuAyAnm87fJvwFdUd1GDGjWQCWI/Tm1wV3tE0ysVnyoSYTZaZrFEuPgKrJggxg9D4z1pzJQ5yQZPA== + dependencies: + lodash "^4.17.15" + +eslint-plugin-prefer-arrow@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.2.tgz#0c6d25a6b94cb3e0110a23d129760af5860edb6e" + integrity sha512-C8YMhL+r8RMeMdYAw/rQtE6xNdMulj+zGWud/qIGnlmomiPRaLDGLMeskZ3alN6uMBojmooRimtdrXebLN4svQ== + +eslint-plugin-prettier@^3.3.0, eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react@^7.21.5: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" + integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-plugin-sonarjs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.5.0.tgz#ce17b2daba65a874c2862213a9e38e8986ad7d7d" + integrity sha512-XW5MnzlRjhXpIdbULC/qAdJYHWw3rRLws/DyawdlPU/IdVr9AmRK1r2LaCvabwKOAW2XYYSo3kDX58E4MrB7PQ== + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.15.0: + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.17.0.tgz#4ccda5bf12572ad3bf760e6f195886f50569adb0" + integrity sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@3.0.0-alpha-1: + version "3.0.0-alpha-1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.0.0-alpha-1.tgz#ca1380bd81f2fae94b2638ae7cc449b71f91eaa3" + integrity sha1-yhOAvYHy+ulLJjiufMRJtx+R6qM= + dependencies: + acorn "^2.6.4" + acorn-jsx "^2.0.1" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^4.2.0: +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -esutils@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" - integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== esutils@^2.0.2: version "2.0.3" @@ -2565,7 +3118,7 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== -fast-diff@^1.1.1: +fast-diff@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== @@ -2582,12 +3135,24 @@ fast-glob@^3.0.3: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -2628,6 +3193,13 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -2703,13 +3275,21 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + flat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" @@ -2717,6 +3297,11 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2835,6 +3420,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2845,6 +3435,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0, get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -2928,7 +3527,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -2961,6 +3560,13 @@ global-dirs@^2.0.1: dependencies: ini "^1.3.5" +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2980,6 +3586,18 @@ globby@10.0.2: merge2 "^1.2.3" slash "^3.0.0" +globby@^11.0.1: + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + got@9.6.0, got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -3296,15 +3914,20 @@ ignore-by-default@^1.0.1: resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.1.1: version "5.1.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== -immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-cwd@3.0.0: version "3.0.0" @@ -3321,6 +3944,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" @@ -3388,6 +4019,15 @@ inquirer@7.0.4: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -3490,6 +4130,11 @@ is-callable@^1.1.4, is-callable@^1.1.5: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + is-ci@2.0.0, is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -3504,6 +4149,13 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3649,6 +4301,11 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-negative-zero@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -3746,6 +4403,13 @@ is-regex@^1.0.5: dependencies: has "^1.0.3" +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + is-regular-file@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regular-file/-/is-regular-file-1.1.1.tgz#ffcf9cae56ec63bc55b17d6fed1af441986dab66" @@ -3768,6 +4432,11 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -3800,12 +4469,7 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3945,19 +4609,6 @@ italia-ts-commons@^8.6.0: node-fetch "^2.6.0" validator "^10.1.0" -italia-tslint-rules@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/italia-tslint-rules/-/italia-tslint-rules-1.1.3.tgz#efac0c9638d14cef6cc907be74f0799b8bab0976" - integrity sha512-vu1LsSPaAnreitYlFnMFzKvZvXJz1M6B2AeY8CsGZ1DGHG5gJhiTKdyOR86I3q5TjegEYbi3nLLieJV0uKDKcA== - dependencies: - tslint-config-prettier "^1.18.0" - tslint-eslint-rules "^5.4.0" - tslint-immutable "^5.5.2" - tslint-plugin-prettier "^2.0.1" - tslint-react "^4.0.0" - tslint-sonarts "^1.9.0" - typestrict "^1.0.2" - italia-utils@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/italia-utils/-/italia-utils-6.3.0.tgz#7b1dac014ef05f5be14e3688c91fcc428238bf18" @@ -4051,11 +4702,6 @@ jest-diff@^23.6.0: jest-get-type "^22.1.0" pretty-format "^23.6.0" -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== - jest-docblock@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" @@ -4317,6 +4963,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdoctypeparser@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" + integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== + jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -4397,6 +5048,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4407,6 +5063,11 @@ json-set-map@^1.0.2: resolved "https://registry.yarnpkg.com/json-set-map/-/json-set-map-1.0.2.tgz#608aacb5464d9759158d06523a6e30be5650adc4" integrity sha1-YIqstUZNl1kVjQZSOm4wvlZQrcQ= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -4424,6 +5085,13 @@ json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +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" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -4472,6 +5140,14 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" + jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -4563,6 +5239,14 @@ leven@^2.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4571,11 +5255,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4587,6 +5266,16 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -4622,7 +5311,7 @@ lodash.flatten@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= -lodash.get@^4.0.0, lodash.get@^4.4.2: +lodash.get@^4.0.0, lodash.get@^4.3.0, lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= @@ -4687,16 +5376,31 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= +lodash.zip@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" + integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= + lodash@4.17.15, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.5.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.13.1, lodash@^4.17.19, lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -4727,7 +5431,7 @@ lolex@4.2.0: resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== -loose-envify@^1.0.0: +loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -4752,6 +5456,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + macos-release@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" @@ -5021,7 +5732,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -5230,7 +5941,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0: +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -5249,6 +5960,11 @@ object-inspect@^1.7.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@^1.8.0, object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -5271,6 +5987,36 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.assign@^4.1.1, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" + integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + object.getownpropertydescriptors@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" @@ -5294,6 +6040,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + octokit-pagination-methods@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" @@ -5393,6 +6149,18 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ora@4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" @@ -5524,6 +6292,13 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-diff@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.5.1.tgz#18b3e82a0765ac1c8796e3854e475073a691c4fb" @@ -5722,6 +6497,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -5806,6 +6588,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -5826,11 +6613,23 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^1.12.1, prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + pretty-format@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" @@ -5867,6 +6666,15 @@ prompts@^0.1.9: kleur "^2.0.1" sisteransi "^0.1.1" +prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + protocols@^1.1.0, protocols@^1.4.0: version "1.4.7" resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" @@ -5940,6 +6748,11 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +quote@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/quote/-/quote-0.4.0.tgz#10839217f6c1362b89194044d29b233fd7f32f01" + integrity sha1-EIOSF/bBNiuJGUBE0psjP9fzLwE= + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -5982,6 +6795,11 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -5990,6 +6808,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -5999,6 +6825,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -6123,6 +6958,24 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regextras@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" + integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -6209,6 +7062,11 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +req-all@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/req-all/-/req-all-0.1.0.tgz#130051e2ace58a02eacbfc9d448577a736a9273a" + integrity sha1-EwBR4qzligLqy/ydRIV3pzapJzo= + request-promise-core@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" @@ -6283,6 +7141,11 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" @@ -6298,13 +7161,21 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: +resolve@1.x, resolve@^1.1.6, resolve@^1.10.0: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" +resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -6355,6 +7226,13 @@ rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rsvp@^3.3.3: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" @@ -6446,6 +7324,11 @@ semver-diff@^3.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + semver@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" @@ -6456,6 +7339,13 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -6562,6 +7452,15 @@ shx@^0.3.2: minimist "^1.2.0" shelljs "^0.8.1" +side-channel@^1.0.2, side-channel@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6589,6 +7488,15 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6681,6 +7589,14 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" +spdx-expression-parse@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + spdx-license-ids@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" @@ -6789,6 +7705,19 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.matchall@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" + integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.3" + string.prototype.padend@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" @@ -6797,6 +7726,14 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" @@ -6813,6 +7750,14 @@ string.prototype.trimright@^2.1.1: define-properties "^1.1.3" function-bind "^1.1.1" +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -6872,6 +7817,11 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +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" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -7014,6 +7964,16 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -7042,6 +8002,11 @@ text-hex@1.0.x: resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -7186,104 +8151,25 @@ ts-node@^7.0.1: source-map-support "^0.5.6" yn "^2.0.0" -tslib@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" - integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" -tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint-eslint-rules@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" - integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== - dependencies: - doctrine "0.7.2" - tslib "1.9.0" - tsutils "^3.0.0" - -tslint-immutable@^5.5.2: - version "5.5.2" - resolved "https://registry.yarnpkg.com/tslint-immutable/-/tslint-immutable-5.5.2.tgz#57331f6100156fa7ac4503e121cd2616df5bab8a" - integrity sha512-+dSMhEeUyRMrBe9XcjfRXT/FmqWKXsSdxttWoDzhUFSNCg8wfXx29M/ClQ78HhmdTaK+DDQsNS3wTGpSIhOv3g== - dependencies: - tsutils "^2.28.0 || ^3.0.0" - -tslint-microsoft-contrib@^5.0.3: - version "5.2.1" - resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81" - integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA== - dependencies: - tsutils "^2.27.2 <2.29.0" - -tslint-plugin-prettier@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.2.0.tgz#7806e115f054cb6ff7c26806b3f24bd5716208a5" - integrity sha512-K4pzyF+ueWw3DEJ7h4MqAZ3tHQBVsay1cRSQ0aDXErEuIdrkC5NKywCebOnKl8GHvTW0C9TrHpRMeo2D8iwI8w== - dependencies: - eslint-plugin-prettier "^2.2.0" - lines-and-columns "^1.1.6" - tslib "^1.7.1" - -tslint-react@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-4.2.0.tgz#41b16e0438365f8d3ed4120501f02cabff9fd1e4" - integrity sha512-lO22+FKr9ZZGueGiuALzvZE/8ANoDoCHGCknX1Ge3ALrfcLQHQ1VGdyb1scZXQFdEQEfwBTIU40r5BUlJpn0JA== - dependencies: - tsutils "^3.9.1" - -tslint-sonarts@^1.8.0, tslint-sonarts@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslint-sonarts/-/tslint-sonarts-1.9.0.tgz#feb593e92db328c0328b430b838adbe65d504de9" - integrity sha512-CJWt+IiYI8qggb2O/JPkS6CkC5DY1IcqRsm9EHJ+AxoWK70lvtP7jguochyNDMP2vIz/giGdWCfEM39x/I/Vnw== - dependencies: - immutable "^3.8.2" - -tslint@^5.11.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -"tsutils@^2.27.2 <2.29.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" - integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== - dependencies: - tslib "^1.8.1" - -"tsutils@^2.28.0 || ^3.0.0", tsutils@^3.0.0, tsutils@^3.9.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== +tsutils@^3.17.1: + version "3.19.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.19.0.tgz#9387cb5fcb71579aa0909c509604f8a7fbe1cff1" + integrity sha512-A7BaLUPvcQ1cxVu72YfD+UMI3SQPTDv/w4ol6TOwLyI0hwfG9EC+cYlhdflJTmtYTgZ3KqdPSe/otxU4K3kArg== dependencies: tslib "^1.8.1" @@ -7304,6 +8190,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -7341,14 +8234,6 @@ typescript@^3.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== -typestrict@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typestrict/-/typestrict-1.0.2.tgz#7167559a128508162920614ce58af6ac6b5ba29a" - integrity sha512-4wEr84NPc0ldINrgwgSBTmbWPiGVbwO3c9xumM0ujp0DlzhTs3jUT0NtVBOd5UXneSXcStNJWj80zerbW2YR6Q== - dependencies: - tslint-microsoft-contrib "^5.0.3" - tslint-sonarts "^1.8.0" - uglify-js@^3.1.4: version "3.8.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" @@ -7553,6 +8438,11 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -7730,7 +8620,7 @@ winston@^3.0.0: triple-beam "^1.3.0" winston-transport "^4.3.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -7884,6 +8774,11 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@10.x: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"