From efe2dcbb0f9e46d7deef50c1372f5b839be3347d Mon Sep 17 00:00:00 2001 From: Zhiming Ma Date: Fri, 15 Sep 2023 11:05:46 +0800 Subject: [PATCH] refactor(agent): agent http request and cancellation flow. (#446) * refactor(agent): refactor http request and cancellation flow. * fix: minor fixes. * fix: minor fix cheking timeout error in stats. --- clients/intellij/package.json | 2 +- clients/tabby-agent/package.json | 13 +- clients/tabby-agent/src/Agent.ts | 26 +- clients/tabby-agent/src/AgentConfig.ts | 2 +- .../tabby-agent/src/AnonymousUsageLogger.ts | 29 +- clients/tabby-agent/src/Auth.ts | 98 +- clients/tabby-agent/src/CompletionDebounce.ts | 55 +- clients/tabby-agent/src/ResponseStats.ts | 3 +- clients/tabby-agent/src/StdIO.ts | 73 +- clients/tabby-agent/src/TabbyAgent.ts | 377 ++++--- clients/tabby-agent/src/cloud/CloudApi.ts | 27 - clients/tabby-agent/src/cloud/index.ts | 4 - .../cloud/models/DeviceTokenAcceptResponse.ts | 5 - .../models/DeviceTokenRefreshResponse.ts | 5 - .../src/cloud/models/DeviceTokenRequest.ts | 3 - .../src/cloud/models/DeviceTokenResponse.ts | 5 - .../src/cloud/services/ApiService.ts | 60 -- clients/tabby-agent/src/dataStore.ts | 5 +- clients/tabby-agent/src/index.ts | 7 +- clients/tabby-agent/src/types/cloudApi.d.ts | 101 ++ clients/tabby-agent/src/types/tabbyApi.d.ts | 143 +++ clients/tabby-agent/src/utils.ts | 51 +- clients/tabby-agent/tsconfig.json | 3 +- clients/vim/package.json | 2 +- clients/vscode/package.json | 6 +- clients/vscode/src/TabbyCompletionProvider.ts | 40 +- clients/vscode/src/commands.ts | 16 +- package.json | 5 +- yarn.lock | 996 +++++++++--------- 29 files changed, 1139 insertions(+), 1023 deletions(-) delete mode 100644 clients/tabby-agent/src/cloud/CloudApi.ts delete mode 100644 clients/tabby-agent/src/cloud/index.ts delete mode 100644 clients/tabby-agent/src/cloud/models/DeviceTokenAcceptResponse.ts delete mode 100644 clients/tabby-agent/src/cloud/models/DeviceTokenRefreshResponse.ts delete mode 100644 clients/tabby-agent/src/cloud/models/DeviceTokenRequest.ts delete mode 100644 clients/tabby-agent/src/cloud/models/DeviceTokenResponse.ts delete mode 100644 clients/tabby-agent/src/cloud/services/ApiService.ts create mode 100644 clients/tabby-agent/src/types/cloudApi.d.ts create mode 100644 clients/tabby-agent/src/types/tabbyApi.d.ts diff --git a/clients/intellij/package.json b/clients/intellij/package.json index afa8df4..3338f7d 100644 --- a/clients/intellij/package.json +++ b/clients/intellij/package.json @@ -10,6 +10,6 @@ "devDependencies": { "cpy-cli": "^4.2.0", "rimraf": "^5.0.1", - "tabby-agent": "0.1.1" + "tabby-agent": "0.2.0-dev" } } diff --git a/clients/tabby-agent/package.json b/clients/tabby-agent/package.json index e77f558..6c33b3f 100644 --- a/clients/tabby-agent/package.json +++ b/clients/tabby-agent/package.json @@ -1,16 +1,14 @@ { "name": "tabby-agent", - "version": "0.1.1", + "version": "0.2.0-dev", "description": "Generic client agent for Tabby AI coding assistant IDE extensions.", "repository": "https://github.com/TabbyML/tabby", "main": "./dist/index.js", "browser": "./dist/index.mjs", "types": "./dist/index.d.ts", "scripts": { - "openapi-codegen": "rimraf ./src/generated && openapi --input ./openapi/tabby.json --output ./src/generated --client axios --name TabbyApi --indent 2", - "predev": "yarn openapi-codegen", + "openapi-codegen": "openapi-typescript ./openapi/tabby.json -o ./src/types/tabbyApi.d.ts", "dev": "tsup --watch --no-minify --no-treeshake", - "prebuild": "yarn openapi-codegen", "build": "tsup", "test:watch": "env TEST_LOG_DEBUG=1 mocha --watch", "test": "mocha", @@ -20,12 +18,12 @@ "@types/chai": "^4.3.5", "@types/fs-extra": "^11.0.1", "@types/mocha": "^10.0.1", - "@types/node": "^16.18.32", + "@types/node": "^18.12.0", "chai": "^4.3.7", "dedent": "^0.7.0", "esbuild-plugin-polyfill-node": "^0.3.0", "mocha": "^10.2.0", - "openapi-typescript-codegen": "^0.24.0", + "openapi-typescript": "^6.6.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "ts-node": "^10.9.1", @@ -33,18 +31,17 @@ "typescript": "^5.0.3" }, "dependencies": { - "axios": "^1.4.0", "chokidar": "^3.5.3", "deep-equal": "^2.2.1", "deepmerge-ts": "^5.1.0", "dot-prop": "^8.0.2", "fast-levenshtein": "^3.0.0", - "form-data": "^4.0.0", "fs-extra": "^11.1.1", "jwt-decode": "^3.1.2", "lru-cache": "^9.1.1", "object-hash": "^3.0.0", "object-sizeof": "^2.6.1", + "openapi-fetch": "^0.7.6", "pino": "^8.14.1", "rotating-file-stream": "^3.1.0", "toml": "^3.0.0", diff --git a/clients/tabby-agent/src/Agent.ts b/clients/tabby-agent/src/Agent.ts index 843686a..fd4b6c6 100644 --- a/clients/tabby-agent/src/Agent.ts +++ b/clients/tabby-agent/src/Agent.ts @@ -1,10 +1,4 @@ -import { - CancelablePromise, - LogEventRequest as ApiLogEventRequest, - CompletionResponse as ApiCompletionResponse, - HealthState, -} from "./generated"; - +import type { components as ApiComponents } from "./types/tabbyApi"; import { AgentConfig, PartialAgentConfig } from "./AgentConfig"; export type AgentInitOptions = Partial<{ @@ -13,7 +7,7 @@ export type AgentInitOptions = Partial<{ clientProperties: Record; }>; -export type ServerHealthState = HealthState; +export type ServerHealthState = ApiComponents["schemas"]["HealthState"]; export type CompletionRequest = { filepath: string; @@ -23,9 +17,11 @@ export type CompletionRequest = { manually?: boolean; }; -export type CompletionResponse = ApiCompletionResponse; +export type CompletionResponse = ApiComponents["schemas"]["CompletionResponse"]; -export type LogEventRequest = ApiLogEventRequest; +export type LogEventRequest = ApiComponents["schemas"]["LogEventRequest"]; + +export type AbortSignalOption = { signal: AbortSignal }; export type SlowCompletionResponseTimeIssue = { name: "slowCompletionResponseTime"; @@ -58,7 +54,7 @@ export interface AgentFunction { * Initialize agent. Client should call this method before calling any other methods. * @param options */ - initialize(options: AgentInitOptions): Promise; + initialize(options?: AgentInitOptions): Promise; /** * The agent configuration has the following levels, will be deep merged in the order: @@ -104,7 +100,7 @@ export interface AgentFunction { * @returns the auth url for redirecting, and the code for next step `waitingForAuth` * @throws Error if agent is not initialized */ - requestAuthUrl(): CancelablePromise<{ authUrl: string; code: string } | null>; + requestAuthUrl(options?: AbortSignalOption): Promise<{ authUrl: string; code: string } | null>; /** * Wait for auth token to be ready after redirecting user to auth url, @@ -112,7 +108,7 @@ export interface AgentFunction { * @param code from `requestAuthUrl` * @throws Error if agent is not initialized */ - waitForAuthToken(code: string): CancelablePromise; + waitForAuthToken(code: string, options?: AbortSignalOption): Promise; /** * Provide completions for the given request. This method is debounced, calling it before the previous @@ -122,14 +118,14 @@ export interface AgentFunction { * @returns * @throws Error if agent is not initialized */ - provideCompletions(request: CompletionRequest): CancelablePromise; + provideCompletions(request: CompletionRequest, options?: AbortSignalOption): Promise; /** * @param event * @returns * @throws Error if agent is not initialized */ - postEvent(event: LogEventRequest): CancelablePromise; + postEvent(event: LogEventRequest, options?: AbortSignalOption): Promise; } export type StatusChangedEvent = { diff --git a/clients/tabby-agent/src/AgentConfig.ts b/clients/tabby-agent/src/AgentConfig.ts index 0e95d5a..339f14b 100644 --- a/clients/tabby-agent/src/AgentConfig.ts +++ b/clients/tabby-agent/src/AgentConfig.ts @@ -3,7 +3,7 @@ import { isBrowser } from "./env"; export type AgentConfig = { server: { endpoint: string; - requestHeaders: Record; + requestHeaders: Record; requestTimeout: number; }; completion: { diff --git a/clients/tabby-agent/src/AnonymousUsageLogger.ts b/clients/tabby-agent/src/AnonymousUsageLogger.ts index 55857c9..a5b4514 100644 --- a/clients/tabby-agent/src/AnonymousUsageLogger.ts +++ b/clients/tabby-agent/src/AnonymousUsageLogger.ts @@ -1,12 +1,13 @@ import { name as agentName, version as agentVersion } from "../package.json"; -import { CloudApi } from "./cloud"; +import createClient from "openapi-fetch"; +import type { paths as CloudApi } from "./types/cloudApi"; import { v4 as uuid } from "uuid"; import { isBrowser } from "./env"; import { rootLogger } from "./logger"; import { dataStore, DataStore } from "./dataStore"; export class AnonymousUsageLogger { - private anonymousUsageTrackingApi = new CloudApi(); + private anonymousUsageTrackingApi = createClient({ baseUrl: "https://app.tabbyml.com/api" }); private logger = rootLogger.child({ component: "AnonymousUsage" }); private systemData = { agent: `${agentName}, ${agentVersion}`, @@ -73,18 +74,20 @@ export class AnonymousUsageLogger { if (unique) { this.emittedUniqueEvent.push(event); } - await this.anonymousUsageTrackingApi.api - .usage({ - distinctId: this.anonymousId, - event, - properties: { - ...this.systemData, - ...this.properties, - ...data, + try { + await this.anonymousUsageTrackingApi.POST("/usage", { + body: { + distinctId: this.anonymousId, + event, + properties: { + ...this.systemData, + ...this.properties, + ...data, + }, }, - }) - .catch((error) => { - this.logger.error({ error }, "Error when sending anonymous usage data"); }); + } catch (error) { + this.logger.error({ error }, "Error when sending anonymous usage data"); + } } } diff --git a/clients/tabby-agent/src/Auth.ts b/clients/tabby-agent/src/Auth.ts index d74da5d..7a3aa5d 100644 --- a/clients/tabby-agent/src/Auth.ts +++ b/clients/tabby-agent/src/Auth.ts @@ -1,7 +1,9 @@ import { EventEmitter } from "events"; import decodeJwt from "jwt-decode"; -import { CloudApi, DeviceTokenResponse, DeviceTokenAcceptResponse } from "./cloud"; -import { ApiError, CancelablePromise } from "./generated"; +import createClient from "openapi-fetch"; +import type { paths as CloudApi } from "./types/cloudApi"; +import type { AbortSignalOption } from "./Agent"; +import { HttpError, abortSignalFromAnyOf } from "./utils"; import { dataStore, DataStore } from "./dataStore"; import { rootLogger } from "./logger"; @@ -40,7 +42,7 @@ export class Auth extends EventEmitter { readonly endpoint: string; readonly dataStore: DataStore | null = null; private refreshTokenTimer: ReturnType | null = null; - private authApi: CloudApi | null = null; + private authApi: ReturnType>; private jwt: JWT | null = null; static async create(options: { endpoint: string; dataStore?: DataStore }): Promise { @@ -53,7 +55,7 @@ export class Auth extends EventEmitter { super(); this.endpoint = options.endpoint; this.dataStore = options.dataStore || dataStore; - this.authApi = new CloudApi(); + this.authApi = createClient({ baseUrl: "https://app.tabbyml.com/api" }); this.scheduleRefreshToken(); } @@ -113,47 +115,52 @@ export class Auth extends EventEmitter { } } - requestAuthUrl(): CancelablePromise<{ authUrl: string; code: string }> { - return new CancelablePromise(async (resolve, reject, onCancel) => { - let apiRequest: CancelablePromise; - onCancel(() => { - apiRequest?.cancel(); - }); - try { - await this.reset(); - if (onCancel.isCancelled) return; - this.logger.debug("Start to request device token"); - apiRequest = this.authApi.api.deviceToken({ auth_url: this.endpoint }); - const deviceToken = await apiRequest; - this.logger.debug({ deviceToken }, "Request device token response"); - const authUrl = new URL(Auth.authPageUrl); - authUrl.searchParams.append("code", deviceToken.data.code); - resolve({ authUrl: authUrl.toString(), code: deviceToken.data.code }); - } catch (error) { - this.logger.error({ error }, "Error when requesting token"); - reject(error); + async requestAuthUrl(options?: AbortSignalOption): Promise<{ authUrl: string; code: string }> { + try { + await this.reset(); + if (options?.signal.aborted) { + throw options.signal.reason; } - }); + this.logger.debug("Start to request device token"); + const response = await this.authApi.POST("/device-token", { + body: { auth_url: this.endpoint }, + signal: options?.signal, + }); + if (response.error) { + throw new HttpError(response.response); + } + const deviceToken = response.data; + this.logger.debug({ deviceToken }, "Request device token response"); + const authUrl = new URL(Auth.authPageUrl); + authUrl.searchParams.append("code", deviceToken.data.code); + return { authUrl: authUrl.toString(), code: deviceToken.data.code }; + } catch (error) { + this.logger.error({ error }, "Error when requesting token"); + throw error; + } } - pollingToken(code: string): CancelablePromise { - return new CancelablePromise((resolve, reject, onCancel) => { - let apiRequest: CancelablePromise; + async pollingToken(code: string, options?: AbortSignalOption): Promise { + return new Promise((resolve, reject) => { + const signal = abortSignalFromAnyOf([AbortSignal.timeout(Auth.tokenStrategy.polling.timeout), options?.signal]); const timer = setInterval(async () => { try { - apiRequest = this.authApi.api.deviceTokenAccept({ code }); - const response = await apiRequest; - this.logger.debug({ response }, "Poll jwt response"); + const response = await this.authApi.POST("/device-token/accept", { params: { query: { code } }, signal }); + if (response.error) { + throw new HttpError(response.response); + } + const result = response.data; + this.logger.debug({ result }, "Poll jwt response"); this.jwt = { - token: response.data.jwt, - payload: decodeJwt(response.data.jwt), + token: result.data.jwt, + payload: decodeJwt(result.data.jwt), }; super.emit("updated", this.jwt); await this.save(); clearInterval(timer); resolve(true); } catch (error) { - if (error instanceof ApiError && [400, 401, 403, 405].indexOf(error.status) !== -1) { + if (error instanceof HttpError && [400, 401, 403, 405].indexOf(error.status) !== -1) { this.logger.debug({ error }, "Expected error when polling jwt"); } else { // unknown error but still keep polling @@ -161,28 +168,35 @@ export class Auth extends EventEmitter { } } }, Auth.tokenStrategy.polling.interval); - setTimeout(() => { + if (signal.aborted) { clearInterval(timer); - reject(new Error("Timeout when polling token")); - }, Auth.tokenStrategy.polling.timeout); - onCancel(() => { - apiRequest?.cancel(); - clearInterval(timer); - }); + reject(signal.reason); + } else { + signal.addEventListener("abort", () => { + clearInterval(timer); + reject(signal.reason); + }); + } }); } private async refreshToken(jwt: JWT, options = { maxTry: 1, retryDelay: 1000 }, retry = 0): Promise { try { this.logger.debug({ retry }, "Start to refresh token"); - const refreshedJwt = await this.authApi.api.deviceTokenRefresh(jwt.token); + const response = await this.authApi.POST("/device-token/refresh", { + headers: { Authorization: `Bearer ${jwt.token}` }, + }); + if (response.error) { + throw new HttpError(response.response); + } + const refreshedJwt = response.data; this.logger.debug({ refreshedJwt }, "Refresh token response"); return { token: refreshedJwt.data.jwt, payload: decodeJwt(refreshedJwt.data.jwt), }; } catch (error) { - if (error instanceof ApiError && [400, 401, 403, 405].indexOf(error.status) !== -1) { + if (error instanceof HttpError && [400, 401, 403, 405].indexOf(error.status) !== -1) { this.logger.debug({ error }, "Error when refreshing jwt"); } else { // unknown error, retry a few times diff --git a/clients/tabby-agent/src/CompletionDebounce.ts b/clients/tabby-agent/src/CompletionDebounce.ts index 24f63ae..afc9ca3 100644 --- a/clients/tabby-agent/src/CompletionDebounce.ts +++ b/clients/tabby-agent/src/CompletionDebounce.ts @@ -1,6 +1,5 @@ -import { CancelablePromise } from "./generated"; -import { CompletionRequest } from "./Agent"; -import { AgentConfig } from "./AgentConfig"; +import type { CompletionRequest, AbortSignalOption } from "./Agent"; +import type { AgentConfig } from "./AgentConfig"; import { rootLogger } from "./logger"; import { splitLines } from "./utils"; @@ -10,7 +9,6 @@ function clamp(min: number, max: number, value: number): number { export class CompletionDebounce { private readonly logger = rootLogger.child({ component: "CompletionDebounce" }); - private ongoing: CancelablePromise | null = null; private lastCalledTimeStamp = 0; private baseInterval = 200; // ms @@ -38,16 +36,20 @@ export class CompletionDebounce { }, }; - debounce( - request: CompletionRequest, - config: AgentConfig["completion"]["debounce"], - responseTime: number, - ): CancelablePromise { + async debounce( + context: { + request: CompletionRequest; + config: AgentConfig["completion"]["debounce"]; + responseTime: number; + }, + options?: AbortSignalOption, + ): Promise { + const { request, config, responseTime } = context; if (request.manually) { - return this.renewPromise(0); + return this.sleep(0, options); } if (config.mode === "fixed") { - return this.renewPromise(config.interval); + return this.sleep(config.interval, options); } const now = Date.now(); this.updateBaseInterval(now - this.lastCalledTimeStamp); @@ -57,25 +59,24 @@ export class CompletionDebounce { this.options.adaptiveRate.max - (this.options.adaptiveRate.max - this.options.adaptiveRate.min) * contextScore; const expectedLatency = adaptiveRate * this.baseInterval; const delay = clamp(this.options.requestDelay.min, this.options.requestDelay.max, expectedLatency - responseTime); - return this.renewPromise(delay); + return this.sleep(delay, options); } - private renewPromise(delay: number): CancelablePromise { - if (this.ongoing) { - this.ongoing.cancel(); - } - this.ongoing = new CancelablePromise((resolve, reject, onCancel) => { - const timer = setTimeout( - () => { - resolve(true); - }, - Math.min(delay, 0x7fffffff), - ); - onCancel(() => { - clearTimeout(timer); - }); + private async sleep(delay: number, options?: AbortSignalOption): Promise { + return new Promise((resolve, reject) => { + const timer = setTimeout(resolve, Math.min(delay, 0x7fffffff)); + if (options?.signal) { + if (options.signal.aborted) { + clearTimeout(timer); + reject(options.signal.reason); + } else { + options.signal.addEventListener("abort", () => { + clearTimeout(timer); + reject(options.signal.reason); + }); + } + } }); - return this.ongoing; } private updateBaseInterval(interval: number) { diff --git a/clients/tabby-agent/src/ResponseStats.ts b/clients/tabby-agent/src/ResponseStats.ts index f4ebb73..9a9b05d 100644 --- a/clients/tabby-agent/src/ResponseStats.ts +++ b/clients/tabby-agent/src/ResponseStats.ts @@ -1,5 +1,6 @@ import { EventEmitter } from "events"; import { rootLogger } from "./logger"; +import { isTimeoutError } from "./utils"; export type ResponseStatsEntry = { name: string; @@ -22,7 +23,7 @@ export const completionResponseTimeStatsStrategy = { stats: { total: (entries: ResponseStatsEntry[]) => entries.length, responses: (entries: ResponseStatsEntry[]) => entries.filter((entry) => entry.status === 200).length, - timeouts: (entries: ResponseStatsEntry[]) => entries.filter((entry) => entry.error?.isTimeoutError).length, + timeouts: (entries: ResponseStatsEntry[]) => entries.filter((entry) => isTimeoutError(entry.error)).length, averageResponseTime: (entries: ResponseStatsEntry[]) => entries.filter((entry) => entry.status === 200).reduce((acc, entry) => acc + entry.responseTime, 0) / entries.length, diff --git a/clients/tabby-agent/src/StdIO.ts b/clients/tabby-agent/src/StdIO.ts index aefc7fa..c1e4847 100644 --- a/clients/tabby-agent/src/StdIO.ts +++ b/clients/tabby-agent/src/StdIO.ts @@ -1,4 +1,3 @@ -import { CancelablePromise } from "./generated"; import { AgentFunction, AgentEvent, Agent, agentEventNames } from "./Agent"; import { rootLogger } from "./logger"; import { splitLines } from "./utils"; @@ -19,24 +18,24 @@ type CancellationRequest = [ }, ]; -type Request = AgentFunctionRequest | CancellationRequest; +type StdIORequest = AgentFunctionRequest | CancellationRequest; type AgentFunctionResponse = [ id: number, // Matched request id data: ReturnType, ]; -type AgentEventNotification = { - id: 0; - data: AgentEvent; -}; +type AgentEventNotification = [ + id: 0, // Always 0 + data: AgentEvent, +]; type CancellationResponse = [ id: number, // Matched request id data: boolean, ]; -type Response = AgentFunctionResponse | AgentEventNotification | CancellationResponse; +type StdIOResponse = AgentFunctionResponse | AgentEventNotification | CancellationResponse; /** * Every request and response should be single line JSON string and end with a newline. @@ -47,13 +46,13 @@ export class StdIO { private readonly logger = rootLogger.child({ component: "StdIO" }); private buffer: string = ""; - private ongoingRequests: { [id: number]: PromiseLike } = {}; + private abortControllers: { [id: string]: AbortController } = {}; private agent: Agent | null = null; constructor() {} - private handleInput(data: Buffer): void { + private async handleInput(data: Buffer) { const input = data.toString(); this.buffer += input; const lines = splitLines(this.buffer); @@ -66,66 +65,68 @@ export class StdIO { this.buffer = lines.pop()!; } for (const line of lines) { - let request: Request | null = null; + let request: StdIORequest | null = null; try { - request = JSON.parse(line) as Request; + request = JSON.parse(line) as StdIORequest; } catch (error) { this.logger.error({ error }, `Failed to parse request: ${line}`); continue; } this.logger.debug({ request }, "Received request"); - this.handleRequest(request).then((response) => { - this.sendResponse(response); - this.logger.debug({ response }, "Sent response"); - }); + const response = await this.handleRequest(request); + this.sendResponse(response); + this.logger.debug({ response }, "Sent response"); } } - private async handleRequest(request: Request): Promise { - const response: Response = [0, null]; + private async handleRequest(request: StdIORequest): Promise { + let requestId: number = 0; + const response: StdIOResponse = [0, null]; + const abortController = new AbortController(); try { if (!this.agent) { throw new Error(`Agent not bound.\n`); } - response[0] = request[0]; + requestId = request[0]; + response[0] = requestId; - let funcName = request[1].func; + const funcName = request[1].func; if (funcName === "cancelRequest") { response[1] = this.cancelRequest(request as CancellationRequest); } else { - let func = this.agent[funcName]; + const func = this.agent[funcName]; if (!func) { throw new Error(`Unknown function: ${funcName}`); } - const result = func.apply(this.agent, request[1].args); - if (typeof result === "object" && typeof result.then === "function") { - this.ongoingRequests[request[0]] = result; - response[1] = await result; - delete this.ongoingRequests[request[0]]; - } else { - response[1] = result; + const args = request[1].args; + // If the last argument is an object and has `signal` property, replace it with the abort signal. + if (args.length > 0 && typeof args[args.length - 1] === "object" && args[args.length - 1]["signal"]) { + this.abortControllers[requestId] = abortController; + args[args.length - 1]["signal"] = abortController.signal; } + response[1] = await func.apply(this.agent, args); } } catch (error) { this.logger.error({ error, request }, `Failed to handle request`); } finally { + if (this.abortControllers[requestId]) { + delete this.abortControllers[requestId]; + } return response; } } private cancelRequest(request: CancellationRequest): boolean { - const ongoing = this.ongoingRequests[request[1].args[0]]; - if (!ongoing) { - return false; + const targetId = request[1].args[0]; + const controller = this.abortControllers[targetId]; + if (controller) { + controller.abort(); + return true; } - if (ongoing instanceof CancelablePromise) { - ongoing.cancel(); - } - delete this.ongoingRequests[request[1].args[0]]; - return true; + return false; } - private sendResponse(response: Response): void { + private sendResponse(response: StdIOResponse): void { this.outStream.write(JSON.stringify(response) + "\n"); } diff --git a/clients/tabby-agent/src/TabbyAgent.ts b/clients/tabby-agent/src/TabbyAgent.ts index 8262b4e..6cef49b 100644 --- a/clients/tabby-agent/src/TabbyAgent.ts +++ b/clients/tabby-agent/src/TabbyAgent.ts @@ -3,14 +3,16 @@ import { v4 as uuid } from "uuid"; import deepEqual from "deep-equal"; import { deepmerge } from "deepmerge-ts"; import { getProperty, setProperty, deleteProperty } from "dot-prop"; -import { TabbyApi, CancelablePromise } from "./generated"; -import { cancelable, splitLines, isBlank } from "./utils"; -import { +import createClient from "openapi-fetch"; +import { paths as TabbyApi } from "./types/tabbyApi"; +import { splitLines, isBlank, abortSignalFromAnyOf, HttpError, isTimeoutError, isCanceledError } from "./utils"; +import type { Agent, AgentStatus, AgentIssue, AgentEvent, AgentInitOptions, + AbortSignalOption, ServerHealthState, CompletionRequest, CompletionResponse, @@ -43,14 +45,15 @@ export class TabbyAgent extends EventEmitter implements Agent { private status: AgentStatus = "notInitialized"; private issues: AgentIssue["name"][] = []; private serverHealthState: ServerHealthState | null = null; - private api: TabbyApi; + private api: ReturnType>; private auth: Auth; private dataStore: DataStore | null = null; private completionCache: CompletionCache = new CompletionCache(); - private CompletionDebounce: CompletionDebounce = new CompletionDebounce(); + private completionDebounce: CompletionDebounce = new CompletionDebounce(); + private nonParallelProvideCompletionAbortController: AbortController | null = null; + private completionResponseStats: ResponseStats = new ResponseStats(completionResponseTimeStatsStrategy); static readonly tryConnectInterval = 1000 * 30; // 30s private tryingConnectTimer: ReturnType | null = null; - private completionResponseStats: ResponseStats = new ResponseStats(completionResponseTimeStatsStrategy); private constructor() { super(); @@ -97,16 +100,19 @@ export class TabbyAgent extends EventEmitter implements Agent { this.auth.on("updated", this.setupApi.bind(this)); } } else { + // If `Authorization` request header is provided, use it directly. this.auth = null; } await this.setupApi(); } private async setupApi() { - this.api = new TabbyApi({ - BASE: this.config.server.endpoint.replace(/\/+$/, ""), // remove trailing slash - TOKEN: this.auth?.token, - HEADERS: this.config.server.requestHeaders, + this.api = createClient({ + baseUrl: this.config.server.endpoint.replace(/\/+$/, ""), // remove trailing slash + headers: { + Authorization: this.auth?.token ? `Bearer ${this.auth.token}` : undefined, + ...this.config.server.requestHeaders, + }, }); await this.healthCheck(); } @@ -160,111 +166,65 @@ export class TabbyAgent extends EventEmitter implements Agent { super.emit("authRequired", event); } - private callApi( - api: (request: Request) => CancelablePromise, - request: Request, - options: { timeout?: number } = { timeout: this.config.server.requestTimeout }, - ): CancelablePromise { - return new CancelablePromise((resolve, reject, onCancel) => { - const requestId = uuid(); - this.logger.debug({ requestId, api: api.name, request }, "API request"); - let timeout: ReturnType | null = null; - let timeoutCancelled = false; - const apiRequest = api.call(this.api.v1, request); - const requestStartedAt = performance.now(); - apiRequest - .then((response: Response) => { - this.logger.debug({ requestId, api: api.name, response }, "API response"); - if (this.status !== "issuesExist") { - this.changeStatus("ready"); - } - if (api.name === "completion") { - this.completionResponseStats.push({ - name: api.name, - status: 200, - responseTime: performance.now() - requestStartedAt, - }); - } - if (timeout) { - clearTimeout(timeout); - } - resolve(response); - }) - .catch((error) => { - if ( - (!!error.isCancelled && timeoutCancelled) || - (!error.isCancelled && error.code === "ECONNABORTED") || - (error.name === "ApiError" && [408, 499].indexOf(error.status) !== -1) - ) { - error.isTimeoutError = true; - this.logger.debug({ requestId, api: api.name, error }, "API request timeout"); - } else if (!!error.isCancelled) { - this.logger.debug({ requestId, api: api.name, error }, "API request cancelled"); - } else if ( - error.name === "ApiError" && - [401, 403, 405].indexOf(error.status) !== -1 && - new URL(this.config.server.endpoint).hostname.endsWith("app.tabbyml.com") && - this.config.server.requestHeaders["Authorization"] === undefined - ) { - this.logger.debug({ requestId, api: api.name, error }, "API unauthorized"); - this.changeStatus("unauthorized"); - } else if (error.name === "ApiError") { - this.logger.error({ requestId, api: api.name, error }, "API error"); - this.changeStatus("disconnected"); - } else { - this.logger.error({ requestId, api: api.name, error }, "API request failed with unknown error"); - this.changeStatus("disconnected"); - } - // don't record cancelled request in stats - if (api.name === "completion" && (error.isTimeoutError || !error.isCancelled)) { - this.completionResponseStats.push({ - name: api.name, - status: error.status, - responseTime: performance.now() - requestStartedAt, - error, - }); - } - if (timeout) { - clearTimeout(timeout); - } - reject(error); - }); - // It seems that openapi-typescript-codegen does not provide timeout options passing to axios, - // Just use setTimeout to cancel the request manually. - if (options.timeout && options.timeout > 0) { - timeout = setTimeout( - () => { - this.logger.debug({ api: api.name, timeout: options.timeout }, "Cancel API request due to timeout"); - timeoutCancelled = true; - apiRequest.cancel(); - }, - Math.min(options.timeout, 0x7fffffff), - ); + private async post[0]>( + path: T, + requestOptions: Parameters>[1], + abortOptions?: { signal?: AbortSignal; timeout?: number }, + ): Promise>>["data"]> { + const requestId = uuid(); + this.logger.debug({ requestId, path, requestOptions, abortOptions }, "API request"); + try { + const timeout = Math.min(0x7fffffff, abortOptions?.timeout || this.config.server.requestTimeout); + const signal = abortSignalFromAnyOf([AbortSignal.timeout(timeout), abortOptions?.signal]); + const response = await this.api.POST(path, { ...requestOptions, signal }); + if (response.error) { + throw new HttpError(response.response); } - onCancel(() => { - if (timeout) { - clearTimeout(timeout); - } - apiRequest.cancel(); - }); - }); + this.logger.debug({ requestId, path, response: response.data }, "API response"); + if (this.status !== "issuesExist") { + this.changeStatus("ready"); + } + return response.data; + } catch (error) { + if (isTimeoutError(error)) { + this.logger.debug({ requestId, path, error }, "API request timeout"); + } else if (isCanceledError(error)) { + this.logger.debug({ requestId, path, error }, "API request canceled"); + } else if ( + error instanceof HttpError && + [401, 403, 405].indexOf(error.status) !== -1 && + new URL(this.config.server.endpoint).hostname.endsWith("app.tabbyml.com") && + this.config.server.requestHeaders["Authorization"] === undefined + ) { + this.logger.debug({ requestId, path, error }, "API unauthorized"); + this.changeStatus("unauthorized"); + } else if (error instanceof HttpError) { + this.logger.error({ requestId, path, error }, "API error"); + this.changeStatus("disconnected"); + } else { + this.logger.error({ requestId, path, error }, "API request failed with unknown error"); + this.changeStatus("disconnected"); + } + throw error; + } } - private healthCheck(): Promise { - return this.callApi(this.api.v1.health, {}) - .then((healthState) => { - if ( - typeof healthState === "object" && - healthState["model"] !== undefined && - healthState["device"] !== undefined - ) { - this.serverHealthState = healthState; - if (this.status === "ready") { - this.anonymousUsageLogger.uniqueEvent("AgentConnected", healthState); - } + private async healthCheck(options?: AbortSignalOption): Promise { + try { + const healthState = await this.post("/v1/health", {}, options); + if ( + typeof healthState === "object" && + healthState["model"] !== undefined && + healthState["device"] !== undefined + ) { + this.serverHealthState = healthState; + if (this.status === "ready") { + this.anonymousUsageLogger.uniqueEvent("AgentConnected", healthState); } - }) - .catch(() => {}); + } + } catch (_) { + // ignore + } } private createSegments(request: CompletionRequest): { prefix: string; suffix: string } { @@ -352,109 +312,124 @@ export class TabbyAgent extends EventEmitter implements Agent { return this.serverHealthState; } - public requestAuthUrl(): CancelablePromise<{ authUrl: string; code: string } | null> { + public async requestAuthUrl(options?: AbortSignalOption): Promise<{ authUrl: string; code: string } | null> { if (this.status === "notInitialized") { - return cancelable(Promise.reject("Agent is not initialized"), () => {}); + throw new Error("Agent is not initialized"); } - return new CancelablePromise(async (resolve, reject, onCancel) => { - let request: CancelablePromise<{ authUrl: string; code: string }>; - onCancel(() => { - request?.cancel(); - }); - await this.healthCheck(); - if (onCancel.isCancelled) return; - if (this.status === "unauthorized") { - request = this.auth.requestAuthUrl(); - resolve(request); + await this.healthCheck(options); + if (this.status !== "unauthorized") { + return null; + } else { + return await this.auth.requestAuthUrl(options); + } + } + + public async waitForAuthToken(code: string, options?: AbortSignalOption): Promise { + if (this.status === "notInitialized") { + throw new Error("Agent is not initialized"); + } + await this.auth.pollingToken(code, options); + await this.setupApi(); + } + + public async provideCompletions( + request: CompletionRequest, + options?: AbortSignalOption, + ): Promise { + if (this.status === "notInitialized") { + throw new Error("Agent is not initialized"); + } + if (this.nonParallelProvideCompletionAbortController) { + this.nonParallelProvideCompletionAbortController.abort(); + } + this.nonParallelProvideCompletionAbortController = new AbortController(); + const signal = abortSignalFromAnyOf([this.nonParallelProvideCompletionAbortController.signal, options?.signal]); + let completionResponse: CompletionResponse | null = null; + if (this.completionCache.has(request)) { + // Hit cache + this.logger.debug({ request }, "Completion cache hit"); + await this.completionDebounce.debounce( + { + request, + config: this.config.completion.debounce, + responseTime: 0, + }, + { signal }, + ); + completionResponse = this.completionCache.get(request); + } else { + // No cache + const segments = this.createSegments(request); + if (isBlank(segments.prefix)) { + // Empty prompt + this.logger.debug("Segment prefix is blank, returning empty completion response"); + completionResponse = { + id: "agent-" + uuid(), + choices: [], + }; } else { - } - resolve(null); - }); - } - - public waitForAuthToken(code: string): CancelablePromise { - if (this.status === "notInitialized") { - return cancelable(Promise.reject("Agent is not initialized"), () => {}); - } - const polling = this.auth.pollingToken(code); - return cancelable( - polling.then(() => { - return this.setupApi(); - }), - () => { - polling.cancel(); - }, - ); - } - - public provideCompletions(request: CompletionRequest): CancelablePromise { - if (this.status === "notInitialized") { - return cancelable(Promise.reject("Agent is not initialized"), () => {}); - } - const cancelableList: CancelablePromise[] = []; - return cancelable( - Promise.resolve(null) - // From cache - .then(async (response: CompletionResponse | null) => { - if (response) return response; - if (this.completionCache.has(request)) { - this.logger.debug({ request }, "Completion cache hit"); - const debounce = this.CompletionDebounce.debounce(request, this.config.completion.debounce, 0); - cancelableList.push(debounce); - await debounce; - return this.completionCache.get(request); - } - return null; - }) - // From api - .then(async (response: CompletionResponse | null) => { - if (response) return response; - const segments = this.createSegments(request); - if (isBlank(segments.prefix)) { - this.logger.debug("Segment prefix is blank, returning empty completion response"); - return { - id: "agent-" + uuid(), - choices: [], - }; - } - const debounce = this.CompletionDebounce.debounce( + // Request server + await this.completionDebounce.debounce( + { request, - this.config.completion.debounce, - this.completionResponseStats.stats()["averageResponseTime"], - ); - cancelableList.push(debounce); - await debounce; - const apiRequest = this.callApi( - this.api.v1.completion, + config: this.config.completion.debounce, + responseTime: this.completionResponseStats.stats()["averageResponseTime"], + }, + options, + ); + + const requestStartedAt = performance.now(); + const apiPath = "/v1/completions"; + try { + completionResponse = await this.post( + apiPath, { - language: request.language, - segments, - user: this.auth?.user, + body: { + language: request.language, + segments, + user: this.auth?.user, + }, }, { + signal, timeout: request.manually ? this.config.completion.timeout.manually : this.config.completion.timeout.auto, }, ); - cancelableList.push(apiRequest); - let res = await apiRequest; - res = await preCacheProcess(request, res); - this.completionCache.set(request, res); - return res; - }) - // Postprocess - .then(async (response: CompletionResponse | null) => { - return postprocess(request, response); - }), - () => { - cancelableList.forEach((cancelable) => cancelable.cancel()); - }, - ); + this.completionResponseStats.push({ + name: apiPath, + status: 200, + responseTime: performance.now() - requestStartedAt, + }); + } catch (error) { + // record timed out request in stats, do not record canceled request + if (isTimeoutError(error)) { + this.completionResponseStats.push({ + name: apiPath, + status: error.status, + responseTime: performance.now() - requestStartedAt, + error, + }); + } + } + completionResponse = await preCacheProcess(request, completionResponse); + if (options?.signal?.aborted) { + throw options.signal.reason; + } + this.completionCache.set(request, completionResponse); + } + } + completionResponse = await postprocess(request, completionResponse); + if (options?.signal?.aborted) { + throw options.signal.reason; + } + return completionResponse; } - public postEvent(request: LogEventRequest): CancelablePromise { + public async postEvent(request: LogEventRequest, options?: AbortSignalOption): Promise { if (this.status === "notInitialized") { - return cancelable(Promise.reject("Agent is not initialized"), () => {}); + throw new Error("Agent is not initialized"); } - return this.callApi(this.api.v1.event, request); + await this.post("/v1/events", { body: request, parseAs: "text" }, options); + return true; } } diff --git a/clients/tabby-agent/src/cloud/CloudApi.ts b/clients/tabby-agent/src/cloud/CloudApi.ts deleted file mode 100644 index 4cb6c05..0000000 --- a/clients/tabby-agent/src/cloud/CloudApi.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { BaseHttpRequest, OpenAPIConfig } from "../generated"; -import { AxiosHttpRequest } from "../generated/core/AxiosHttpRequest"; -import { ApiService } from "./services/ApiService"; - -type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest; - -export class CloudApi { - public readonly api: ApiService; - - public readonly request: BaseHttpRequest; - - constructor(config?: Partial, HttpRequest: HttpRequestConstructor = AxiosHttpRequest) { - this.request = new HttpRequest({ - BASE: config?.BASE ?? "https://app.tabbyml.com/api", - VERSION: config?.VERSION ?? "0.0.0", - WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false, - CREDENTIALS: config?.CREDENTIALS ?? "include", - TOKEN: config?.TOKEN, - USERNAME: config?.USERNAME, - PASSWORD: config?.PASSWORD, - HEADERS: config?.HEADERS, - ENCODE_PATH: config?.ENCODE_PATH, - }); - - this.api = new ApiService(this.request); - } -} diff --git a/clients/tabby-agent/src/cloud/index.ts b/clients/tabby-agent/src/cloud/index.ts deleted file mode 100644 index 713f715..0000000 --- a/clients/tabby-agent/src/cloud/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { CloudApi } from "./CloudApi"; -export { ApiService } from "./services/ApiService"; -export { DeviceTokenResponse } from "./models/DeviceTokenResponse"; -export { DeviceTokenAcceptResponse } from "./models/DeviceTokenAcceptResponse"; diff --git a/clients/tabby-agent/src/cloud/models/DeviceTokenAcceptResponse.ts b/clients/tabby-agent/src/cloud/models/DeviceTokenAcceptResponse.ts deleted file mode 100644 index cb38257..0000000 --- a/clients/tabby-agent/src/cloud/models/DeviceTokenAcceptResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type DeviceTokenAcceptResponse = { - data: { - jwt: string; - }; -}; diff --git a/clients/tabby-agent/src/cloud/models/DeviceTokenRefreshResponse.ts b/clients/tabby-agent/src/cloud/models/DeviceTokenRefreshResponse.ts deleted file mode 100644 index cc94fae..0000000 --- a/clients/tabby-agent/src/cloud/models/DeviceTokenRefreshResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type DeviceTokenRefreshResponse = { - data: { - jwt: string; - }; -}; diff --git a/clients/tabby-agent/src/cloud/models/DeviceTokenRequest.ts b/clients/tabby-agent/src/cloud/models/DeviceTokenRequest.ts deleted file mode 100644 index 4e90799..0000000 --- a/clients/tabby-agent/src/cloud/models/DeviceTokenRequest.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type DeviceTokenRequest = { - auth_url: string; -}; diff --git a/clients/tabby-agent/src/cloud/models/DeviceTokenResponse.ts b/clients/tabby-agent/src/cloud/models/DeviceTokenResponse.ts deleted file mode 100644 index c27c465..0000000 --- a/clients/tabby-agent/src/cloud/models/DeviceTokenResponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type DeviceTokenResponse = { - data: { - code: string; - }; -}; diff --git a/clients/tabby-agent/src/cloud/services/ApiService.ts b/clients/tabby-agent/src/cloud/services/ApiService.ts deleted file mode 100644 index a2ce25b..0000000 --- a/clients/tabby-agent/src/cloud/services/ApiService.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { CancelablePromise } from "../../generated/core/CancelablePromise"; -import type { BaseHttpRequest } from "../../generated/core/BaseHttpRequest"; - -import type { DeviceTokenRequest } from "../models/DeviceTokenRequest"; -import type { DeviceTokenResponse } from "../models/DeviceTokenResponse"; -import type { DeviceTokenAcceptResponse } from "../models/DeviceTokenAcceptResponse"; -import type { DeviceTokenRefreshResponse } from "../models/DeviceTokenRefreshResponse"; - -export class ApiService { - constructor(public readonly httpRequest: BaseHttpRequest) {} - - /** - * @returns DeviceTokenResponse Success - * @throws ApiError - */ - public deviceToken(body: DeviceTokenRequest): CancelablePromise { - return this.httpRequest.request({ - method: "POST", - url: "/device-token", - body, - }); - } - - /** - * @param code - * @returns DeviceTokenAcceptResponse Success - * @throws ApiError - */ - public deviceTokenAccept(query: { code: string }): CancelablePromise { - return this.httpRequest.request({ - method: "POST", - url: "/device-token/accept", - query, - }); - } - - /** - * @param token - * @returns DeviceTokenRefreshResponse Success - * @throws ApiError - */ - public deviceTokenRefresh(token: string): CancelablePromise { - return this.httpRequest.request({ - method: "POST", - url: "/device-token/refresh", - headers: { Authorization: `Bearer ${token}` }, - }); - } - - /** - * @param body object for anonymous usage tracking - */ - public usage(body: any): CancelablePromise { - return this.httpRequest.request({ - method: "POST", - url: "/usage", - body, - }); - } -} diff --git a/clients/tabby-agent/src/dataStore.ts b/clients/tabby-agent/src/dataStore.ts index 2c4bc44..bbffd7f 100644 --- a/clients/tabby-agent/src/dataStore.ts +++ b/clients/tabby-agent/src/dataStore.ts @@ -28,10 +28,7 @@ export const dataStore: DataStore = isBrowser migrateFrom_0_3_0: async function () { const dataFile_0_3_0 = require("path").join(require("os").homedir(), ".tabby", "agent", "data.json"); const migratedFlag = require("path").join(require("os").homedir(), ".tabby", "agent", ".data_json_migrated"); - if ( - (await fs.pathExists(dataFile_0_3_0)) && - !(await fs.pathExists(migratedFlag)) - ) { + if ((await fs.pathExists(dataFile_0_3_0)) && !(await fs.pathExists(migratedFlag))) { const data = await fs.readJson(dataFile_0_3_0); await fs.outputJson(dataFile, data); await fs.outputFile(migratedFlag, ""); diff --git a/clients/tabby-agent/src/index.ts b/clients/tabby-agent/src/index.ts index 18f6023..79022f6 100644 --- a/clients/tabby-agent/src/index.ts +++ b/clients/tabby-agent/src/index.ts @@ -4,18 +4,21 @@ export { AgentStatus, AgentFunction, AgentEvent, + AgentEventEmitter, + AgentIssue, StatusChangedEvent, ConfigUpdatedEvent, AuthRequiredEvent, NewIssueEvent, - AgentIssue, SlowCompletionResponseTimeIssue, HighCompletionTimeoutRateIssue, + AgentInitOptions, + ServerHealthState, CompletionRequest, CompletionResponse, LogEventRequest, + AbortSignalOption, agentEventNames, } from "./Agent"; export { AgentConfig, PartialAgentConfig } from "./AgentConfig"; export { DataStore } from "./dataStore"; -export { CancelablePromise } from "./generated"; diff --git a/clients/tabby-agent/src/types/cloudApi.d.ts b/clients/tabby-agent/src/types/cloudApi.d.ts new file mode 100644 index 0000000..e4332d8 --- /dev/null +++ b/clients/tabby-agent/src/types/cloudApi.d.ts @@ -0,0 +1,101 @@ +export interface paths { + "/device-token": { + post: operations["deviceToken"]; + }; + "/device-token/accept": { + post: operations["deviceTokenAccept"]; + }; + "/device-token/refresh": { + post: operations["deviceTokenRefresh"]; + }; + "/usage": { + post: operations["usage"]; + }; +} + +export type webhooks = Record; + +export interface components { + schemas: { + DeviceTokenRequest: { + auth_url: string; + }; + DeviceTokenResponse: { + data: { + code: string; + }; + }; + DeviceTokenAcceptResponse: { + data: { + jwt: string; + }; + }; + DeviceTokenRefreshResponse: { + data: { + jwt: string; + }; + }; + UsageRequest: {}; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} + +export type $defs = Record; + +export type external = Record; + +export interface operations { + deviceToken: { + requestBody: { + content: { + "application/json": components["schemas"]["DeviceTokenRequest"]; + }; + }; + responses: { + 200: { + content: { + "application/json": components["schemas"]["DeviceTokenResponse"]; + }; + }; + }; + }; + deviceTokenAccept: { + parameters: { + query: { + code: string; + }; + }; + responses: { + 200: { + content: { + "application/json": components["schemas"]["DeviceTokenAcceptResponse"]; + }; + }; + }; + }; + deviceTokenRefresh: { + responses: { + 200: { + content: { + "application/json": components["schemas"]["DeviceTokenRefreshResponse"]; + }; + }; + }; + }; + usage: { + requestBody: { + content: { + "application/json": components["schemas"]["UsageRequest"]; + }; + }; + responses: { + 200: { + content: never; + }; + }; + }; +} diff --git a/clients/tabby-agent/src/types/tabbyApi.d.ts b/clients/tabby-agent/src/types/tabbyApi.d.ts new file mode 100644 index 0000000..bd4dea0 --- /dev/null +++ b/clients/tabby-agent/src/types/tabbyApi.d.ts @@ -0,0 +1,143 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/v1/completions": { + post: operations["completion"]; + }; + "/v1/events": { + post: operations["event"]; + }; + "/v1/health": { + post: operations["health"]; + }; +} + +export type webhooks = Record; + +export interface components { + schemas: { + Choice: { + /** Format: int32 */ + index: number; + text: string; + }; + /** + * @example { + * "language": "python", + * "segments": { + * "prefix": "def fib(n):\n ", + * "suffix": "\n return fib(n - 1) + fib(n - 2)" + * } + * } + */ + CompletionRequest: { + /** @example def fib(n): */ + prompt?: string | null; + /** + * @description Language identifier, full list is maintained at + * https://code.visualstudio.com/docs/languages/identifiers + * @example python + */ + language?: string | null; + segments?: components["schemas"]["Segments"] | null; + user?: string | null; + }; + CompletionResponse: { + id: string; + choices: components["schemas"]["Choice"][]; + }; + HealthState: { + model: string; + device: string; + compute_type: string; + arch: string; + cpu_info: string; + cpu_count: number; + cuda_devices: string[]; + version: components["schemas"]["Version"]; + }; + LogEventRequest: { + /** + * @description Event type, should be `view` or `select`. + * @example view + */ + type: string; + completion_id: string; + /** Format: int32 */ + choice_index: number; + }; + Segments: { + /** @description Content that appears before the cursor in the editor window. */ + prefix: string; + /** @description Content that appears after the cursor in the editor window. */ + suffix?: string | null; + }; + Version: { + build_date: string; + build_timestamp: string; + git_sha: string; + git_describe: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} + +export type $defs = Record; + +export type external = Record; + +export interface operations { + completion: { + requestBody: { + content: { + "application/json": components["schemas"]["CompletionRequest"]; + }; + }; + responses: { + /** @description Success */ + 200: { + content: { + "application/json": components["schemas"]["CompletionResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + content: never; + }; + }; + }; + event: { + requestBody: { + content: { + "application/json": components["schemas"]["LogEventRequest"]; + }; + }; + responses: { + /** @description Success */ + 200: { + content: never; + }; + /** @description Bad Request */ + 400: { + content: never; + }; + }; + }; + health: { + responses: { + /** @description Success */ + 200: { + content: { + "application/json": components["schemas"]["HealthState"]; + }; + }; + }; + }; +} diff --git a/clients/tabby-agent/src/utils.ts b/clients/tabby-agent/src/utils.ts index 9b1cca0..bf93cc6 100644 --- a/clients/tabby-agent/src/utils.ts +++ b/clients/tabby-agent/src/utils.ts @@ -18,18 +18,43 @@ export function calcDistance(a: string, b: string) { return levenshtein.get(a, b); } -import { CancelablePromise } from "./generated"; -export function cancelable(promise: Promise, cancel: () => void): CancelablePromise { - return new CancelablePromise((resolve, reject, onCancel) => { - promise - .then((resp: T) => { - resolve(resp); - }) - .catch((err: Error) => { - reject(err); - }); - onCancel(() => { - cancel(); +// Polyfill for AbortSignal.any(signals) which added in Node.js v20. +export function abortSignalFromAnyOf(signals: AbortSignal[]) { + const controller = new AbortController(); + for (const signal of signals) { + if (signal?.aborted) { + controller.abort(signal.reason); + return signal; + } + signal?.addEventListener("abort", () => controller.abort(signal.reason), { + signal: controller.signal, }); - }); + } + return controller.signal; +} + +// Http Error +export class HttpError extends Error { + status: number; + statusText: string; + response: Response; + + constructor(response: Response) { + super(`${response.status} ${response.statusText}`); + this.name = "HttpError"; + this.status = response.status; + this.statusText = response.statusText; + this.response = response; + } +} + +export function isTimeoutError(error: any) { + return ( + (error instanceof Error && error.name === "TimeoutError") || + (error instanceof HttpError && [408, 499].indexOf(error.status) !== -1) + ); +} + +export function isCanceledError(error: any) { + return error instanceof Error && error.name === "AbortError"; } diff --git a/clients/tabby-agent/tsconfig.json b/clients/tabby-agent/tsconfig.json index 069ebaa..9d7ee01 100644 --- a/clients/tabby-agent/tsconfig.json +++ b/clients/tabby-agent/tsconfig.json @@ -5,7 +5,8 @@ "lib": ["ES2020", "dom"], "sourceMap": true, "esModuleInterop": true, - "resolveJsonModule": true + "resolveJsonModule": true, + "noUncheckedIndexedAccess": true }, "include": ["./src"] } diff --git a/clients/vim/package.json b/clients/vim/package.json index cf56665..a73f161 100644 --- a/clients/vim/package.json +++ b/clients/vim/package.json @@ -10,6 +10,6 @@ "devDependencies": { "cpy-cli": "^4.2.0", "rimraf": "^5.0.1", - "tabby-agent": "0.1.1" + "tabby-agent": "0.2.0-dev" } } diff --git a/clients/vscode/package.json b/clients/vscode/package.json index 6acf73f..b77d001 100644 --- a/clients/vscode/package.json +++ b/clients/vscode/package.json @@ -7,7 +7,7 @@ "repository": "https://github.com/TabbyML/tabby", "bugs": "https://github.com/TabbyML/tabby/issues", "license": "Apache-2.0", - "version": "0.4.1", + "version": "0.5.0-dev", "keywords": [ "ai", "autocomplete", @@ -20,7 +20,7 @@ ], "icon": "assets/logo.png", "engines": { - "vscode": "^1.70.0" + "vscode": "^1.82.0" }, "categories": [ "Programming Languages", @@ -197,6 +197,6 @@ }, "dependencies": { "@xstate/fsm": "^2.0.1", - "tabby-agent": "0.1.1" + "tabby-agent": "0.2.0-dev" } } diff --git a/clients/vscode/src/TabbyCompletionProvider.ts b/clients/vscode/src/TabbyCompletionProvider.ts index 5cc5c18..264474b 100644 --- a/clients/vscode/src/TabbyCompletionProvider.ts +++ b/clients/vscode/src/TabbyCompletionProvider.ts @@ -3,21 +3,17 @@ import { InlineCompletionContext, InlineCompletionItem, InlineCompletionItemProvider, - InlineCompletionList, InlineCompletionTriggerKind, Position, - ProviderResult, Range, TextDocument, workspace, } from "vscode"; -import { CompletionResponse, CancelablePromise } from "tabby-agent"; +import { CompletionResponse } from "tabby-agent"; import { agent } from "./agent"; import { notifications } from "./notifications"; export class TabbyCompletionProvider implements InlineCompletionItemProvider { - private pendingCompletion: CancelablePromise | null = null; - // User Settings private enabled: boolean = true; @@ -30,9 +26,12 @@ export class TabbyCompletionProvider implements InlineCompletionItemProvider { }); } - //@ts-ignore because ASYNC and PROMISE - //prettier-ignore - public async provideInlineCompletionItems(document: TextDocument, position: Position, context: InlineCompletionContext, token: CancellationToken): ProviderResult { + public async provideInlineCompletionItems( + document: TextDocument, + position: Position, + context: InlineCompletionContext, + token: CancellationToken, + ): Promise { const emptyResponse = Promise.resolve([] as InlineCompletionItem[]); if (!this.enabled) { console.debug("Extension not enabled, skipping."); @@ -45,25 +44,32 @@ export class TabbyCompletionProvider implements InlineCompletionItemProvider { return emptyResponse; } - const replaceRange = this.calculateReplaceRange(document, position); - - if (this.pendingCompletion) { - this.pendingCompletion.cancel(); + if (token?.isCancellationRequested) { + console.debug("Cancellation was requested."); + return emptyResponse; } + const replaceRange = this.calculateReplaceRange(document, position); + const request = { filepath: document.uri.fsPath, - language: document.languageId, // https://code.visualstudio.com/docs/languages/identifiers + language: document.languageId, // https://code.visualstudio.com/docs/languages/identifiers text: document.getText(), position: document.offsetAt(position), manually: context.triggerKind === InlineCompletionTriggerKind.Invoke, }; - this.pendingCompletion = agent().provideCompletions(request); - const completion = await this.pendingCompletion.catch((e: Error) => { - return null; + const abortController = new AbortController(); + token?.onCancellationRequested(() => { + console.debug("Cancellation requested."); + abortController.abort(); }); - this.pendingCompletion = null; + + const completion = await agent() + .provideCompletions(request, { signal: abortController.signal }) + .catch((_) => { + return null; + }); const completions = this.toInlineCompletions(completion, replaceRange); return Promise.resolve(completions); diff --git a/clients/vscode/src/commands.ts b/clients/vscode/src/commands.ts index 17c97c3..7a9187d 100644 --- a/clients/vscode/src/commands.ts +++ b/clients/vscode/src/commands.ts @@ -9,7 +9,6 @@ import { commands, } from "vscode"; import { strict as assert } from "assert"; -import { CancelablePromise } from "tabby-agent"; import { agent } from "./agent"; import { notifications } from "./notifications"; @@ -121,22 +120,19 @@ const openAuthPage: Command = { cancellable: true, }, async (progress, token) => { - let requestAuthUrl: CancelablePromise<{ authUrl: string; code: string } | null>; - let waitForAuthToken: CancelablePromise; + const abortController = new AbortController(); token.onCancellationRequested(() => { - requestAuthUrl?.cancel(); - waitForAuthToken?.cancel(); + abortController.abort(); }); + const signal = abortController.signal; try { callbacks?.onAuthStart?.(); progress.report({ message: "Generating authorization url..." }); - requestAuthUrl = agent().requestAuthUrl(); - let authUrl = await requestAuthUrl; + let authUrl = await agent().requestAuthUrl({ signal }); if (authUrl) { env.openExternal(Uri.parse(authUrl.authUrl)); progress.report({ message: "Waiting for authorization from browser..." }); - waitForAuthToken = agent().waitForAuthToken(authUrl.code); - await waitForAuthToken; + await agent().waitForAuthToken(authUrl.code, { signal }); assert(agent().getStatus() === "ready"); notifications.showInformationAuthSuccess(); } else if (agent().getStatus() === "ready") { @@ -145,7 +141,7 @@ const openAuthPage: Command = { notifications.showInformationWhenAuthFailed(); } } catch (error: any) { - if (error.isCancelled) { + if (error.name === "AbortError") { return; } console.debug("Error auth", { error }); diff --git a/package.json b/package.json index a7bf776..713d460 100644 --- a/package.json +++ b/package.json @@ -5,5 +5,8 @@ "clients/vscode", "clients/vim", "clients/intellij" - ] + ], + "engines": { + "node": ">=18" + } } diff --git a/yarn.lock b/yarn.lock index 052c7ef..30d5a00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,35 +7,26 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@apidevtools/json-schema-ref-parser@9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" - integrity sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - "@babel/code-frame@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.22.5" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" "@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" + integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/highlight@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== dependencies: "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" + chalk "^2.4.2" js-tokens "^4.0.0" "@cspotcode/source-map-support@^0.8.0": @@ -45,115 +36,115 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/android-arm64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz#fa6f0cc7105367cb79cc0a8bf32bf50cb1673e45" - integrity sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw== +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== -"@esbuild/android-arm@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.11.tgz#ae84a410696c9f549a15be94eaececb860bacacb" - integrity sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q== +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== -"@esbuild/android-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.11.tgz#0e58360bbc789ad0d68174d32ba20e678c2a16b6" - integrity sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw== +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== -"@esbuild/darwin-arm64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz#fcdcd2ef76ca656540208afdd84f284072f0d1f9" - integrity sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w== +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== -"@esbuild/darwin-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz#c5ac602ec0504a8ff81e876bc8a9811e94d69d37" - integrity sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw== +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== -"@esbuild/freebsd-arm64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz#7012fb06ee3e6e0d5560664a65f3fefbcc46db2e" - integrity sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A== +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== -"@esbuild/freebsd-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz#c5de1199f70e1f97d5c8fca51afa9bf9a2af5969" - integrity sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q== +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== -"@esbuild/linux-arm64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz#2a6d3a74e0b8b5f294e22b4515b29f76ebd42660" - integrity sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog== +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== -"@esbuild/linux-arm@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz#5175bd61b793b436e4aece6328aa0d9be07751e1" - integrity sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg== +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== -"@esbuild/linux-ia32@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz#20ee6cfd65a398875f321a485e7b2278e5f6f67b" - integrity sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw== +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== -"@esbuild/linux-loong64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz#8e7b251dede75083bf44508dab5edce3f49d052b" - integrity sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw== +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== -"@esbuild/linux-mips64el@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz#a3125eb48538ac4932a9d05089b157f94e443165" - integrity sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg== +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== -"@esbuild/linux-ppc64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz#842abadb7a0995bd539adee2be4d681b68279499" - integrity sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ== +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== -"@esbuild/linux-riscv64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz#7ce6e6cee1c72d5b4d2f4f8b6fcccf4a9bea0e28" - integrity sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w== +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== -"@esbuild/linux-s390x@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz#98fbc794363d02ded07d300df2e535650b297b96" - integrity sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg== +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== -"@esbuild/linux-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz#f8458ec8cf74c8274e4cacd00744d8446cac52eb" - integrity sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA== +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== -"@esbuild/netbsd-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz#a7b2f991b8293748a7be42eac1c4325faf0c7cca" - integrity sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q== +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== -"@esbuild/openbsd-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz#3e50923de84c54008f834221130fd23646072b2f" - integrity sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ== +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== -"@esbuild/sunos-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz#ae47a550b0cd395de03606ecfba03cc96c7c19e2" - integrity sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng== +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== -"@esbuild/win32-arm64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz#05d364582b7862d7fbf4698ef43644f7346dcfcc" - integrity sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg== +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== -"@esbuild/win32-ia32@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz#a3372095a4a1939da672156a3c104f8ce85ee616" - integrity sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg== +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== -"@esbuild/win32-x64@0.18.11": - version "0.18.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57" - integrity sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA== +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -162,15 +153,15 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" + integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -182,15 +173,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@8.49.0": + version "8.49.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" + integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -227,12 +218,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== @@ -242,12 +228,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -261,17 +242,12 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@jspm/core@^2.0.1": version "2.0.1" @@ -347,9 +323,9 @@ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/chai@^4.3.5": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" - integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== "@types/fs-extra@^11.0.1": version "11.0.1" @@ -367,7 +343,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/json-schema@^7.0.6", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.9": version "7.0.12" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== @@ -395,14 +371,19 @@ integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/node@*": - version "20.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.1.tgz#a6033a8718653c50ac4962977e14d0f984d9527d" - integrity sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg== + version "20.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" + integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== -"@types/node@16.x", "@types/node@^16.18.32": - version "16.18.38" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.38.tgz#1dcdb6c54d02b323f621213745f2e44af30c73e6" - integrity sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ== +"@types/node@16.x": + version "16.18.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.50.tgz#93003cf0251a2ecd26dad6dc757168d648519805" + integrity sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw== + +"@types/node@^18.12.0": + version "18.17.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.15.tgz#31301a273b9ca7d568fe6d1c35ae52e0fb3f8d6a" + integrity sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -410,24 +391,24 @@ integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" + integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== "@types/vscode@^1.70.0": - version "1.80.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.80.0.tgz#e004dd6cde74dafdb7fab64a6e1754bf8165b981" - integrity sha512-qK/CmOdS2o7ry3k6YqU4zD3R2AYlJfbwBoSbKpBoP+GpXNE+0NEgJOli4n0bm0diK5kfBnchgCEj4igQz/44Hg== + version "1.82.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.82.0.tgz#89b0b21179dcf5e8cee1664a9a05c5f6c60d38d0" + integrity sha512-VSHV+VnpF8DEm8LNrn8OJ8VuUNcBzN3tMvKrNpbhhfuVjFm82+6v44AbDhLvVFgCzn6vs94EJNTp7w8S6+Q1Rw== "@typescript-eslint/eslint-plugin@^5.31.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz#a1a5290cf33863b4db3fb79350b3c5275a7b1223" - integrity sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/type-utils" "5.61.0" - "@typescript-eslint/utils" "5.61.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.0" @@ -436,82 +417,82 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.31.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.61.0.tgz#7fbe3e2951904bb843f8932ebedd6e0635bffb70" - integrity sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== dependencies: - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/typescript-estree" "5.61.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz#b670006d069c9abe6415c41f754b1b5d949ef2b2" - integrity sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/visitor-keys" "5.61.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz#e90799eb2045c4435ea8378cb31cd8a9fddca47a" - integrity sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg== +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: - "@typescript-eslint/typescript-estree" "5.61.0" - "@typescript-eslint/utils" "5.61.0" + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.61.0.tgz#e99ff11b5792d791554abab0f0370936d8ca50c0" - integrity sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz#4c7caca84ce95bb41aa585d46a764bcc050b92f3" - integrity sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/visitor-keys" "5.61.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.61.0.tgz#5064838a53e91c754fffbddd306adcca3fe0af36" - integrity sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ== +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/typescript-estree" "5.61.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz#c79414fa42158fd23bd2bb70952dc5cdbb298140" - integrity sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" "@vscode/test-electron@^2.1.5": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.3.3.tgz#e648700d5848eccfda99efa5d839356cfbe8cd4e" - integrity sha512-hgXCkDP0ibboF1K6seqQYyHAzCURgTwHS/6QU7slhwznDLwsRwg9bhfw1CZdyUEw8vvCmlrKWnd7BlQnI0BC4w== + version "2.3.4" + resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.3.4.tgz#d0ed1de72d347221cdf71426b0c7e21136f4791f" + integrity sha512-eWzIqXMhvlcoXfEFNWrVu/yYT5w6De+WZXR/bafUQhAp8+8GkQo95Oe14phwiRUPv8L+geAKl/QM2+PoT3YW3g== dependencies: http-proxy-agent "^4.0.1" https-proxy-agent "^5.0.0" jszip "^3.10.1" - semver "^7.3.8" + semver "^7.5.2" "@vscode/test-web@^0.0.44": version "0.0.44" @@ -533,14 +514,14 @@ vscode-uri "^3.0.7" "@vscode/vsce@^2.15.0": - version "2.19.0" - resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.19.0.tgz#342225662811245bc40d855636d000147c394b11" - integrity sha512-dAlILxC5ggOutcvJY24jxz913wimGiUrHaPkk16Gm9/PGFbz1YezWtrXsTKUtJws4fIlpX2UIlVlVESWq8lkfQ== + version "2.21.0" + resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.21.0.tgz#572e66db79cff383b9ac39f71710aa62e6392330" + integrity sha512-KuxYqScqUY/duJbkj9eE2tN2X/WJoGAy54hHtxT3ZBkM6IzrOg7H7CXGUPBxNlmqku2w/cAjOUSrgIHlzz0mbA== dependencies: azure-devops-node-api "^11.0.1" chalk "^2.4.2" cheerio "^1.0.0-rc.9" - commander "^6.1.0" + commander "^6.2.1" glob "^7.0.6" hosted-git-info "^4.0.2" jsonc-parser "^3.2.0" @@ -550,7 +531,7 @@ minimatch "^3.0.3" parse-semver "^1.1.1" read "^1.0.7" - semver "^5.1.0" + semver "^7.5.2" tmp "^0.2.1" typed-rest-client "^1.8.4" url-join "^4.0.1" @@ -617,7 +598,7 @@ aggregate-error@^4.0.0: clean-stack "^4.0.0" indent-string "^5.0.0" -ajv@^6.10.0, ajv@^6.12.4: +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== @@ -632,6 +613,11 @@ ansi-colors@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-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -708,25 +694,21 @@ arrify@^3.0.0: integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - atomic-sleep@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" @@ -737,15 +719,6 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - azure-devops-node-api@^11.0.1: version "11.2.0" resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz#bf04edbef60313117a0507415eed4790a420ad6b" @@ -857,6 +830,13 @@ bundle-require@^4.0.0: dependencies: load-tsconfig "^0.2.3" +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + cac@^6.7.12: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" @@ -878,11 +858,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -904,9 +879,9 @@ camelcase@^6.0.0, camelcase@^6.3.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== chai@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" @@ -916,7 +891,7 @@ chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1028,24 +1003,12 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.1.0: +commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -1206,14 +1169,14 @@ deep-eql@^4.1.2: type-detect "^4.0.0" deep-equal@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739" - integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" + integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== dependencies: array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" es-get-iterator "^1.1.3" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" is-arguments "^1.1.1" is-array-buffer "^3.0.2" is-date-object "^1.0.5" @@ -1249,19 +1212,24 @@ deepmerge-ts@^5.1.0: resolved "https://registry.yarnpkg.com/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz#c55206cc4c7be2ded89b9c816cf3608884525d7a" integrity sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-data-property@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" + integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -1283,9 +1251,9 @@ destroy@^1.0.4: integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== diff@5.0.0: version "5.0.0" @@ -1422,11 +1390,6 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== - esbuild-plugin-polyfill-node@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/esbuild-plugin-polyfill-node/-/esbuild-plugin-polyfill-node-0.3.0.tgz#e7e3804b8272df51ae4f8ebfb7445a03712504cb" @@ -1436,32 +1399,32 @@ esbuild-plugin-polyfill-node@^0.3.0: import-meta-resolve "^3.0.0" esbuild@^0.18.2: - version "0.18.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.11.tgz#cbf94dc3359d57f600a0dbf281df9b1d1b4a156e" - integrity sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA== + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== optionalDependencies: - "@esbuild/android-arm" "0.18.11" - "@esbuild/android-arm64" "0.18.11" - "@esbuild/android-x64" "0.18.11" - "@esbuild/darwin-arm64" "0.18.11" - "@esbuild/darwin-x64" "0.18.11" - "@esbuild/freebsd-arm64" "0.18.11" - "@esbuild/freebsd-x64" "0.18.11" - "@esbuild/linux-arm" "0.18.11" - "@esbuild/linux-arm64" "0.18.11" - "@esbuild/linux-ia32" "0.18.11" - "@esbuild/linux-loong64" "0.18.11" - "@esbuild/linux-mips64el" "0.18.11" - "@esbuild/linux-ppc64" "0.18.11" - "@esbuild/linux-riscv64" "0.18.11" - "@esbuild/linux-s390x" "0.18.11" - "@esbuild/linux-x64" "0.18.11" - "@esbuild/netbsd-x64" "0.18.11" - "@esbuild/openbsd-x64" "0.18.11" - "@esbuild/sunos-x64" "0.18.11" - "@esbuild/win32-arm64" "0.18.11" - "@esbuild/win32-ia32" "0.18.11" - "@esbuild/win32-x64" "0.18.11" + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" escalade@^3.1.1: version "3.1.1" @@ -1496,40 +1459,40 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.20.0: - version "8.44.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" - integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== + version "8.49.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" + integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.49.0" + "@humanwhocodes/config-array" "^0.11.11" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -1539,7 +1502,6 @@ eslint@^8.20.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -1551,13 +1513,12 @@ eslint@^8.20.0: natural-compare "^1.4.0" optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" - integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" acorn-jsx "^5.3.2" @@ -1627,10 +1588,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== +fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -1656,9 +1617,9 @@ fast-levenshtein@^3.0.0: fastest-levenshtein "^1.0.7" fast-redact@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.2.0.tgz#b1e2d39bc731376d28bde844454fa23e26919987" - integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" + integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== fastest-levenshtein@^1.0.7: version "1.0.16" @@ -1702,11 +1663,12 @@ find-up@5.0.0, find-up@^5.0.0: path-exists "^4.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== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" flat@^5.0.2: @@ -1714,16 +1676,11 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.1.0: +flatted@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -1739,15 +1696,6 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -1772,11 +1720,16 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -1797,7 +1750,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== @@ -1856,9 +1809,9 @@ glob@7.2.0: path-is-absolute "^1.0.0" glob@^10.2.5: - version "10.3.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" - integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw== + version "10.3.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f" + integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ== dependencies: foreground-child "^3.1.0" jackspeak "^2.0.3" @@ -1890,9 +1843,9 @@ glob@^8.0.3: once "^1.3.0" globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: type-fest "^0.20.2" @@ -1948,18 +1901,6 @@ gunzip-maybe@^1.4.2: pumpify "^1.3.3" through2 "^2.0.3" -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -2099,9 +2040,9 @@ https-proxy-agent@^5.0.0: debug "4" https-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz#75cb70d04811685667183b31ab158d006750418a" - integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== dependencies: agent-base "^7.0.2" debug "4" @@ -2126,7 +2067,7 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +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== @@ -2231,9 +2172,9 @@ is-callable@^1.1.3: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.5.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -2283,7 +2224,7 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-nan@^1.2.1: +is-nan@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== @@ -2358,15 +2299,11 @@ is-symbol@^1.0.3: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.3: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-unicode-supported@^0.1.0: version "0.1.0" @@ -2402,9 +2339,9 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + version "2.3.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.3.tgz#95e4cbcc03b3eb357bf6bcce14a903fb3d1151e1" + integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -2427,18 +2364,16 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-ref-parser@^9.0.9: - version "9.0.9" - resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#66ea538e7450b12af342fa3d5b8458bc1e1e013f" - integrity sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q== - dependencies: - "@apidevtools/json-schema-ref-parser" "9.0.9" - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2498,6 +2433,13 @@ keytar@^7.7.0: node-addon-api "^4.3.0" prebuild-install "^7.0.1" +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -2664,9 +2606,9 @@ lru-cache@^9.1.1: integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== make-dir@^3.0.0: version "3.1.0" @@ -2757,7 +2699,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -2821,15 +2763,15 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.1.tgz#dff63464407cd8b83d7f008c0f116fa8c9b77ebf" - integrity sha512-NQ8MCKimInjVlaIqx51RKJJB7mINVkLTJbsZKmto4UAAOC/CWXES8PGaOgoBZyqoUsUA/U3DToGK7GJkkHbjJw== + version "7.0.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" @@ -2928,20 +2870,15 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== node-abi@^3.3.0: - version "3.45.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" - integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== + version "3.47.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" + integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== dependencies: semver "^7.3.5" @@ -2994,7 +2931,7 @@ object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.0.1, object-is@^1.1.5: +object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -3067,16 +3004,29 @@ only@~0.0.2: resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== -openapi-typescript-codegen@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/openapi-typescript-codegen/-/openapi-typescript-codegen-0.24.0.tgz#b3e6ade5bae75cd47868e5e3e4dc3bcf899cadab" - integrity sha512-rSt8t1XbMWhv6Db7GUI24NNli7FU5kzHLxcE8BpzgGWRdWyWt9IB2YoLyPahxNrVA7yOaVgnXPkrcTDRMQtJYg== +openapi-fetch@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/openapi-fetch/-/openapi-fetch-0.7.6.tgz#73325d54f867eb06585b0500c2f9a27cc16d4790" + integrity sha512-TmHTmzMqNmVUlRasfaSVsOYnFHHu0L31VGxbk75rk9P7RfOj70kc+Tiuu548koOpB5zs8yiUwW5wsYjeQifHcA== dependencies: - camelcase "^6.3.0" - commander "^10.0.0" - fs-extra "^11.1.1" - handlebars "^4.7.7" - json-schema-ref-parser "^9.0.9" + openapi-typescript-helpers "^0.0.2" + +openapi-typescript-helpers@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.2.tgz#830ba8385461bfd19e27c451c2e6a4a965d61f3e" + integrity sha512-r5Z4tlGa2l6jYO1ENT9Giqo/ZWzWPmsYUR41O01kjYr7vg4iBFaMh0W0g8Ef72SpeU2F+TY6CAdKxTv7aq+WXA== + +openapi-typescript@^6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/openapi-typescript/-/openapi-typescript-6.6.1.tgz#663a3197d8cf0d11fccc9dc83e306d46aead3447" + integrity sha512-jx7bzR6FfkG21icjikrF0k6K8moNg93PuZlfc+zo4Enxwmyw6vAUh4Rl064JN35um/RV8ZX7ANnMrQW8gRsGsQ== + dependencies: + ansi-colors "^4.1.3" + fast-glob "^3.3.1" + js-yaml "^4.1.0" + supports-color "^9.4.0" + undici "^5.23.0" + yargs-parser "^21.1.1" optionator@^0.9.3: version "0.9.3" @@ -3248,10 +3198,10 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pino-abstract-transport@v1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" - integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== +pino-abstract-transport@v1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" + integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== dependencies: readable-stream "^4.0.0" split2 "^4.0.0" @@ -3262,14 +3212,14 @@ pino-std-serializers@^6.0.0: integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== pino@^8.14.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.14.1.tgz#bb38dcda8b500dd90c1193b6c9171eb777a47ac8" - integrity sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw== + version "8.15.1" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.1.tgz#04b815ff7aa4e46b1bbab88d8010aaa2b17eaba4" + integrity sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.0.0 + pino-abstract-transport v1.1.0 pino-std-serializers "^6.0.0" process-warning "^2.0.0" quick-format-unescaped "^4.0.3" @@ -3283,17 +3233,19 @@ pirates@^4.0.1: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== -playwright-core@1.35.1: - version "1.35.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.35.1.tgz#52c1e6ffaa6a8c29de1a5bdf8cce0ce290ffb81d" - integrity sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg== +playwright-core@1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.38.0.tgz#cb8e135da1c0b1918b070642372040ed9aa7009a" + integrity sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g== playwright@^1.34.3: - version "1.35.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.35.1.tgz#f991d0c76ae517d4a0023d9428b09d19d5e87128" - integrity sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA== + version "1.38.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.38.0.tgz#0ee19d38512b7b1f961c0eb44008a6fed373d206" + integrity sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A== dependencies: - playwright-core "1.35.1" + playwright-core "1.38.0" + optionalDependencies: + fsevents "2.3.2" postcss-load-config@^4.0.1: version "4.0.1" @@ -3327,9 +3279,9 @@ prelude-ls@^1.2.1: integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" - integrity sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g== + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== process-nextick-args@~2.0.0: version "2.0.1" @@ -3346,11 +3298,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -3500,13 +3447,13 @@ redent@^4.0.0: strip-indent "^4.0.0" regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" require-directory@^2.1.1: version "2.1.1" @@ -3551,16 +3498,16 @@ rimraf@^5.0.1: glob "^10.2.5" rollup@^3.2.5: - version "3.26.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.2.tgz#2e76a37606cb523fc9fef43e6f59c93f86d95e7c" - integrity sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA== + version "3.29.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.1.tgz#ba53a179d46ac3cd79e162dca6ab70d93cd26f78" + integrity sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg== optionalDependencies: fsevents "~2.3.2" rotating-file-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/rotating-file-stream/-/rotating-file-stream-3.1.0.tgz#6cf50e1671de82a396de6d31d39a6f2445f45fba" - integrity sha512-TkMF6cP1/QDcon9D71mjxHoflNuznNOrY5JJQfuxkKklZRmoow/lWBLNxXVjb6KcjAU8BDCV145buLgOx9Px1Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/rotating-file-stream/-/rotating-file-stream-3.1.1.tgz#1c126ab2d34ab19c703909922182468b66d6b893" + integrity sha512-PNF1iDkxcZG+T87uUzLlcO4aquTCyY8yl+Q/OTK4dMwhwWDYWU4ZATYeIXHmYVGIzqZ2MrpY4WIkYc9Bsc3Nzw== run-parallel@^1.1.9: version "1.2.0" @@ -3590,16 +3537,16 @@ sax@>=0.6.0: integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== semver@^5.1.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3613,6 +3560,15 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3655,9 +3611,9 @@ signal-exit@^3.0.3: integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== simple-concat@^1.0.0: version "1.0.1" @@ -3697,11 +3653,6 @@ source-map@0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -3755,6 +3706,11 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3813,7 +3769,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, 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== @@ -3824,9 +3780,9 @@ strip-json-comments@~2.0.1: integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== sucrase@^3.20.3: - version "3.32.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7" - integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ== + version "3.34.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" @@ -3857,6 +3813,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + tar-fs@^2.0.0, tar-fs@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -3898,9 +3859,9 @@ thenify-all@^1.0.0: any-promise "^1.0.0" thread-stream@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.3.0.tgz#4fc07fb39eff32ae7bad803cb7dd9598349fed33" - integrity sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" + integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== dependencies: real-require "^0.2.0" @@ -3988,9 +3949,9 @@ tsscmp@1.0.6: integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== tsup@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.1.0.tgz#11369762b68032da118a714a38d5a1d26ac45293" - integrity sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w== + version "7.2.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.2.0.tgz#bb24c0d5e436477900c712e42adc67200607303c" + integrity sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ== dependencies: bundle-require "^4.0.0" cac "^6.7.12" @@ -4076,25 +4037,27 @@ typescript@^4.7.4: integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typescript@^5.0.3: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - underscore@^1.12.1: version "1.13.6" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +undici@^5.23.0: + version "5.24.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.24.0.tgz#6133630372894cfeb3c3dab13b4c23866bd344b5" + integrity sha512-OKlckxBjFl0oXxcj9FU6oB8fDAaiRUq+D8jrFWGmOfI/gIyjk/IeS75LMzgYKUaeHzLUcYvf9bbJGSrUwTfwwQ== + dependencies: + busboy "^1.6.0" + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -4117,7 +4080,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.0: +util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -4129,9 +4092,9 @@ util@^0.12.0: which-typed-array "^1.1.2" uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -4191,17 +4154,16 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.11, which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1: version "2.0.2" @@ -4210,11 +4172,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -4272,9 +4229,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + version "2.3.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" + integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== yargs-parser@20.2.4: version "20.2.4" @@ -4286,6 +4243,11 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.9: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"