From 00a931bbce2f85bd2c3a59af9f16c0159558d612 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:15:25 -0700 Subject: [PATCH 01/16] Add all packages as npm workspaces --- package-lock.json | 3 +++ package.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/package-lock.json b/package-lock.json index 6e21fa9a6..8a9cf07ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,9 @@ "packages": { "": { "name": "publishing-client", + "workspaces": [ + "packages/*" + ], "devDependencies": { "husky": "^9.0.11", "lint-staged": "^15.2.2", diff --git a/package.json b/package.json index 22b8b93df..82c9600d3 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,9 @@ "name": "publishing-client", "private": true, "type": "module", + "workspaces": [ + "packages/*" + ], "scripts": { "format": "prettier . --write", "check-format": "prettier . --check", From f2a321149e3a21c572625b3ada993b1c7e7320c3 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:16:42 -0700 Subject: [PATCH 02/16] Move vscode API module to packages --- packages/api/README.md | 88 ++ packages/api/client.ts | 61 ++ packages/api/index.ts | 11 + packages/api/resources/Accounts.ts | 29 + packages/api/resources/Configurations.ts | 64 ++ packages/api/resources/Deployments.ts | 74 ++ packages/api/resources/Files.ts | 46 ++ packages/api/resources/Requirements.ts | 32 + packages/api/types/accounts.ts | 31 + packages/api/types/configurations.ts | 113 +++ packages/api/types/connect.ts | 34 + packages/api/types/deployments.ts | 154 ++++ packages/api/types/error.ts | 10 + packages/api/types/events.ts | 984 +++++++++++++++++++++++ packages/api/types/files.ts | 40 + packages/api/types/requirements.ts | 5 + packages/api/types/schema.ts | 3 + 17 files changed, 1779 insertions(+) create mode 100644 packages/api/README.md create mode 100644 packages/api/client.ts create mode 100644 packages/api/index.ts create mode 100644 packages/api/resources/Accounts.ts create mode 100644 packages/api/resources/Configurations.ts create mode 100644 packages/api/resources/Deployments.ts create mode 100644 packages/api/resources/Files.ts create mode 100644 packages/api/resources/Requirements.ts create mode 100644 packages/api/types/accounts.ts create mode 100644 packages/api/types/configurations.ts create mode 100644 packages/api/types/connect.ts create mode 100644 packages/api/types/deployments.ts create mode 100644 packages/api/types/error.ts create mode 100644 packages/api/types/events.ts create mode 100644 packages/api/types/files.ts create mode 100644 packages/api/types/requirements.ts create mode 100644 packages/api/types/schema.ts diff --git a/packages/api/README.md b/packages/api/README.md new file mode 100644 index 000000000..1bb46a6d0 --- /dev/null +++ b/packages/api/README.md @@ -0,0 +1,88 @@ +# API Wrapper Library + +A library to enable convenient access to the Publisher Client API and its +response types. + +## Usage + +```typescript +import { initApi, useApi } from "src/api"; + +// You must first initialize the API one time. +// The initialization method requires a promise which indicates +// when the server who will provide the API is ready. If you do +// not have this scenario, you follow the pattern below and +// pass in a resolved promise. + +const ready = Promise.Resolve(true); +initApi(ready, "http://localhost:15332/api`"); + +const api = await useApi(); // will wait until the promise that was passed into the initApi call is resolved + +try { + const response = await api.accounts.getAll(); +} catch (err) { + // handle the error +} +``` + +If you need to set the URL and or Port for the base API endpoint you can do so +using `setBaseUrl`. This changes the client so all requests will use the new +base URL. This will need to be done before any requests are made. + +```typescript +const api = await useApi(); +api.setBaseUrl("http://localhost:9000/api"); +``` + +## Organization + +### `client.ts` + +Contains the `PublishingClientApi` class which constructs the `AxiosInstance`, +passes it down to each of the resources for use, and gathers all of the +resources. This is the what we interact with. + +### `/resources` + +Each class in the `resources` folder has methods related to its endpoint. Each +method has a one-to-one relationship with the API endpoint on the server side. + +Example: `/api/accounts` maps to the `resources/Accounts.ts` module and `GET +api/accounts` maps to the `useApi().accounts.getAll()` method. + +### `/types` + +Holds the types definitions for use in Resources to prevent Resources from +getting cluttered. + +## Patterns + +### Limited Exports + +Rather than exporting the `AxiosInstance` or the `PublishingClientApi` class a +singleton factory is exported to prevent more than one client from being created and any +non-resource-method usage of this library. + +We use the `useApi()` function which follows some of the syntax seen in +the [Composition API](https://vuejs.org/api/sfc-script-setup.html#useslots-useattrs) +and other Vue 3 libraries such as [Pinia](https://pinia.vuejs.org/). + +This factory will wait to return the api class until the backend service responsible for responding +to the API request is available. Therefore, it is required to await on the response of the useApi() +before being able to call the API. The examples contained herein implement this pattern of usage. + +### Return All Available Data + +Each Resource method returns the full `AxiosResponse`. We can use a +[destructing assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) +to reduce boilerplate and ensure that we do not lose potentially-needed data. + +```typescript +try { + const api = await useApi(); + const { data } = await api.accounts.getAll(); +} catch (err) { + // handle the error +} +``` diff --git a/packages/api/client.ts b/packages/api/client.ts new file mode 100644 index 000000000..2591b4186 --- /dev/null +++ b/packages/api/client.ts @@ -0,0 +1,61 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import axios from "axios"; + +import { Accounts } from "./resources/Accounts"; +import { Deployments } from "./resources/Deployments"; +import { Configurations } from "./resources/Configurations"; +import { Files } from "./resources/Files"; +import { Requirements } from "./resources/Requirements"; + +class PublishingClientApi { + private client; + + accounts: Accounts; + configurations: Configurations; + deployments: Deployments; + files: Files; + requirements: Requirements; + apiServiceIsUp: Promise; + + constructor(apiBaseUrl: string, apiServiceIsUp: Promise) { + this.client = axios.create({ + baseURL: apiBaseUrl, + }); + this.apiServiceIsUp = apiServiceIsUp; + + this.accounts = new Accounts(this.client); + this.configurations = new Configurations(this.client); + this.deployments = new Deployments(this.client); + this.files = new Files(this.client); + this.requirements = new Requirements(this.client); + } + + setBaseUrl(url: string) { + this.client.defaults.baseURL = url; + } +} + +let api: PublishingClientApi | undefined = undefined; + +// NOTE: this function must be called ahead of useApi() +// so that the class is properly instantiated. +export const initApi = ( + apiServiceIsUp: Promise, + apiBaseUrl: string = "/api", +) => { + api = new PublishingClientApi(apiBaseUrl, apiServiceIsUp); +}; + +// NOTE: initApi(...) must be called ahead of the first time +// this method is called, otherwise, you are skipping initialization +// and it will throw an exception +export const useApi = async () => { + if (!api) { + throw new Error("client::useApi() must be called AFTER client::initApi()"); + } + // wait until the service providing the API is available and ready + await api.apiServiceIsUp; + + return api; +}; diff --git a/packages/api/index.ts b/packages/api/index.ts new file mode 100644 index 000000000..1eda4b2f4 --- /dev/null +++ b/packages/api/index.ts @@ -0,0 +1,11 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export { initApi, useApi } from "./client"; + +export * from "./types/accounts"; +export * from "./types/configurations"; +export * from "./types/connect"; +export * from "./types/deployments"; +export * from "./types/events"; +export * from "./types/files"; +export * from "./types/schema"; diff --git a/packages/api/resources/Accounts.ts b/packages/api/resources/Accounts.ts new file mode 100644 index 000000000..970b7c3ef --- /dev/null +++ b/packages/api/resources/Accounts.ts @@ -0,0 +1,29 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AxiosInstance } from "axios"; + +import { Account } from "../types/accounts"; + +export class Accounts { + private client: AxiosInstance; + + constructor(client: AxiosInstance) { + this.client = client; + } + + // Returns: + // 200 - success + // 500 - internal server error + getAll() { + return this.client.get>("/accounts"); + } + + // Returns: + // 200 - success + // 404 - account not found + // 500 - internal server error + get(accountName: string) { + const encodedAccountName = encodeURIComponent(accountName); + return this.client.get(`/accounts/${encodedAccountName}`); + } +} diff --git a/packages/api/resources/Configurations.ts b/packages/api/resources/Configurations.ts new file mode 100644 index 000000000..4f055eb6e --- /dev/null +++ b/packages/api/resources/Configurations.ts @@ -0,0 +1,64 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AxiosInstance } from "axios"; + +import { + Configuration, + ConfigurationDetails, + ConfigurationError, +} from "../types/configurations"; + +export class Configurations { + private client: AxiosInstance; + + constructor(client: AxiosInstance) { + this.client = client; + } + + // Returns: + // 200 - success + // 404 - not found + // 500 - internal server error + get(configName: string) { + const encodedName = encodeURIComponent(configName); + return this.client.get( + `/configurations/${encodedName}`, + ); + } + + // Returns: + // 200 - success + // 500 - internal server error + getAll() { + return this.client.get>( + "/configurations", + ); + } + + // Returns: + // 200 - success + // 400 - bad request + // 500 - internal server error + createOrUpdate(configName: string, cfg: ConfigurationDetails) { + const encodedName = encodeURIComponent(configName); + return this.client.put(`configurations/${encodedName}`, cfg); + } + + // Returns: + // 204 - success (no response) + // 404 - not found + // 500 - internal server error + delete(configName: string) { + const encodedName = encodeURIComponent(configName); + return this.client.delete(`configurations/${encodedName}`); + } + + // Inspect the project, returning all possible (detected) configurations + // Returns: + // 200 - success + // 400 - bad request + // 500 - internal server error + inspect() { + return this.client.post("/inspect"); + } +} diff --git a/packages/api/resources/Deployments.ts b/packages/api/resources/Deployments.ts new file mode 100644 index 000000000..efe00194e --- /dev/null +++ b/packages/api/resources/Deployments.ts @@ -0,0 +1,74 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AxiosInstance } from "axios"; + +import { PreDeployment, AllDeploymentTypes } from "../types/deployments"; + +export class Deployments { + private client: AxiosInstance; + + constructor(client: AxiosInstance) { + this.client = client; + } + + // Returns: + // 200 - success + // 500 - internal server error + getAll() { + return this.client.get>("/deployments"); + } + + // Returns: + // 200 - success + // 404 - not found + // 500 - internal server error + get(id: string) { + const encodedId = encodeURIComponent(id); + return this.client.get(`deployments/${encodedId}`); + } + + // Returns: + // 200 - success + // 400 - bad request + // 409 - conflict + // 500 - internal server error + // Errors returned through event stream + createNew(accountName?: string, configName?: string, saveName?: string) { + const params = { + account: accountName, + config: configName, + saveName, + }; + return this.client.post("/deployments", params); + } + + // Returns: + // 200 - success + // 400 - bad request + // 500 - internal server error + // Errors returned through event stream + publish( + targetName: string, + accountName: string, + configName: string = "default", + ) { + const params = { + account: accountName, + config: configName, + }; + const encodedTarget = encodeURIComponent(targetName); + return this.client.post<{ localId: string }>( + `deployments/${encodedTarget}`, + params, + ); + } + + // Returns: + // 204 - no content + // 404 - not found + // 500 - internal server error + delete(saveName: string) { + const encodedSaveName = encodeURIComponent(saveName); + return this.client.delete(`deployments/${encodedSaveName}`); + } +} diff --git a/packages/api/resources/Files.ts b/packages/api/resources/Files.ts new file mode 100644 index 000000000..2f676ddcb --- /dev/null +++ b/packages/api/resources/Files.ts @@ -0,0 +1,46 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AxiosInstance } from "axios"; + +import { DeploymentFile, FileAction } from "../types/files"; +import { Configuration } from "../types/configurations"; + +export class Files { + private client: AxiosInstance; + + constructor(client: AxiosInstance) { + this.client = client; + } + + // Returns: + // 200 - success + // 403 - pathname is not safe - forbidden + // 500 - internal server error + get() { + return this.client.get("/files"); + } + + // Returns: + // 200 - success + // 404 - configuration does not exist + // 422 - configuration files list contains invalid patterns + // 500 - internal server error + getByConfiguration(configName: string) { + const encodedName = encodeURIComponent(configName); + return this.client.get( + `/configurations/${encodedName}/files`, + ); + } + + updateFileList(configName: string, path: string, action: FileAction) { + const encodedName = encodeURIComponent(configName); + const body = { + path, + action, + }; + return this.client.post( + `/configurations/${encodedName}/files`, + body, + ); + } +} diff --git a/packages/api/resources/Requirements.ts b/packages/api/resources/Requirements.ts new file mode 100644 index 000000000..126a684d3 --- /dev/null +++ b/packages/api/resources/Requirements.ts @@ -0,0 +1,32 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AxiosInstance } from "axios"; +import { RequirementsResponse } from "../types/requirements"; + +export class Requirements { + private client: AxiosInstance; + + constructor(client: AxiosInstance) { + this.client = client; + } + + // Returns: + // 200 - success + // 404 - configuration or requirements file not found + // 409 - conflict (Python is not configured) + // 500 - internal server error + getByConfiguration(configName: string) { + const encodedName = encodeURIComponent(configName); + return this.client.get( + `/configurations/${encodedName}/requirements`, + ); + } + + // Returns: + // 200 - success + // 400 - bad request + // 500 - internal server error + create(saveName: string | undefined) { + return this.client.post("requirements", { saveName }); + } +} diff --git a/packages/api/types/accounts.ts b/packages/api/types/accounts.ts new file mode 100644 index 000000000..86f861076 --- /dev/null +++ b/packages/api/types/accounts.ts @@ -0,0 +1,31 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export enum ServerType { + CONNECT = "connect", + SHINY_APPS = "shinyapps", + CLOUD = "cloud", +} + +export enum AccountSource { + RSCONNECT_PYTHON = "rsconnect-python", + RSCONNECT = "rsconnect", + ENVIRONMENT = "environment", +} + +export enum AccountAuthType { + NONE = "none", + API_KEY = "api-key", + TOKEN_KEY = "token-key", + TOKEN_SECRET = "token-secret", +} + +export type Account = { + accountName: string; + authType: AccountAuthType; + caCert: string; + insecure: boolean; + name: string; + source: AccountSource; + type: ServerType; + url: string; +}; diff --git a/packages/api/types/configurations.ts b/packages/api/types/configurations.ts new file mode 100644 index 000000000..8407bf3b2 --- /dev/null +++ b/packages/api/types/configurations.ts @@ -0,0 +1,113 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AgentError } from "./error"; +import { ConnectConfig } from "./connect"; +import { SchemaURL } from "./schema"; + +export type ConfigurationLocation = { + configurationName: string; + configurationPath: string; +}; + +export type ConfigurationError = { + error: AgentError; +} & ConfigurationLocation; + +export type Configuration = { + configuration: ConfigurationDetails; +} & ConfigurationLocation; + +export function isConfigurationError( + c: Configuration | ConfigurationError, +): c is ConfigurationError { + return (c as ConfigurationError).error !== undefined; +} + +export enum ContentType { + HTML = "html", + JUPYTER_NOTEBOOK = "jupyter-notebook", + JUPYTER_VOILA = "jupyter-voila", + PYTHON_BOKEH = "python-bokeh", + PYTHON_DASH = "python-dash", + PYTHON_FASTAPI = "python-fastapi", + PYTHON_FLASK = "python-flask", + PYTHON_SHINY = "python-shiny", + PYTHON_STREAMLIT = "python-streamlit", + QUARTO_SHINY = "quarto-shiny", + QUARTO = "quarto", + R_PLUMBER = "r-plumber", + R_SHINY = "r-shiny", + RMD_SHINY = "rmd-shiny", + RMD = "rmd", + UNKNOWN = "unknown", +} + +export type ConfigurationDetails = { + $schema: SchemaURL; + type: ContentType; + entrypoint?: string; + title?: string; + description?: string; + thumbnail?: string; + tags?: string[]; + python?: PythonConfig; + r?: RConfig; + quarto?: QuartoConfig; + environment?: EnvironmentConfig; + validate: boolean; + files?: string[]; + secrets?: string[]; + schedules?: ScheduleConfig[]; + access?: AccessConfig; + connect?: ConnectConfig; +}; + +export type PythonConfig = { + version: string; + packageFile: string; + packageManager: string; +}; + +export type RConfig = { + version: string; + packageFile: string; + packageManager: string; +}; + +export type QuartoConfig = { + version: string; + engines?: string[]; +}; + +export type EnvironmentConfig = Record; + +export type ScheduleConfig = { + start: string; + recurrence: string; +}; + +export enum AccessType { + ANONYMOUS = "all", + LOGGED_IN = "logged-in", + ACL = "acl", +} + +export type AccessConfig = { + type: AccessType; + users?: User[]; + groups?: Group[]; +}; + +export type User = { + id?: string; + guid?: string; + name?: string; + permissions: string; +}; + +export type Group = { + id?: string; + guid?: string; + name?: string; + permissions: string; +}; diff --git a/packages/api/types/connect.ts b/packages/api/types/connect.ts new file mode 100644 index 000000000..1c53bf2ef --- /dev/null +++ b/packages/api/types/connect.ts @@ -0,0 +1,34 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export type ConnectConfig = { + access?: ConnectAccess; + runtime?: ConnectRuntime; + kubernetes?: ConnectKubernetes; +}; + +export type ConnectAccess = { + runAs?: string; + runAsCurrentUser?: boolean; +}; + +export type ConnectRuntime = { + connectionTimeout?: number; + readTimeout?: number; + initTimeout?: number; + idleTimeout?: number; + maxProcesses?: number; + minProcesses?: number; + maxConnections?: number; + loadFactor?: number; +}; + +export type ConnectKubernetes = { + memoryRequest?: number; + memoryLimit?: number; + cpuRequest?: number; + cpuLimit?: number; + amdGpuLimit?: number; + nvidiaGpuLimit?: number; + serviceAccountName?: string; + imageName?: string; +}; diff --git a/packages/api/types/deployments.ts b/packages/api/types/deployments.ts new file mode 100644 index 000000000..14ce88a76 --- /dev/null +++ b/packages/api/types/deployments.ts @@ -0,0 +1,154 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +import { AgentError } from "./error"; +import { Configuration, ConfigurationLocation } from "./configurations"; +import { SchemaURL } from "./schema"; +import { ServerType } from "./accounts"; + +export enum DeploymentState { + NEW = "new", + DEPLOYED = "deployed", + ERROR = "error", +} + +export type DeploymentLocation = { + deploymentName: string; + deploymentPath: string; +}; + +export type DeploymentError = { + error: AgentError; + state: DeploymentState.ERROR; +} & DeploymentLocation; + +type DeploymentRecord = { + $schema: SchemaURL; + serverType: ServerType; + serverUrl: string; + saveName: string; + createdAt: string; + configurationName: string; + deploymentError: AgentError | null; +} & DeploymentLocation; + +export type PreDeployment = { + state: DeploymentState.NEW; +} & DeploymentRecord; + +export type PreDeploymentWithConfig = PreDeployment & ConfigurationLocation; + +export type Deployment = { + id: string; + bundleId: string; + bundleUrl: string; + dashboardUrl: string; + directUrl: string; + files: string[]; + deployedAt: string; + state: DeploymentState.DEPLOYED; +} & DeploymentRecord & + Configuration; + +export type AllDeploymentTypes = + | Deployment + | PreDeployment + | PreDeploymentWithConfig + | DeploymentError; + +export function isSuccessful( + d: AllDeploymentTypes | undefined, +): boolean | undefined { + if (d === undefined) { + return undefined; + } + if (isDeploymentError(d)) { + return false; + } + return Boolean(!d.deploymentError); +} + +export function isUnsuccessful( + d: AllDeploymentTypes | undefined, +): boolean | undefined { + const result = isSuccessful(d); + if (result === undefined) { + return undefined; + } + return !result; +} + +export function isDeploymentError( + d: AllDeploymentTypes | undefined, +): d is DeploymentError { + return Boolean(d && d.state === DeploymentState.ERROR); +} + +export function isPreDeployment( + d: AllDeploymentTypes | undefined, +): d is PreDeployment { + return Boolean(d && d.state === DeploymentState.NEW); +} + +export function isPreDeploymentWithConfig( + d: AllDeploymentTypes | undefined, +): d is PreDeploymentWithConfig { + return Boolean( + d && + d.state === DeploymentState.NEW && + (d as PreDeploymentWithConfig).configurationName !== undefined, + ); +} + +export function isSuccessfulPreDeployment( + d: AllDeploymentTypes | undefined, +): d is PreDeployment { + if (isPreDeployment(d)) { + const success = isSuccessful(d); + if (success !== undefined) { + return success; + } + } + return false; +} + +export function isUnsuccessfulPreDeployment( + d: AllDeploymentTypes | undefined, +): d is PreDeployment { + if (isPreDeployment(d)) { + const failure = isUnsuccessful(d); + if (failure !== undefined) { + return failure; + } + } + return false; +} + +export function isDeployment( + d: AllDeploymentTypes | undefined, +): d is Deployment { + return Boolean(d && d.state === DeploymentState.DEPLOYED); +} + +export function isSuccessfulDeployment( + d: AllDeploymentTypes | undefined, +): d is Deployment { + if (isDeployment(d)) { + const success = isSuccessful(d); + if (success !== undefined) { + return success; + } + } + return false; +} + +export function isUnsuccessfulDeployment( + d: AllDeploymentTypes | undefined, +): d is Deployment { + if (isDeployment(d)) { + const failure = isUnsuccessful(d); + if (failure !== undefined) { + return failure; + } + } + return false; +} diff --git a/packages/api/types/error.ts b/packages/api/types/error.ts new file mode 100644 index 000000000..8a4ca2d3d --- /dev/null +++ b/packages/api/types/error.ts @@ -0,0 +1,10 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export type AgentError = { + code: string; + msg: string; + operation: string; + data: { + [key: string]: unknown; + }; +}; diff --git a/packages/api/types/events.ts b/packages/api/types/events.ts new file mode 100644 index 000000000..a52a0383f --- /dev/null +++ b/packages/api/types/events.ts @@ -0,0 +1,984 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export enum EventSourceReadyState { + CONNECTING = 0, + OPEN = 1, + CLOSED = 2, +} + +export enum EventStreamMessageType { + ERROR = "error", + LOG = "log", +} + +export type MethodResult = { + ok: boolean; + error?: string; +}; + +export type EventStatus = { + isOpen?: boolean; + eventSource: string; + withCredentials?: boolean; + readyState?: EventSourceReadyState; + url: string | null; + lastError: string | null; +}; + +export type CallbackQueueEntry = { + eventType: EventSubscriptionTarget; + callback: OnMessageEventSourceCallback; +}; + +export type EventSubscriptionTarget = keyof EventSubscriptionTargetCallbackMap; + +/** + * Mapping of event subscription targets to callback signatures. + */ +export interface EventSubscriptionTargetCallbackMap { + // all events + "*": OnMessageEventSourceCallback; + + // agent console log messages + "agent/log": OnAgentLogCallback; + + // all errors + "errors/*": OnMessageEventSourceCallback; + "errors/sse": OnErrorsSseCallback; + "errors/open": OnErrorsOpenCallback; + "errors/unknownEvent": OnErrorsUnknownEventCallback; + + // open events + "open/*": OnMessageEventSourceCallback; + "open/sse": OnOpenSseCallback; + + // publish events + "publish/*": OnMessageEventSourceCallback; + "publish/**/log": OnMessageEventSourceCallback; + "publish/**/failure": OnMessageEventSourceCallback; + "publish/start": OnPublishStartCallback; + + "publish/checkCapabilities/start": OnPublishCheckCapabilitiesStartCallback; + "publish/checkCapabilities/log": OnPublishCheckCapabilitiesLogCallback; + "publish/checkCapabilities/success": OnPublishCheckCapabilitiesSuccessCallback; + "publish/checkCapabilities/failure": OnPublishCheckCapabilitiesFailureCallback; + + // 'publish/createBundle/failure/authFailure' | // received but temporarily converted + "publish/createNewDeployment/start": OnPublishCreateNewDeploymentStartCallback; + "publish/createNewDeployment/success": OnPublishCreateNewDeploymentSuccessCallback; + "publish/createNewDeployment/failure": OnPublishCreateNewDeploymentFailureCallback; + + "publish/setEnvVars/start": OnPublishSetEnvVarsStartCallback; + "publish/setEnvVars/success": OnPublishSetEnvVarsSuccessCallback; + "publish/setEnvVars/failure": OnPublishSetEnvVarsFailureCallback; + + "publish/createBundle/start": OnPublishCreateBundleStartCallback; + "publish/createBundle/log": OnPublishCreateBundleLogCallback; + "publish/createBundle/success": OnPublishCreateBundleSuccessCallback; + "publish/createBundle/failure": OnPublishCreateBundleFailureCallback; + + "publish/createDeployment/start": OnPublishCreateDeploymentStartCallback; + "publish/createDeployment/log": OnPublishCreateDeploymentLogCallback; + "publish/createDeployment/success": OnPublishCreateDeploymentSuccessCallback; + "publish/createDeployment/failure": OnPublishCreateDeploymentFailureCallback; + + "publish/uploadBundle/start": OnPublishUploadBundleStartCallback; + "publish/uploadBundle/log": OnPublishUploadBundleLogCallback; + "publish/uploadBundle/success": OnPublishUploadBundleSuccessCallback; + "publish/uploadBundle/failure": OnPublishUploadBundleFailureCallback; + + "publish/deployBundle/start": OnPublishDeployBundleStartCallback; + "publish/deployBundle/log": OnPublishDeployBundleLogCallback; + "publish/deployBundle/success": OnPublishDeployBundleSuccessCallback; + "publish/deployBundle/failure": OnPublishDeployBundleFailureCallback; + + "publish/restorePythonEnv/start": OnPublishRestorePythonEnvStartCallback; + "publish/restorePythonEnv/log": OnPublishRestorePythonEnvLogCallback; + "publish/restorePythonEnv/progress": OnPublishRestorePythonEnvProgressCallback; + "publish/restorePythonEnv/status": OnPublishRestorePythonEnvStatusCallback; + "publish/restorePythonEnv/success": OnPublishRestorePythonEnvSuccessCallback; + "publish/restorePythonEnv/failure": OnPublishRestorePythonEnvFailureCallback; + // 'publish/restorePythonEnv/failure/serverErr' | // received but temporarily converted + + "publish/runContent/start": OnPublishRunContentStartCallback; + "publish/runContent/log": OnPublishRunContentLogCallback; + "publish/runContent/success": OnPublishRunContentSuccessCallback; + "publish/runContent/failure": OnPublishRunContentFailureCallback; + + "publish/setVanityURL/start": OnPublishSetVanityURLStartCallback; + "publish/setVanityURL/log": OnPublishSetVanityURLLogCallback; + "publish/setVanityURL/success": OnPublishSetVanityURLSuccessCallback; + "publish/setVanityURL/failure": OnPublishSetVanityURLFailureCallback; + + "publish/validateDeployment/start": OnPublishValidateDeploymentStartCallback; + "publish/validateDeployment/log": OnPublishValidateDeploymentLogCallback; + "publish/validateDeployment/success": OnPublishValidateDeploymentSuccessCallback; + "publish/validateDeployment/failure": OnPublishValidateDeploymentFailureCallback; + + "publish/success": OnPublishSuccessCallback; + "publish/failure": OnPublishFailureCallback; +} + +export const eventTypeToString = (eventTypeStr: string): string => { + const eventVerbToString: Record = { + "publish/checkCapabilities": "Check Capabilities", + "publish/createBundle": "Create Bundle", + "publish/uploadBundle": "Upload Bundle", + "publish/createDeployment": "Create Deployment", + "publish/deployBundle": "Deploy Bundle", + "publish/restorePythonEnv": "Restore Python Environment", + "publish/runContent": "Run Content", + "publish/setVanityURL": "Set Vanity URL", + "publish/validateDeployment": "Validate Deployment", + "publish/success": "Wrapping up Deployment", + }; + + // we do not provide strings for wildcards + if (eventTypeStr.includes("*")) { + return eventTypeStr; + } + + // not in the format we're expecting + const parts = eventTypeStr.split("/"); + if (parts.length !== 3) { + return eventTypeStr; + } + + const verb = `${parts[0]}/${parts[1]}`; + const base = eventVerbToString[verb]; + + // we don't know about this event + if (base === undefined) { + return eventTypeStr; + } + + return base; +}; + +export function getLocalId(arg: EventStreamMessage) { + return arg.data.localId; +} + +export interface EventStreamMessage { + type: EventSubscriptionTarget; + time: string; + data: Record; + error?: string; +} + +export interface EventStreamMessageWithError extends EventStreamMessage { + error: string; +} + +export function isErrorEventStreamMessage( + msg: EventStreamMessage, +): msg is EventStreamMessageWithError { + return msg.error !== undefined; +} + +export type OnMessageEventSourceCallback = ( + msg: T, +) => void; + +export function isEventStreamMessage(o: object): o is EventStreamMessage { + return ( + "type" in o && + typeof o.type === "string" && + "time" in o && + typeof o.time === "string" && + "data" in o && + typeof o.data === "object" + ); +} + +// define interfaces which specialize an EventStreamMessage +// and provide type guards for them to support proper typing. + +export interface AgentLog extends EventStreamMessage { + type: "agent/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnAgentLogCallback = (msg: AgentLog) => void; +export function isAgentLog(arg: Events): arg is AgentLog { + return arg.type === "agent/log"; +} + +export interface ErrorsSse extends EventStreamMessage { + type: "errors/sse"; +} +export type OnErrorsSseCallback = (msg: ErrorsSse) => void; +export function isErrorsSse(arg: Events): arg is ErrorsSse { + return arg.type === "errors/sse"; +} + +export interface ErrorsOpen extends EventStreamMessage { + type: "errors/open"; +} +export type OnErrorsOpenCallback = (msg: ErrorsOpen) => void; +export function isErrorsOpen(arg: Events): arg is ErrorsOpen { + return arg.type === "errors/open"; +} + +export interface ErrorsUnknownEvent extends EventStreamMessage { + type: "errors/unknownEvent"; +} +export type OnErrorsUnknownEventCallback = (msg: ErrorsUnknownEvent) => void; +export function isErrorsUnknownEvent(arg: Events): arg is ErrorsUnknownEvent { + return arg.type === "errors/unknownEvent"; +} + +export interface OpenSse extends EventStreamMessage { + type: "open/sse"; +} +export type OnOpenSseCallback = (msg: OpenSse) => void; +export function isOpenSse(arg: Events): arg is OpenSse { + return arg.type === "open/sse"; +} + +export interface PublishStart extends EventStreamMessage { + type: "publish/start"; + data: { + localId: string; + server: string; + }; +} +export type OnPublishStartCallback = (msg: PublishStart) => void; +export function isPublishStart(arg: Events): arg is PublishStart { + return arg.type === "publish/start"; +} + +export interface PublishCheckCapabilitiesStart extends EventStreamMessage { + type: "publish/checkCapabilities/start"; + data: { + localId: string; + }; +} +export type OnPublishCheckCapabilitiesStartCallback = ( + msg: PublishCheckCapabilitiesStart, +) => void; +export function isPublishCheckCapabilitiesStart( + arg: Events, +): arg is PublishCheckCapabilitiesStart { + return arg.type === "publish/checkCapabilities/start"; +} + +export interface PublishCheckCapabilitiesLog extends EventStreamMessage { + type: "publish/checkCapabilities/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishCheckCapabilitiesLogCallback = ( + msg: PublishCheckCapabilitiesLog, +) => void; +export function isPublishCheckCapabilitiesLog( + arg: Events, +): arg is PublishCheckCapabilitiesLog { + return arg.type === "publish/checkCapabilities/log"; +} + +export interface PublishCheckCapabilitiesSuccess extends EventStreamMessage { + type: "publish/checkCapabilities/success"; + data: { + localId: string; + }; +} +export type OnPublishCheckCapabilitiesSuccessCallback = ( + msg: PublishCheckCapabilitiesSuccess, +) => void; +export function isPublishCheckCapabilitiesSuccess( + arg: Events, +): arg is PublishCheckCapabilitiesSuccess { + return arg.type === "publish/checkCapabilities/success"; +} + +export interface PublishCheckCapabilitiesFailure extends EventStreamMessage { + type: "publish/checkCapabilities/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishCheckCapabilitiesFailureCallback = ( + msg: PublishCheckCapabilitiesFailure, +) => void; +export function isPublishCheckCapabilitiesFailure( + arg: Events, +): arg is PublishCheckCapabilitiesFailure { + return arg.type === "publish/checkCapabilities/failure"; +} + +export interface PublishCreateNewDeploymentStart extends EventStreamMessage { + type: "publish/createNewDeployment/start"; + data: { + localId: string; + saveName: string; + }; +} +export type OnPublishCreateNewDeploymentStartCallback = ( + msg: PublishCreateNewDeploymentStart, +) => void; +export function isPublishCreateNewDeploymentStart( + arg: Events, +): arg is PublishCreateNewDeploymentStart { + return arg.type === "publish/createNewDeployment/start"; +} + +export interface PublishCreateNewDeploymentSuccess extends EventStreamMessage { + type: "publish/createNewDeployment/success"; + data: { + localId: string; + contentId: string; + saveName: string; + }; +} +export type OnPublishCreateNewDeploymentSuccessCallback = ( + msg: PublishCreateNewDeploymentSuccess, +) => void; +export function isPublishCreateNewDeploymentSuccess( + arg: Events, +): arg is PublishCreateNewDeploymentSuccess { + return arg.type === "publish/createNewDeployment/success"; +} + +export interface PublishCreateNewDeploymentFailure extends EventStreamMessage { + type: "publish/createNewDeployment/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishCreateNewDeploymentFailureCallback = ( + msg: PublishCreateNewDeploymentFailure, +) => void; +export function isPublishCreateNewDeploymentFailure( + arg: Events, +): arg is PublishCreateNewDeploymentFailure { + return arg.type === "publish/createNewDeployment/failure"; +} + +export interface PublishSetEnvVarsStart extends EventStreamMessage { + type: "publish/setEnvVars/start"; + data: { + localId: string; + }; +} +export type OnPublishSetEnvVarsStartCallback = ( + msg: PublishSetEnvVarsStart, +) => void; +export function isPublishSetEnvVarsStart( + arg: Events, +): arg is PublishSetEnvVarsStart { + return arg.type === "publish/setEnvVars/start"; +} + +export interface PublishSetEnvVarsSuccess extends EventStreamMessage { + type: "publish/setEnvVars/success"; + data: { + localId: string; + // should include echo of variables/values + }; +} +export type OnPublishSetEnvVarsSuccessCallback = ( + msg: PublishSetEnvVarsSuccess, +) => void; +export function isPublishSetEnvVarsSuccess( + arg: Events, +): arg is PublishSetEnvVarsSuccess { + return arg.type === "publish/setEnvVars/success"; +} + +export interface PublishSetEnvVarsFailure extends EventStreamMessage { + type: "publish/setEnvVars/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishSetEnvVarsFailureCallback = ( + msg: PublishSetEnvVarsFailure, +) => void; +export function isPublishSetEnvVarsFailure( + arg: Events, +): arg is PublishSetEnvVarsFailure { + return arg.type === "publish/setEnvVars/failure"; +} + +export interface PublishCreateBundleStart extends EventStreamMessage { + type: "publish/createBundle/start"; + data: { + localId: string; + }; +} +export type OnPublishCreateBundleStartCallback = ( + msg: PublishCreateBundleStart, +) => void; +export function isPublishCreateBundleStart( + arg: Events, +): arg is PublishCreateBundleStart { + return arg.type === "publish/createBundle/start"; +} + +export interface PublishCreateBundleLog extends EventStreamMessage { + type: "publish/createBundle/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishCreateBundleLogCallback = ( + msg: PublishCreateBundleLog, +) => void; +export function isPublishCreateBundleLog( + arg: Events, +): arg is PublishCreateBundleLog { + return arg.type === "publish/createBundle/log"; +} + +export interface PublishCreateBundleSuccess extends EventStreamMessage { + type: "publish/createBundle/success"; + data: { + localId: string; + filename: string; + }; +} +export type OnPublishCreateBundleSuccessCallback = ( + msg: PublishCreateBundleSuccess, +) => void; +export function isPublishCreateBundleSuccess( + arg: Events, +): arg is PublishCreateBundleSuccess { + return arg.type === "publish/createBundle/success"; +} + +export interface PublishCreateBundleFailure extends EventStreamMessage { + type: "publish/createBundle/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishCreateBundleFailureCallback = ( + msg: PublishCreateBundleFailure, +) => void; +export function isPublishCreateBundleFailure( + arg: Events, +): arg is PublishCreateBundleFailure { + return arg.type === "publish/createBundle/failure"; +} + +export interface PublishCreateDeploymentStart extends EventStreamMessage { + type: "publish/createDeployment/start"; + data: { + localId: string; + contentId: string; + saveName: string; + }; +} +export type OnPublishCreateDeploymentStartCallback = ( + msg: PublishCreateDeploymentStart, +) => void; +export function isPublishCreateDeploymentStart( + arg: Events, +): arg is PublishCreateDeploymentStart { + return arg.type === "publish/createDeployment/start"; +} + +export interface PublishCreateDeploymentLog extends EventStreamMessage { + type: "publish/createDeployment/log"; + data: { + // structured data not guaranteed, use selective or generic queries + // from data map + }; +} +export type OnPublishCreateDeploymentLogCallback = ( + msg: PublishCreateDeploymentLog, +) => void; +export function isPublishCreateDeploymentLog( + arg: Events, +): arg is PublishCreateDeploymentLog { + return arg.type === "publish/createDeployment/log"; +} + +export interface PublishCreateDeploymentSuccess extends EventStreamMessage { + type: "publish/createDeployment/success"; + data: { + localId: string; + }; +} +export type OnPublishCreateDeploymentSuccessCallback = ( + msg: PublishCreateDeploymentSuccess, +) => void; +export function isPublishCreateDeploymentSuccess( + arg: Events, +): arg is PublishCreateDeploymentSuccess { + return arg.type === "publish/createDeployment/success"; +} + +export interface PublishCreateDeploymentFailure extends EventStreamMessage { + type: "publish/createDeployment/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishCreateDeploymentFailureCallback = ( + msg: PublishCreateDeploymentFailure, +) => void; +export function isPublishCreateDeploymentFailure( + arg: Events, +): arg is PublishCreateDeploymentFailure { + return arg.type === "publish/createDeployment/failure"; +} + +export interface PublishUploadBundleStart extends EventStreamMessage { + type: "publish/uploadBundle/start"; + data: { + localId: string; + }; +} +export type OnPublishUploadBundleStartCallback = ( + msg: PublishUploadBundleStart, +) => void; +export function isPublishUploadBundleStart( + arg: Events, +): arg is PublishUploadBundleStart { + return arg.type === "publish/uploadBundle/start"; +} + +export interface PublishUploadBundleLog extends EventStreamMessage { + type: "publish/uploadBundle/log"; + data: { + // structured data not guaranteed, use selective or generic queries + // from data map + }; +} +export type OnPublishUploadBundleLogCallback = ( + msg: PublishUploadBundleLog, +) => void; +export function isPublishUploadBundleLog( + arg: Events, +): arg is PublishUploadBundleLog { + return arg.type === "publish/uploadBundle/log"; +} + +export interface PublishUploadBundleSuccess extends EventStreamMessage { + type: "publish/uploadBundle/success"; + data: { + localId: string; + bundleId: string; + }; +} +export type OnPublishUploadBundleSuccessCallback = ( + msg: PublishUploadBundleSuccess, +) => void; +export function isPublishUploadBundleSuccess( + arg: Events, +): arg is PublishUploadBundleSuccess { + return arg.type === "publish/uploadBundle/success"; +} + +export interface PublishUploadBundleFailure extends EventStreamMessage { + type: "publish/uploadBundle/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishUploadBundleFailureCallback = ( + msg: PublishUploadBundleFailure, +) => void; +export function isPublishUploadBundleFailure( + arg: Events, +): arg is PublishUploadBundleFailure { + return arg.type === "publish/uploadBundle/failure"; +} + +export interface PublishDeployBundleStart extends EventStreamMessage { + type: "publish/deployBundle/start"; + data: { + localId: string; + }; +} +export type OnPublishDeployBundleStartCallback = ( + msg: PublishDeployBundleStart, +) => void; +export function isPublishDeployBundleStart( + arg: Events, +): arg is PublishDeployBundleStart { + return arg.type === "publish/deployBundle/start"; +} + +export interface PublishDeployBundleLog extends EventStreamMessage { + type: "publish/deployBundle/log"; + data: { + // structured data not guaranteed, use selective or generic queries + // from data map + }; +} +export type OnPublishDeployBundleLogCallback = ( + msg: PublishDeployBundleLog, +) => void; +export function isPublishDeployBundleLog( + arg: Events, +): arg is PublishDeployBundleLog { + return arg.type === "publish/deployBundle/log"; +} + +export interface PublishDeployBundleSuccess extends EventStreamMessage { + type: "publish/deployBundle/success"; + data: { + localId: string; + taskId: string; + }; +} +export type OnPublishDeployBundleSuccessCallback = ( + msg: PublishDeployBundleSuccess, +) => void; +export function isPublishDeployBundleSuccess( + arg: Events, +): arg is PublishDeployBundleSuccess { + return arg.type === "publish/deployBundle/success"; +} + +export interface PublishDeployBundleFailure extends EventStreamMessage { + type: "publish/deployBundle/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishDeployBundleFailureCallback = ( + msg: PublishDeployBundleFailure, +) => void; +export function isPublishDeployBundleFailure( + arg: Events, +): arg is PublishDeployBundleFailure { + return arg.type === "publish/deployBundle/failure"; +} + +export interface PublishRestorePythonEnvStart extends EventStreamMessage { + type: "publish/restorePythonEnv/start"; + data: { + localId: string; + }; +} +export type OnPublishRestorePythonEnvStartCallback = ( + msg: PublishRestorePythonEnvStart, +) => void; +export function isPublishRestorePythonEnvStart( + arg: Events, +): arg is PublishRestorePythonEnvStart { + return arg.type === "publish/restorePythonEnv/start"; +} + +export interface PublishRestorePythonEnvLog extends EventStreamMessage { + type: "publish/restorePythonEnv/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishRestorePythonEnvLogCallback = ( + msg: PublishRestorePythonEnvLog, +) => void; +export function isPublishRestorePythonEnvLog( + arg: Events, +): arg is PublishRestorePythonEnvLog { + return arg.type === "publish/restorePythonEnv/log"; +} + +export interface PublishRestorePythonEnvProgress extends EventStreamMessage { + type: "publish/restorePythonEnv/progress"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishRestorePythonEnvProgressCallback = ( + msg: PublishRestorePythonEnvProgress, +) => void; +export function isPublishRestorePythonEnvProgress( + arg: Events, +): arg is PublishRestorePythonEnvProgress { + return arg.type === "publish/restorePythonEnv/progress"; +} + +type packageRuntime = "r" | "python"; +type packageStatus = "download+install" | "download" | "install"; + +export interface PublishRestorePythonEnvStatus extends EventStreamMessage { + type: "publish/restorePythonEnv/status"; + data: { + localId: string; + name: string; + runtime: packageRuntime; + status: packageStatus; + version: string; + }; +} +export type OnPublishRestorePythonEnvStatusCallback = ( + msg: PublishRestorePythonEnvStatus, +) => void; +export function isPublishRestorePythonEnvStatus( + arg: Events, +): arg is PublishRestorePythonEnvStatus { + return arg.type === "publish/restorePythonEnv/status"; +} + +export interface PublishRestorePythonEnvSuccess extends EventStreamMessage { + type: "publish/restorePythonEnv/success"; + data: { + localId: string; + }; +} +export type OnPublishRestorePythonEnvSuccessCallback = ( + msg: PublishRestorePythonEnvSuccess, +) => void; +export function isPublishRestorePythonEnvSuccess( + arg: Events, +): arg is PublishRestorePythonEnvSuccess { + return arg.type === "publish/restorePythonEnv/success"; +} + +export interface PublishRestorePythonEnvFailure extends EventStreamMessage { + type: "publish/restorePythonEnv/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishRestorePythonEnvFailureCallback = ( + msg: PublishRestorePythonEnvFailure, +) => void; +export function isPublishRestorePythonEnvFailure( + arg: Events, +): arg is PublishRestorePythonEnvFailure { + return arg.type === "publish/restorePythonEnv/failure"; +} + +export interface PublishRunContentStart extends EventStreamMessage { + type: "publish/runContent/start"; + data: { + localId: string; + }; +} +export type OnPublishRunContentStartCallback = ( + msg: PublishRunContentStart, +) => void; +export function isPublishRunContentStart( + arg: Events, +): arg is PublishRunContentStart { + return arg.type === "publish/runContent/start"; +} + +export interface PublishRunContentLog extends EventStreamMessage { + type: "publish/runContent/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishRunContentLogCallback = ( + msg: PublishRunContentLog, +) => void; +export function isPublishRunContentLog( + arg: Events, +): arg is PublishRunContentLog { + return arg.type === "publish/runContent/log"; +} + +export interface PublishRunContentSuccess extends EventStreamMessage { + type: "publish/runContent/success"; + data: { + localId: string; + }; +} +export type OnPublishRunContentSuccessCallback = ( + msg: PublishRunContentSuccess, +) => void; +export function isPublishRunContentSuccess( + arg: Events, +): arg is PublishRunContentSuccess { + return arg.type === "publish/runContent/success"; +} + +export interface PublishRunContentFailure extends EventStreamMessage { + type: "publish/runContent/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishRunContentFailureCallback = ( + msg: PublishRunContentFailure, +) => void; +export function isPublishRunContentFailure( + arg: Events, +): arg is PublishRestorePythonEnvFailure { + return arg.type === "publish/runContent/failure"; +} + +export interface PublishSetVanityURLStart extends EventStreamMessage { + type: "publish/setVanityURL/start"; + data: { + localId: string; + }; +} +export type OnPublishSetVanityURLStartCallback = ( + msg: PublishSetVanityURLStart, +) => void; +export function isPublishSetVanityURLStart( + arg: Events, +): arg is PublishSetVanityURLStart { + return arg.type === "publish/setVanityURL/start"; +} + +export interface PublishSetVanityURLLog extends EventStreamMessage { + type: "publish/setVanityURL/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishSetVanityURLLogCallback = ( + msg: PublishSetVanityURLLog, +) => void; +export function isPublishSetVanityURLLog( + arg: Events, +): arg is PublishSetVanityURLLog { + return arg.type === "publish/setVanityURL/log"; +} + +export interface PublishSetVanityURLSuccess extends EventStreamMessage { + type: "publish/setVanityURL/success"; + data: { + localId: string; + }; +} +export type OnPublishSetVanityURLSuccessCallback = ( + msg: PublishSetVanityURLSuccess, +) => void; +export function isPublishSetVanityURLSuccess( + arg: Events, +): arg is PublishSetVanityURLSuccess { + return arg.type === "publish/setVanityURL/success"; +} + +export interface PublishSetVanityURLFailure extends EventStreamMessage { + type: "publish/setVanityURL/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishSetVanityURLFailureCallback = ( + msg: PublishSetVanityURLFailure, +) => void; +export function isPublishSetVanityURLFailure( + arg: Events, +): arg is PublishRestorePythonEnvFailure { + return arg.type === "publish/setVanityURL/failure"; +} +export interface PublishValidateDeploymentStart extends EventStreamMessage { + type: "publish/validateDeployment/start"; + data: { + localId: string; + url: string; + }; +} +export type OnPublishValidateDeploymentStartCallback = ( + msg: PublishValidateDeploymentStart, +) => void; +export function isPublishValidateDeploymentStart( + arg: Events, +): arg is PublishValidateDeploymentStart { + return arg.type === "publish/validateDeployment/start"; +} + +export interface PublishValidateDeploymentLog extends EventStreamMessage { + type: "publish/validateDeployment/log"; + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishValidateDeploymentLogCallback = ( + msg: PublishValidateDeploymentLog, +) => void; +export function isPublishValidateDeploymentLog( + arg: Events, +): arg is PublishValidateDeploymentLog { + return arg.type === "publish/validateDeployment/log"; +} + +export interface PublishValidateDeploymentSuccess extends EventStreamMessage { + type: "publish/validateDeployment/success"; + data: { + localId: string; + }; +} +export type OnPublishValidateDeploymentSuccessCallback = ( + msg: PublishValidateDeploymentSuccess, +) => void; +export function isPublisValidateDeploymentSuccess( + arg: Events, +): arg is PublishValidateDeploymentSuccess { + return arg.type === "publish/validateDeployment/success"; +} + +export interface PublishValidateDeploymentFailure extends EventStreamMessage { + type: "publish/validateDeployment/failure"; + error: string; // translated internally + // structured data not guaranteed, use selective or generic queries + // from data map +} +export type OnPublishValidateDeploymentFailureCallback = ( + msg: PublishValidateDeploymentFailure, +) => void; +export function isPublishValidateDeploymentFailure( + arg: Events, +): arg is PublishValidateDeploymentFailure { + return arg.type === "publish/validateDeployment/failure"; +} + +export interface PublishSuccess extends EventStreamMessage { + type: "publish/success"; + data: { + localId: string; + contentId: string; + dashboardUrl: string; + directUrl: string; + serverUrl: string; + }; +} +export type OnPublishSuccessCallback = (msg: PublishSuccess) => void; +export function isPublishSuccess(arg: Events): arg is PublishSuccess { + return arg.type === "publish/success"; +} + +export interface PublishFailure extends EventStreamMessage { + type: "publish/failure"; + data: { + dashboardUrl: string; + url: string; + // and other non-defined attributes + }; + error: string; // translated internally +} + +export type OnPublishFailureCallback = (msg: PublishFailure) => void; +export function isPublishFailure(arg: Events): arg is PublishFailure { + return arg.type === "publish/failure"; +} + +// Events are a union type of our base and our extended interfaces +export type Events = + | EventStreamMessage + | AgentLog + | ErrorsSse + | ErrorsOpen + | ErrorsUnknownEvent + | OpenSse + | PublishStart + | PublishCreateBundleStart + | PublishCreateBundleLog + | PublishCreateBundleSuccess + | PublishCreateBundleFailure + | PublishCreateDeploymentStart + | PublishCreateDeploymentSuccess + | PublishCreateDeploymentFailure + | PublishUploadBundleStart + | PublishUploadBundleSuccess + | PublishUploadBundleFailure + | PublishDeployBundleStart + | PublishDeployBundleSuccess + | PublishDeployBundleFailure + | PublishRestorePythonEnvStart + | PublishRestorePythonEnvLog + | PublishRestorePythonEnvSuccess + | PublishRestorePythonEnvFailure + | PublishRunContentStart + | PublishRunContentLog + | PublishRunContentSuccess + | PublishRunContentFailure + | PublishSuccess + | PublishFailure; diff --git a/packages/api/types/files.ts b/packages/api/types/files.ts new file mode 100644 index 000000000..793f9c221 --- /dev/null +++ b/packages/api/types/files.ts @@ -0,0 +1,40 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export enum DeploymentFileType { + REGULAR = "REGULAR", + DIRECTORY = "DIR", +} + +export type DeploymentFile = { + id: string; + fileType: DeploymentFileType; + base: string; + reason: FileMatch | null; // pattern that matched a file, null if no match + files: DeploymentFile[]; + isDir: boolean; + isEntrypoint: boolean; + isFile: boolean; + modifiedDatetime: string; + rel: string; + relDir: string; + size: number; + abs: string; +}; + +export enum FileMatchSource { + FILE = "file", + BUILT_IN = "built-in", +} + +export type FileMatch = { + source: FileMatchSource; + pattern: string; + fileName: string; + filePath: string; + exclude: boolean; +}; + +export enum FileAction { + INCLUDE = "include", + EXCLUDE = "exclude", +} diff --git a/packages/api/types/requirements.ts b/packages/api/types/requirements.ts new file mode 100644 index 000000000..1118f1d30 --- /dev/null +++ b/packages/api/types/requirements.ts @@ -0,0 +1,5 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export type RequirementsResponse = { + requirements: string[]; +}; diff --git a/packages/api/types/schema.ts b/packages/api/types/schema.ts new file mode 100644 index 000000000..5a8c255b3 --- /dev/null +++ b/packages/api/types/schema.ts @@ -0,0 +1,3 @@ +// Copyright (C) 2023 by Posit Software, PBC. + +export type SchemaURL = string; From 05742c028f6d0bbc5c625d818cc9d1076abf4979 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:17:45 -0700 Subject: [PATCH 03/16] npm init packages/api --- packages/api/package.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/api/package.json diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 000000000..543d2d30e --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,6 @@ +{ + "name": "@publishing-client/api", + "version": "1.0.0", + "private": true, + "description": "A library to enable convenient access to the Publisher Client API and its response types." +} From a04332f1c7317bea980d9984e7b32f4d711d6c91 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:19:14 -0700 Subject: [PATCH 04/16] Install axios and typescript to packages/api --- package-lock.json | 117 ++++++++++++++++++++++++++++++++++++++ packages/api/package.json | 8 ++- 2 files changed, 124 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 8a9cf07ea..b0546b9fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,10 @@ "prettier": "3.2.5" } }, + "node_modules/@publishing-client/api": { + "resolved": "packages/api", + "link": true + }, "node_modules/ansi-escapes": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", @@ -50,6 +54,21 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -111,6 +130,17 @@ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", @@ -151,6 +181,14 @@ } } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/emoji-regex": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", @@ -198,6 +236,38 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/get-east-asian-width": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", @@ -407,6 +477,25 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -515,6 +604,11 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -681,6 +775,19 @@ "node": ">=8.0" } }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -721,6 +828,16 @@ "engines": { "node": ">= 14" } + }, + "packages/api": { + "name": "@publishing-client/api", + "version": "1.0.0", + "dependencies": { + "axios": "^1.6.8" + }, + "devDependencies": { + "typescript": "^5.4.5" + } } } } diff --git a/packages/api/package.json b/packages/api/package.json index 543d2d30e..ed4f52ab8 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -2,5 +2,11 @@ "name": "@publishing-client/api", "version": "1.0.0", "private": true, - "description": "A library to enable convenient access to the Publisher Client API and its response types." + "description": "A library to enable convenient access to the Publisher Client API and its response types.", + "dependencies": { + "axios": "^1.6.8" + }, + "devDependencies": { + "typescript": "^5.4.5" + } } From 9db84987570a23b4c3dcc14d3fd6157fb2bf2922 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:24:31 -0700 Subject: [PATCH 05/16] Add extensions/* as npm workspaces --- package-lock.json | 3437 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 3 +- 2 files changed, 3265 insertions(+), 175 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0546b9fb..63b5bd3cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,8 @@ "": { "name": "publishing-client", "workspaces": [ - "packages/*" + "packages/*", + "extensions/*" ], "devDependencies": { "husky": "^9.0.11", @@ -14,186 +15,1780 @@ "prettier": "3.2.5" } }, + "extensions/vscode": { + "name": "publisher", + "version": "0.0.0", + "dependencies": { + "@hypersphere/omnibus": "0.1.6", + "@vscode/codicons": "^0.0.35", + "axios": "^1.6.0", + "eventsource": "^2.0.2", + "get-port": "5.1.1", + "mutexify": "^1.4.0", + "retry": "^0.13.1" + }, + "devDependencies": { + "@types/eventsource": "^1.1.15", + "@types/mocha": "^10.0.2", + "@types/mutexify": "^1.2.3", + "@types/node": "18.x", + "@types/retry": "^0.12.5", + "@types/vscode": "^1.87.0", + "@types/wait-on": "^5.3.3", + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0", + "@vscode/test-electron": "^2.3.8", + "esbuild": "^0.20.2", + "eslint": "^8.50.0", + "eslint-config-prettier": "^9.1.0", + "glob": "^10.3.3", + "mocha": "^10.2.0", + "typescript": "^5.2.2" + }, + "engines": { + "vscode": "^1.87.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@hypersphere/omnibus": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@hypersphere/omnibus/-/omnibus-0.1.6.tgz", + "integrity": "sha512-agZuKyhdW0n1JoLYZUuA6Du1QoQn39/LapFgRtbJs7fyRM62C9O2PWISHUCwAKnC1Splshpd8glQgx5pA2zkCg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@publishing-client/api": { "resolved": "packages/api", "link": true }, - "node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/eventsource": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.15.tgz", + "integrity": "sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "dev": true + }, + "node_modules/@types/mutexify": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/mutexify/-/mutexify-1.2.3.tgz", + "integrity": "sha512-YUnbc3cP+3oFoSWua3MRKCnQ6NbtdHv1OdafqQBDhHGoeZ2dRGvShJkOteZpcZ69GfZ/oDKFie+TlasNHYf7gA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.26.tgz", + "integrity": "sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.87.0.tgz", + "integrity": "sha512-y3yYJV2esWr8LNjp3VNbSMWG7Y43jC8pCldG8YwiHGAQbsymkkMMt0aDT1xZIOFM2eFcNiUc+dJMx1+Z0UT8fg==", + "dev": true + }, + "node_modules/@types/wait-on": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", + "integrity": "sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", + "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/type-utils": "7.4.0", + "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", + "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", + "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/utils": "7.4.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.4.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vscode/codicons": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.35.tgz", + "integrity": "sha512-7iiKdA5wHVYSbO7/Mm0hiHD3i4h+9hKUe1O4hISAe/nHhagMwb2ZbFC8jU6d7Cw+JNT2dWXN2j+WHbkhT5/l2w==" + }, + "node_modules/@vscode/test-electron": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", + "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, "engines": { - "node": ">=14.16" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.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.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", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=16" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "ms": "2.1.2" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=4.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=4.0" } }, - "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/eventemitter3": { "version": "5.0.1", @@ -201,6 +1796,14 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -224,6 +1827,73 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -236,6 +1906,51 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -255,43 +1970,219 @@ } } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", @@ -316,6 +2207,83 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -328,6 +2296,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -337,6 +2317,24 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", @@ -349,12 +2347,121 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", @@ -408,6 +2515,86 @@ "node": ">=18.0.0" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", @@ -458,12 +2645,30 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -477,43 +2682,162 @@ "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/mocha": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 0.6" + "node": ">= 14.0.0" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/mutexify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", + "integrity": "sha512-pbYSsOrSB/AKN5h/WzzLRMFgZhClWccf2XIB4RSMC8JbquiB0e0/SH5AIfdQMdyHmYtv4seU7yV/TvAwPLJ1Yg==", + "dependencies": { + "queue-tick": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", @@ -541,6 +2865,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, "node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", @@ -556,6 +2889,89 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -565,6 +2981,31 @@ "node": ">=8" } }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -589,6 +3030,15 @@ "node": ">=0.10" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prettier": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", @@ -604,61 +3054,305 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "node_modules/publisher": { + "resolved": "extensions/vscode", + "link": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "lru-cache": "^6.0.0" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, "node_modules/shebang-command": { @@ -694,6 +3388,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -710,6 +3413,15 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", @@ -736,6 +3448,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -751,6 +3514,28 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -763,6 +3548,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -775,6 +3593,42 @@ "node": ">=8.0" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -788,6 +3642,27 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -803,6 +3678,12 @@ "node": ">= 8" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", @@ -820,6 +3701,110 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yaml": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", @@ -829,6 +3814,110 @@ "node": ">= 14" } }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/api": { "name": "@publishing-client/api", "version": "1.0.0", diff --git a/package.json b/package.json index 82c9600d3..f2b20eb5a 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "private": true, "type": "module", "workspaces": [ - "packages/*" + "packages/*", + "extensions/*" ], "scripts": { "format": "prettier . --write", From 7fbb6b4370ce141979e56de24c23dbf665d69ad1 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:25:28 -0700 Subject: [PATCH 06/16] Remove api module from vscode extension --- extensions/vscode/src/api/README.md | 88 -- extensions/vscode/src/api/axios.d.ts | 10 - extensions/vscode/src/api/client.ts | 64 -- extensions/vscode/src/api/index.ts | 12 - .../vscode/src/api/resources/Accounts.ts | 29 - .../src/api/resources/Configurations.ts | 64 -- .../vscode/src/api/resources/Deployments.ts | 74 -- extensions/vscode/src/api/resources/Files.ts | 46 - .../vscode/src/api/resources/Requirements.ts | 32 - extensions/vscode/src/api/types/accounts.ts | 31 - .../vscode/src/api/types/configurations.ts | 113 -- extensions/vscode/src/api/types/connect.ts | 34 - .../vscode/src/api/types/deployments.ts | 154 --- extensions/vscode/src/api/types/error.ts | 10 - extensions/vscode/src/api/types/events.ts | 984 ------------------ extensions/vscode/src/api/types/files.ts | 40 - .../vscode/src/api/types/requirements.ts | 5 - extensions/vscode/src/api/types/schema.ts | 3 - packages/api/client.ts | 3 + packages/api/index.ts | 1 + .../api/resources/Credentials.ts | 0 .../src => packages}/api/types/credentials.ts | 0 22 files changed, 4 insertions(+), 1793 deletions(-) delete mode 100644 extensions/vscode/src/api/README.md delete mode 100644 extensions/vscode/src/api/axios.d.ts delete mode 100644 extensions/vscode/src/api/client.ts delete mode 100644 extensions/vscode/src/api/index.ts delete mode 100644 extensions/vscode/src/api/resources/Accounts.ts delete mode 100644 extensions/vscode/src/api/resources/Configurations.ts delete mode 100644 extensions/vscode/src/api/resources/Deployments.ts delete mode 100644 extensions/vscode/src/api/resources/Files.ts delete mode 100644 extensions/vscode/src/api/resources/Requirements.ts delete mode 100644 extensions/vscode/src/api/types/accounts.ts delete mode 100644 extensions/vscode/src/api/types/configurations.ts delete mode 100644 extensions/vscode/src/api/types/connect.ts delete mode 100644 extensions/vscode/src/api/types/deployments.ts delete mode 100644 extensions/vscode/src/api/types/error.ts delete mode 100644 extensions/vscode/src/api/types/events.ts delete mode 100644 extensions/vscode/src/api/types/files.ts delete mode 100644 extensions/vscode/src/api/types/requirements.ts delete mode 100644 extensions/vscode/src/api/types/schema.ts rename {extensions/vscode/src => packages}/api/resources/Credentials.ts (100%) rename {extensions/vscode/src => packages}/api/types/credentials.ts (100%) diff --git a/extensions/vscode/src/api/README.md b/extensions/vscode/src/api/README.md deleted file mode 100644 index 1bb46a6d0..000000000 --- a/extensions/vscode/src/api/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# API Wrapper Library - -A library to enable convenient access to the Publisher Client API and its -response types. - -## Usage - -```typescript -import { initApi, useApi } from "src/api"; - -// You must first initialize the API one time. -// The initialization method requires a promise which indicates -// when the server who will provide the API is ready. If you do -// not have this scenario, you follow the pattern below and -// pass in a resolved promise. - -const ready = Promise.Resolve(true); -initApi(ready, "http://localhost:15332/api`"); - -const api = await useApi(); // will wait until the promise that was passed into the initApi call is resolved - -try { - const response = await api.accounts.getAll(); -} catch (err) { - // handle the error -} -``` - -If you need to set the URL and or Port for the base API endpoint you can do so -using `setBaseUrl`. This changes the client so all requests will use the new -base URL. This will need to be done before any requests are made. - -```typescript -const api = await useApi(); -api.setBaseUrl("http://localhost:9000/api"); -``` - -## Organization - -### `client.ts` - -Contains the `PublishingClientApi` class which constructs the `AxiosInstance`, -passes it down to each of the resources for use, and gathers all of the -resources. This is the what we interact with. - -### `/resources` - -Each class in the `resources` folder has methods related to its endpoint. Each -method has a one-to-one relationship with the API endpoint on the server side. - -Example: `/api/accounts` maps to the `resources/Accounts.ts` module and `GET -api/accounts` maps to the `useApi().accounts.getAll()` method. - -### `/types` - -Holds the types definitions for use in Resources to prevent Resources from -getting cluttered. - -## Patterns - -### Limited Exports - -Rather than exporting the `AxiosInstance` or the `PublishingClientApi` class a -singleton factory is exported to prevent more than one client from being created and any -non-resource-method usage of this library. - -We use the `useApi()` function which follows some of the syntax seen in -the [Composition API](https://vuejs.org/api/sfc-script-setup.html#useslots-useattrs) -and other Vue 3 libraries such as [Pinia](https://pinia.vuejs.org/). - -This factory will wait to return the api class until the backend service responsible for responding -to the API request is available. Therefore, it is required to await on the response of the useApi() -before being able to call the API. The examples contained herein implement this pattern of usage. - -### Return All Available Data - -Each Resource method returns the full `AxiosResponse`. We can use a -[destructing assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) -to reduce boilerplate and ensure that we do not lose potentially-needed data. - -```typescript -try { - const api = await useApi(); - const { data } = await api.accounts.getAll(); -} catch (err) { - // handle the error -} -``` diff --git a/extensions/vscode/src/api/axios.d.ts b/extensions/vscode/src/api/axios.d.ts deleted file mode 100644 index e6dec3501..000000000 --- a/extensions/vscode/src/api/axios.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { AxiosRequestConfig } from "axios"; - -declare module "axios" { - interface AxiosRequestConfig { - ignoreCamelCase?: string[]; - } -} diff --git a/extensions/vscode/src/api/client.ts b/extensions/vscode/src/api/client.ts deleted file mode 100644 index 954a78eff..000000000 --- a/extensions/vscode/src/api/client.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import axios from "axios"; - -import { Accounts } from "./resources/Accounts"; -import { Credentials } from "./resources/Credentials"; -import { Deployments } from "./resources/Deployments"; -import { Configurations } from "./resources/Configurations"; -import { Files } from "./resources/Files"; -import { Requirements } from "./resources/Requirements"; - -class PublishingClientApi { - private client; - - accounts: Accounts; - configurations: Configurations; - credentials: Credentials; - deployments: Deployments; - files: Files; - requirements: Requirements; - apiServiceIsUp: Promise; - - constructor(apiBaseUrl: string, apiServiceIsUp: Promise) { - this.client = axios.create({ - baseURL: apiBaseUrl, - }); - this.apiServiceIsUp = apiServiceIsUp; - - this.accounts = new Accounts(this.client); - this.configurations = new Configurations(this.client); - this.credentials = new Credentials(this.client); - this.deployments = new Deployments(this.client); - this.files = new Files(this.client); - this.requirements = new Requirements(this.client); - } - - setBaseUrl(url: string) { - this.client.defaults.baseURL = url; - } -} - -let api: PublishingClientApi | undefined = undefined; - -// NOTE: this function must be called ahead of useApi() -// so that the class is properly instantiated. -export const initApi = ( - apiServiceIsUp: Promise, - apiBaseUrl: string = "/api", -) => { - api = new PublishingClientApi(apiBaseUrl, apiServiceIsUp); -}; - -// NOTE: initApi(...) must be called ahead of the first time -// this method is called, otherwise, you are skipping initialization -// and it will throw an exception -export const useApi = async () => { - if (!api) { - throw new Error("client::useApi() must be called AFTER client::initApi()"); - } - // wait until the service providing the API is available and ready - await api.apiServiceIsUp; - - return api; -}; diff --git a/extensions/vscode/src/api/index.ts b/extensions/vscode/src/api/index.ts deleted file mode 100644 index 8c5c788a4..000000000 --- a/extensions/vscode/src/api/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export { initApi, useApi } from "./client"; - -export * from "./types/accounts"; -export * from "./types/credentials"; -export * from "./types/configurations"; -export * from "./types/connect"; -export * from "./types/deployments"; -export * from "./types/events"; -export * from "./types/files"; -export * from "./types/schema"; diff --git a/extensions/vscode/src/api/resources/Accounts.ts b/extensions/vscode/src/api/resources/Accounts.ts deleted file mode 100644 index 970b7c3ef..000000000 --- a/extensions/vscode/src/api/resources/Accounts.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AxiosInstance } from "axios"; - -import { Account } from "../types/accounts"; - -export class Accounts { - private client: AxiosInstance; - - constructor(client: AxiosInstance) { - this.client = client; - } - - // Returns: - // 200 - success - // 500 - internal server error - getAll() { - return this.client.get>("/accounts"); - } - - // Returns: - // 200 - success - // 404 - account not found - // 500 - internal server error - get(accountName: string) { - const encodedAccountName = encodeURIComponent(accountName); - return this.client.get(`/accounts/${encodedAccountName}`); - } -} diff --git a/extensions/vscode/src/api/resources/Configurations.ts b/extensions/vscode/src/api/resources/Configurations.ts deleted file mode 100644 index 4f055eb6e..000000000 --- a/extensions/vscode/src/api/resources/Configurations.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AxiosInstance } from "axios"; - -import { - Configuration, - ConfigurationDetails, - ConfigurationError, -} from "../types/configurations"; - -export class Configurations { - private client: AxiosInstance; - - constructor(client: AxiosInstance) { - this.client = client; - } - - // Returns: - // 200 - success - // 404 - not found - // 500 - internal server error - get(configName: string) { - const encodedName = encodeURIComponent(configName); - return this.client.get( - `/configurations/${encodedName}`, - ); - } - - // Returns: - // 200 - success - // 500 - internal server error - getAll() { - return this.client.get>( - "/configurations", - ); - } - - // Returns: - // 200 - success - // 400 - bad request - // 500 - internal server error - createOrUpdate(configName: string, cfg: ConfigurationDetails) { - const encodedName = encodeURIComponent(configName); - return this.client.put(`configurations/${encodedName}`, cfg); - } - - // Returns: - // 204 - success (no response) - // 404 - not found - // 500 - internal server error - delete(configName: string) { - const encodedName = encodeURIComponent(configName); - return this.client.delete(`configurations/${encodedName}`); - } - - // Inspect the project, returning all possible (detected) configurations - // Returns: - // 200 - success - // 400 - bad request - // 500 - internal server error - inspect() { - return this.client.post("/inspect"); - } -} diff --git a/extensions/vscode/src/api/resources/Deployments.ts b/extensions/vscode/src/api/resources/Deployments.ts deleted file mode 100644 index efe00194e..000000000 --- a/extensions/vscode/src/api/resources/Deployments.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AxiosInstance } from "axios"; - -import { PreDeployment, AllDeploymentTypes } from "../types/deployments"; - -export class Deployments { - private client: AxiosInstance; - - constructor(client: AxiosInstance) { - this.client = client; - } - - // Returns: - // 200 - success - // 500 - internal server error - getAll() { - return this.client.get>("/deployments"); - } - - // Returns: - // 200 - success - // 404 - not found - // 500 - internal server error - get(id: string) { - const encodedId = encodeURIComponent(id); - return this.client.get(`deployments/${encodedId}`); - } - - // Returns: - // 200 - success - // 400 - bad request - // 409 - conflict - // 500 - internal server error - // Errors returned through event stream - createNew(accountName?: string, configName?: string, saveName?: string) { - const params = { - account: accountName, - config: configName, - saveName, - }; - return this.client.post("/deployments", params); - } - - // Returns: - // 200 - success - // 400 - bad request - // 500 - internal server error - // Errors returned through event stream - publish( - targetName: string, - accountName: string, - configName: string = "default", - ) { - const params = { - account: accountName, - config: configName, - }; - const encodedTarget = encodeURIComponent(targetName); - return this.client.post<{ localId: string }>( - `deployments/${encodedTarget}`, - params, - ); - } - - // Returns: - // 204 - no content - // 404 - not found - // 500 - internal server error - delete(saveName: string) { - const encodedSaveName = encodeURIComponent(saveName); - return this.client.delete(`deployments/${encodedSaveName}`); - } -} diff --git a/extensions/vscode/src/api/resources/Files.ts b/extensions/vscode/src/api/resources/Files.ts deleted file mode 100644 index 2f676ddcb..000000000 --- a/extensions/vscode/src/api/resources/Files.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AxiosInstance } from "axios"; - -import { DeploymentFile, FileAction } from "../types/files"; -import { Configuration } from "../types/configurations"; - -export class Files { - private client: AxiosInstance; - - constructor(client: AxiosInstance) { - this.client = client; - } - - // Returns: - // 200 - success - // 403 - pathname is not safe - forbidden - // 500 - internal server error - get() { - return this.client.get("/files"); - } - - // Returns: - // 200 - success - // 404 - configuration does not exist - // 422 - configuration files list contains invalid patterns - // 500 - internal server error - getByConfiguration(configName: string) { - const encodedName = encodeURIComponent(configName); - return this.client.get( - `/configurations/${encodedName}/files`, - ); - } - - updateFileList(configName: string, path: string, action: FileAction) { - const encodedName = encodeURIComponent(configName); - const body = { - path, - action, - }; - return this.client.post( - `/configurations/${encodedName}/files`, - body, - ); - } -} diff --git a/extensions/vscode/src/api/resources/Requirements.ts b/extensions/vscode/src/api/resources/Requirements.ts deleted file mode 100644 index 126a684d3..000000000 --- a/extensions/vscode/src/api/resources/Requirements.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AxiosInstance } from "axios"; -import { RequirementsResponse } from "../types/requirements"; - -export class Requirements { - private client: AxiosInstance; - - constructor(client: AxiosInstance) { - this.client = client; - } - - // Returns: - // 200 - success - // 404 - configuration or requirements file not found - // 409 - conflict (Python is not configured) - // 500 - internal server error - getByConfiguration(configName: string) { - const encodedName = encodeURIComponent(configName); - return this.client.get( - `/configurations/${encodedName}/requirements`, - ); - } - - // Returns: - // 200 - success - // 400 - bad request - // 500 - internal server error - create(saveName: string | undefined) { - return this.client.post("requirements", { saveName }); - } -} diff --git a/extensions/vscode/src/api/types/accounts.ts b/extensions/vscode/src/api/types/accounts.ts deleted file mode 100644 index 86f861076..000000000 --- a/extensions/vscode/src/api/types/accounts.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export enum ServerType { - CONNECT = "connect", - SHINY_APPS = "shinyapps", - CLOUD = "cloud", -} - -export enum AccountSource { - RSCONNECT_PYTHON = "rsconnect-python", - RSCONNECT = "rsconnect", - ENVIRONMENT = "environment", -} - -export enum AccountAuthType { - NONE = "none", - API_KEY = "api-key", - TOKEN_KEY = "token-key", - TOKEN_SECRET = "token-secret", -} - -export type Account = { - accountName: string; - authType: AccountAuthType; - caCert: string; - insecure: boolean; - name: string; - source: AccountSource; - type: ServerType; - url: string; -}; diff --git a/extensions/vscode/src/api/types/configurations.ts b/extensions/vscode/src/api/types/configurations.ts deleted file mode 100644 index 8407bf3b2..000000000 --- a/extensions/vscode/src/api/types/configurations.ts +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AgentError } from "./error"; -import { ConnectConfig } from "./connect"; -import { SchemaURL } from "./schema"; - -export type ConfigurationLocation = { - configurationName: string; - configurationPath: string; -}; - -export type ConfigurationError = { - error: AgentError; -} & ConfigurationLocation; - -export type Configuration = { - configuration: ConfigurationDetails; -} & ConfigurationLocation; - -export function isConfigurationError( - c: Configuration | ConfigurationError, -): c is ConfigurationError { - return (c as ConfigurationError).error !== undefined; -} - -export enum ContentType { - HTML = "html", - JUPYTER_NOTEBOOK = "jupyter-notebook", - JUPYTER_VOILA = "jupyter-voila", - PYTHON_BOKEH = "python-bokeh", - PYTHON_DASH = "python-dash", - PYTHON_FASTAPI = "python-fastapi", - PYTHON_FLASK = "python-flask", - PYTHON_SHINY = "python-shiny", - PYTHON_STREAMLIT = "python-streamlit", - QUARTO_SHINY = "quarto-shiny", - QUARTO = "quarto", - R_PLUMBER = "r-plumber", - R_SHINY = "r-shiny", - RMD_SHINY = "rmd-shiny", - RMD = "rmd", - UNKNOWN = "unknown", -} - -export type ConfigurationDetails = { - $schema: SchemaURL; - type: ContentType; - entrypoint?: string; - title?: string; - description?: string; - thumbnail?: string; - tags?: string[]; - python?: PythonConfig; - r?: RConfig; - quarto?: QuartoConfig; - environment?: EnvironmentConfig; - validate: boolean; - files?: string[]; - secrets?: string[]; - schedules?: ScheduleConfig[]; - access?: AccessConfig; - connect?: ConnectConfig; -}; - -export type PythonConfig = { - version: string; - packageFile: string; - packageManager: string; -}; - -export type RConfig = { - version: string; - packageFile: string; - packageManager: string; -}; - -export type QuartoConfig = { - version: string; - engines?: string[]; -}; - -export type EnvironmentConfig = Record; - -export type ScheduleConfig = { - start: string; - recurrence: string; -}; - -export enum AccessType { - ANONYMOUS = "all", - LOGGED_IN = "logged-in", - ACL = "acl", -} - -export type AccessConfig = { - type: AccessType; - users?: User[]; - groups?: Group[]; -}; - -export type User = { - id?: string; - guid?: string; - name?: string; - permissions: string; -}; - -export type Group = { - id?: string; - guid?: string; - name?: string; - permissions: string; -}; diff --git a/extensions/vscode/src/api/types/connect.ts b/extensions/vscode/src/api/types/connect.ts deleted file mode 100644 index 1c53bf2ef..000000000 --- a/extensions/vscode/src/api/types/connect.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export type ConnectConfig = { - access?: ConnectAccess; - runtime?: ConnectRuntime; - kubernetes?: ConnectKubernetes; -}; - -export type ConnectAccess = { - runAs?: string; - runAsCurrentUser?: boolean; -}; - -export type ConnectRuntime = { - connectionTimeout?: number; - readTimeout?: number; - initTimeout?: number; - idleTimeout?: number; - maxProcesses?: number; - minProcesses?: number; - maxConnections?: number; - loadFactor?: number; -}; - -export type ConnectKubernetes = { - memoryRequest?: number; - memoryLimit?: number; - cpuRequest?: number; - cpuLimit?: number; - amdGpuLimit?: number; - nvidiaGpuLimit?: number; - serviceAccountName?: string; - imageName?: string; -}; diff --git a/extensions/vscode/src/api/types/deployments.ts b/extensions/vscode/src/api/types/deployments.ts deleted file mode 100644 index 14ce88a76..000000000 --- a/extensions/vscode/src/api/types/deployments.ts +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -import { AgentError } from "./error"; -import { Configuration, ConfigurationLocation } from "./configurations"; -import { SchemaURL } from "./schema"; -import { ServerType } from "./accounts"; - -export enum DeploymentState { - NEW = "new", - DEPLOYED = "deployed", - ERROR = "error", -} - -export type DeploymentLocation = { - deploymentName: string; - deploymentPath: string; -}; - -export type DeploymentError = { - error: AgentError; - state: DeploymentState.ERROR; -} & DeploymentLocation; - -type DeploymentRecord = { - $schema: SchemaURL; - serverType: ServerType; - serverUrl: string; - saveName: string; - createdAt: string; - configurationName: string; - deploymentError: AgentError | null; -} & DeploymentLocation; - -export type PreDeployment = { - state: DeploymentState.NEW; -} & DeploymentRecord; - -export type PreDeploymentWithConfig = PreDeployment & ConfigurationLocation; - -export type Deployment = { - id: string; - bundleId: string; - bundleUrl: string; - dashboardUrl: string; - directUrl: string; - files: string[]; - deployedAt: string; - state: DeploymentState.DEPLOYED; -} & DeploymentRecord & - Configuration; - -export type AllDeploymentTypes = - | Deployment - | PreDeployment - | PreDeploymentWithConfig - | DeploymentError; - -export function isSuccessful( - d: AllDeploymentTypes | undefined, -): boolean | undefined { - if (d === undefined) { - return undefined; - } - if (isDeploymentError(d)) { - return false; - } - return Boolean(!d.deploymentError); -} - -export function isUnsuccessful( - d: AllDeploymentTypes | undefined, -): boolean | undefined { - const result = isSuccessful(d); - if (result === undefined) { - return undefined; - } - return !result; -} - -export function isDeploymentError( - d: AllDeploymentTypes | undefined, -): d is DeploymentError { - return Boolean(d && d.state === DeploymentState.ERROR); -} - -export function isPreDeployment( - d: AllDeploymentTypes | undefined, -): d is PreDeployment { - return Boolean(d && d.state === DeploymentState.NEW); -} - -export function isPreDeploymentWithConfig( - d: AllDeploymentTypes | undefined, -): d is PreDeploymentWithConfig { - return Boolean( - d && - d.state === DeploymentState.NEW && - (d as PreDeploymentWithConfig).configurationName !== undefined, - ); -} - -export function isSuccessfulPreDeployment( - d: AllDeploymentTypes | undefined, -): d is PreDeployment { - if (isPreDeployment(d)) { - const success = isSuccessful(d); - if (success !== undefined) { - return success; - } - } - return false; -} - -export function isUnsuccessfulPreDeployment( - d: AllDeploymentTypes | undefined, -): d is PreDeployment { - if (isPreDeployment(d)) { - const failure = isUnsuccessful(d); - if (failure !== undefined) { - return failure; - } - } - return false; -} - -export function isDeployment( - d: AllDeploymentTypes | undefined, -): d is Deployment { - return Boolean(d && d.state === DeploymentState.DEPLOYED); -} - -export function isSuccessfulDeployment( - d: AllDeploymentTypes | undefined, -): d is Deployment { - if (isDeployment(d)) { - const success = isSuccessful(d); - if (success !== undefined) { - return success; - } - } - return false; -} - -export function isUnsuccessfulDeployment( - d: AllDeploymentTypes | undefined, -): d is Deployment { - if (isDeployment(d)) { - const failure = isUnsuccessful(d); - if (failure !== undefined) { - return failure; - } - } - return false; -} diff --git a/extensions/vscode/src/api/types/error.ts b/extensions/vscode/src/api/types/error.ts deleted file mode 100644 index 8a4ca2d3d..000000000 --- a/extensions/vscode/src/api/types/error.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export type AgentError = { - code: string; - msg: string; - operation: string; - data: { - [key: string]: unknown; - }; -}; diff --git a/extensions/vscode/src/api/types/events.ts b/extensions/vscode/src/api/types/events.ts deleted file mode 100644 index a52a0383f..000000000 --- a/extensions/vscode/src/api/types/events.ts +++ /dev/null @@ -1,984 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export enum EventSourceReadyState { - CONNECTING = 0, - OPEN = 1, - CLOSED = 2, -} - -export enum EventStreamMessageType { - ERROR = "error", - LOG = "log", -} - -export type MethodResult = { - ok: boolean; - error?: string; -}; - -export type EventStatus = { - isOpen?: boolean; - eventSource: string; - withCredentials?: boolean; - readyState?: EventSourceReadyState; - url: string | null; - lastError: string | null; -}; - -export type CallbackQueueEntry = { - eventType: EventSubscriptionTarget; - callback: OnMessageEventSourceCallback; -}; - -export type EventSubscriptionTarget = keyof EventSubscriptionTargetCallbackMap; - -/** - * Mapping of event subscription targets to callback signatures. - */ -export interface EventSubscriptionTargetCallbackMap { - // all events - "*": OnMessageEventSourceCallback; - - // agent console log messages - "agent/log": OnAgentLogCallback; - - // all errors - "errors/*": OnMessageEventSourceCallback; - "errors/sse": OnErrorsSseCallback; - "errors/open": OnErrorsOpenCallback; - "errors/unknownEvent": OnErrorsUnknownEventCallback; - - // open events - "open/*": OnMessageEventSourceCallback; - "open/sse": OnOpenSseCallback; - - // publish events - "publish/*": OnMessageEventSourceCallback; - "publish/**/log": OnMessageEventSourceCallback; - "publish/**/failure": OnMessageEventSourceCallback; - "publish/start": OnPublishStartCallback; - - "publish/checkCapabilities/start": OnPublishCheckCapabilitiesStartCallback; - "publish/checkCapabilities/log": OnPublishCheckCapabilitiesLogCallback; - "publish/checkCapabilities/success": OnPublishCheckCapabilitiesSuccessCallback; - "publish/checkCapabilities/failure": OnPublishCheckCapabilitiesFailureCallback; - - // 'publish/createBundle/failure/authFailure' | // received but temporarily converted - "publish/createNewDeployment/start": OnPublishCreateNewDeploymentStartCallback; - "publish/createNewDeployment/success": OnPublishCreateNewDeploymentSuccessCallback; - "publish/createNewDeployment/failure": OnPublishCreateNewDeploymentFailureCallback; - - "publish/setEnvVars/start": OnPublishSetEnvVarsStartCallback; - "publish/setEnvVars/success": OnPublishSetEnvVarsSuccessCallback; - "publish/setEnvVars/failure": OnPublishSetEnvVarsFailureCallback; - - "publish/createBundle/start": OnPublishCreateBundleStartCallback; - "publish/createBundle/log": OnPublishCreateBundleLogCallback; - "publish/createBundle/success": OnPublishCreateBundleSuccessCallback; - "publish/createBundle/failure": OnPublishCreateBundleFailureCallback; - - "publish/createDeployment/start": OnPublishCreateDeploymentStartCallback; - "publish/createDeployment/log": OnPublishCreateDeploymentLogCallback; - "publish/createDeployment/success": OnPublishCreateDeploymentSuccessCallback; - "publish/createDeployment/failure": OnPublishCreateDeploymentFailureCallback; - - "publish/uploadBundle/start": OnPublishUploadBundleStartCallback; - "publish/uploadBundle/log": OnPublishUploadBundleLogCallback; - "publish/uploadBundle/success": OnPublishUploadBundleSuccessCallback; - "publish/uploadBundle/failure": OnPublishUploadBundleFailureCallback; - - "publish/deployBundle/start": OnPublishDeployBundleStartCallback; - "publish/deployBundle/log": OnPublishDeployBundleLogCallback; - "publish/deployBundle/success": OnPublishDeployBundleSuccessCallback; - "publish/deployBundle/failure": OnPublishDeployBundleFailureCallback; - - "publish/restorePythonEnv/start": OnPublishRestorePythonEnvStartCallback; - "publish/restorePythonEnv/log": OnPublishRestorePythonEnvLogCallback; - "publish/restorePythonEnv/progress": OnPublishRestorePythonEnvProgressCallback; - "publish/restorePythonEnv/status": OnPublishRestorePythonEnvStatusCallback; - "publish/restorePythonEnv/success": OnPublishRestorePythonEnvSuccessCallback; - "publish/restorePythonEnv/failure": OnPublishRestorePythonEnvFailureCallback; - // 'publish/restorePythonEnv/failure/serverErr' | // received but temporarily converted - - "publish/runContent/start": OnPublishRunContentStartCallback; - "publish/runContent/log": OnPublishRunContentLogCallback; - "publish/runContent/success": OnPublishRunContentSuccessCallback; - "publish/runContent/failure": OnPublishRunContentFailureCallback; - - "publish/setVanityURL/start": OnPublishSetVanityURLStartCallback; - "publish/setVanityURL/log": OnPublishSetVanityURLLogCallback; - "publish/setVanityURL/success": OnPublishSetVanityURLSuccessCallback; - "publish/setVanityURL/failure": OnPublishSetVanityURLFailureCallback; - - "publish/validateDeployment/start": OnPublishValidateDeploymentStartCallback; - "publish/validateDeployment/log": OnPublishValidateDeploymentLogCallback; - "publish/validateDeployment/success": OnPublishValidateDeploymentSuccessCallback; - "publish/validateDeployment/failure": OnPublishValidateDeploymentFailureCallback; - - "publish/success": OnPublishSuccessCallback; - "publish/failure": OnPublishFailureCallback; -} - -export const eventTypeToString = (eventTypeStr: string): string => { - const eventVerbToString: Record = { - "publish/checkCapabilities": "Check Capabilities", - "publish/createBundle": "Create Bundle", - "publish/uploadBundle": "Upload Bundle", - "publish/createDeployment": "Create Deployment", - "publish/deployBundle": "Deploy Bundle", - "publish/restorePythonEnv": "Restore Python Environment", - "publish/runContent": "Run Content", - "publish/setVanityURL": "Set Vanity URL", - "publish/validateDeployment": "Validate Deployment", - "publish/success": "Wrapping up Deployment", - }; - - // we do not provide strings for wildcards - if (eventTypeStr.includes("*")) { - return eventTypeStr; - } - - // not in the format we're expecting - const parts = eventTypeStr.split("/"); - if (parts.length !== 3) { - return eventTypeStr; - } - - const verb = `${parts[0]}/${parts[1]}`; - const base = eventVerbToString[verb]; - - // we don't know about this event - if (base === undefined) { - return eventTypeStr; - } - - return base; -}; - -export function getLocalId(arg: EventStreamMessage) { - return arg.data.localId; -} - -export interface EventStreamMessage { - type: EventSubscriptionTarget; - time: string; - data: Record; - error?: string; -} - -export interface EventStreamMessageWithError extends EventStreamMessage { - error: string; -} - -export function isErrorEventStreamMessage( - msg: EventStreamMessage, -): msg is EventStreamMessageWithError { - return msg.error !== undefined; -} - -export type OnMessageEventSourceCallback = ( - msg: T, -) => void; - -export function isEventStreamMessage(o: object): o is EventStreamMessage { - return ( - "type" in o && - typeof o.type === "string" && - "time" in o && - typeof o.time === "string" && - "data" in o && - typeof o.data === "object" - ); -} - -// define interfaces which specialize an EventStreamMessage -// and provide type guards for them to support proper typing. - -export interface AgentLog extends EventStreamMessage { - type: "agent/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnAgentLogCallback = (msg: AgentLog) => void; -export function isAgentLog(arg: Events): arg is AgentLog { - return arg.type === "agent/log"; -} - -export interface ErrorsSse extends EventStreamMessage { - type: "errors/sse"; -} -export type OnErrorsSseCallback = (msg: ErrorsSse) => void; -export function isErrorsSse(arg: Events): arg is ErrorsSse { - return arg.type === "errors/sse"; -} - -export interface ErrorsOpen extends EventStreamMessage { - type: "errors/open"; -} -export type OnErrorsOpenCallback = (msg: ErrorsOpen) => void; -export function isErrorsOpen(arg: Events): arg is ErrorsOpen { - return arg.type === "errors/open"; -} - -export interface ErrorsUnknownEvent extends EventStreamMessage { - type: "errors/unknownEvent"; -} -export type OnErrorsUnknownEventCallback = (msg: ErrorsUnknownEvent) => void; -export function isErrorsUnknownEvent(arg: Events): arg is ErrorsUnknownEvent { - return arg.type === "errors/unknownEvent"; -} - -export interface OpenSse extends EventStreamMessage { - type: "open/sse"; -} -export type OnOpenSseCallback = (msg: OpenSse) => void; -export function isOpenSse(arg: Events): arg is OpenSse { - return arg.type === "open/sse"; -} - -export interface PublishStart extends EventStreamMessage { - type: "publish/start"; - data: { - localId: string; - server: string; - }; -} -export type OnPublishStartCallback = (msg: PublishStart) => void; -export function isPublishStart(arg: Events): arg is PublishStart { - return arg.type === "publish/start"; -} - -export interface PublishCheckCapabilitiesStart extends EventStreamMessage { - type: "publish/checkCapabilities/start"; - data: { - localId: string; - }; -} -export type OnPublishCheckCapabilitiesStartCallback = ( - msg: PublishCheckCapabilitiesStart, -) => void; -export function isPublishCheckCapabilitiesStart( - arg: Events, -): arg is PublishCheckCapabilitiesStart { - return arg.type === "publish/checkCapabilities/start"; -} - -export interface PublishCheckCapabilitiesLog extends EventStreamMessage { - type: "publish/checkCapabilities/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishCheckCapabilitiesLogCallback = ( - msg: PublishCheckCapabilitiesLog, -) => void; -export function isPublishCheckCapabilitiesLog( - arg: Events, -): arg is PublishCheckCapabilitiesLog { - return arg.type === "publish/checkCapabilities/log"; -} - -export interface PublishCheckCapabilitiesSuccess extends EventStreamMessage { - type: "publish/checkCapabilities/success"; - data: { - localId: string; - }; -} -export type OnPublishCheckCapabilitiesSuccessCallback = ( - msg: PublishCheckCapabilitiesSuccess, -) => void; -export function isPublishCheckCapabilitiesSuccess( - arg: Events, -): arg is PublishCheckCapabilitiesSuccess { - return arg.type === "publish/checkCapabilities/success"; -} - -export interface PublishCheckCapabilitiesFailure extends EventStreamMessage { - type: "publish/checkCapabilities/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishCheckCapabilitiesFailureCallback = ( - msg: PublishCheckCapabilitiesFailure, -) => void; -export function isPublishCheckCapabilitiesFailure( - arg: Events, -): arg is PublishCheckCapabilitiesFailure { - return arg.type === "publish/checkCapabilities/failure"; -} - -export interface PublishCreateNewDeploymentStart extends EventStreamMessage { - type: "publish/createNewDeployment/start"; - data: { - localId: string; - saveName: string; - }; -} -export type OnPublishCreateNewDeploymentStartCallback = ( - msg: PublishCreateNewDeploymentStart, -) => void; -export function isPublishCreateNewDeploymentStart( - arg: Events, -): arg is PublishCreateNewDeploymentStart { - return arg.type === "publish/createNewDeployment/start"; -} - -export interface PublishCreateNewDeploymentSuccess extends EventStreamMessage { - type: "publish/createNewDeployment/success"; - data: { - localId: string; - contentId: string; - saveName: string; - }; -} -export type OnPublishCreateNewDeploymentSuccessCallback = ( - msg: PublishCreateNewDeploymentSuccess, -) => void; -export function isPublishCreateNewDeploymentSuccess( - arg: Events, -): arg is PublishCreateNewDeploymentSuccess { - return arg.type === "publish/createNewDeployment/success"; -} - -export interface PublishCreateNewDeploymentFailure extends EventStreamMessage { - type: "publish/createNewDeployment/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishCreateNewDeploymentFailureCallback = ( - msg: PublishCreateNewDeploymentFailure, -) => void; -export function isPublishCreateNewDeploymentFailure( - arg: Events, -): arg is PublishCreateNewDeploymentFailure { - return arg.type === "publish/createNewDeployment/failure"; -} - -export interface PublishSetEnvVarsStart extends EventStreamMessage { - type: "publish/setEnvVars/start"; - data: { - localId: string; - }; -} -export type OnPublishSetEnvVarsStartCallback = ( - msg: PublishSetEnvVarsStart, -) => void; -export function isPublishSetEnvVarsStart( - arg: Events, -): arg is PublishSetEnvVarsStart { - return arg.type === "publish/setEnvVars/start"; -} - -export interface PublishSetEnvVarsSuccess extends EventStreamMessage { - type: "publish/setEnvVars/success"; - data: { - localId: string; - // should include echo of variables/values - }; -} -export type OnPublishSetEnvVarsSuccessCallback = ( - msg: PublishSetEnvVarsSuccess, -) => void; -export function isPublishSetEnvVarsSuccess( - arg: Events, -): arg is PublishSetEnvVarsSuccess { - return arg.type === "publish/setEnvVars/success"; -} - -export interface PublishSetEnvVarsFailure extends EventStreamMessage { - type: "publish/setEnvVars/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishSetEnvVarsFailureCallback = ( - msg: PublishSetEnvVarsFailure, -) => void; -export function isPublishSetEnvVarsFailure( - arg: Events, -): arg is PublishSetEnvVarsFailure { - return arg.type === "publish/setEnvVars/failure"; -} - -export interface PublishCreateBundleStart extends EventStreamMessage { - type: "publish/createBundle/start"; - data: { - localId: string; - }; -} -export type OnPublishCreateBundleStartCallback = ( - msg: PublishCreateBundleStart, -) => void; -export function isPublishCreateBundleStart( - arg: Events, -): arg is PublishCreateBundleStart { - return arg.type === "publish/createBundle/start"; -} - -export interface PublishCreateBundleLog extends EventStreamMessage { - type: "publish/createBundle/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishCreateBundleLogCallback = ( - msg: PublishCreateBundleLog, -) => void; -export function isPublishCreateBundleLog( - arg: Events, -): arg is PublishCreateBundleLog { - return arg.type === "publish/createBundle/log"; -} - -export interface PublishCreateBundleSuccess extends EventStreamMessage { - type: "publish/createBundle/success"; - data: { - localId: string; - filename: string; - }; -} -export type OnPublishCreateBundleSuccessCallback = ( - msg: PublishCreateBundleSuccess, -) => void; -export function isPublishCreateBundleSuccess( - arg: Events, -): arg is PublishCreateBundleSuccess { - return arg.type === "publish/createBundle/success"; -} - -export interface PublishCreateBundleFailure extends EventStreamMessage { - type: "publish/createBundle/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishCreateBundleFailureCallback = ( - msg: PublishCreateBundleFailure, -) => void; -export function isPublishCreateBundleFailure( - arg: Events, -): arg is PublishCreateBundleFailure { - return arg.type === "publish/createBundle/failure"; -} - -export interface PublishCreateDeploymentStart extends EventStreamMessage { - type: "publish/createDeployment/start"; - data: { - localId: string; - contentId: string; - saveName: string; - }; -} -export type OnPublishCreateDeploymentStartCallback = ( - msg: PublishCreateDeploymentStart, -) => void; -export function isPublishCreateDeploymentStart( - arg: Events, -): arg is PublishCreateDeploymentStart { - return arg.type === "publish/createDeployment/start"; -} - -export interface PublishCreateDeploymentLog extends EventStreamMessage { - type: "publish/createDeployment/log"; - data: { - // structured data not guaranteed, use selective or generic queries - // from data map - }; -} -export type OnPublishCreateDeploymentLogCallback = ( - msg: PublishCreateDeploymentLog, -) => void; -export function isPublishCreateDeploymentLog( - arg: Events, -): arg is PublishCreateDeploymentLog { - return arg.type === "publish/createDeployment/log"; -} - -export interface PublishCreateDeploymentSuccess extends EventStreamMessage { - type: "publish/createDeployment/success"; - data: { - localId: string; - }; -} -export type OnPublishCreateDeploymentSuccessCallback = ( - msg: PublishCreateDeploymentSuccess, -) => void; -export function isPublishCreateDeploymentSuccess( - arg: Events, -): arg is PublishCreateDeploymentSuccess { - return arg.type === "publish/createDeployment/success"; -} - -export interface PublishCreateDeploymentFailure extends EventStreamMessage { - type: "publish/createDeployment/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishCreateDeploymentFailureCallback = ( - msg: PublishCreateDeploymentFailure, -) => void; -export function isPublishCreateDeploymentFailure( - arg: Events, -): arg is PublishCreateDeploymentFailure { - return arg.type === "publish/createDeployment/failure"; -} - -export interface PublishUploadBundleStart extends EventStreamMessage { - type: "publish/uploadBundle/start"; - data: { - localId: string; - }; -} -export type OnPublishUploadBundleStartCallback = ( - msg: PublishUploadBundleStart, -) => void; -export function isPublishUploadBundleStart( - arg: Events, -): arg is PublishUploadBundleStart { - return arg.type === "publish/uploadBundle/start"; -} - -export interface PublishUploadBundleLog extends EventStreamMessage { - type: "publish/uploadBundle/log"; - data: { - // structured data not guaranteed, use selective or generic queries - // from data map - }; -} -export type OnPublishUploadBundleLogCallback = ( - msg: PublishUploadBundleLog, -) => void; -export function isPublishUploadBundleLog( - arg: Events, -): arg is PublishUploadBundleLog { - return arg.type === "publish/uploadBundle/log"; -} - -export interface PublishUploadBundleSuccess extends EventStreamMessage { - type: "publish/uploadBundle/success"; - data: { - localId: string; - bundleId: string; - }; -} -export type OnPublishUploadBundleSuccessCallback = ( - msg: PublishUploadBundleSuccess, -) => void; -export function isPublishUploadBundleSuccess( - arg: Events, -): arg is PublishUploadBundleSuccess { - return arg.type === "publish/uploadBundle/success"; -} - -export interface PublishUploadBundleFailure extends EventStreamMessage { - type: "publish/uploadBundle/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishUploadBundleFailureCallback = ( - msg: PublishUploadBundleFailure, -) => void; -export function isPublishUploadBundleFailure( - arg: Events, -): arg is PublishUploadBundleFailure { - return arg.type === "publish/uploadBundle/failure"; -} - -export interface PublishDeployBundleStart extends EventStreamMessage { - type: "publish/deployBundle/start"; - data: { - localId: string; - }; -} -export type OnPublishDeployBundleStartCallback = ( - msg: PublishDeployBundleStart, -) => void; -export function isPublishDeployBundleStart( - arg: Events, -): arg is PublishDeployBundleStart { - return arg.type === "publish/deployBundle/start"; -} - -export interface PublishDeployBundleLog extends EventStreamMessage { - type: "publish/deployBundle/log"; - data: { - // structured data not guaranteed, use selective or generic queries - // from data map - }; -} -export type OnPublishDeployBundleLogCallback = ( - msg: PublishDeployBundleLog, -) => void; -export function isPublishDeployBundleLog( - arg: Events, -): arg is PublishDeployBundleLog { - return arg.type === "publish/deployBundle/log"; -} - -export interface PublishDeployBundleSuccess extends EventStreamMessage { - type: "publish/deployBundle/success"; - data: { - localId: string; - taskId: string; - }; -} -export type OnPublishDeployBundleSuccessCallback = ( - msg: PublishDeployBundleSuccess, -) => void; -export function isPublishDeployBundleSuccess( - arg: Events, -): arg is PublishDeployBundleSuccess { - return arg.type === "publish/deployBundle/success"; -} - -export interface PublishDeployBundleFailure extends EventStreamMessage { - type: "publish/deployBundle/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishDeployBundleFailureCallback = ( - msg: PublishDeployBundleFailure, -) => void; -export function isPublishDeployBundleFailure( - arg: Events, -): arg is PublishDeployBundleFailure { - return arg.type === "publish/deployBundle/failure"; -} - -export interface PublishRestorePythonEnvStart extends EventStreamMessage { - type: "publish/restorePythonEnv/start"; - data: { - localId: string; - }; -} -export type OnPublishRestorePythonEnvStartCallback = ( - msg: PublishRestorePythonEnvStart, -) => void; -export function isPublishRestorePythonEnvStart( - arg: Events, -): arg is PublishRestorePythonEnvStart { - return arg.type === "publish/restorePythonEnv/start"; -} - -export interface PublishRestorePythonEnvLog extends EventStreamMessage { - type: "publish/restorePythonEnv/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishRestorePythonEnvLogCallback = ( - msg: PublishRestorePythonEnvLog, -) => void; -export function isPublishRestorePythonEnvLog( - arg: Events, -): arg is PublishRestorePythonEnvLog { - return arg.type === "publish/restorePythonEnv/log"; -} - -export interface PublishRestorePythonEnvProgress extends EventStreamMessage { - type: "publish/restorePythonEnv/progress"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishRestorePythonEnvProgressCallback = ( - msg: PublishRestorePythonEnvProgress, -) => void; -export function isPublishRestorePythonEnvProgress( - arg: Events, -): arg is PublishRestorePythonEnvProgress { - return arg.type === "publish/restorePythonEnv/progress"; -} - -type packageRuntime = "r" | "python"; -type packageStatus = "download+install" | "download" | "install"; - -export interface PublishRestorePythonEnvStatus extends EventStreamMessage { - type: "publish/restorePythonEnv/status"; - data: { - localId: string; - name: string; - runtime: packageRuntime; - status: packageStatus; - version: string; - }; -} -export type OnPublishRestorePythonEnvStatusCallback = ( - msg: PublishRestorePythonEnvStatus, -) => void; -export function isPublishRestorePythonEnvStatus( - arg: Events, -): arg is PublishRestorePythonEnvStatus { - return arg.type === "publish/restorePythonEnv/status"; -} - -export interface PublishRestorePythonEnvSuccess extends EventStreamMessage { - type: "publish/restorePythonEnv/success"; - data: { - localId: string; - }; -} -export type OnPublishRestorePythonEnvSuccessCallback = ( - msg: PublishRestorePythonEnvSuccess, -) => void; -export function isPublishRestorePythonEnvSuccess( - arg: Events, -): arg is PublishRestorePythonEnvSuccess { - return arg.type === "publish/restorePythonEnv/success"; -} - -export interface PublishRestorePythonEnvFailure extends EventStreamMessage { - type: "publish/restorePythonEnv/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishRestorePythonEnvFailureCallback = ( - msg: PublishRestorePythonEnvFailure, -) => void; -export function isPublishRestorePythonEnvFailure( - arg: Events, -): arg is PublishRestorePythonEnvFailure { - return arg.type === "publish/restorePythonEnv/failure"; -} - -export interface PublishRunContentStart extends EventStreamMessage { - type: "publish/runContent/start"; - data: { - localId: string; - }; -} -export type OnPublishRunContentStartCallback = ( - msg: PublishRunContentStart, -) => void; -export function isPublishRunContentStart( - arg: Events, -): arg is PublishRunContentStart { - return arg.type === "publish/runContent/start"; -} - -export interface PublishRunContentLog extends EventStreamMessage { - type: "publish/runContent/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishRunContentLogCallback = ( - msg: PublishRunContentLog, -) => void; -export function isPublishRunContentLog( - arg: Events, -): arg is PublishRunContentLog { - return arg.type === "publish/runContent/log"; -} - -export interface PublishRunContentSuccess extends EventStreamMessage { - type: "publish/runContent/success"; - data: { - localId: string; - }; -} -export type OnPublishRunContentSuccessCallback = ( - msg: PublishRunContentSuccess, -) => void; -export function isPublishRunContentSuccess( - arg: Events, -): arg is PublishRunContentSuccess { - return arg.type === "publish/runContent/success"; -} - -export interface PublishRunContentFailure extends EventStreamMessage { - type: "publish/runContent/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishRunContentFailureCallback = ( - msg: PublishRunContentFailure, -) => void; -export function isPublishRunContentFailure( - arg: Events, -): arg is PublishRestorePythonEnvFailure { - return arg.type === "publish/runContent/failure"; -} - -export interface PublishSetVanityURLStart extends EventStreamMessage { - type: "publish/setVanityURL/start"; - data: { - localId: string; - }; -} -export type OnPublishSetVanityURLStartCallback = ( - msg: PublishSetVanityURLStart, -) => void; -export function isPublishSetVanityURLStart( - arg: Events, -): arg is PublishSetVanityURLStart { - return arg.type === "publish/setVanityURL/start"; -} - -export interface PublishSetVanityURLLog extends EventStreamMessage { - type: "publish/setVanityURL/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishSetVanityURLLogCallback = ( - msg: PublishSetVanityURLLog, -) => void; -export function isPublishSetVanityURLLog( - arg: Events, -): arg is PublishSetVanityURLLog { - return arg.type === "publish/setVanityURL/log"; -} - -export interface PublishSetVanityURLSuccess extends EventStreamMessage { - type: "publish/setVanityURL/success"; - data: { - localId: string; - }; -} -export type OnPublishSetVanityURLSuccessCallback = ( - msg: PublishSetVanityURLSuccess, -) => void; -export function isPublishSetVanityURLSuccess( - arg: Events, -): arg is PublishSetVanityURLSuccess { - return arg.type === "publish/setVanityURL/success"; -} - -export interface PublishSetVanityURLFailure extends EventStreamMessage { - type: "publish/setVanityURL/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishSetVanityURLFailureCallback = ( - msg: PublishSetVanityURLFailure, -) => void; -export function isPublishSetVanityURLFailure( - arg: Events, -): arg is PublishRestorePythonEnvFailure { - return arg.type === "publish/setVanityURL/failure"; -} -export interface PublishValidateDeploymentStart extends EventStreamMessage { - type: "publish/validateDeployment/start"; - data: { - localId: string; - url: string; - }; -} -export type OnPublishValidateDeploymentStartCallback = ( - msg: PublishValidateDeploymentStart, -) => void; -export function isPublishValidateDeploymentStart( - arg: Events, -): arg is PublishValidateDeploymentStart { - return arg.type === "publish/validateDeployment/start"; -} - -export interface PublishValidateDeploymentLog extends EventStreamMessage { - type: "publish/validateDeployment/log"; - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishValidateDeploymentLogCallback = ( - msg: PublishValidateDeploymentLog, -) => void; -export function isPublishValidateDeploymentLog( - arg: Events, -): arg is PublishValidateDeploymentLog { - return arg.type === "publish/validateDeployment/log"; -} - -export interface PublishValidateDeploymentSuccess extends EventStreamMessage { - type: "publish/validateDeployment/success"; - data: { - localId: string; - }; -} -export type OnPublishValidateDeploymentSuccessCallback = ( - msg: PublishValidateDeploymentSuccess, -) => void; -export function isPublisValidateDeploymentSuccess( - arg: Events, -): arg is PublishValidateDeploymentSuccess { - return arg.type === "publish/validateDeployment/success"; -} - -export interface PublishValidateDeploymentFailure extends EventStreamMessage { - type: "publish/validateDeployment/failure"; - error: string; // translated internally - // structured data not guaranteed, use selective or generic queries - // from data map -} -export type OnPublishValidateDeploymentFailureCallback = ( - msg: PublishValidateDeploymentFailure, -) => void; -export function isPublishValidateDeploymentFailure( - arg: Events, -): arg is PublishValidateDeploymentFailure { - return arg.type === "publish/validateDeployment/failure"; -} - -export interface PublishSuccess extends EventStreamMessage { - type: "publish/success"; - data: { - localId: string; - contentId: string; - dashboardUrl: string; - directUrl: string; - serverUrl: string; - }; -} -export type OnPublishSuccessCallback = (msg: PublishSuccess) => void; -export function isPublishSuccess(arg: Events): arg is PublishSuccess { - return arg.type === "publish/success"; -} - -export interface PublishFailure extends EventStreamMessage { - type: "publish/failure"; - data: { - dashboardUrl: string; - url: string; - // and other non-defined attributes - }; - error: string; // translated internally -} - -export type OnPublishFailureCallback = (msg: PublishFailure) => void; -export function isPublishFailure(arg: Events): arg is PublishFailure { - return arg.type === "publish/failure"; -} - -// Events are a union type of our base and our extended interfaces -export type Events = - | EventStreamMessage - | AgentLog - | ErrorsSse - | ErrorsOpen - | ErrorsUnknownEvent - | OpenSse - | PublishStart - | PublishCreateBundleStart - | PublishCreateBundleLog - | PublishCreateBundleSuccess - | PublishCreateBundleFailure - | PublishCreateDeploymentStart - | PublishCreateDeploymentSuccess - | PublishCreateDeploymentFailure - | PublishUploadBundleStart - | PublishUploadBundleSuccess - | PublishUploadBundleFailure - | PublishDeployBundleStart - | PublishDeployBundleSuccess - | PublishDeployBundleFailure - | PublishRestorePythonEnvStart - | PublishRestorePythonEnvLog - | PublishRestorePythonEnvSuccess - | PublishRestorePythonEnvFailure - | PublishRunContentStart - | PublishRunContentLog - | PublishRunContentSuccess - | PublishRunContentFailure - | PublishSuccess - | PublishFailure; diff --git a/extensions/vscode/src/api/types/files.ts b/extensions/vscode/src/api/types/files.ts deleted file mode 100644 index 793f9c221..000000000 --- a/extensions/vscode/src/api/types/files.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export enum DeploymentFileType { - REGULAR = "REGULAR", - DIRECTORY = "DIR", -} - -export type DeploymentFile = { - id: string; - fileType: DeploymentFileType; - base: string; - reason: FileMatch | null; // pattern that matched a file, null if no match - files: DeploymentFile[]; - isDir: boolean; - isEntrypoint: boolean; - isFile: boolean; - modifiedDatetime: string; - rel: string; - relDir: string; - size: number; - abs: string; -}; - -export enum FileMatchSource { - FILE = "file", - BUILT_IN = "built-in", -} - -export type FileMatch = { - source: FileMatchSource; - pattern: string; - fileName: string; - filePath: string; - exclude: boolean; -}; - -export enum FileAction { - INCLUDE = "include", - EXCLUDE = "exclude", -} diff --git a/extensions/vscode/src/api/types/requirements.ts b/extensions/vscode/src/api/types/requirements.ts deleted file mode 100644 index 1118f1d30..000000000 --- a/extensions/vscode/src/api/types/requirements.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export type RequirementsResponse = { - requirements: string[]; -}; diff --git a/extensions/vscode/src/api/types/schema.ts b/extensions/vscode/src/api/types/schema.ts deleted file mode 100644 index 5a8c255b3..000000000 --- a/extensions/vscode/src/api/types/schema.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Copyright (C) 2023 by Posit Software, PBC. - -export type SchemaURL = string; diff --git a/packages/api/client.ts b/packages/api/client.ts index 2591b4186..954a78eff 100644 --- a/packages/api/client.ts +++ b/packages/api/client.ts @@ -3,6 +3,7 @@ import axios from "axios"; import { Accounts } from "./resources/Accounts"; +import { Credentials } from "./resources/Credentials"; import { Deployments } from "./resources/Deployments"; import { Configurations } from "./resources/Configurations"; import { Files } from "./resources/Files"; @@ -13,6 +14,7 @@ class PublishingClientApi { accounts: Accounts; configurations: Configurations; + credentials: Credentials; deployments: Deployments; files: Files; requirements: Requirements; @@ -26,6 +28,7 @@ class PublishingClientApi { this.accounts = new Accounts(this.client); this.configurations = new Configurations(this.client); + this.credentials = new Credentials(this.client); this.deployments = new Deployments(this.client); this.files = new Files(this.client); this.requirements = new Requirements(this.client); diff --git a/packages/api/index.ts b/packages/api/index.ts index 1eda4b2f4..8c5c788a4 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -3,6 +3,7 @@ export { initApi, useApi } from "./client"; export * from "./types/accounts"; +export * from "./types/credentials"; export * from "./types/configurations"; export * from "./types/connect"; export * from "./types/deployments"; diff --git a/extensions/vscode/src/api/resources/Credentials.ts b/packages/api/resources/Credentials.ts similarity index 100% rename from extensions/vscode/src/api/resources/Credentials.ts rename to packages/api/resources/Credentials.ts diff --git a/extensions/vscode/src/api/types/credentials.ts b/packages/api/types/credentials.ts similarity index 100% rename from extensions/vscode/src/api/types/credentials.ts rename to packages/api/types/credentials.ts From 7780c629635c6dcb0ec960356af79917910972a7 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:26:26 -0700 Subject: [PATCH 07/16] Install @publishing-client/api to vscode extension --- extensions/vscode/package.json | 1 + package-lock.json | 1 + packages/api/package.json | 1 + 3 files changed, 3 insertions(+) diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index 11a44ef32..7782e7b10 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -550,6 +550,7 @@ }, "dependencies": { "@hypersphere/omnibus": "0.1.6", + "@publishing-client/api": "^1.0.0", "@vscode/codicons": "^0.0.35", "axios": "^1.6.0", "eventsource": "^2.0.2", diff --git a/package-lock.json b/package-lock.json index 63b5bd3cf..bff466268 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "version": "0.0.0", "dependencies": { "@hypersphere/omnibus": "0.1.6", + "@publishing-client/api": "^1.0.0", "@vscode/codicons": "^0.0.35", "axios": "^1.6.0", "eventsource": "^2.0.2", diff --git a/packages/api/package.json b/packages/api/package.json index ed4f52ab8..808232fa6 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "private": true, "description": "A library to enable convenient access to the Publisher Client API and its response types.", + "exports": "./index.ts", "dependencies": { "axios": "^1.6.8" }, From 7ed4425718b4efe8b5c628044a60a2a411d69c15 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Wed, 27 Mar 2024 16:36:18 -0700 Subject: [PATCH 08/16] Correct api imports in extensions/vscode --- extensions/vscode/src/multiStepInputs/deployProject.ts | 2 +- extensions/vscode/src/services.ts | 3 ++- extensions/vscode/src/utils/names.ts | 2 +- extensions/vscode/src/views/configurations.ts | 2 +- extensions/vscode/src/views/credentials.ts | 2 +- extensions/vscode/src/views/deployProgress.ts | 2 +- extensions/vscode/src/views/deployments.ts | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/extensions/vscode/src/multiStepInputs/deployProject.ts b/extensions/vscode/src/multiStepInputs/deployProject.ts index b87d1255a..db15caefb 100644 --- a/extensions/vscode/src/multiStepInputs/deployProject.ts +++ b/extensions/vscode/src/multiStepInputs/deployProject.ts @@ -16,7 +16,7 @@ import { useApi, isConfigurationError, Configuration, -} from "src/api"; +} from "@publishing-client/api"; import { getSummaryStringFromError } from "src/utils/errors"; import { deployProject } from "src/views/deployProgress"; import { EventStream } from "src/events"; diff --git a/extensions/vscode/src/services.ts b/extensions/vscode/src/services.ts index 6939c7d19..6a9e9893f 100644 --- a/extensions/vscode/src/services.ts +++ b/extensions/vscode/src/services.ts @@ -2,8 +2,9 @@ import { ExtensionContext, Disposable } from "vscode"; +import { initApi } from "@publishing-client/api" + import { HOST } from "src"; -import { initApi } from "src/api"; import { Server } from "src/servers"; export class Service implements Disposable { diff --git a/extensions/vscode/src/utils/names.ts b/extensions/vscode/src/utils/names.ts index aefa169f0..ed4ff3cdd 100644 --- a/extensions/vscode/src/utils/names.ts +++ b/extensions/vscode/src/utils/names.ts @@ -2,7 +2,7 @@ import { InputBoxValidationSeverity } from "vscode"; -import { useApi } from "src/api"; +import { useApi } from "@publishing-client/api"; import { isValidFilename } from "src/utils/files"; export async function untitledConfigurationName(): Promise { diff --git a/extensions/vscode/src/views/configurations.ts b/extensions/vscode/src/views/configurations.ts index f5558d62f..226b47ae1 100644 --- a/extensions/vscode/src/views/configurations.ts +++ b/extensions/vscode/src/views/configurations.ts @@ -22,7 +22,7 @@ import { Configuration, ConfigurationError, isConfigurationError, -} from "src/api"; +} from "@publishing-client/api"; import { confirmDelete, confirmReplace } from "src/dialogs"; import { getSummaryStringFromError } from "src/utils/errors"; diff --git a/extensions/vscode/src/views/credentials.ts b/extensions/vscode/src/views/credentials.ts index 5d51bf553..757a9457e 100644 --- a/extensions/vscode/src/views/credentials.ts +++ b/extensions/vscode/src/views/credentials.ts @@ -12,7 +12,7 @@ import { window, } from "vscode"; -import { Account, useApi } from "src/api"; +import { Account, useApi } from "@publishing-client/api"; import { getSummaryStringFromError } from "src/utils/errors"; const viewName = "posit.publisher.credentials"; diff --git a/extensions/vscode/src/views/deployProgress.ts b/extensions/vscode/src/views/deployProgress.ts index 72f5271ee..1e17d2fc4 100644 --- a/extensions/vscode/src/views/deployProgress.ts +++ b/extensions/vscode/src/views/deployProgress.ts @@ -1,7 +1,7 @@ // Copyright (C) 2024 by Posit Software, PBC. import { ProgressLocation, Uri, env, window } from "vscode"; -import { eventTypeToString, EventStreamMessage } from "src/api"; +import { eventTypeToString, EventStreamMessage } from "@publishing-client/api"; import { EventStream, UnregisterCallback } from "src/events"; export function deployProject(localID: string, stream: EventStream) { diff --git a/extensions/vscode/src/views/deployments.ts b/extensions/vscode/src/views/deployments.ts index fb91a609a..66144127b 100644 --- a/extensions/vscode/src/views/deployments.ts +++ b/extensions/vscode/src/views/deployments.ts @@ -25,7 +25,7 @@ import { isDeploymentError, isPreDeployment, useApi, -} from "src/api"; +} from "@publishing-client/api"; import { confirmForget } from "src/dialogs"; import { EventStream } from "src/events"; From b22eef7bbb9fc923fd1d928613ff77ef749efa16 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Thu, 28 Mar 2024 12:53:28 -0700 Subject: [PATCH 09/16] Add vscodeignore workaround for npm workspaces --- extensions/vscode/.vscodeignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extensions/vscode/.vscodeignore b/extensions/vscode/.vscodeignore index b912f2440..f4771eae9 100644 --- a/extensions/vscode/.vscodeignore +++ b/extensions/vscode/.vscodeignore @@ -1,3 +1,6 @@ +# Workaround for https://github.com/microsoft/vscode-vsce/issues/580 +../.. + .vscode/** .vscode-test/** src/** From a10ef3d9cb41e3f2ae342e9577d277175d564a63 Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Thu, 28 Mar 2024 12:53:44 -0700 Subject: [PATCH 10/16] vscodeignore hidden files and directories --- extensions/vscode/.vscodeignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extensions/vscode/.vscodeignore b/extensions/vscode/.vscodeignore index f4771eae9..6c5bcd9a5 100644 --- a/extensions/vscode/.vscodeignore +++ b/extensions/vscode/.vscodeignore @@ -1,6 +1,8 @@ # Workaround for https://github.com/microsoft/vscode-vsce/issues/580 ../.. +.* +.*/ .vscode/** .vscode-test/** src/** From 68ab09228f0ae2de786acc0d14288c66c1fc54be Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Fri, 3 May 2024 16:21:43 -0700 Subject: [PATCH 11/16] Run Prettier write --- extensions/vscode/src/services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/vscode/src/services.ts b/extensions/vscode/src/services.ts index 6a9e9893f..9259ec134 100644 --- a/extensions/vscode/src/services.ts +++ b/extensions/vscode/src/services.ts @@ -2,7 +2,7 @@ import { ExtensionContext, Disposable } from "vscode"; -import { initApi } from "@publishing-client/api" +import { initApi } from "@publishing-client/api"; import { HOST } from "src"; import { Server } from "src/servers"; From 6865d345906f9caec481b7031af757cb9a03519e Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Fri, 3 May 2024 16:30:02 -0700 Subject: [PATCH 12/16] Add vscode webviews as npm workspaces --- .../vscode/webviews/homeView/package.json | 1 + package-lock.json | 872 +++++++++++++++++- package.json | 3 +- 3 files changed, 873 insertions(+), 3 deletions(-) diff --git a/extensions/vscode/webviews/homeView/package.json b/extensions/vscode/webviews/homeView/package.json index ecf9ccef8..4bc1a8b24 100644 --- a/extensions/vscode/webviews/homeView/package.json +++ b/extensions/vscode/webviews/homeView/package.json @@ -7,6 +7,7 @@ "build": "vue-tsc --noEmit && vite build" }, "dependencies": { + "@publishing-client/api": "^1.0.0", "axios": "^1.6.0", "eventsource": "^2.0.2", "get-port": "5.1.1", diff --git a/package-lock.json b/package-lock.json index bff466268..2f796fbdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,8 @@ "name": "publishing-client", "workspaces": [ "packages/*", - "extensions/*" + "extensions/*", + "extensions/vscode/webviews/*" ], "devDependencies": { "husky": "^9.0.11", @@ -50,6 +51,30 @@ "vscode": "^1.87.0" } }, + "extensions/vscode/webviews/homeView": { + "name": "project-selector-web-view-view", + "version": "0.0.1", + "dependencies": { + "@publishing-client/api": "^1.0.0", + "axios": "^1.6.0", + "eventsource": "^2.0.2", + "get-port": "5.1.1", + "pinia": "^2.1.7", + "vue": "^3.4.21" + }, + "devDependencies": { + "@tsconfig/node18": "^18.2.4", + "@types/node": "^18.11.9", + "@types/vscode-webview": "^1.57.5", + "@vitejs/plugin-vue": "^5.0.4", + "@vscode/webview-ui-toolkit": "^1.4.0", + "@vue/tsconfig": "^0.5.1", + "sass": "^1.72.0", + "typescript": "~5.4.2", + "vite": "^5.1.6", + "vue-tsc": "^2.0.6" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -59,6 +84,17 @@ "node": ">=0.10.0" } }, + "node_modules/@babel/parser": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", @@ -622,6 +658,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@microsoft/fast-element": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.13.0.tgz", + "integrity": "sha512-iFhzKbbD0cFRo9cEzLS3Tdo9BYuatdxmCEKCpZs1Cro/93zNMpZ/Y9/Z7SknmW6fhDZbpBvtO8lLh9TFEcNVAQ==", + "dev": true + }, + "node_modules/@microsoft/fast-foundation": { + "version": "2.49.6", + "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.6.tgz", + "integrity": "sha512-DZVr+J/NIoskFC1Y6xnAowrMkdbf2d5o7UyWK6gW5AiQ6S386Ql8dw4KcC4kHaeE1yL2CKvweE79cj6ZhJhTvA==", + "dev": true, + "dependencies": { + "@microsoft/fast-element": "^1.13.0", + "@microsoft/fast-web-utilities": "^5.4.1", + "tabbable": "^5.2.0", + "tslib": "^1.13.0" + } + }, + "node_modules/@microsoft/fast-foundation/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@microsoft/fast-react-wrapper": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.3.24.tgz", + "integrity": "sha512-sRnSBIKaO42p4mYoYR60spWVkg89wFxFAgQETIMazAm2TxtlsnsGszJnTwVhXq2Uz+XNiD8eKBkfzK5c/i6/Kw==", + "dev": true, + "dependencies": { + "@microsoft/fast-element": "^1.13.0", + "@microsoft/fast-foundation": "^2.49.6" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@microsoft/fast-web-utilities": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", + "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", + "dev": true, + "dependencies": { + "exenv-es6": "^1.1.1" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -671,6 +758,214 @@ "resolved": "packages/api", "link": true }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -680,6 +975,18 @@ "node": ">= 6" } }, + "node_modules/@tsconfig/node18": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz", + "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/eventsource": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.15.tgz", @@ -731,6 +1038,12 @@ "integrity": "sha512-y3yYJV2esWr8LNjp3VNbSMWG7Y43jC8pCldG8YwiHGAQbsymkkMMt0aDT1xZIOFM2eFcNiUc+dJMx1+Z0UT8fg==", "dev": true }, + "node_modules/@types/vscode-webview": { + "version": "1.57.5", + "resolved": "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.5.tgz", + "integrity": "sha512-iBAUYNYkz+uk1kdsq05fEcoh8gJmwT3lqqFPN7MGyjQ3HVloViMdo7ZJ8DFIP8WOK74PjOEilosqAyxV2iUFUw==", + "dev": true + }, "node_modules/@types/wait-on": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", @@ -936,6 +1249,47 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.0.tgz", + "integrity": "sha512-a8WG9+4OdeNDW4ywABZIM6S6UN7em8uIlM/BZ2pWQUYrVmX+m8sj/X+QadvO+Li/t/LjAqbWJQtVgxdpEWLALQ==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.2.0" + } + }, + "node_modules/@volar/source-map": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.0.tgz", + "integrity": "sha512-HQlPRlHOVqCCHK8wI76ZldHkEwKsjp7E6idUc36Ekni+KJDNrqgSqPvyHQixybXPHNU7CI9Uxd9/IkxO7LuNBw==", + "dev": true, + "dependencies": { + "muggle-string": "^0.4.0" + } + }, + "node_modules/@volar/typescript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.2.0.tgz", + "integrity": "sha512-wC6l4zLiiCLxF+FGaHCbWlQYf4vMsnRxYhcI6WgvaNppOD6r1g+Ef1RKRJUApALWU46Yy/JDU/TbdV6w/X6Liw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.2.0", + "path-browserify": "^1.0.1" + } + }, "node_modules/@vscode/codicons": { "version": "0.0.35", "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.35.tgz", @@ -956,6 +1310,145 @@ "node": ">=16" } }, + "node_modules/@vscode/webview-ui-toolkit": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.4.0.tgz", + "integrity": "sha512-modXVHQkZLsxgmd5yoP3ptRC/G8NBDD+ob+ngPiWNQdlrH6H1xR/qgOBD85bfU3BhOB5sZzFWBwwhp9/SfoHww==", + "dev": true, + "dependencies": { + "@microsoft/fast-element": "^1.12.0", + "@microsoft/fast-foundation": "^2.49.4", + "@microsoft/fast-react-wrapper": "^0.3.22", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.26.tgz", + "integrity": "sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.26", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz", + "integrity": "sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==", + "dependencies": { + "@vue/compiler-core": "3.4.26", + "@vue/shared": "3.4.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz", + "integrity": "sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.26", + "@vue/compiler-dom": "3.4.26", + "@vue/compiler-ssr": "3.4.26", + "@vue/shared": "3.4.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz", + "integrity": "sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==", + "dependencies": { + "@vue/compiler-dom": "3.4.26", + "@vue/shared": "3.4.26" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", + "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" + }, + "node_modules/@vue/language-core": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.16.tgz", + "integrity": "sha512-Bc2sexRH99pznOph8mLw2BlRZ9edm7tW51kcBXgx8adAoOcZUWJj3UNSsdQ6H9Y8meGz7BoazVrVo/jUukIsPw==", + "dev": true, + "dependencies": { + "@volar/language-core": "~2.2.0", + "@vue/compiler-dom": "^3.4.0", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.26.tgz", + "integrity": "sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==", + "dependencies": { + "@vue/shared": "3.4.26" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.26.tgz", + "integrity": "sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==", + "dependencies": { + "@vue/reactivity": "3.4.26", + "@vue/shared": "3.4.26" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.26.tgz", + "integrity": "sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==", + "dependencies": { + "@vue/runtime-core": "3.4.26", + "@vue/shared": "3.4.26", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.26.tgz", + "integrity": "sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==", + "dependencies": { + "@vue/compiler-ssr": "3.4.26", + "@vue/shared": "3.4.26" + }, + "peerDependencies": { + "vue": "3.4.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz", + "integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -1378,6 +1871,12 @@ "node": ">=16" } }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1404,6 +1903,17 @@ "node": ">= 8" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1492,6 +2002,17 @@ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -1782,6 +2303,11 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -1828,6 +2354,12 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/exenv-es6": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", + "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==", + "dev": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2223,6 +2755,12 @@ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2390,6 +2928,13 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "peer": true + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2646,6 +3191,19 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", @@ -2655,6 +3213,14 @@ "node": "14 || >=16.14" } }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -2816,6 +3382,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, "node_modules/mutexify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.4.0.tgz", @@ -2824,6 +3396,23 @@ "queue-tick": "^1.0.0" } }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2955,6 +3544,12 @@ "node": ">=6" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3007,6 +3602,11 @@ "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -3031,6 +3631,58 @@ "node": ">=0.10" } }, + "node_modules/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3061,6 +3713,10 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/project-selector-web-view-view": { + "resolved": "extensions/vscode/webviews/homeView", + "link": true + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3113,6 +3769,19 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -3285,6 +3954,41 @@ "node": "*" } }, + "node_modules/rollup": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3314,6 +4018,23 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/sass": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.76.0.tgz", + "integrity": "sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -3414,6 +4135,14 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3576,6 +4305,12 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/tabbable": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", + "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==", + "dev": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3606,6 +4341,12 @@ "typescript": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3634,7 +4375,7 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3664,6 +4405,133 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/vite": { + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.4.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.26.tgz", + "integrity": "sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==", + "dependencies": { + "@vue/compiler-dom": "3.4.26", + "@vue/compiler-sfc": "3.4.26", + "@vue/runtime-dom": "3.4.26", + "@vue/server-renderer": "3.4.26", + "@vue/shared": "3.4.26" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.16.tgz", + "integrity": "sha512-/gHAWJa216PeEhfxtAToIbxdWgw01wuQzo48ZUqMYVEyNqDp+OYV9xMO5HaPS2P3Ls0+EsjguMZLY4cGobX4Ew==", + "dev": true, + "dependencies": { + "@volar/typescript": "~2.2.0", + "@vue/language-core": "2.0.16", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index f2b20eb5a..344bf3dca 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "type": "module", "workspaces": [ "packages/*", - "extensions/*" + "extensions/*", + "extensions/vscode/webviews/*" ], "scripts": { "format": "prettier . --write", From 9aad0403319f454528c261dd8ae9e98d85fa877e Mon Sep 17 00:00:00 2001 From: Jordan Jensen Date: Fri, 3 May 2024 16:32:43 -0700 Subject: [PATCH 13/16] Correct imports to api module --- extensions/vscode/src/bus.ts | 7 ++++++- extensions/vscode/src/events.ts | 2 +- extensions/vscode/src/extension.ts | 3 ++- extensions/vscode/src/multiStepInputs/initWorkspace.ts | 6 +++++- extensions/vscode/src/multiStepInputs/newConfig.ts | 6 +++++- extensions/vscode/src/multiStepInputs/newDeployment.ts | 2 +- .../vscode/src/types/messages/hostToWebviewMessages.ts | 2 +- extensions/vscode/src/utils/files.ts | 2 +- extensions/vscode/src/views/homeView.ts | 2 +- extensions/vscode/src/views/logs.ts | 2 +- .../webviews/homeView/src/components/EasyDeploy.vue | 8 +++++--- .../homeView/src/components/views/ProjectFiles.vue | 2 +- extensions/vscode/webviews/homeView/src/stores/home.ts | 2 +- packages/api/README.md | 2 +- 14 files changed, 32 insertions(+), 16 deletions(-) diff --git a/extensions/vscode/src/bus.ts b/extensions/vscode/src/bus.ts index 53ffbd0af..6fb772d06 100644 --- a/extensions/vscode/src/bus.ts +++ b/extensions/vscode/src/bus.ts @@ -1,7 +1,12 @@ // Copyright (C) 2024 by Posit Software, PBC. import { Omnibus, args } from "@hypersphere/omnibus"; -import { Account, Configuration, Deployment, PreDeployment } from "src/api"; +import { + Account, + Configuration, + Deployment, + PreDeployment, +} from "@publishing-client/api"; export const bus = Omnibus.builder() // activeDeploymentChanged: triggered if deployment name or value has changed diff --git a/extensions/vscode/src/events.ts b/extensions/vscode/src/events.ts index 0018107f3..d591bcf80 100644 --- a/extensions/vscode/src/events.ts +++ b/extensions/vscode/src/events.ts @@ -7,7 +7,7 @@ import { Disposable } from "vscode"; import EventSource from "eventsource"; import { Readable } from "stream"; -import { EventStreamMessage } from "src/api"; +import { EventStreamMessage } from "@publishing-client/api"; export type EventStreamRegistration = (message: EventStreamMessage) => void; diff --git a/extensions/vscode/src/extension.ts b/extensions/vscode/src/extension.ts index f3ded673b..791f8eae7 100644 --- a/extensions/vscode/src/extension.ts +++ b/extensions/vscode/src/extension.ts @@ -11,8 +11,9 @@ import { workspace, } from "vscode"; +import { useApi } from "@publishing-client/api"; + import * as ports from "src/ports"; -import { useApi } from "src/api"; import { Service } from "src/services"; import { ProjectTreeDataProvider } from "src/views/project"; import { DeploymentsTreeDataProvider } from "src/views/deployments"; diff --git a/extensions/vscode/src/multiStepInputs/initWorkspace.ts b/extensions/vscode/src/multiStepInputs/initWorkspace.ts index dcc0a8b05..c026d8310 100644 --- a/extensions/vscode/src/multiStepInputs/initWorkspace.ts +++ b/extensions/vscode/src/multiStepInputs/initWorkspace.ts @@ -17,7 +17,11 @@ import { window, } from "vscode"; -import { AccountAuthType, useApi, ConfigurationDetails } from "src/api"; +import { + AccountAuthType, + useApi, + ConfigurationDetails, +} from "@publishing-client/api"; import { getSummaryStringFromError } from "src/utils/errors"; import { untitledConfigurationName, diff --git a/extensions/vscode/src/multiStepInputs/newConfig.ts b/extensions/vscode/src/multiStepInputs/newConfig.ts index 9a7620d4b..f9d5a669a 100644 --- a/extensions/vscode/src/multiStepInputs/newConfig.ts +++ b/extensions/vscode/src/multiStepInputs/newConfig.ts @@ -17,7 +17,11 @@ import { window, } from "vscode"; -import { useApi, ConfigurationDetails, Configuration } from "src/api"; +import { + useApi, + ConfigurationDetails, + Configuration, +} from "@publishing-client/api"; import { getSummaryStringFromError } from "src/utils/errors"; import { untitledConfigurationName } from "src/utils/names"; import { isValidFilename } from "src/utils/files"; diff --git a/extensions/vscode/src/multiStepInputs/newDeployment.ts b/extensions/vscode/src/multiStepInputs/newDeployment.ts index 55d7dc17d..25b1f5e67 100644 --- a/extensions/vscode/src/multiStepInputs/newDeployment.ts +++ b/extensions/vscode/src/multiStepInputs/newDeployment.ts @@ -7,7 +7,7 @@ import { PreDeployment, isConfigurationError, useApi, -} from "src/api"; +} from "@publishing-client/api"; import { EventStream } from "src/events"; import { getSummaryStringFromError } from "src/utils/errors"; import { diff --git a/extensions/vscode/src/types/messages/hostToWebviewMessages.ts b/extensions/vscode/src/types/messages/hostToWebviewMessages.ts index 66e47651c..4013e4c31 100644 --- a/extensions/vscode/src/types/messages/hostToWebviewMessages.ts +++ b/extensions/vscode/src/types/messages/hostToWebviewMessages.ts @@ -6,7 +6,7 @@ import { Deployment, DeploymentFile, PreDeployment, -} from "../../api"; +} from "@publishing-client/api"; export enum HostToWebviewMessageType { // Sent from host to webviewView diff --git a/extensions/vscode/src/utils/files.ts b/extensions/vscode/src/utils/files.ts index b43c28ddd..fdeb00360 100644 --- a/extensions/vscode/src/utils/files.ts +++ b/extensions/vscode/src/utils/files.ts @@ -9,7 +9,7 @@ import { commands, } from "vscode"; -import { DeploymentFile } from "../api"; +import { DeploymentFile } from "@publishing-client/api"; export async function fileExists(fileUri: Uri): Promise { try { diff --git a/extensions/vscode/src/views/homeView.ts b/extensions/vscode/src/views/homeView.ts index e7c8e0f86..89c4c1e1e 100644 --- a/extensions/vscode/src/views/homeView.ts +++ b/extensions/vscode/src/views/homeView.ts @@ -29,7 +29,7 @@ import { isConfigurationError, isDeploymentError, useApi, -} from "src/api"; +} from "@publishing-client/api"; import { useBus } from "src/bus"; import { EventStream } from "src/events"; import { getSummaryStringFromError } from "src/utils/errors"; diff --git a/extensions/vscode/src/views/logs.ts b/extensions/vscode/src/views/logs.ts index 05d691fcf..e0d042e96 100644 --- a/extensions/vscode/src/views/logs.ts +++ b/extensions/vscode/src/views/logs.ts @@ -17,7 +17,7 @@ import { import { EventStream, displayEventStreamMessage } from "src/events"; -import { EventStreamMessage } from "src/api"; +import { EventStreamMessage } from "@publishing-client/api"; enum LogStageStatus { notStarted, diff --git a/extensions/vscode/webviews/homeView/src/components/EasyDeploy.vue b/extensions/vscode/webviews/homeView/src/components/EasyDeploy.vue index 0a6afac98..b37e60be5 100644 --- a/extensions/vscode/webviews/homeView/src/components/EasyDeploy.vue +++ b/extensions/vscode/webviews/homeView/src/components/EasyDeploy.vue @@ -140,10 +140,12 @@