diff --git a/.vscode/launch.json b/.vscode/launch.json index 324a5409..adad4e54 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -194,20 +194,6 @@ "DEBUG": "redis,restapi,startup,appinsights,cache" } }, - { - "type": "node", - "request": "launch", - "name": "Job: Manager hygiene (5)", - "program": "${workspaceRoot}/dist/jobs/managers/index.js", - "cwd": "${workspaceRoot}/dist", - "preLaunchTask": "tsbuild", - "sourceMaps": true, - "console": "integratedTerminal", - "env": { - "NODE_ENV": "development", - "DEBUG": "redis,restapi,startup,appinsights" - } - }, { "type": "node", "request": "launch", diff --git a/interfaces/providers.ts b/interfaces/providers.ts index 13c6ac2e..2fc4425f 100644 --- a/interfaces/providers.ts +++ b/interfaces/providers.ts @@ -57,7 +57,6 @@ export interface IProviders { basedir?: string; campaignStateProvider?: ICampaignHelper; campaign?: any; // campaign redirection route, poor variable name - corporateContactProvider?: ICorporateContactProvider; config?: SiteConfiguration; customizedNewRepositoryLogic?: ICustomizedNewRepositoryLogic; customizedTeamPermissionsWebhookLogic?: ICustomizedTeamPermissionsWebhookLogic; diff --git a/jobs/managers/index.ts b/jobs/managers/index.ts deleted file mode 100644 index 8526b4e3..00000000 --- a/jobs/managers/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// -// Copyright (c) Microsoft. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -import Job from './task'; -import app from '../../app'; - -app.runJob(Job, { - insightsPrefix: 'JobRefreshManagers', -}); diff --git a/jobs/managers/task.ts b/jobs/managers/task.ts deleted file mode 100644 index e043d26d..00000000 --- a/jobs/managers/task.ts +++ /dev/null @@ -1,263 +0,0 @@ -// -// Copyright (c) Microsoft. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -// A simple job to cache the last-known manager e-mail address for linked users -// in Redis, using this app's abstracted APIs to be slightly more generic. - -import throat from 'throat'; - -import { ICachedEmployeeInformation, ICorporateLink, IReposJob, IReposJobResult } from '../../interfaces'; -import { createAndInitializeLinkProviderInstance } from '../../lib/linkProviders'; -import { sleep } from '../../utils'; -import { IMicrosoftIdentityServiceBasics } from '../../lib/corporateContactProvider'; -import { RedisPrefixManagerInfoCache } from '../../business'; - -export default async function refresh({ providers }: IReposJob): Promise { - const { config } = providers; - if (config?.jobs?.refreshWrites !== true) { - console.log('job is currently disabled to avoid metadata refresh/rewrites'); - return; - } - - const graphProvider = providers.graphProvider; - const cacheHelper = providers.cacheProvider; - const insights = providers.insights; - const linkProvider = await createAndInitializeLinkProviderInstance(providers, config); - - console.log('reading all links to gather manager info ahead of any terminations'); - const allLinks = await linkProvider.getAll(); - console.log(`READ: ${allLinks.length} links`); - insights.trackEvent({ - name: 'JobRefreshManagersReadLinks', - properties: { links: String(allLinks.length) }, - }); - - let errors = 0; - let notFoundErrors = 0; - const errorList = []; - - let managerUpdates = 0; - let managerSets = 0; - let managerMetadataUpdates = 0; - - const userDetailsThroatCount = 1; - const secondsDelayAfterError = 1; - const secondsDelayAfterSuccess = 0.09; //0.1; - - const managerInfoCachePeriodMinutes = 60 * 24 * 7 * 12; // 12 weeks - - let processed = 0; - - const bulkContacts = new Map(); - - const throttle = throat(userDetailsThroatCount); - const unknownServiceAccounts: ICorporateLink[] = []; - const formerAccounts: ICorporateLink[] = []; - await Promise.all( - allLinks.map((link: ICorporateLink) => - throttle(async () => { - const employeeDirectoryId = link.corporateId; - ++processed; - bulkContacts.set(link.corporateUsername, false); - if (processed % 25 === 0) { - console.log(`${processed}/${allLinks.length}.`); - } - if (link.isServiceAccount) { - console.log(`Service account: ${link.corporateUsername}`); - } - let info = null, - infoError = null; - try { - info = await graphProvider.getUserAndManagerById(employeeDirectoryId); - if (link.isServiceAccount) { - console.log(); - // console.dir(info); - console.log(`info OK for SA ${link.corporateUsername}`); - } - } catch (retrievalError) { - if (link.isServiceAccount) { - // console.dir(retrievalError); - console.log(`no info for SA: ${link.corporateUsername}`); - unknownServiceAccounts.push(link); - } else { - console.log(); - console.log(`Not present: ${link.corporateUsername} ${retrievalError}`); - infoError = retrievalError; - } - infoError = retrievalError; - } - if ( - providers.corporateContactProvider && - ((info && info.userPrincipalName) || link.corporateUsername) - ) { - try { - const userPrincipalName = - info && info.userPrincipalName ? info.userPrincipalName : link.corporateUsername; - const contactsCache = await providers.corporateContactProvider.lookupContacts(userPrincipalName); - if (contactsCache || (!contactsCache && link.isServiceAccount)) { - bulkContacts.set(userPrincipalName, contactsCache); - } - } catch (identityServiceError) { - // Bulk cache is a secondary function of this job - console.warn(identityServiceError); - } - } - if (link.isServiceAccount) { - console.log(`skipping service account link ${link.corporateUsername}`); - console.log(); - return; - } - try { - if (infoError) { - throw infoError; - } - if (!info || !info.manager) { - console.log( - `No manager info is set for ${employeeDirectoryId} - ${info.displayName} ${info.userPrincipalName}` - ); - return; // no sleep - } - // Has the user's corporate display information changed? - let linkChanges = false; - if (info.displayName !== link.corporateDisplayName) { - linkChanges = true; - console.log( - `Update to corporate link: display name changed from ${link.corporateDisplayName} to ${info.displayName}` - ); - link.corporateDisplayName = info.displayName; - } - if (info.userPrincipalName !== link.corporateUsername) { - linkChanges = true; - console.log( - `Update to corporate link: username changed from ${link.corporateUsername} to ${info.userPrincipalName}` - ); - link.corporateUsername = info.userPrincipalName; - } - if (linkChanges) { - await linkProvider.updateLink(link); - console.log(`Updated link for ${link.corporateId}`); - } - if (!info.manager.mail) { - console.log('No manager mail address'); - throw new Error('No manager mail address in graph'); - } - const reducedWithManagerInfo: ICachedEmployeeInformation = { - id: info.id, - displayName: info.displayName, - userPrincipalName: info.userPrincipalName, - managerId: info.manager.id, - managerDisplayName: info.manager.displayName, - managerMail: info.manager.mail, - }; - const key = `${RedisPrefixManagerInfoCache}${employeeDirectoryId}`; - const currentManagerIfAny = (await cacheHelper.getObjectCompressed(key)) as any; - if (!currentManagerIfAny) { - await cacheHelper.setObjectCompressedWithExpire( - key, - reducedWithManagerInfo, - managerInfoCachePeriodMinutes - ); - ++managerSets; - console.log( - `Manager for ${reducedWithManagerInfo.displayName} set to ${reducedWithManagerInfo.managerDisplayName}` - ); - } else { - let updateEntry = false; - if (currentManagerIfAny.managerId !== reducedWithManagerInfo.managerId) { - updateEntry = true; - ++managerUpdates; - console.log( - `Manager for ${reducedWithManagerInfo.displayName} updated to ${reducedWithManagerInfo.managerDisplayName}` - ); - } else if ( - currentManagerIfAny.id !== reducedWithManagerInfo.id || - currentManagerIfAny.displayName !== reducedWithManagerInfo.displayName || - currentManagerIfAny.userPrincipalName !== reducedWithManagerInfo.userPrincipalName || - currentManagerIfAny.managerDisplayName !== reducedWithManagerInfo.managerDisplayName || - currentManagerIfAny.managerMail !== reducedWithManagerInfo.managerMail - ) { - updateEntry = true; - ++managerMetadataUpdates; - console.log(`Metadata for ${reducedWithManagerInfo.displayName} updated`); - } - if (updateEntry) { - await cacheHelper.setObjectCompressedWithExpire( - key, - reducedWithManagerInfo, - managerInfoCachePeriodMinutes - ); - } - } - } catch (retrievalError) { - if (retrievalError && retrievalError.status && retrievalError.status === 404) { - ++notFoundErrors; - formerAccounts.push(link); - // Not deleting links so proactively: await linkProvider.deleteLink(link); - insights.trackEvent({ - name: 'JobRefreshManagersNotFound', - properties: { error: retrievalError.message }, - }); - } else { - console.dir(retrievalError); - ++errors; - insights.trackEvent({ - name: 'JobRefreshManagersError', - properties: { error: retrievalError.message }, - }); - } - await sleep(secondsDelayAfterError * 1000); - return; - } - await sleep(secondsDelayAfterSuccess * 1000); - }) - ) - ); - - console.log('All done with', errors, 'errors. Not found errors:', notFoundErrors); - console.dir(errorList); - console.log(); - - console.log(`Service Accounts not in the directory: ${unknownServiceAccounts.length}`); - console.log( - unknownServiceAccounts - .map((x) => x.corporateUsername) - .sort() - .join('\n') - ); - console.log(); - - console.log(`Former accounts not in the directory: ${formerAccounts.length}`); - console.log( - formerAccounts - .map((x) => x.corporateUsername) - .sort() - .join('\n') - ); - console.log(); - - if (bulkContacts.size) { - console.log(`Writing ${bulkContacts.size} contacts to bulk cache...`); - try { - await providers.corporateContactProvider.setBulkCachedContacts(bulkContacts); - console.log('Cached.'); - } catch (cacheError) { - console.log('Cache problem:'); - console.warn(cacheError); - } - } - - console.log(`Manager updates: ${managerUpdates}`); - console.log(`Manager sets: ${managerSets}`); - console.log(`Other updates: ${managerMetadataUpdates}`); - console.log(); - return { - successProperties: { - managerUpdates, - managerSets, - managerMetadataUpdates, - errors, - }, - }; -} diff --git a/lib/corporateContactProvider.ts b/lib/corporateContactProvider.ts index 9efa19ac..94a571aa 100644 --- a/lib/corporateContactProvider.ts +++ b/lib/corporateContactProvider.ts @@ -3,16 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -import axios, { AxiosError } from 'axios'; - -import { CreateError } from '../transitional'; -import { ICacheHelper } from './caching'; - -const DefaultCacheMinutesPerContact = 120; -const BulkCacheMinutes = 60 * 24 * 14; - -const BulkCacheKey = 'cc:bulk'; - export interface ICorporateContactInformation { openSourceContact?: string; primaryLegalContact?: string; @@ -31,154 +21,3 @@ export interface ICorporateContactProvider { getBulkCachedContacts(): Promise>; setBulkCachedContacts(map: Map): Promise; } - -export default function createCorporateContactProviderInstance( - config, - cacheHelper: ICacheHelper -): ICorporateContactProvider { - return new MicrosoftIdentityService(config, cacheHelper); -} - -export interface IMicrosoftIdentityServiceBasics { - aadId?: string; - alias?: string; - costCenterCode?: string; - emailAddress?: string; - functionHierarchyExecCode?: string; - manager?: string; - preferredName?: string; - userPrincipalName?: string; -} - -interface IMicrosoftIdentityServiceResponse extends IMicrosoftIdentityServiceBasics { - attorney?: string; - group?: string; - highRiskBusiness?: string; - immediate?: boolean; - legal?: string; - legalOssContact?: string; - legalPrimaryContact?: string; - legalSecondaryContact?: string; - lowRiskBusiness?: string; - maintainer?: string; - structure?: IMicrosoftIdentityServiceBasics[]; - system?: string; -} - -class MicrosoftIdentityService implements ICorporateContactProvider { - #identityConfig: any; - #cacheHelper: ICacheHelper; - - constructor(config: any, cacheHelper: ICacheHelper) { - this.#identityConfig = config.identity; - this.#cacheHelper = cacheHelper; - } - - async lookupContacts(corporateUsername: string): Promise { - let response: IMicrosoftIdentityServiceResponse; - const cacheKey = `cc:${corporateUsername}`; - if (this.#cacheHelper) { - try { - response = await this.#cacheHelper.getObject(cacheKey); - } catch (ignoreError) { - /* ignored */ - } - } - if (!response || !Object.keys(response).length) { - response = await this.callIdentityService(corporateUsername); - if (this.#cacheHelper && response) { - // kicks off an async operation - this.#cacheHelper.setObjectWithExpire(cacheKey, response, DefaultCacheMinutesPerContact); - } - } - if (!response) { - return null; - } - let managerUsername = null, - managerDisplayName = null; - const manager = response.structure && response.structure.length ? response.structure[0] : null; - if (manager) { - managerDisplayName = manager.preferredName; - managerUsername = manager.userPrincipalName; - } - return { - openSourceContact: response.legalOssContact, - primaryLegalContact: response.legalPrimaryContact, - secondaryLegalContact: response.legalSecondaryContact, - highRiskBusinessReviewer: response.highRiskBusiness, - lowRiskBusinessReviewer: response.lowRiskBusiness, - alias: response.alias, - emailAddress: response.emailAddress, - managerUsername, - managerDisplayName, - legal: response.legal, - }; - } - - async getBulkCachedContacts(): Promise> { - let map = new Map(); - if (!this.#cacheHelper) { - return map; - } - const bulk = await this.#cacheHelper.getObject(BulkCacheKey); - if (bulk && bulk.entities) { - if (Array.isArray(bulk.entities)) { - map = new Map(bulk.entities); - if (bulk.empties) { - for (let i = 0; i < bulk.empties.length; i++) { - map.set(bulk.empties[i], false); - } - } - } else { - console.warn(`Cached bulk entry ${BulkCacheKey} does not contain an array of entities`); - } - } - return map; - } - - async setBulkCachedContacts(map: Map): Promise { - if (!this.#cacheHelper) { - return; - } - const all = Array.from(map.entries()); - const entities = all.filter((e) => typeof e[1] !== 'boolean'); - const empties = all - .filter((e) => typeof e[1] === 'boolean') - .map((e) => e[0]) - .filter((e) => e); - const obj = { entities, empties }; - await this.#cacheHelper.setObjectCompressedWithExpire(BulkCacheKey, obj, BulkCacheMinutes); - } - - private getIdentityServiceRequestOptions(endpoint: string) { - const url = this.#identityConfig.url + endpoint; - const authToken = 'Basic ' + Buffer.from(this.#identityConfig.pat + ':', 'utf8').toString('base64'); - const headers = { - Authorization: authToken, - }; - return { url, headers }; - } - - async callIdentityService(corporateUsername: string): Promise { - try { - const response = await axios(this.getIdentityServiceRequestOptions(`/${corporateUsername}`)); - if ((response.data as any).error?.message) { - // axios returns unknown now - throw CreateError.InvalidParameters((response.data as any).error.message); - } - const entity = response.data as IMicrosoftIdentityServiceResponse; - return entity; - } catch (error) { - const axiosError = error as AxiosError; - if (axiosError?.response?.status === 404) { - return null; - } else if (axiosError?.response?.status >= 300) { - throw CreateError.CreateStatusCodeError( - axiosError.response.status, - `Response code: ${axiosError.response.status}` - ); - } - throw error; - } - } -} diff --git a/lib/mailAddressProvider/microsoftMailAddressProvider.ts b/lib/mailAddressProvider/microsoftMailAddressProvider.ts index e7c635e8..7947a271 100644 --- a/lib/mailAddressProvider/microsoftMailAddressProvider.ts +++ b/lib/mailAddressProvider/microsoftMailAddressProvider.ts @@ -7,10 +7,6 @@ import { IProviders } from '../../interfaces'; import { IMailAddressProvider } from '.'; export default function createMailAddressProvider(options): IMailAddressProvider { - const config = options.config; - if (!config.identity || !config.identity.url || !config.identity.pat) { - throw new Error('Not configured for the Identity service'); - } const providers = options.providers as IProviders; if (!providers) { throw new Error( diff --git a/middleware/initialize.ts b/middleware/initialize.ts index df68f501..1a46939a 100644 --- a/middleware/initialize.ts +++ b/middleware/initialize.ts @@ -61,7 +61,6 @@ import CosmosCache from '../lib/caching/cosmosdb'; import BlobCache from '../lib/caching/blob'; import { StatefulCampaignProvider } from '../lib/campaigns'; import CosmosHelper from '../lib/cosmosHelper'; -import createCorporateContactProviderInstance from '../lib/corporateContactProvider'; import { IQueueProcessor } from '../lib/queues'; import ServiceBusQueueProcessor from '../lib/queues/servicebus'; import AzureQueuesProcessor from '../lib/queues/azurequeue'; @@ -266,11 +265,6 @@ async function initializeAsync( }); await providers.diagnosticsDrop.initialize(); } - - providers.corporateContactProvider = createCorporateContactProviderInstance( - config, - providers.cacheProvider - ); providers.corporateAdministrationProfile = getCompanySpecificDeployment()?.administrationSection; providers.corporateViews = await initializeCorporateViews(providers, rootdir); diff --git a/package-lock.json b/package-lock.json index 49e1059f..6f9e48d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "app-root-path": "3.1.0", "applicationinsights": "2.4.0", "async-prompt": "1.0.1", - "axios": "1.2.2", + "axios": "1.2.3", "basic-auth": "2.0.1", "body-parser": "1.20.1", "color-contrast-checker": "2.1.0", @@ -95,9 +95,9 @@ "@types/simple-oauth2": "4.1.1", "@types/validator": "13.7.10", "@typescript-eslint/eslint-plugin": "5.48.1", - "@typescript-eslint/parser": "5.48.1", - "cspell": "6.18.1", - "eslint": "8.31.0", + "@typescript-eslint/parser": "5.48.2", + "cspell": "6.19.1", + "eslint": "8.32.0", "eslint-config-prettier": "8.6.0", "eslint-plugin-n": "15.6.1", "eslint-plugin-prettier": "4.2.1", @@ -106,7 +106,7 @@ "jest-junit": "15.0.0", "lint-staged": "13.1.0", "markdownlint-cli2": "0.6.0", - "prettier": "2.8.2", + "prettier": "2.8.3", "ts-jest": "29.0.5", "ts-node": "10.9.1", "typescript": "4.9.4" @@ -1158,53 +1158,53 @@ "dev": true }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.18.1.tgz", - "integrity": "sha512-3rGSZ5brzt9KFCoa1QVna8SiYnYzB8hqQyrWjtoJhV5SWjD4MpBtNt2xm5JtfNONWHeiHvkpPHasXjJvYXwDNg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.19.1.tgz", + "integrity": "sha512-JnHij916qbmBX0Gh4a1D0QRMjrq7Wkd24skEt3A+3R2v7y6x0iQ8SKxp95/NXR8Ys/yfzgyU66+7HKEDytE7jA==", "dev": true, "dependencies": { "@cspell/dict-ada": "^4.0.1", "@cspell/dict-aws": "^3.0.0", "@cspell/dict-bash": "^4.1.1", - "@cspell/dict-companies": "^3.0.5", + "@cspell/dict-companies": "^3.0.6", "@cspell/dict-cpp": "^4.0.1", "@cspell/dict-cryptocurrencies": "^3.0.1", "@cspell/dict-csharp": "^4.0.2", - "@cspell/dict-css": "^4.0.1", + "@cspell/dict-css": "^4.0.2", "@cspell/dict-dart": "^2.0.1", "@cspell/dict-django": "^4.0.1", - "@cspell/dict-docker": "^1.1.4", + "@cspell/dict-docker": "^1.1.5", "@cspell/dict-dotnet": "^4.0.1", "@cspell/dict-elixir": "^4.0.1", - "@cspell/dict-en_us": "^4.1.2", + "@cspell/dict-en_us": "^4.2.0", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.0", "@cspell/dict-fonts": "^3.0.0", - "@cspell/dict-fullstack": "^3.0.0", - "@cspell/dict-gaming-terms": "^1.0.3", + "@cspell/dict-fullstack": "^3.1.1", + "@cspell/dict-gaming-terms": "^1.0.4", "@cspell/dict-git": "^2.0.0", "@cspell/dict-golang": "^5.0.1", "@cspell/dict-haskell": "^4.0.1", "@cspell/dict-html": "^4.0.2", "@cspell/dict-html-symbol-entities": "^4.0.0", - "@cspell/dict-java": "^5.0.3", + "@cspell/dict-java": "^5.0.4", "@cspell/dict-k8s": "^1.0.0", "@cspell/dict-latex": "^3.1.0", "@cspell/dict-lorem-ipsum": "^3.0.0", - "@cspell/dict-lua": "^3.0.0", + "@cspell/dict-lua": "^4.0.0", "@cspell/dict-node": "^4.0.2", - "@cspell/dict-npm": "^5.0.2", + "@cspell/dict-npm": "^5.0.3", "@cspell/dict-php": "^3.0.4", - "@cspell/dict-powershell": "^3.0.0", + "@cspell/dict-powershell": "^4.0.0", "@cspell/dict-public-licenses": "^2.0.1", "@cspell/dict-python": "^4.0.1", "@cspell/dict-r": "^2.0.1", - "@cspell/dict-ruby": "^3.0.0", - "@cspell/dict-rust": "^3.0.0", - "@cspell/dict-scala": "^3.0.0", - "@cspell/dict-software-terms": "^3.0.7", + "@cspell/dict-ruby": "^4.0.1", + "@cspell/dict-rust": "^4.0.0", + "@cspell/dict-scala": "^4.0.0", + "@cspell/dict-software-terms": "^3.1.0", "@cspell/dict-sql": "^2.0.1", - "@cspell/dict-svelte": "^1.0.1", + "@cspell/dict-svelte": "^1.0.2", "@cspell/dict-swift": "^2.0.1", "@cspell/dict-typescript": "^3.1.0", "@cspell/dict-vue": "^3.0.0" @@ -1214,27 +1214,27 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.18.1.tgz", - "integrity": "sha512-IFtZBae5BCBIPZuRhEs0U0emFrh5hmN0N4+WR5paP4UurV5Ql9n2JsSj1Bmdx79aSFAw4mGpJnhZZtGQcFDnPQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.19.1.tgz", + "integrity": "sha512-yRn91Jopab26Ii6516NCKBDnhjiMVMEuBFelRVQwWbzpI7tTCGk2aDdEGAEj41Q5/dvrO8N89dQEveWzxyEXVg==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@cspell/cspell-service-bus": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.18.1.tgz", - "integrity": "sha512-QVbVA8Ube+Z4ghywzsTQLxqdiCubYi7L/+KeFRatzh3bZ5K5pVcYHEbDhAlFdUj6FhXw0EP2n/Xb+8ZLye4LLg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.19.1.tgz", + "integrity": "sha512-WLUwNu2e1IrxtzjKIOw7/rUCDjvA6zwMeROw4mrBwOnM0+s/NLZIoEY8apSV05ojc8kiEXG0iJojQNW+7yQS8g==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@cspell/cspell-types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.18.1.tgz", - "integrity": "sha512-5X+ABUMPrCoCjQvbqb/HeCoNiSgUrJhR9O4tSlMU5/z0NRNLFSyjf+3LE6ZU2+kdwNU7tmYCr+cbCpb3UKpvQQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.19.1.tgz", + "integrity": "sha512-Ag6XPBoajmeslrCf0sB/S5vsdn4DcG/DRt0jUtIML/W7f/qlzlUucHQvpzXB8FEpB/E8lAI+oM7JIqSuq0kZQQ==", "dev": true, "engines": { "node": ">=14" @@ -1259,9 +1259,9 @@ "dev": true }, "node_modules/@cspell/dict-companies": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.5.tgz", - "integrity": "sha512-f5lVcL/dG2kUHh8QFLakU722lgMwqXSjZUdmW6QdOMmqcE8cgl+oN9qk/qYlCSBMsYA7uexwn3hIr4h0naoPlw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.6.tgz", + "integrity": "sha512-6rWuwZxPisn/MP41DzBtChVgbz9b6HSjBH3X0s3k7zlBaxrw6xFAZGKH9KGFSPTiV+WD9j+IIn2/ITXERGjNLA==", "dev": true }, "node_modules/@cspell/dict-cpp": { @@ -1283,9 +1283,9 @@ "dev": true }, "node_modules/@cspell/dict-css": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.1.tgz", - "integrity": "sha512-jxsncdeiN/wkZGqU8iLtn24n3e0Fwugj6T48rjWUItn/i3C9j2W7RXOVqd7ZIeWeV8ibyq0WWiwA8Ajg6XaKpA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.2.tgz", + "integrity": "sha512-0NxBcB36b1Jy23Tf5YLrD8+PvBhE3FgBci3rwtw2DEqVigEX6uodecfoh9I4kcU8PZlVsDujrUfwgzYCWh/feQ==", "dev": true }, "node_modules/@cspell/dict-dart": { @@ -1319,9 +1319,9 @@ "dev": true }, "node_modules/@cspell/dict-en_us": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.1.4.tgz", - "integrity": "sha512-smRT8Rx38+z1kiNl3kBvadoPdYgxCovxw2rsuO4/XtLRlSEcGPQgYJ0CCdcXMd9bhMY5roXPCcvYkBsyUVvg4A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.2.0.tgz", + "integrity": "sha512-n5hz8vQ6FAp4f+ZW/raN/f4G69V1LrhNZ7kgXM+Nirmkrz16oXmd1defTulbd7yf2T2XU8DmsrTnkuRG9mSQKw==", "dev": true }, "node_modules/@cspell/dict-en-gb": { @@ -1343,9 +1343,9 @@ "dev": true }, "node_modules/@cspell/dict-fullstack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.0.1.tgz", - "integrity": "sha512-r077HcbxGQ0gSjs4eqryvb9cu8/Noe7pzl9QksxFIEaMgyP180DEaCLAOnat4KHl7X0wntipY+naY5PVRQUI9A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.1.tgz", + "integrity": "sha512-w2n3QvqEiufmvlBuNduury/pySrhfOcWFfCvvpUXTJvWbfRVGkt6ANZuTuy3/7Z2q4GYUqsd139te4Q8m0jRHQ==", "dev": true }, "node_modules/@cspell/dict-gaming-terms": { @@ -1409,9 +1409,9 @@ "dev": true }, "node_modules/@cspell/dict-lua": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-3.0.0.tgz", - "integrity": "sha512-WOhSCgS5wMxkGQJ8siB90iTB9ElquJB7FeqYSbJqqs6cUwH8G7MM/CEDPL6h7vCo0+v3GuxQ8yKWDSUcUhz9Lg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.0.tgz", + "integrity": "sha512-aQPyc/nP67tOlW6ACpio9Q5mZ/Z1hqwXC5rt5tkoQ2GsnCqeyIXDrX0CN+RGK53Lj4P02Jz/dPxs/nX8eDUFsw==", "dev": true }, "node_modules/@cspell/dict-node": { @@ -1433,9 +1433,9 @@ "dev": true }, "node_modules/@cspell/dict-powershell": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-3.0.0.tgz", - "integrity": "sha512-pkztY9Ak4oc33q+Qxcn9/CTOKo4N8YIRRE6v67WwQOncA5QIJfcOPUrjfR3Z8SpzElXhu3s9qtWWSqbCy6qmcA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-4.0.0.tgz", + "integrity": "sha512-1Lbm+3+Sx63atl4MM3lPeCUc90JjRyKP9+exmy2cQimXNju9ngtuDWwapHUnhQ47qnzrsBY4ydm36KCfJarXJA==", "dev": true }, "node_modules/@cspell/dict-public-licenses": { @@ -1457,27 +1457,27 @@ "dev": true }, "node_modules/@cspell/dict-ruby": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-3.0.0.tgz", - "integrity": "sha512-sA98T8Y1Pmq3RStVkO14E8vTWkq6JUn8c8PldiMyYgV0yfQgwhQfFAzlSfF3Gg2B0VkIdqt2et2SPN7f9wp7fQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-4.0.1.tgz", + "integrity": "sha512-p9nLDsffPadPLLwdLQj4Gk0IsZ64iCSxnSCaeFXslFiD17FtJVh1YMHP7KE9M73u22Hprq+a1Yw25/xp6Tkt3g==", "dev": true }, "node_modules/@cspell/dict-rust": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-3.0.0.tgz", - "integrity": "sha512-L1T1IBsYJZVDmfOGAbVLcpc6arWxRRCSJYvHSwEDBGrNuMyJ4jx/NvBEz5crcKf4vVKgwVlXgzQlJJZ8AVxU9w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.0.tgz", + "integrity": "sha512-nzJsgLR6/JXtM41Cr5FG89r8sBKW6aFjvCqPxeaBJYLAL0JuvsVUcd16rW2lTsdbx5J8yUQDD7mgCZFk6merJQ==", "dev": true }, "node_modules/@cspell/dict-scala": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-3.0.0.tgz", - "integrity": "sha512-sIiCQDIMMnNns/fzD61z5npbh5pypaKq07Orqe0+eRfdQpika8iRSGUGFHVbtdd1JzB1DyTCV2e8OwdaQiXqJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-4.0.0.tgz", + "integrity": "sha512-ugdjt66/Ah34yF3u3DUNjCHXnBqIuxUUfdeBobbGxfm29CNgidrISV1NUh+xi8tPynMzSTpGbBiArFBH6on5XQ==", "dev": true }, "node_modules/@cspell/dict-software-terms": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.0.8.tgz", - "integrity": "sha512-otq0yIcG19rNXkmE/EGWgUK7ClLrn/BE4n5Di3HKLw6XEp0sNBp1DKf88bg0LvbWh15uCAJ5xKAzF1sVPy2Y3w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.1.0.tgz", + "integrity": "sha512-KQVpHmuGJprkriClbwTf1TfCjkCkS+GqLBO8ytltmYylCHZumJMfA3sM10e3zmsVIlungrtNLG9xz5opIdm/2A==", "dev": true }, "node_modules/@cspell/dict-sql": { @@ -1511,9 +1511,9 @@ "dev": true }, "node_modules/@cspell/strong-weak-map": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.18.1.tgz", - "integrity": "sha512-etyMLISiDzgFf1BSGpUBD62cHp9NrCyrOi+iT7WrJ+My0l6IPRIhANuAVp2JcsXxe28en4X3Bp/egd46Q5Rpkg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.19.1.tgz", + "integrity": "sha512-ncq8OUTi+oGYAvEfkeuCBjmq7qglQ9XQTZJNn95ave1TDoupP3y9dRo5gE8qH9kaNRZ+n7ANDjjSWZ2NIz2MoA==", "dev": true, "engines": { "node": ">=14.6" @@ -3041,14 +3041,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", - "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz", + "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", "debug": "^4.3.4" }, "engines": { @@ -3067,6 +3067,80 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz", + "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz", + "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz", + "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz", + "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.48.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", @@ -3487,9 +3561,9 @@ } }, "node_modules/axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.3.tgz", + "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -4390,22 +4464,22 @@ } }, "node_modules/cspell": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.18.1.tgz", - "integrity": "sha512-euHEQuyZwe/oiTiHJr4lSBnT4MrWMNy3V3GiOmi2Zekw/DTgN2glvsMskudobcDB/HReCtUlG8yALySL/GiLvQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.19.1.tgz", + "integrity": "sha512-LwWhBfk0XampjviTXy2nE9U2p6JrEgffZPuOKFkL2PSc6YT/oV4ZF/brrjcO4ZmPnHOZOCkLsOyJKJ4Ysj5mrw==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.18.1", + "@cspell/cspell-pipe": "6.19.1", "chalk": "^4.1.2", - "commander": "^9.4.1", - "cspell-gitignore": "6.18.1", - "cspell-glob": "6.18.1", - "cspell-lib": "6.18.1", + "commander": "^10.0.0", + "cspell-gitignore": "6.19.1", + "cspell-glob": "6.19.1", + "cspell-lib": "6.19.1", + "fast-glob": "^3.2.12", "fast-json-stable-stringify": "^2.1.0", "file-entry-cache": "^6.0.1", "fs-extra": "^11.1.0", "get-stdin": "^8.0.0", - "glob": "^8.0.3", "imurmurhash": "^0.1.4", "semver": "^7.3.8", "strip-ansi": "^6.0.1", @@ -4422,14 +4496,14 @@ } }, "node_modules/cspell-dictionary": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.18.1.tgz", - "integrity": "sha512-q+tK+MWvJs9xL8wv79YlGPddUFb3Usuqh+VB8D0Zs7Xlsa/cw9bljRluHkpQrNr8APdZijGlgQP8L0cEr0/rEw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.19.1.tgz", + "integrity": "sha512-idlqDabvrh/nNj+p4tWFb/KbEV3tYuHXx8EwBg3h6BmjayEF1pxgghYW2ZoaRXp/meq2V2319kdefYyfX58EdA==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1", - "cspell-trie-lib": "6.18.1", + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1", + "cspell-trie-lib": "6.19.1", "fast-equals": "^4.0.3", "gensequence": "^4.0.3" }, @@ -4438,12 +4512,12 @@ } }, "node_modules/cspell-gitignore": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.18.1.tgz", - "integrity": "sha512-btjWg8ibbOItQg0l43keBl0Tfg1gt3MaeNMPraZlEbprnG8oQjzcgB1VYYya6DOnJdaPwInjGbS1kfCL4j4LpA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.19.1.tgz", + "integrity": "sha512-2gNVU17xPwG5CDe0dEOBB6obGRHjIpbWvnvkPiHxlmGZCdZi1al3RP5qfb+OwCRFWRdWdM+ANkseXpUdbxEE2Q==", "dev": true, "dependencies": { - "cspell-glob": "6.18.1", + "cspell-glob": "6.19.1", "find-up": "^5.0.0" }, "bin": { @@ -4454,9 +4528,9 @@ } }, "node_modules/cspell-glob": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.18.1.tgz", - "integrity": "sha512-6dBBtQ1lRnVPoM13GOv7mJflkIvEr93TN96saQPWoaQqX8jwmklcMmDUndIkLcA7TnyxBbi3Z3X+s68zj/YGqw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.19.1.tgz", + "integrity": "sha512-pYU5j1j7OLXQp9B5MMVTLPz7f3Xr9BT57gJnTndcmQ2QKD0pTm2IVLEHGYjVhylrnMa2tIWhMbwpW7q/L6x/Tw==", "dev": true, "dependencies": { "micromatch": "^4.0.5" @@ -4466,13 +4540,13 @@ } }, "node_modules/cspell-grammar": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.18.1.tgz", - "integrity": "sha512-QPjOA9xwDPb3aoJXUOdL2aWX2wt8lPD7CoDROo8uruOXHAQzIY56q12EBy3jLIkxJFl9KAwtlEHkbLaJfTpIpg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.19.1.tgz", + "integrity": "sha512-i46WKdprENJ1xxZbSgdQ5WjauthzfJzfvmXvOWEpXPeT9Us2FyRutHeFcnsSHbF/jysh25/YJaXWM2xsUF6mqg==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1" + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1" }, "bin": { "cspell-grammar": "bin.js" @@ -4482,40 +4556,39 @@ } }, "node_modules/cspell-io": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.18.1.tgz", - "integrity": "sha512-WIfiDdG/7235CbkrjKPYIkP9oT8VvWXVTAeq6JkJPH7bm2A/CoE8ClieVsbbJnPyJnetnCuOuuz/zmuheVD02g==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.19.1.tgz", + "integrity": "sha512-gKC+LbLMJCrcjHWIFz7h4Q6/BMLAnuliYacRTE44Z/Xfh/rpWTyLhyb6s5RTSVgSwqnNQSVsjmZoeyW3rE8B8A==", "dev": true, "dependencies": { - "@cspell/cspell-service-bus": "6.18.1", - "node-fetch": "^2.6.7" + "@cspell/cspell-service-bus": "6.19.1", + "node-fetch": "^2.6.8" }, "engines": { "node": ">=14" } }, "node_modules/cspell-lib": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.18.1.tgz", - "integrity": "sha512-4MGjp51Ed8BbMPGXgqLGgUiWyb2DbOxgVEuWm8nxumxu7UmAWDBdMiD3QlY+ZYmfOJEVSa/kG7DTMrLQoeFwnQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.19.1.tgz", + "integrity": "sha512-3zWZtjc4TBDbKuB7oc1cvekCnmoBjxYWdb3YYs663fi7VubJi6gz7AQCeBAAKDLnKBSVNFtJeiVfAjGLytf55g==", "dev": true, "dependencies": { - "@cspell/cspell-bundled-dicts": "6.18.1", - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1", - "@cspell/strong-weak-map": "6.18.1", + "@cspell/cspell-bundled-dicts": "6.19.1", + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1", + "@cspell/strong-weak-map": "6.19.1", "clear-module": "^4.1.2", "comment-json": "^4.2.3", "configstore": "^5.0.1", "cosmiconfig": "^8.0.0", - "cspell-dictionary": "6.18.1", - "cspell-glob": "6.18.1", - "cspell-grammar": "6.18.1", - "cspell-io": "6.18.1", - "cspell-trie-lib": "6.18.1", + "cspell-dictionary": "6.19.1", + "cspell-glob": "6.19.1", + "cspell-grammar": "6.19.1", + "cspell-io": "6.19.1", + "cspell-trie-lib": "6.19.1", "fast-equals": "^4.0.3", "find-up": "^5.0.0", - "fs-extra": "^11.1.0", "gensequence": "^4.0.3", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", @@ -4537,13 +4610,13 @@ } }, "node_modules/cspell-trie-lib": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.18.1.tgz", - "integrity": "sha512-rV32bqchz0uYdK6uafaw5QnYImRWQMcT2RNbBo0LXN6XoYoTSgpnPWTxQauNLxOm1m+dfb3GdasoAsjgWkPGnQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.19.1.tgz", + "integrity": "sha512-sdGQj0UVvNjloV8hmjasGQbcb1hJP0IwMz6qWOce793RqA3N2BKiZt2kJzsNXM8dbPwGFpxHu7nfF0kVL30u1g==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1", + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1", "fs-extra": "^11.1.0", "gensequence": "^4.0.3" }, @@ -4551,44 +4624,13 @@ "node": ">=14" } }, - "node_modules/cspell/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/cspell/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cspell/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cspell/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/debug": { @@ -4965,9 +5007,9 @@ } }, "node_modules/eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.4.1", @@ -8423,9 +8465,9 @@ "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==" }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9119,9 +9161,9 @@ } }, "node_modules/prettier": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.2.tgz", - "integrity": "sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", + "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -11857,74 +11899,74 @@ "dev": true }, "@cspell/cspell-bundled-dicts": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.18.1.tgz", - "integrity": "sha512-3rGSZ5brzt9KFCoa1QVna8SiYnYzB8hqQyrWjtoJhV5SWjD4MpBtNt2xm5JtfNONWHeiHvkpPHasXjJvYXwDNg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.19.1.tgz", + "integrity": "sha512-JnHij916qbmBX0Gh4a1D0QRMjrq7Wkd24skEt3A+3R2v7y6x0iQ8SKxp95/NXR8Ys/yfzgyU66+7HKEDytE7jA==", "dev": true, "requires": { "@cspell/dict-ada": "^4.0.1", "@cspell/dict-aws": "^3.0.0", "@cspell/dict-bash": "^4.1.1", - "@cspell/dict-companies": "^3.0.5", + "@cspell/dict-companies": "^3.0.6", "@cspell/dict-cpp": "^4.0.1", "@cspell/dict-cryptocurrencies": "^3.0.1", "@cspell/dict-csharp": "^4.0.2", - "@cspell/dict-css": "^4.0.1", + "@cspell/dict-css": "^4.0.2", "@cspell/dict-dart": "^2.0.1", "@cspell/dict-django": "^4.0.1", - "@cspell/dict-docker": "^1.1.4", + "@cspell/dict-docker": "^1.1.5", "@cspell/dict-dotnet": "^4.0.1", "@cspell/dict-elixir": "^4.0.1", - "@cspell/dict-en_us": "^4.1.2", + "@cspell/dict-en_us": "^4.2.0", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.0", "@cspell/dict-fonts": "^3.0.0", - "@cspell/dict-fullstack": "^3.0.0", - "@cspell/dict-gaming-terms": "^1.0.3", + "@cspell/dict-fullstack": "^3.1.1", + "@cspell/dict-gaming-terms": "^1.0.4", "@cspell/dict-git": "^2.0.0", "@cspell/dict-golang": "^5.0.1", "@cspell/dict-haskell": "^4.0.1", "@cspell/dict-html": "^4.0.2", "@cspell/dict-html-symbol-entities": "^4.0.0", - "@cspell/dict-java": "^5.0.3", + "@cspell/dict-java": "^5.0.4", "@cspell/dict-k8s": "^1.0.0", "@cspell/dict-latex": "^3.1.0", "@cspell/dict-lorem-ipsum": "^3.0.0", - "@cspell/dict-lua": "^3.0.0", + "@cspell/dict-lua": "^4.0.0", "@cspell/dict-node": "^4.0.2", - "@cspell/dict-npm": "^5.0.2", + "@cspell/dict-npm": "^5.0.3", "@cspell/dict-php": "^3.0.4", - "@cspell/dict-powershell": "^3.0.0", + "@cspell/dict-powershell": "^4.0.0", "@cspell/dict-public-licenses": "^2.0.1", "@cspell/dict-python": "^4.0.1", "@cspell/dict-r": "^2.0.1", - "@cspell/dict-ruby": "^3.0.0", - "@cspell/dict-rust": "^3.0.0", - "@cspell/dict-scala": "^3.0.0", - "@cspell/dict-software-terms": "^3.0.7", + "@cspell/dict-ruby": "^4.0.1", + "@cspell/dict-rust": "^4.0.0", + "@cspell/dict-scala": "^4.0.0", + "@cspell/dict-software-terms": "^3.1.0", "@cspell/dict-sql": "^2.0.1", - "@cspell/dict-svelte": "^1.0.1", + "@cspell/dict-svelte": "^1.0.2", "@cspell/dict-swift": "^2.0.1", "@cspell/dict-typescript": "^3.1.0", "@cspell/dict-vue": "^3.0.0" } }, "@cspell/cspell-pipe": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.18.1.tgz", - "integrity": "sha512-IFtZBae5BCBIPZuRhEs0U0emFrh5hmN0N4+WR5paP4UurV5Ql9n2JsSj1Bmdx79aSFAw4mGpJnhZZtGQcFDnPQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.19.1.tgz", + "integrity": "sha512-yRn91Jopab26Ii6516NCKBDnhjiMVMEuBFelRVQwWbzpI7tTCGk2aDdEGAEj41Q5/dvrO8N89dQEveWzxyEXVg==", "dev": true }, "@cspell/cspell-service-bus": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.18.1.tgz", - "integrity": "sha512-QVbVA8Ube+Z4ghywzsTQLxqdiCubYi7L/+KeFRatzh3bZ5K5pVcYHEbDhAlFdUj6FhXw0EP2n/Xb+8ZLye4LLg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.19.1.tgz", + "integrity": "sha512-WLUwNu2e1IrxtzjKIOw7/rUCDjvA6zwMeROw4mrBwOnM0+s/NLZIoEY8apSV05ojc8kiEXG0iJojQNW+7yQS8g==", "dev": true }, "@cspell/cspell-types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.18.1.tgz", - "integrity": "sha512-5X+ABUMPrCoCjQvbqb/HeCoNiSgUrJhR9O4tSlMU5/z0NRNLFSyjf+3LE6ZU2+kdwNU7tmYCr+cbCpb3UKpvQQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.19.1.tgz", + "integrity": "sha512-Ag6XPBoajmeslrCf0sB/S5vsdn4DcG/DRt0jUtIML/W7f/qlzlUucHQvpzXB8FEpB/E8lAI+oM7JIqSuq0kZQQ==", "dev": true }, "@cspell/dict-ada": { @@ -11946,9 +11988,9 @@ "dev": true }, "@cspell/dict-companies": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.5.tgz", - "integrity": "sha512-f5lVcL/dG2kUHh8QFLakU722lgMwqXSjZUdmW6QdOMmqcE8cgl+oN9qk/qYlCSBMsYA7uexwn3hIr4h0naoPlw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.6.tgz", + "integrity": "sha512-6rWuwZxPisn/MP41DzBtChVgbz9b6HSjBH3X0s3k7zlBaxrw6xFAZGKH9KGFSPTiV+WD9j+IIn2/ITXERGjNLA==", "dev": true }, "@cspell/dict-cpp": { @@ -11970,9 +12012,9 @@ "dev": true }, "@cspell/dict-css": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.1.tgz", - "integrity": "sha512-jxsncdeiN/wkZGqU8iLtn24n3e0Fwugj6T48rjWUItn/i3C9j2W7RXOVqd7ZIeWeV8ibyq0WWiwA8Ajg6XaKpA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.2.tgz", + "integrity": "sha512-0NxBcB36b1Jy23Tf5YLrD8+PvBhE3FgBci3rwtw2DEqVigEX6uodecfoh9I4kcU8PZlVsDujrUfwgzYCWh/feQ==", "dev": true }, "@cspell/dict-dart": { @@ -12006,9 +12048,9 @@ "dev": true }, "@cspell/dict-en_us": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.1.4.tgz", - "integrity": "sha512-smRT8Rx38+z1kiNl3kBvadoPdYgxCovxw2rsuO4/XtLRlSEcGPQgYJ0CCdcXMd9bhMY5roXPCcvYkBsyUVvg4A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.2.0.tgz", + "integrity": "sha512-n5hz8vQ6FAp4f+ZW/raN/f4G69V1LrhNZ7kgXM+Nirmkrz16oXmd1defTulbd7yf2T2XU8DmsrTnkuRG9mSQKw==", "dev": true }, "@cspell/dict-en-gb": { @@ -12030,9 +12072,9 @@ "dev": true }, "@cspell/dict-fullstack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.0.1.tgz", - "integrity": "sha512-r077HcbxGQ0gSjs4eqryvb9cu8/Noe7pzl9QksxFIEaMgyP180DEaCLAOnat4KHl7X0wntipY+naY5PVRQUI9A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.1.tgz", + "integrity": "sha512-w2n3QvqEiufmvlBuNduury/pySrhfOcWFfCvvpUXTJvWbfRVGkt6ANZuTuy3/7Z2q4GYUqsd139te4Q8m0jRHQ==", "dev": true }, "@cspell/dict-gaming-terms": { @@ -12096,9 +12138,9 @@ "dev": true }, "@cspell/dict-lua": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-3.0.0.tgz", - "integrity": "sha512-WOhSCgS5wMxkGQJ8siB90iTB9ElquJB7FeqYSbJqqs6cUwH8G7MM/CEDPL6h7vCo0+v3GuxQ8yKWDSUcUhz9Lg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.0.tgz", + "integrity": "sha512-aQPyc/nP67tOlW6ACpio9Q5mZ/Z1hqwXC5rt5tkoQ2GsnCqeyIXDrX0CN+RGK53Lj4P02Jz/dPxs/nX8eDUFsw==", "dev": true }, "@cspell/dict-node": { @@ -12120,9 +12162,9 @@ "dev": true }, "@cspell/dict-powershell": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-3.0.0.tgz", - "integrity": "sha512-pkztY9Ak4oc33q+Qxcn9/CTOKo4N8YIRRE6v67WwQOncA5QIJfcOPUrjfR3Z8SpzElXhu3s9qtWWSqbCy6qmcA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-4.0.0.tgz", + "integrity": "sha512-1Lbm+3+Sx63atl4MM3lPeCUc90JjRyKP9+exmy2cQimXNju9ngtuDWwapHUnhQ47qnzrsBY4ydm36KCfJarXJA==", "dev": true }, "@cspell/dict-public-licenses": { @@ -12144,27 +12186,27 @@ "dev": true }, "@cspell/dict-ruby": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-3.0.0.tgz", - "integrity": "sha512-sA98T8Y1Pmq3RStVkO14E8vTWkq6JUn8c8PldiMyYgV0yfQgwhQfFAzlSfF3Gg2B0VkIdqt2et2SPN7f9wp7fQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-4.0.1.tgz", + "integrity": "sha512-p9nLDsffPadPLLwdLQj4Gk0IsZ64iCSxnSCaeFXslFiD17FtJVh1YMHP7KE9M73u22Hprq+a1Yw25/xp6Tkt3g==", "dev": true }, "@cspell/dict-rust": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-3.0.0.tgz", - "integrity": "sha512-L1T1IBsYJZVDmfOGAbVLcpc6arWxRRCSJYvHSwEDBGrNuMyJ4jx/NvBEz5crcKf4vVKgwVlXgzQlJJZ8AVxU9w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.0.tgz", + "integrity": "sha512-nzJsgLR6/JXtM41Cr5FG89r8sBKW6aFjvCqPxeaBJYLAL0JuvsVUcd16rW2lTsdbx5J8yUQDD7mgCZFk6merJQ==", "dev": true }, "@cspell/dict-scala": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-3.0.0.tgz", - "integrity": "sha512-sIiCQDIMMnNns/fzD61z5npbh5pypaKq07Orqe0+eRfdQpika8iRSGUGFHVbtdd1JzB1DyTCV2e8OwdaQiXqJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-4.0.0.tgz", + "integrity": "sha512-ugdjt66/Ah34yF3u3DUNjCHXnBqIuxUUfdeBobbGxfm29CNgidrISV1NUh+xi8tPynMzSTpGbBiArFBH6on5XQ==", "dev": true }, "@cspell/dict-software-terms": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.0.8.tgz", - "integrity": "sha512-otq0yIcG19rNXkmE/EGWgUK7ClLrn/BE4n5Di3HKLw6XEp0sNBp1DKf88bg0LvbWh15uCAJ5xKAzF1sVPy2Y3w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.1.0.tgz", + "integrity": "sha512-KQVpHmuGJprkriClbwTf1TfCjkCkS+GqLBO8ytltmYylCHZumJMfA3sM10e3zmsVIlungrtNLG9xz5opIdm/2A==", "dev": true }, "@cspell/dict-sql": { @@ -12198,9 +12240,9 @@ "dev": true }, "@cspell/strong-weak-map": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.18.1.tgz", - "integrity": "sha512-etyMLISiDzgFf1BSGpUBD62cHp9NrCyrOi+iT7WrJ+My0l6IPRIhANuAVp2JcsXxe28en4X3Bp/egd46Q5Rpkg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.19.1.tgz", + "integrity": "sha512-ncq8OUTi+oGYAvEfkeuCBjmq7qglQ9XQTZJNn95ave1TDoupP3y9dRo5gE8qH9kaNRZ+n7ANDjjSWZ2NIz2MoA==", "dev": true }, "@cspotcode/source-map-support": { @@ -13524,15 +13566,58 @@ } }, "@typescript-eslint/parser": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", - "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz", + "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/scope-manager": "5.48.2", + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/typescript-estree": "5.48.2", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz", + "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2" + } + }, + "@typescript-eslint/types": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz", + "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz", + "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.2", + "@typescript-eslint/visitor-keys": "5.48.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.48.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz", + "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.2", + "eslint-visitor-keys": "^3.3.0" + } + } } }, "@typescript-eslint/scope-manager": { @@ -13815,9 +13900,9 @@ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.3.tgz", + "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -14505,135 +14590,109 @@ "dev": true }, "cspell": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.18.1.tgz", - "integrity": "sha512-euHEQuyZwe/oiTiHJr4lSBnT4MrWMNy3V3GiOmi2Zekw/DTgN2glvsMskudobcDB/HReCtUlG8yALySL/GiLvQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.19.1.tgz", + "integrity": "sha512-LwWhBfk0XampjviTXy2nE9U2p6JrEgffZPuOKFkL2PSc6YT/oV4ZF/brrjcO4ZmPnHOZOCkLsOyJKJ4Ysj5mrw==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.18.1", + "@cspell/cspell-pipe": "6.19.1", "chalk": "^4.1.2", - "commander": "^9.4.1", - "cspell-gitignore": "6.18.1", - "cspell-glob": "6.18.1", - "cspell-lib": "6.18.1", + "commander": "^10.0.0", + "cspell-gitignore": "6.19.1", + "cspell-glob": "6.19.1", + "cspell-lib": "6.19.1", + "fast-glob": "^3.2.12", "fast-json-stable-stringify": "^2.1.0", "file-entry-cache": "^6.0.1", "fs-extra": "^11.1.0", "get-stdin": "^8.0.0", - "glob": "^8.0.3", "imurmurhash": "^0.1.4", "semver": "^7.3.8", "strip-ansi": "^6.0.1", "vscode-uri": "^3.0.7" }, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true } } }, "cspell-dictionary": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.18.1.tgz", - "integrity": "sha512-q+tK+MWvJs9xL8wv79YlGPddUFb3Usuqh+VB8D0Zs7Xlsa/cw9bljRluHkpQrNr8APdZijGlgQP8L0cEr0/rEw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.19.1.tgz", + "integrity": "sha512-idlqDabvrh/nNj+p4tWFb/KbEV3tYuHXx8EwBg3h6BmjayEF1pxgghYW2ZoaRXp/meq2V2319kdefYyfX58EdA==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1", - "cspell-trie-lib": "6.18.1", + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1", + "cspell-trie-lib": "6.19.1", "fast-equals": "^4.0.3", "gensequence": "^4.0.3" } }, "cspell-gitignore": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.18.1.tgz", - "integrity": "sha512-btjWg8ibbOItQg0l43keBl0Tfg1gt3MaeNMPraZlEbprnG8oQjzcgB1VYYya6DOnJdaPwInjGbS1kfCL4j4LpA==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.19.1.tgz", + "integrity": "sha512-2gNVU17xPwG5CDe0dEOBB6obGRHjIpbWvnvkPiHxlmGZCdZi1al3RP5qfb+OwCRFWRdWdM+ANkseXpUdbxEE2Q==", "dev": true, "requires": { - "cspell-glob": "6.18.1", + "cspell-glob": "6.19.1", "find-up": "^5.0.0" } }, "cspell-glob": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.18.1.tgz", - "integrity": "sha512-6dBBtQ1lRnVPoM13GOv7mJflkIvEr93TN96saQPWoaQqX8jwmklcMmDUndIkLcA7TnyxBbi3Z3X+s68zj/YGqw==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.19.1.tgz", + "integrity": "sha512-pYU5j1j7OLXQp9B5MMVTLPz7f3Xr9BT57gJnTndcmQ2QKD0pTm2IVLEHGYjVhylrnMa2tIWhMbwpW7q/L6x/Tw==", "dev": true, "requires": { "micromatch": "^4.0.5" } }, "cspell-grammar": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.18.1.tgz", - "integrity": "sha512-QPjOA9xwDPb3aoJXUOdL2aWX2wt8lPD7CoDROo8uruOXHAQzIY56q12EBy3jLIkxJFl9KAwtlEHkbLaJfTpIpg==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.19.1.tgz", + "integrity": "sha512-i46WKdprENJ1xxZbSgdQ5WjauthzfJzfvmXvOWEpXPeT9Us2FyRutHeFcnsSHbF/jysh25/YJaXWM2xsUF6mqg==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1" + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1" } }, "cspell-io": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.18.1.tgz", - "integrity": "sha512-WIfiDdG/7235CbkrjKPYIkP9oT8VvWXVTAeq6JkJPH7bm2A/CoE8ClieVsbbJnPyJnetnCuOuuz/zmuheVD02g==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.19.1.tgz", + "integrity": "sha512-gKC+LbLMJCrcjHWIFz7h4Q6/BMLAnuliYacRTE44Z/Xfh/rpWTyLhyb6s5RTSVgSwqnNQSVsjmZoeyW3rE8B8A==", "dev": true, "requires": { - "@cspell/cspell-service-bus": "6.18.1", - "node-fetch": "^2.6.7" + "@cspell/cspell-service-bus": "6.19.1", + "node-fetch": "^2.6.8" } }, "cspell-lib": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.18.1.tgz", - "integrity": "sha512-4MGjp51Ed8BbMPGXgqLGgUiWyb2DbOxgVEuWm8nxumxu7UmAWDBdMiD3QlY+ZYmfOJEVSa/kG7DTMrLQoeFwnQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.19.1.tgz", + "integrity": "sha512-3zWZtjc4TBDbKuB7oc1cvekCnmoBjxYWdb3YYs663fi7VubJi6gz7AQCeBAAKDLnKBSVNFtJeiVfAjGLytf55g==", "dev": true, "requires": { - "@cspell/cspell-bundled-dicts": "6.18.1", - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1", - "@cspell/strong-weak-map": "6.18.1", + "@cspell/cspell-bundled-dicts": "6.19.1", + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1", + "@cspell/strong-weak-map": "6.19.1", "clear-module": "^4.1.2", "comment-json": "^4.2.3", "configstore": "^5.0.1", "cosmiconfig": "^8.0.0", - "cspell-dictionary": "6.18.1", - "cspell-glob": "6.18.1", - "cspell-grammar": "6.18.1", - "cspell-io": "6.18.1", - "cspell-trie-lib": "6.18.1", + "cspell-dictionary": "6.19.1", + "cspell-glob": "6.19.1", + "cspell-grammar": "6.19.1", + "cspell-io": "6.19.1", + "cspell-trie-lib": "6.19.1", "fast-equals": "^4.0.3", "find-up": "^5.0.0", - "fs-extra": "^11.1.0", "gensequence": "^4.0.3", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", @@ -14651,13 +14710,13 @@ } }, "cspell-trie-lib": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.18.1.tgz", - "integrity": "sha512-rV32bqchz0uYdK6uafaw5QnYImRWQMcT2RNbBo0LXN6XoYoTSgpnPWTxQauNLxOm1m+dfb3GdasoAsjgWkPGnQ==", + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.19.1.tgz", + "integrity": "sha512-sdGQj0UVvNjloV8hmjasGQbcb1hJP0IwMz6qWOce793RqA3N2BKiZt2kJzsNXM8dbPwGFpxHu7nfF0kVL30u1g==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.18.1", - "@cspell/cspell-types": "6.18.1", + "@cspell/cspell-pipe": "6.19.1", + "@cspell/cspell-types": "6.19.1", "fs-extra": "^11.1.0", "gensequence": "^4.0.3" } @@ -14939,9 +14998,9 @@ "dev": true }, "eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.4.1", @@ -17484,9 +17543,9 @@ "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==" }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "requires": { "whatwg-url": "^5.0.0" } @@ -17987,9 +18046,9 @@ "dev": true }, "prettier": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.2.tgz", - "integrity": "sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", + "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index 85c2b2a7..526db0bd 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "app-root-path": "3.1.0", "applicationinsights": "2.4.0", "async-prompt": "1.0.1", - "axios": "1.2.2", + "axios": "1.2.3", "basic-auth": "2.0.1", "body-parser": "1.20.1", "color-contrast-checker": "2.1.0", @@ -150,9 +150,9 @@ "@types/simple-oauth2": "4.1.1", "@types/validator": "13.7.10", "@typescript-eslint/eslint-plugin": "5.48.1", - "@typescript-eslint/parser": "5.48.1", - "cspell": "6.18.1", - "eslint": "8.31.0", + "@typescript-eslint/parser": "5.48.2", + "cspell": "6.19.1", + "eslint": "8.32.0", "eslint-config-prettier": "8.6.0", "eslint-plugin-n": "15.6.1", "eslint-plugin-prettier": "4.2.1", @@ -161,7 +161,7 @@ "jest-junit": "15.0.0", "lint-staged": "13.1.0", "markdownlint-cli2": "0.6.0", - "prettier": "2.8.2", + "prettier": "2.8.3", "ts-jest": "29.0.5", "ts-node": "10.9.1", "typescript": "4.9.4" diff --git a/routes/settings/index.ts b/routes/settings/index.ts index 44bcc4c0..37ea8f92 100644 --- a/routes/settings/index.ts +++ b/routes/settings/index.ts @@ -7,8 +7,6 @@ import { Router } from 'express'; import asyncHandler from 'express-async-handler'; const router: Router = Router(); -import { getProviders } from '../../transitional'; - import approvalsRoute from './approvals'; import authorizationsRoute from './authorizations'; import personalAccessTokensRoute from './personalAccessTokens'; @@ -23,23 +21,11 @@ router.use(asyncHandler(AddLinkToRequest)); router.get( '/', asyncHandler(async (req: ReposAppRequest, res) => { - const providers = getProviders(req); const link = req.individualContext.link; - let legalContactInformation = null; - try { - if (providers.corporateContactProvider) { - legalContactInformation = await providers.corporateContactProvider.lookupContacts( - link.corporateUsername - ); - } - } catch (ignoredError) { - /* ignored */ - } req.individualContext.webContext.render({ view: 'settings', title: 'Settings', state: { - legalContactInformation, link, }, }); diff --git a/views/settings/index.pug b/views/settings/index.pug index c81f33f1..0bb2d553 100644 --- a/views/settings/index.pug +++ b/views/settings/index.pug @@ -40,33 +40,3 @@ block content p a.btn.btn-muted.btn-sm(href='/link/remove') Remove link - - h1 Business profile - - if !legalContactInformation - p No corporate profile information is available. - - if legalContactInformation && legalContactInformation.legal - h4 Legal contact - p For legal advice you will want to refer to your team's primary legal contact: - p: strong: a(href='mailto:' + legalContactInformation.legal)= legalContactInformation.legal - - if legalContactInformation.attorney && legalContactInformation.attorney !== legalContactInformation.legal - h4 Attorney - p: strong: a(href='mailto:' + legalContactInformation.attorney)= legalContactInformation.attorney - - if legalContactInformation.highRiskBusiness || legalContactInformation.lowRiskBusiness - h4 Open source approval business reviewers - p. - Requests to release open source or to use certain components may - be subject to a business review. The reviewer(s) associated with - your corporate identity are: - if legalContactInformation.group - h5 Group - p= legalContactInformation.group - if legalContactInformation.lowRiskBusiness - h5 Reviewer - p= legalContactInformation.lowRiskBusiness - if legalContactInformation.highRiskBusiness - h5 High-risk reviewer - p= legalContactInformation.highRiskBusiness