From b890a64046f5af63dc64e72c14b116a1fc2e26ed Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Mon, 25 Mar 2024 16:20:51 +0000 Subject: [PATCH 1/5] The in-progress stripes are much more subtle --- .../route.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx index 71b6687bb..bf5098a71 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx @@ -754,7 +754,7 @@ function SpanWithDuration({ > {node.data.isPartial && (
)} From 9ecf07731a4794d30ff8828462801b88692b64e9 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Mon, 25 Mar 2024 16:28:56 +0000 Subject: [PATCH 2/5] v3: small features and fixes for prod infra (#968) * add checkpoint restore events * fix retries.enabledInDev * fix tsconfig paths * fix provider build and dev * update kubernetes provider and fix builds again * upgrade prod base to node 20 * update infra publish workflow * rethrow k8s errors after logging * shorten index container names * fix error type assertion * rename type assertion * remove resource limits for now * add missing run id on create * add push to deploy command for self-hosting * checkpointing fixes * update coordinator image * ensure valid registry login * delete checkpoint archive after successful push * log options on error * structured logs for socket connections * fix structured log merge * exit process after checkpointing * update restore pull secret name * append shortcode to restore names * log handler payload * disable post start lifecycle hook * pass in coordinator host via volume * replace dapi with taskinfo * add missing restore label * don't restart restored containers * remove init container from create * atomic post-completion checkpoints * switch to run id for container names * improve wait accuracy * measure basic checkpoint perf * always log disconnect reason * use system clock to end wait spans * checkpoint readiness and cancel signals * restore from checkpoint events and fix statuses * remove attempt id env var * restore dependencies from events * reconnect wip * lifecycle hooks are back * fix hooks and improve reconnect * make docker send postStart hook * only checkpoint for retry if large delay * fix a few more resume issues * lifecycle hook fixes * skip connection handler when waiting for post start hook --------- Co-authored-by: Eric Allam --- .../{publish-dev.yml => publish-infra.yml} | 27 +- apps/coordinator/Containerfile | 5 +- apps/coordinator/package.json | 3 +- apps/coordinator/src/index.ts | 717 ++++++++++++------ apps/docker-provider/.env.example | 1 + apps/docker-provider/package.json | 2 +- apps/docker-provider/src/index.ts | 145 ++-- apps/kubernetes-provider/.env.example | 7 +- apps/kubernetes-provider/Containerfile | 1 - apps/kubernetes-provider/package.json | 6 +- apps/kubernetes-provider/src/index.ts | 264 ++++--- apps/kubernetes-provider/tsconfig.json | 8 +- apps/webapp/app/services/logger.server.ts | 11 + apps/webapp/app/v3/handleSocketIo.server.ts | 19 +- .../app/v3/marqs/devQueueConsumer.server.ts | 2 +- .../v3/marqs/sharedQueueConsumer.server.ts | 329 ++++---- .../app/v3/services/cancelTaskRun.server.ts | 1 + .../app/v3/services/completeAttempt.server.ts | 100 ++- .../v3/services/createCheckpoint.server.ts | 146 +++- .../createCheckpointRestoreEvent.server.ts | 82 +- .../app/v3/services/indexDeployment.server.ts | 2 +- .../v3/services/restoreCheckpoint.server.ts | 71 +- .../app/v3/services/resumeAttempt.server.ts | 63 +- .../app/v3/services/resumeBatchRun.server.ts | 14 +- .../services/resumeTaskDependency.server.ts | 12 + apps/webapp/app/v3/sharedSocketConnection.ts | 33 +- packages/cli-v3/src/Containerfile.prod | 2 +- packages/cli-v3/src/commands/deploy.ts | 116 ++- .../src/workers/prod/backgroundWorker.ts | 45 +- .../cli-v3/src/workers/prod/entry-point.ts | 511 +++++++++---- packages/core-apps/package.json | 7 +- packages/core-apps/src/http.ts | 8 + packages/core-apps/src/provider.ts | 64 +- packages/core-apps/tsconfig.build.json | 11 - packages/core-apps/tsup.config.ts | 9 - .../core/src/v3/runtime/prodRuntimeManager.ts | 25 +- packages/core/src/v3/schemas/messages.ts | 18 +- packages/core/src/v3/schemas/schemas.ts | 81 +- packages/core/src/v3/zodMessageHandler.ts | 12 +- packages/core/src/v3/zodNamespace.ts | 119 ++- packages/core/src/v3/zodSocket.ts | 49 +- .../migration.sql | 8 + .../migration.sql | 24 + packages/database/prisma/schema.prisma | 10 + packages/trigger-sdk/src/v3/wait.ts | 9 +- pnpm-lock.yaml | 55 +- references/v3-catalog/src/trigger/retries.ts | 2 +- references/v3-catalog/src/trigger/subtasks.ts | 69 +- 48 files changed, 2297 insertions(+), 1028 deletions(-) rename .github/workflows/{publish-dev.yml => publish-infra.yml} (64%) delete mode 100644 packages/core-apps/tsconfig.build.json delete mode 100644 packages/core-apps/tsup.config.ts create mode 100644 packages/database/prisma/migrations/20240318170823_add_image_ref_to_checkpoint/migration.sql create mode 100644 packages/database/prisma/migrations/20240322172035_add_checkpoint_event_to_dependencies/migration.sql diff --git a/.github/workflows/publish-dev.yml b/.github/workflows/publish-infra.yml similarity index 64% rename from .github/workflows/publish-dev.yml rename to .github/workflows/publish-infra.yml index 34afea272..ec67436a6 100644 --- a/.github/workflows/publish-dev.yml +++ b/.github/workflows/publish-infra.yml @@ -1,9 +1,11 @@ -name: "🚢 Publish Container Images (dev)" +name: "🚢 Publish Infra Images" on: push: tags: - - "dev-*" + - "infra-dev-*" + - "infra-test-*" + - "infra-prod-*" paths: - ".github/workflows/publish.yml" - "packages/**" @@ -44,12 +46,21 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Generate build ID + - name: Generate image reference id: prep + # WARNING: This step expects the workflow to have been triggered by a specific tag format of: infra-${env}-* run: | + env=$(echo ${{ github.ref_name }} | cut -d- -f2) sha=${GITHUB_SHA::7} ts=$(date +%s) - echo "BUILD_ID=${{ matrix.package }}-${sha}-${ts}" >> "$GITHUB_OUTPUT" + if [[ "${{ matrix.package }}" == *-provider ]]; then + provider_type=$(echo ${{ matrix.package }} | cut -d- -f1) + repository=provider/${provider_type} + else + repository=${{ matrix.package }} + fi + echo "IMAGE_TAG=${env}-${sha}-${ts}" >> "$GITHUB_OUTPUT" + echo "REPOSITORY=${repository}" >> "$GITHUB_OUTPUT" - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -63,7 +74,7 @@ jobs: - name: 🚢 Build Container Image run: | - docker build -t dev_image -f ./apps/${{ matrix.package }}/Containerfile . + docker build -t infra_image -f ./apps/${{ matrix.package }}/Containerfile . # ..to push image - name: 🐙 Login to GitHub Container Registry @@ -75,9 +86,9 @@ jobs: - name: 🐙 Push to GitHub Container Registry run: | - docker tag dev_image $REGISTRY/$REPOSITORY:$IMAGE_TAG + docker tag infra_image $REGISTRY/$REPOSITORY:$IMAGE_TAG docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG env: REGISTRY: ghcr.io/triggerdotdev - REPOSITORY: dev - IMAGE_TAG: ${{ steps.prep.outputs.BUILD_ID }} + REPOSITORY: ${{ steps.prep.outputs.REPOSITORY }} + IMAGE_TAG: ${{ steps.prep.outputs.IMAGE_TAG }} diff --git a/apps/coordinator/Containerfile b/apps/coordinator/Containerfile index f2ca3b3e6..cd301811b 100644 --- a/apps/coordinator/Containerfile +++ b/apps/coordinator/Containerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:labs -FROM node:18.18.2-bullseye-slim@sha256:21479df46c3173ee0cefc6b264928e10239152c4f74df872ca9369be01a245b7 AS node-18 +FROM node:18-bullseye-slim@sha256:a4edd54dcfdcacc8a4100fee71498e8671d99556a1acf5614539214a70092426 AS node-18 WORKDIR /app @@ -35,7 +35,6 @@ COPY --from=pruner --chown=node:node /app/out/full/ . COPY --from=dev-deps --chown=node:node /app/ . COPY --chown=node:node turbo.json turbo.json -RUN pnpm run -r --filter '@trigger.dev/core*' build RUN pnpm run -r --filter coordinator build:bundle FROM alpine AS cri-tools @@ -58,6 +57,4 @@ COPY --from=builder --chown=node:node /app/apps/coordinator/dist/index.mjs ./ind EXPOSE 8000 -USER node - CMD [ "/usr/bin/dumb-init", "--", "/usr/local/bin/node", "./index.mjs" ] diff --git a/apps/coordinator/package.json b/apps/coordinator/package.json index 4cf789c16..e089175f2 100644 --- a/apps/coordinator/package.json +++ b/apps/coordinator/package.json @@ -6,7 +6,7 @@ "main": "dist/index.cjs", "scripts": { "build": "npm run build:bundle", - "build:bundle": "esbuild src/index.ts --bundle --outfile=dist/index.mjs --platform=node --format=esm --target=esnext --banner:js=\"const require = createRequire(import.meta.url);\"", + "build:bundle": "esbuild src/index.ts --bundle --outfile=dist/index.mjs --platform=node --format=esm --target=esnext --banner:js=\"import { createRequire } from 'module';const require = createRequire(import.meta.url);\"", "build:image": "docker build -f Containerfile . -t coordinator", "dev": "tsx --no-warnings=ExperimentalWarning --require dotenv/config --watch src/index.ts", "start": "tsx src/index.ts", @@ -19,6 +19,7 @@ "@trigger.dev/core": "workspace:*", "@trigger.dev/core-apps": "workspace:*", "execa": "^8.0.1", + "nanoid": "^5.0.6", "prom-client": "^15.1.0", "socket.io": "^4.7.4", "socket.io-client": "^4.7.4" diff --git a/apps/coordinator/src/index.ts b/apps/coordinator/src/index.ts index 9f15f5a03..feb2722ba 100644 --- a/apps/coordinator/src/index.ts +++ b/apps/coordinator/src/index.ts @@ -1,6 +1,6 @@ -import { randomUUID } from "node:crypto"; import { createServer } from "node:http"; import { $ } from "execa"; +import { nanoid } from "nanoid"; import { Server } from "socket.io"; import { CoordinatorToPlatformMessages, @@ -18,8 +18,7 @@ collectDefaultMetrics(); const HTTP_SERVER_PORT = Number(process.env.HTTP_SERVER_PORT || 8020); const NODE_NAME = process.env.NODE_NAME || "coordinator"; -const REGISTRY_FQDN = process.env.REGISTRY_FQDN || "localhost:5000"; -const REPO_NAME = process.env.REPO_NAME || "checkpoints"; +const REGISTRY_HOST = process.env.REGISTRY_HOST || "localhost:5000"; const CHECKPOINT_PATH = process.env.CHECKPOINT_PATH || "/checkpoints"; const REGISTRY_TLS_VERIFY = process.env.REGISTRY_TLS_VERIFY === "false" ? "false" : "true"; @@ -35,12 +34,25 @@ type CheckpointerInitializeReturn = { willSimulate: boolean; }; +type CheckpointAndPushOptions = { + runId: string; + leaveRunning?: boolean; + projectRef: string; + deploymentVersion: string; +}; + +type CheckpointData = { + location: string; + docker: boolean; +}; + class Checkpointer { #initialized = false; #canCheckpoint = false; #dockerMode = !process.env.KUBERNETES_PORT; #logger = new SimpleLogger("[checkptr]"); + #abortControllers = new Map(); constructor(private opts = { forceSimulate: false }) {} @@ -51,26 +63,18 @@ class Checkpointer { this.#logger.log(`${this.#dockerMode ? "Docker" : "Kubernetes"} mode`); - if (this.opts.forceSimulate) { - this.#logger.log( - "Forced simulation enabled. Will simulate regardless of checkpoint support." - ); - } - - try { - await $`criu --version`; - } catch (error) { - this.#logger.error("No checkpoint support: Missing CRIU binary"); - if (this.#dockerMode) { - this.#logger.error("Will simulate instead"); - } - this.#canCheckpoint = false; - this.#initialized = true; - - return this.#getInitializeReturn(); - } - if (this.#dockerMode) { + try { + await $`criu --version`; + } catch (error) { + this.#logger.error("No checkpoint support: Missing CRIU binary"); + this.#logger.error("Will simulate instead"); + this.#canCheckpoint = false; + this.#initialized = true; + + return this.#getInitializeReturn(); + } + try { await $`docker checkpoint`; } catch (error) { @@ -81,12 +85,24 @@ class Checkpointer { this.#canCheckpoint = false; this.#initialized = true; + return this.#getInitializeReturn(); + } + } else { + try { + await $`buildah login --get-login ${REGISTRY_HOST}`; + } catch (error) { + this.#logger.error(`No checkpoint support: Not logged in to registry ${REGISTRY_HOST}`); + this.#canCheckpoint = false; + this.#initialized = true; + return this.#getInitializeReturn(); } } this.#logger.log( - `Full checkpoint support in ${this.#dockerMode ? "docker" : "kubernetes"} mode` + `Full checkpoint support${ + this.#dockerMode && this.opts.forceSimulate ? " with forced simulation enabled." : "!" + }` ); this.#initialized = true; @@ -102,7 +118,60 @@ class Checkpointer { }; } - async checkpointAndPush(podName: string, leaveRunning = false) { + #getImageRef(projectRef: string, deploymentVersion: string, shortCode: string) { + return `${REGISTRY_HOST}/trigger/${projectRef}:${deploymentVersion}.prod-${shortCode}`; + } + + #getExportLocation(projectRef: string, deploymentVersion: string, shortCode: string) { + const basename = `${projectRef}-${deploymentVersion}-${shortCode}`; + + if (this.#dockerMode) { + return basename; + } else { + return `${CHECKPOINT_PATH}/${basename}.tar`; + } + } + + async checkpointAndPush(opts: CheckpointAndPushOptions): Promise { + const start = performance.now(); + logger.log(`checkpointAndPush() start`, { start, opts }); + + const result = await this.#checkpointAndPush(opts); + + const end = performance.now(); + logger.log(`checkpointAndPush() end`, { + start, + end, + diff: end - start, + opts, + success: !!result, + }); + + return result; + } + + isCheckpointing(runId: string) { + return this.#abortControllers.has(runId); + } + + cancelCheckpoint(runId: string) { + const controller = this.#abortControllers.get(runId); + + if (!controller) { + logger.debug("Nothing to cancel", { runId }); + return; + } + + controller.abort("cancelCheckpointing()"); + this.#abortControllers.delete(runId); + } + + async #checkpointAndPush({ + runId, + leaveRunning = true, // This mirrors kubernetes behaviour more accurately + projectRef, + deploymentVersion, + }: CheckpointAndPushOptions): Promise { await this.initialize(); if (!this.#dockerMode && !this.#canCheckpoint) { @@ -110,124 +179,138 @@ class Checkpointer { return; } - try { - const { path } = await this.#checkpointContainer(podName, leaveRunning); - const { tag } = await this.#buildImage(path, podName); - const { destination } = await this.#pushImage(tag); + if (this.#abortControllers.has(runId)) { + logger.error("Checkpoint procedure already in progress", { + options: { + runId, + leaveRunning, + projectRef, + deploymentVersion, + }, + }); + return; + } + const controller = new AbortController(); + this.#abortControllers.set(runId, controller); + + const $$ = $({ signal: controller.signal }); + + try { + const shortCode = nanoid(8); + const imageRef = this.#getImageRef(projectRef, deploymentVersion, shortCode); + const exportLocation = this.#getExportLocation(projectRef, deploymentVersion, shortCode); + + this.#logger.log("Checkpointing:", { + options: { + runId, + leaveRunning, + projectRef, + deploymentVersion, + }, + }); + + const containterName = this.#getRunContainerName(runId); + + // Create checkpoint (docker) if (this.#dockerMode) { - this.#logger.log("checkpoint created:", { podName, path }); - } else { - this.#logger.log("checkpointed and pushed image to:", destination); + try { + if (this.opts.forceSimulate || !this.#canCheckpoint) { + this.#logger.log("Simulating checkpoint"); + this.#logger.debug(await $$`docker pause ${containterName}`); + } else { + if (leaveRunning) { + this.#logger.debug( + await $$`docker checkpoint create --leave-running ${containterName} ${exportLocation}` + ); + } else { + this.#logger.debug( + await $$`docker checkpoint create ${containterName} ${exportLocation}` + ); + } + } + } catch (error: any) { + this.#logger.error(error.stderr); + return; + } + + this.#logger.log("checkpoint created:", { + runId, + location: exportLocation, + }); + + return { + location: exportLocation, + docker: true, + }; + } + + // Create checkpoint (CRI) + if (!this.#canCheckpoint) { + throw new Error("No checkpoint support in kubernetes mode."); + } + + const containerId = this.#logger.debug( + // @ts-expect-error + await $$`crictl ps` + .pipeStdout($$({ stdin: "pipe" })`grep ${containterName}`) + .pipeStdout($$({ stdin: "pipe" })`cut -f1 ${"-d "}`) + ); + + if (!containerId.stdout) { + throw new Error("could not find container id"); + } + + this.#logger.debug(await $$`crictl checkpoint --export=${exportLocation} ${containerId}`); + + // Create image from checkpoint + const container = this.#logger.debug(await $$`buildah from scratch`); + this.#logger.debug(await $$`buildah add ${container} ${exportLocation} /`); + this.#logger.debug( + await $$`buildah config --annotation=io.kubernetes.cri-o.annotations.checkpoint.name=counter ${container}` + ); + this.#logger.debug(await $$`buildah commit ${container} ${imageRef}`); + this.#logger.debug(await $$`buildah rm ${container}`); + + // Push checkpoint image + this.#logger.debug(await $$`buildah push --tls-verify=${REGISTRY_TLS_VERIFY} ${imageRef}`); + + this.#logger.log("Checkpointed and pushed image to:", { location: imageRef }); + + try { + await $$`rm ${exportLocation}`; + this.#logger.log("Deleted checkpoint archive", { exportLocation }); + + // Disabled for now as this will increase restore time by having to pull the image again + // await $`buildah rmi ${imageRef}`; + // this.#logger.log("Deleted checkpoint image", { imageRef }); + } catch (error) { + this.#logger.error("Failed during checkpoint cleanup", { exportLocation }); + this.#logger.debug(error); } return { - path, - tag, - destination: this.#dockerMode ? path : destination, - docker: this.#dockerMode, + location: imageRef, + docker: false, }; } catch (error) { - this.#logger.error("checkpoint failed", error); + this.#logger.error("checkpoint failed", { + options: { + runId, + leaveRunning, + projectRef, + deploymentVersion, + }, + error, + }); return; + } finally { + this.#abortControllers.delete(runId); } } - async #checkpointContainer(podName: string, leaveRunning = false) { - await this.initialize(); - - if (this.#dockerMode) { - this.#logger.log("Checkpointing:", podName); - - const path = randomUUID(); - - try { - if (this.opts.forceSimulate || !this.#canCheckpoint) { - this.#logger.log("Simulating checkpoint"); - this.#logger.debug(await $`docker pause ${podName}`); - } else { - if (leaveRunning) { - this.#logger.debug( - await $`docker checkpoint create --leave-running ${podName} ${path}` - ); - } else { - this.#logger.debug(await $`docker checkpoint create ${podName} ${path}`); - } - } - } catch (error: any) { - this.#logger.error(error.stderr); - } - - return { path }; - } - - if (!this.#canCheckpoint) { - throw new Error("No checkpoint support. Simulation requires docker."); - } - - const containerId = this.#logger.debug( - // @ts-expect-error - await $`crictl ps` - .pipeStdout($({ stdin: "pipe" })`grep ${podName}`) - .pipeStdout($({ stdin: "pipe" })`cut -f1 ${"-d "}`) - ); - - if (!containerId.stdout) { - throw new Error("could not find container id"); - } - - const exportPath = `${CHECKPOINT_PATH}/${podName}.tar`; - - this.#logger.debug(await $`crictl checkpoint --export=${exportPath} ${containerId}`); - - return { - path: exportPath, - }; - } - - async #buildImage(checkpointPath: string, tag: string) { - await this.initialize(); - - if (this.#dockerMode) { - // Nothing to do here - return { tag }; - } - - if (!this.#canCheckpoint) { - throw new Error("No checkpoint support. Simulation requires docker."); - } - - const container = this.#logger.debug(await $`buildah from scratch`); - this.#logger.debug(await $`buildah add ${container} ${checkpointPath} /`); - this.#logger.debug( - await $`buildah config --annotation=io.kubernetes.cri-o.annotations.checkpoint.name=counter ${container}` - ); - this.#logger.debug(await $`buildah commit ${container} ${REGISTRY_FQDN}/${REPO_NAME}:${tag}`); - this.#logger.debug(await $`buildah rm ${container}`); - - return { - tag, - }; - } - - async #pushImage(tag: string) { - await this.initialize(); - - if (this.#dockerMode) { - // Nothing to do here - return { destination: "" }; - } - - if (!this.#canCheckpoint) { - throw new Error("No checkpoint support. Simulation requires docker."); - } - - const destination = `${REGISTRY_FQDN}/${REPO_NAME}:${tag}`; - this.#logger.debug(await $`buildah push --tls-verify=${REGISTRY_TLS_VERIFY} ${destination}`); - - return { - destination, - }; + #getRunContainerName(suffix: string) { + return `task-run-${suffix}`; } } @@ -245,6 +328,11 @@ class TaskCoordinator { typeof PlatformToCoordinatorMessages >; + #checkpointableTasks = new Map< + string, + { resolve: (value: void) => void; reject: (err?: any) => void } + >(); + constructor( private port: number, private host = "0.0.0.0" @@ -281,47 +369,78 @@ class TaskCoordinator { serverMessages: PlatformToCoordinatorMessages, authToken: PLATFORM_SECRET, handlers: { - RESUME: async (message) => { - const taskSocket = await this.#getAttemptSocket(message.attemptId); + RESUME_AFTER_DEPENDENCY: async (message) => { + const taskSocket = await this.#getAttemptSocket(message.attemptFriendlyId); if (!taskSocket) { - logger.log("Socket for attempt not found", { attemptId: message.attemptId }); + logger.log("Socket for attempt not found", { + attemptFriendlyId: message.attemptFriendlyId, + }); return; } - taskSocket.emit("RESUME", message); + // In case the task resumed faster than we could checkpoint + this.#cancelCheckpoint(message.runId); + + taskSocket.emit("RESUME_AFTER_DEPENDENCY", message); }, RESUME_AFTER_DURATION: async (message) => { - const taskSocket = await this.#getAttemptSocket(message.attemptId); + const taskSocket = await this.#getAttemptSocket(message.attemptFriendlyId); if (!taskSocket) { - logger.log("Socket for attempt not found", { attemptId: message.attemptId }); + logger.log("Socket for attempt not found", { + attemptFriendlyId: message.attemptFriendlyId, + }); return; } taskSocket.emit("RESUME_AFTER_DURATION", message); }, REQUEST_ATTEMPT_CANCELLATION: async (message) => { - const taskSocket = await this.#getAttemptSocket(message.attemptId); + const taskSocket = await this.#getAttemptSocket(message.attemptFriendlyId); if (!taskSocket) { - logger.log("Socket for attempt not found", { attemptId: message.attemptId }); + logger.log("Socket for attempt not found", { + attemptFriendlyId: message.attemptFriendlyId, + }); return; } taskSocket.emit("REQUEST_ATTEMPT_CANCELLATION", message); }, + READY_FOR_RETRY: async (message) => { + const taskSocket = await this.#getRunSocket(message.runId); + + if (!taskSocket) { + logger.log("Socket for attempt not found", { + runId: message.runId, + }); + return; + } + + taskSocket.emit("READY_FOR_RETRY", message); + }, }, }); return platformConnection; } - async #getAttemptSocket(attemptId: string) { + async #getRunSocket(runId: string) { const sockets = await this.#prodWorkerNamespace.fetchSockets(); for (const socket of sockets) { - if (socket.data.attemptId === attemptId) { + if (socket.data.runId === runId) { + return socket; + } + } + } + + async #getAttemptSocket(attemptFriendlyId: string) { + const sockets = await this.#prodWorkerNamespace.fetchSockets(); + + for (const socket of sockets) { + if (socket.data.attemptFriendlyId === attemptFriendlyId) { return socket; } } @@ -335,14 +454,22 @@ class TaskCoordinator { serverMessages: CoordinatorToProdWorkerMessages, socketData: ProdWorkerSocketData, postAuth: async (socket, next, logger) => { - function setSocketDataFromHeader(dataKey: keyof typeof socket.data, headerName: string) { + function setSocketDataFromHeader( + dataKey: keyof typeof socket.data, + headerName: string, + required: boolean = true + ) { const value = socket.handshake.headers[headerName]; - if (!value) { - logger(`missing required header: ${headerName}`); + + if (value) { + socket.data[dataKey] = Array.isArray(value) ? value[0] : value; + return; + } + + if (required) { + logger.error("missing required header", { headerName }); throw new Error("missing header"); } - 0; - socket.data[dataKey] = Array.isArray(value) ? value[0] : value; } try { @@ -350,27 +477,64 @@ class TaskCoordinator { setSocketDataFromHeader("contentHash", "x-trigger-content-hash"); setSocketDataFromHeader("projectRef", "x-trigger-project-ref"); setSocketDataFromHeader("runId", "x-trigger-run-id"); - setSocketDataFromHeader("attemptId", "x-trigger-attempt-id"); + setSocketDataFromHeader("attemptFriendlyId", "x-trigger-attempt-friendly-id", false); setSocketDataFromHeader("envId", "x-trigger-env-id"); setSocketDataFromHeader("deploymentId", "x-trigger-deployment-id"); + setSocketDataFromHeader("deploymentVersion", "x-trigger-deployment-version"); } catch (error) { - logger(error); + logger.error("setSocketDataFromHeader error", { error }); socket.disconnect(true); return; } - logger("success", socket.data); + logger.debug("success", socket.data); next(); }, onConnection: async (socket, handler, sender) => { const logger = new SimpleLogger(`[prod-worker][${socket.id}]`); + const checkpointInProgress = () => { + return this.#checkpointableTasks.has(socket.data.runId); + }; + + const readyToCheckpoint = async (): Promise< + { success: true } | { success: false; reason?: string } + > => { + if (checkpointInProgress()) { + return { + success: false, + reason: "checkpoint in progress", + }; + } + + const isCheckpointable = new Promise((resolve, reject) => { + // We set a reasonable timeout to prevent waiting forever + // TODO: We may also want to cancel the task as it's unlikely to recover + setTimeout(() => reject("timeout"), 10_000); + + this.#checkpointableTasks.set(socket.data.runId, { resolve, reject }); + }); + + try { + await isCheckpointable; + this.#checkpointableTasks.delete(socket.data.runId); + + return { + success: true, + }; + } catch (error) { + logger.error("Error while waiting for checkpointable state", { error }); + + return { + success: false, + reason: typeof error === "string" ? error : "unknown", + }; + } + }; + this.#platformSocket?.send("LOG", { - metadata: { - projectRef: socket.data.projectRef, - attemptId: socket.data.attemptId, - }, + metadata: socket.data, text: "connected", }); @@ -381,7 +545,7 @@ class TaskCoordinator { this.#platformSocket?.send("LOG", { version: "v1", - metadata: { attemptId: socket.data.attemptId }, + metadata: socket.data, text: message.text, }); }); @@ -389,67 +553,64 @@ class TaskCoordinator { socket.on("READY_FOR_EXECUTION", async (message) => { logger.log("[READY_FOR_EXECUTION]", message); - const executionAck = await this.#platformSocket?.sendWithAck("READY_FOR_EXECUTION", { - version: "v1", - attemptId: message.attemptId, - runId: message.runId, - }); + try { + const executionAck = await this.#platformSocket?.sendWithAck( + "READY_FOR_EXECUTION", + message + ); - if (!executionAck) { - logger.error("no execution ack", { attemptId: socket.data.attemptId }); + if (!executionAck) { + logger.error("no execution ack", { runId: socket.data.runId }); - socket.emit("REQUEST_EXIT", { + socket.emit("REQUEST_EXIT", { + version: "v1", + }); + + return; + } + + if (!executionAck.success) { + logger.error("failed to get execution payload", { runId: socket.data.runId }); + + socket.emit("REQUEST_EXIT", { + version: "v1", + }); + + return; + } + + socket.emit("EXECUTE_TASK_RUN", { version: "v1", + executionPayload: executionAck.payload, }); - return; + socket.data.attemptFriendlyId = executionAck.payload.execution.attempt.id; + } catch (error) { + logger.error("Error", { error }); } - - if (!executionAck.success) { - logger.error("failed to get execution payload", { attemptId: socket.data.attemptId }); - - socket.emit("REQUEST_EXIT", { - version: "v1", - }); - - return; - } - - socket.emit("EXECUTE_TASK_RUN", { - version: "v1", - executionPayload: executionAck.payload, - }); }); socket.on("READY_FOR_RESUME", async (message) => { logger.log("[READY_FOR_RESUME]", message); + + socket.data.attemptFriendlyId = message.attemptFriendlyId; this.#platformSocket?.send("READY_FOR_RESUME", message); }); socket.on("TASK_RUN_COMPLETED", async ({ completion, execution }, callback) => { logger.log("completed task", { completionId: completion.id }); - const sendCompletionToPlatform = () => { + const completeWithoutCheckpoint = (shouldExit: boolean) => { this.#platformSocket?.send("TASK_RUN_COMPLETED", { version: "v1", execution, completion, }); - }; - - const confirmCompletion = ({ - didCheckpoint, - shouldExit, - }: { - didCheckpoint: boolean; - shouldExit: boolean; - }) => { - sendCompletionToPlatform(); - callback({ didCheckpoint, shouldExit }); + callback({ willCheckpointAndRestore: false, shouldExit }); }; if (completion.ok) { - confirmCompletion({ didCheckpoint: false, shouldExit: true }); + completeWithoutCheckpoint(true); return; } @@ -457,12 +618,17 @@ class TaskCoordinator { completion.error.type === "INTERNAL_ERROR" && completion.error.code === "TASK_RUN_CANCELLED" ) { - confirmCompletion({ didCheckpoint: false, shouldExit: true }); + completeWithoutCheckpoint(true); return; } if (completion.retry === undefined) { - confirmCompletion({ didCheckpoint: false, shouldExit: true }); + completeWithoutCheckpoint(true); + return; + } + + if (completion.retry.delay < 10_000) { + completeWithoutCheckpoint(false); return; } @@ -471,35 +637,77 @@ class TaskCoordinator { const willCheckpointAndRestore = canCheckpoint || willSimulate; if (!willCheckpointAndRestore) { - confirmCompletion({ didCheckpoint: false, shouldExit: false }); + completeWithoutCheckpoint(false); return; } - const checkpoint = await this.#checkpointer.checkpointAndPush(socket.data.podName); + // The worker will then put itself in a checkpointable state + callback({ willCheckpointAndRestore: true, shouldExit: false }); - if (!checkpoint) { - logger.error("Failed to checkpoint", { podName: socket.data.podName }); - confirmCompletion({ didCheckpoint: false, shouldExit: false }); + const ready = await readyToCheckpoint(); + + if (!ready.success) { + logger.error("Failed to become checkpointable", { + runId: socket.data.runId, + reason: ready.reason, + }); return; } - this.#platformSocket?.send("CHECKPOINT_CREATED", { - version: "v1", - attemptId: socket.data.attemptId, - docker: checkpoint.docker, - location: checkpoint.destination, - reason: { - type: "RETRYING_AFTER_FAILURE", - attemptNumber: execution.attempt.number, - }, + const checkpoint = await this.#checkpointer.checkpointAndPush({ + runId: socket.data.runId, + projectRef: socket.data.projectRef, + deploymentVersion: socket.data.deploymentVersion, }); - confirmCompletion({ didCheckpoint: true, shouldExit: false }); + if (!checkpoint) { + logger.error("Failed to checkpoint", { runId: socket.data.runId }); + completeWithoutCheckpoint(false); + return; + } + + this.#platformSocket?.send("TASK_RUN_COMPLETED", { + version: "v1", + execution, + completion, + checkpoint, + }); + + if (!checkpoint.docker || !willSimulate) { + socket.emit("REQUEST_EXIT", { + version: "v1", + }); + } + }); + + socket.on("READY_FOR_CHECKPOINT", async (message) => { + logger.log("[READY_FOR_CHECKPOINT]", message); + + const checkpointable = this.#checkpointableTasks.get(socket.data.runId); + + if (!checkpointable) { + logger.error("No checkpoint scheduled", { runId: socket.data.runId }); + return; + } + + checkpointable.resolve(); + }); + + socket.on("CANCEL_CHECKPOINT", async (message) => { + logger.log("[CANCEL_CHECKPOINT]", message); + + this.#cancelCheckpoint(socket.data.runId); }); socket.on("WAIT_FOR_DURATION", async (message, callback) => { logger.log("[WAIT_FOR_DURATION]", message); + if (checkpointInProgress()) { + logger.error("Checkpoint already in progress", { runId: socket.data.runId }); + callback({ willCheckpointAndRestore: false }); + return; + } + const { canCheckpoint, willSimulate } = await this.#checkpointer.initialize(); const willCheckpointAndRestore = canCheckpoint || willSimulate; @@ -510,26 +718,43 @@ class TaskCoordinator { return; } - // Wait for attempt to reach checkpointable state - // TODO: The worker should let us know when to checkpoint so we don't have to guess - await new Promise((resolve) => setTimeout(resolve, 2_000)); + const ready = await readyToCheckpoint(); - const checkpoint = await this.#checkpointer.checkpointAndPush(socket.data.podName); + if (!ready.success) { + logger.error("Failed to become checkpointable", { + runId: socket.data.runId, + reason: ready.reason, + }); + return; + } + + const checkpoint = await this.#checkpointer.checkpointAndPush({ + runId: socket.data.runId, + projectRef: socket.data.projectRef, + deploymentVersion: socket.data.deploymentVersion, + }); if (!checkpoint) { - logger.error("Failed to checkpoint", { podName: socket.data.podName }); - // TODO: We have to let the worker know about failures so it can use its own timer + // The task container will keep running until the wait duration has elapsed + logger.error("Failed to checkpoint", { runId: socket.data.runId }); return; } + if (!checkpoint.docker || !willSimulate) { + socket.emit("REQUEST_EXIT", { + version: "v1", + }); + } + this.#platformSocket?.send("CHECKPOINT_CREATED", { version: "v1", - attemptId: socket.data.attemptId, + attemptFriendlyId: message.attemptFriendlyId, docker: checkpoint.docker, - location: checkpoint.destination, + location: checkpoint.location, reason: { type: "WAIT_FOR_DURATION", ms: message.ms, + now: message.now, }, }); }); @@ -547,21 +772,31 @@ class TaskCoordinator { return; } - const checkpoint = await this.#checkpointer.checkpointAndPush(socket.data.podName); + const checkpoint = await this.#checkpointer.checkpointAndPush({ + runId: socket.data.runId, + projectRef: socket.data.projectRef, + deploymentVersion: socket.data.deploymentVersion, + }); if (!checkpoint) { - logger.error("Failed to checkpoint", { podName: socket.data.podName }); + logger.error("Failed to checkpoint", { runId: socket.data.runId }); return; } + if (!checkpoint.docker || !willSimulate) { + socket.emit("REQUEST_EXIT", { + version: "v1", + }); + } + this.#platformSocket?.send("CHECKPOINT_CREATED", { version: "v1", - attemptId: socket.data.attemptId, + attemptFriendlyId: message.attemptFriendlyId, docker: checkpoint.docker, - location: checkpoint.destination, + location: checkpoint.location, reason: { type: "WAIT_FOR_TASK", - id: message.id, + friendlyId: message.friendlyId, }, }); }); @@ -579,21 +814,32 @@ class TaskCoordinator { return; } - const checkpoint = await this.#checkpointer.checkpointAndPush(socket.data.podName); + const checkpoint = await this.#checkpointer.checkpointAndPush({ + runId: socket.data.runId, + projectRef: socket.data.projectRef, + deploymentVersion: socket.data.deploymentVersion, + }); if (!checkpoint) { - logger.error("Failed to checkpoint", { podName: socket.data.podName }); + logger.error("Failed to checkpoint", { runId: socket.data.runId }); return; } + if (!checkpoint.docker || !willSimulate) { + socket.emit("REQUEST_EXIT", { + version: "v1", + }); + } + this.#platformSocket?.send("CHECKPOINT_CREATED", { version: "v1", - attemptId: socket.data.attemptId, + attemptFriendlyId: message.attemptFriendlyId, docker: checkpoint.docker, - location: checkpoint.destination, + location: checkpoint.location, reason: { type: "WAIT_FOR_BATCH", - id: message.id, + batchFriendlyId: message.batchFriendlyId, + runFriendlyIds: message.runFriendlyIds, }, }); }); @@ -632,10 +878,7 @@ class TaskCoordinator { }, onDisconnect: async (socket, handler, sender, logger) => { this.#platformSocket?.send("LOG", { - metadata: { - projectRef: socket.data.projectRef, - attemptId: socket.data.attemptId, - }, + metadata: socket.data, text: "disconnect", }); }, @@ -649,6 +892,18 @@ class TaskCoordinator { return provider; } + #cancelCheckpoint(runId: string) { + const checkpointWait = this.#checkpointableTasks.get(runId); + + if (checkpointWait) { + // Stop waiting for task to reach checkpointable state + checkpointWait.reject("Checkpoint cancelled"); + } + + // Cancel checkpointing procedure + this.#checkpointer.cancelCheckpoint(runId); + } + #createHttpServer() { const httpServer = createServer(async (req, res) => { logger.log(`[${req.method}]`, req.url); @@ -667,7 +922,7 @@ class TaskCoordinator { } case "/checkpoint": { const body = await getTextBody(req); - await this.#checkpointer.checkpointAndPush(body); + // await this.#checkpointer.checkpointAndPush(body); return reply.text(`sent restore request: ${body}`); } default: { diff --git a/apps/docker-provider/.env.example b/apps/docker-provider/.env.example index cdf3cf9cc..075b6823a 100644 --- a/apps/docker-provider/.env.example +++ b/apps/docker-provider/.env.example @@ -2,6 +2,7 @@ HTTP_SERVER_PORT=8050 PLATFORM_WS_PORT=3030 PLATFORM_SECRET=provider-secret + # Use this if you are on macOS # COORDINATOR_HOST="host.docker.internal" # OTEL_EXPORTER_OTLP_ENDPOINT="http://host.docker.internal:4318" \ No newline at end of file diff --git a/apps/docker-provider/package.json b/apps/docker-provider/package.json index 1b39e0026..59a1d522b 100644 --- a/apps/docker-provider/package.json +++ b/apps/docker-provider/package.json @@ -6,7 +6,7 @@ "main": "dist/index.cjs", "scripts": { "build": "npm run build:bundle", - "build:bundle": "esbuild src/index.ts --bundle --outfile=dist/index.mjs --platform=node --format=esm --target=esnext --banner:js=\"const require = createRequire(import.meta.url);\"", + "build:bundle": "esbuild src/index.ts --bundle --outfile=dist/index.mjs --platform=node --format=esm --target=esnext --banner:js=\"import { createRequire } from 'module';const require = createRequire(import.meta.url);\"", "build:image": "docker build -f Containerfile . -t docker-provider", "dev": "tsx --no-warnings=ExperimentalWarning --require dotenv/config --watch src/index.ts", "start": "tsx src/index.ts", diff --git a/apps/docker-provider/src/index.ts b/apps/docker-provider/src/index.ts index 610a03cab..7fed78137 100644 --- a/apps/docker-provider/src/index.ts +++ b/apps/docker-provider/src/index.ts @@ -1,6 +1,13 @@ import { $, type ExecaChildProcess, execa } from "execa"; -import { Machine } from "@trigger.dev/core/v3"; -import { SimpleLogger, TaskOperations, ProviderShell } from "@trigger.dev/core-apps"; +import { + SimpleLogger, + TaskOperations, + ProviderShell, + TaskOperationsRestoreOptions, + TaskOperationsCreateOptions, + TaskOperationsIndexOptions, +} from "@trigger.dev/core-apps"; +import { setTimeout } from "node:timers/promises"; const MACHINE_NAME = process.env.MACHINE_NAME || "local"; const COORDINATOR_PORT = process.env.COORDINATOR_PORT || 8020; @@ -72,18 +79,12 @@ class DockerTaskOperations implements TaskOperations { }; } - async index(opts: { - contentHash: string; - imageTag: string; - envId: string; - apiKey: string; - apiUrl: string; - }) { + async index(opts: TaskOperationsIndexOptions) { await this.#initialize(); - const containerName = this.#getIndexContainerName(opts.contentHash); + const containerName = this.#getIndexContainerName(opts.shortCode); - logger.log(`Indexing task ${opts.imageTag}`, { + logger.log(`Indexing task ${opts.imageRef}`, { host: COORDINATOR_HOST, port: COORDINATOR_PORT, }); @@ -94,15 +95,16 @@ class DockerTaskOperations implements TaskOperations { "run", "--network=host", "--rm", + `--env=INDEX_TASKS=true`, `--env=TRIGGER_SECRET_KEY=${opts.apiKey}`, `--env=TRIGGER_API_URL=${opts.apiUrl}`, + `--env=TRIGGER_ENV_ID=${opts.envId}`, + `--env=OTEL_EXPORTER_OTLP_ENDPOINT=${OTEL_EXPORTER_OTLP_ENDPOINT}`, + `--env=POD_NAME=${containerName}`, `--env=COORDINATOR_HOST=${COORDINATOR_HOST}`, `--env=COORDINATOR_PORT=${COORDINATOR_PORT}`, - `--env=POD_NAME=${containerName}`, - `--env=TRIGGER_ENV_ID=${opts.envId}`, - `--env=INDEX_TASKS=true`, `--name=${containerName}`, - `${opts.imageTag}`, + `${opts.imageRef}`, ]) ); } catch (error: any) { @@ -117,21 +119,13 @@ class DockerTaskOperations implements TaskOperations { stdout: error.stdout, stderr: error.stderr, }); - - throw new Error(`Index failed with: ${error.stderr || error.stdout}`); } } - async create(opts: { - runId: string; - attemptId: string; - image: string; - machine: Machine; - envId: string; - }) { + async create(opts: TaskOperationsCreateOptions) { await this.#initialize(); - const containerName = this.#getRunContainerName(opts.attemptId); + const containerName = this.#getRunContainerName(opts.runId); try { logger.debug( @@ -139,13 +133,12 @@ class DockerTaskOperations implements TaskOperations { "run", "--network=host", "--detach", - `--env=OTEL_EXPORTER_OTLP_ENDPOINT=${OTEL_EXPORTER_OTLP_ENDPOINT}`, - `--env=COORDINATOR_HOST=${COORDINATOR_HOST}`, - `--env=COORDINATOR_PORT=${COORDINATOR_PORT}`, - `--env=POD_NAME=${containerName}`, `--env=TRIGGER_ENV_ID=${opts.envId}`, `--env=TRIGGER_RUN_ID=${opts.runId}`, - `--env=TRIGGER_ATTEMPT_ID=${opts.attemptId}`, + `--env=OTEL_EXPORTER_OTLP_ENDPOINT=${OTEL_EXPORTER_OTLP_ENDPOINT}`, + `--env=POD_NAME=${containerName}`, + `--env=COORDINATOR_HOST=${COORDINATOR_HOST}`, + `--env=COORDINATOR_PORT=${COORDINATOR_PORT}`, `--name=${containerName}`, `${opts.image}`, ]) @@ -162,30 +155,24 @@ class DockerTaskOperations implements TaskOperations { stdout: error.stdout, stderr: error.stderr, }); - - throw new Error(`Create failed with: ${error.stderr || error.stdout}`); } } - async restore(opts: { - runId: string; - attemptId: string; - checkpointRef: string; - machine: Machine; - }) { + async restore(opts: TaskOperationsRestoreOptions) { await this.#initialize(); - const containerName = this.#getRunContainerName(opts.attemptId); + const containerName = this.#getRunContainerName(opts.runId); if (!this.#canCheckpoint || this.opts.forceSimulate) { logger.log("Simulating restore"); - const { exitCode } = logger.debug(await $`docker unpause ${containerName}`); + const unpause = logger.debug(await $`docker unpause ${containerName}`); - if (exitCode !== 0) { + if (unpause.exitCode !== 0) { throw new Error("docker unpause command failed"); } + await this.#sendPostStart(containerName); return; } @@ -196,6 +183,8 @@ class DockerTaskOperations implements TaskOperations { if (exitCode !== 0) { throw new Error("docker start command failed"); } + + await this.#sendPostStart(containerName); } async delete(opts: { runId: string }) { @@ -210,12 +199,61 @@ class DockerTaskOperations implements TaskOperations { logger.log("noop: get"); } - #getIndexContainerName(contentHash: string) { - return `task-index-${contentHash}`; + #getIndexContainerName(suffix: string) { + return `task-index-${suffix}`; } - #getRunContainerName(attemptId: string) { - return `task-run-${attemptId}`; + #getRunContainerName(suffix: string) { + return `task-run-${suffix}`; + } + + async #sendPostStart(containerName: string): Promise { + // We first get the correct port, which is random during dev as we run with host networking and need to avoid clashes + // FIXME: Skip this in prod + const logs = logger.debug(await $`docker logs ${containerName}`); + const matches = logs.stdout.match(/http server listening on port (?[0-9]+)/); + + const port = Number(matches?.groups?.port); + + if (!port) { + throw new Error("failed to extract port from logs"); + } + + try { + logger.debug(await this.#runLifecycleCommand(containerName, port, "postStart", "restore")); + } catch (error) { + logger.error("postStart error", { error }); + throw new Error("postStart command failed"); + } + } + + async #runLifecycleCommand( + containerName: string, + port: number, + type: "postStart" | "preStop", + cause: "index" | "create" | "restore", + retryCount = 0 + ): Promise { + try { + return await execa("docker", [ + "exec", + containerName, + "wget", + "-q", + "-O-", + `127.0.0.1:${port}/${type}?cause=${cause}`, + ]); + } catch (error: any) { + if (retryCount < 6) { + logger.debug("retriable postStart error", { retryCount, message: error?.message }); + await setTimeout(exponentialBackoff(retryCount + 1, 2, 50, 1150, 50)); + + return this.#runLifecycleCommand(containerName, port, type, cause, retryCount + 1); + } + + logger.error("final postStart error", { message: error?.message }); + throw new Error(`postStart command failed after ${retryCount - 1} retries`); + } } } @@ -225,3 +263,20 @@ const provider = new ProviderShell({ }); provider.listen(); + +function exponentialBackoff( + retryCount: number, + exponential: number, + minDelay: number, + maxDelay: number, + jitter: number +): number { + // Calculate the delay using the exponential backoff formula + const delay = Math.min(Math.pow(exponential, retryCount) * minDelay, maxDelay); + + // Calculate the jitter + const jitterValue = Math.random() * jitter; + + // Return the calculated delay with jitter + return delay + jitterValue; +} diff --git a/apps/kubernetes-provider/.env.example b/apps/kubernetes-provider/.env.example index 352a6ca8e..10949a807 100644 --- a/apps/kubernetes-provider/.env.example +++ b/apps/kubernetes-provider/.env.example @@ -1,7 +1,8 @@ HTTP_SERVER_PORT=8060 -PLATFORM_WS_PORT=8003 +PLATFORM_WS_PORT=3030 PLATFORM_SECRET=provider-secret -REGISTRY_FQDN=docker.io -REPO_NAME=task \ No newline at end of file +# Use this if you are on macOS +# COORDINATOR_HOST="host.docker.internal" +# OTEL_EXPORTER_OTLP_ENDPOINT="http://host.docker.internal:4318" \ No newline at end of file diff --git a/apps/kubernetes-provider/Containerfile b/apps/kubernetes-provider/Containerfile index d9630c5a3..f9fad85f4 100644 --- a/apps/kubernetes-provider/Containerfile +++ b/apps/kubernetes-provider/Containerfile @@ -31,7 +31,6 @@ COPY --from=pruner --chown=node:node /app/out/full/ . COPY --from=dev-deps --chown=node:node /app/ . COPY --chown=node:node turbo.json turbo.json -RUN pnpm run -r --filter '@trigger.dev/core*' build RUN pnpm run -r --filter kubernetes-provider build:bundle FROM base AS runner diff --git a/apps/kubernetes-provider/package.json b/apps/kubernetes-provider/package.json index 92526c07c..f36a6c098 100644 --- a/apps/kubernetes-provider/package.json +++ b/apps/kubernetes-provider/package.json @@ -4,10 +4,12 @@ "version": "0.0.1", "description": "", "main": "dist/index.cjs", - "type": "module", "scripts": { "build": "npm run build:bundle", - "build:bundle": "esbuild src/index.ts --bundle --outfile=dist/index.mjs --platform=node --format=esm --target=esnext --banner:js=\"const require = createRequire(import.meta.url);\"", + "build:bundle": "esbuild src/index.ts --bundle --outfile=dist/index.mjs --platform=node --format=esm --target=esnext --banner:js=\"import { createRequire } from 'module';const require = createRequire(import.meta.url);\"", + "build:image": "docker build -f Containerfile . -t kubernetes-provider", + "dev": "tsx --no-warnings=ExperimentalWarning --require dotenv/config --watch src/index.ts", + "start": "tsx src/index.ts", "typecheck": "tsc --noEmit" }, "keywords": [], diff --git a/apps/kubernetes-provider/src/index.ts b/apps/kubernetes-provider/src/index.ts index c790497b4..5b4d290b6 100644 --- a/apps/kubernetes-provider/src/index.ts +++ b/apps/kubernetes-provider/src/index.ts @@ -1,17 +1,21 @@ -import { randomUUID } from "node:crypto"; -import k8s, { BatchV1Api, CoreV1Api, V1Job, V1Pod } from "@kubernetes/client-node"; -import { Machine } from "@trigger.dev/core/v3"; -import { ProviderShell, SimpleLogger, TaskOperations } from "@trigger.dev/core-apps"; +import * as k8s from "@kubernetes/client-node"; +import { + ProviderShell, + SimpleLogger, + TaskOperations, + TaskOperationsCreateOptions, + TaskOperationsIndexOptions, + TaskOperationsRestoreOptions, +} from "@trigger.dev/core-apps"; +import { randomUUID } from "crypto"; const RUNTIME_ENV = process.env.KUBERNETES_PORT ? "kubernetes" : "local"; -const NODE_NAME = process.env.NODE_NAME || "some-node"; +const NODE_NAME = process.env.NODE_NAME || "local"; const OTEL_EXPORTER_OTLP_ENDPOINT = process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318"; -const REGISTRY_FQDN = process.env.REGISTRY_FQDN || "localhost:5000"; -const REPO_NAME = process.env.REPO_NAME || "test"; - const logger = new SimpleLogger(`[${NODE_NAME}]`); +logger.log(`running in ${RUNTIME_ENV} mode`); type Namespace = { metadata: { @@ -22,8 +26,8 @@ type Namespace = { class KubernetesTaskOperations implements TaskOperations { #namespace: Namespace; #k8sApi: { - core: CoreV1Api; - batch: BatchV1Api; + core: k8s.CoreV1Api; + batch: k8s.BatchV1Api; }; constructor(namespace = "default") { @@ -36,15 +40,16 @@ class KubernetesTaskOperations implements TaskOperations { this.#k8sApi = this.#createK8sApi(); } - async index(opts: { contentHash: string; imageTag: string; envId: string }) { + async index(opts: TaskOperationsIndexOptions) { await this.#createJob( { metadata: { - name: `task-index-${opts.contentHash}`, + name: this.#getIndexContainerName(opts.shortCode), namespace: this.#namespace.metadata.name, }, spec: { completions: 1, + backoffLimit: 0, ttlSecondsAfterFinished: 300, template: { metadata: { @@ -61,19 +66,19 @@ class KubernetesTaskOperations implements TaskOperations { ], containers: [ { - name: opts.contentHash, - image: opts.imageTag, + name: this.#getIndexContainerName(opts.shortCode), + image: opts.imageRef, ports: [ { containerPort: 8000, }, ], - resources: { - limits: { - cpu: "100m", - memory: "50Mi", - }, - }, + // resources: { + // limits: { + // cpu: "100m", + // memory: "50Mi", + // }, + // }, env: [ { name: "DEBUG", @@ -83,6 +88,14 @@ class KubernetesTaskOperations implements TaskOperations { name: "INDEX_TASKS", value: "true", }, + { + name: "TRIGGER_SECRET_KEY", + value: opts.apiKey, + }, + { + name: "TRIGGER_API_URL", + value: opts.apiUrl, + }, { name: "TRIGGER_ENV_ID", value: opts.envId, @@ -130,11 +143,11 @@ class KubernetesTaskOperations implements TaskOperations { ); } - async create(opts: { attemptId: string; image: string; machine: Machine; envId: string }) { + async create(opts: TaskOperationsCreateOptions) { await this.#createPod( { metadata: { - name: `task-run-${opts.attemptId}-${randomUUID().slice(0, 5)}`, + name: this.#getRunContainerName(opts.runId), namespace: this.#namespace.metadata.name, labels: { app: "task-run", @@ -149,7 +162,7 @@ class KubernetesTaskOperations implements TaskOperations { ], containers: [ { - name: opts.attemptId, + name: this.#getRunContainerName(opts.runId), image: opts.image, ports: [ { @@ -159,18 +172,38 @@ class KubernetesTaskOperations implements TaskOperations { // resources: { // limits: opts.machine, // }, + lifecycle: { + postStart: { + exec: { + command: this.#getLifecycleCommand("postStart", "create"), + }, + }, + preStop: { + exec: { + command: this.#getLifecycleCommand("preStop", "create"), + }, + }, + }, env: [ { name: "DEBUG", value: "true", }, + { + name: "HTTP_SERVER_PORT", + value: "8000", + }, { name: "TRIGGER_ENV_ID", value: opts.envId, }, { - name: "TRIGGER_ATTEMPT_ID", - value: opts.attemptId, + name: "TRIGGER_RUN_ID", + value: opts.runId, + }, + { + name: "TRIGGER_WORKER_VERSION", + value: opts.version, }, { name: "OTEL_EXPORTER_OTLP_ENDPOINT", @@ -201,6 +234,18 @@ class KubernetesTaskOperations implements TaskOperations { }, }, ], + volumeMounts: [ + { + name: "taskinfo", + mountPath: "/etc/taskinfo", + }, + ], + }, + ], + volumes: [ + { + name: "taskinfo", + emptyDir: {}, }, ], }, @@ -209,37 +254,56 @@ class KubernetesTaskOperations implements TaskOperations { ); } - async restore(opts: { - attemptId: string; - runId: string; - image: string; - name: string; - checkpointId: string; - machine: Machine; - }) { + async restore(opts: TaskOperationsRestoreOptions) { await this.#createPod( { metadata: { - name: opts.name, + name: `${this.#getRunContainerName(opts.runId)}-${randomUUID().slice(0, 8)}`, namespace: this.#namespace.metadata.name, + labels: { + app: "task-run", + }, }, spec: { + restartPolicy: "Never", imagePullSecrets: [ { - name: "regcred", + name: "registry-trigger", }, ], initContainers: [ { name: "pull-base-image", - image: this.#getRestoreImage(opts.runId, opts.checkpointId), + image: opts.imageRef, command: ["sleep", "0"], }, + { + name: "populate-taskinfo", + image: "busybox", + command: ["/bin/sh", "-c"], + args: ["printenv COORDINATOR_HOST | tee /etc/taskinfo/coordinator-host"], + env: [ + { + name: "COORDINATOR_HOST", + valueFrom: { + fieldRef: { + fieldPath: "status.hostIP", + }, + }, + }, + ], + volumeMounts: [ + { + name: "taskinfo", + mountPath: "/etc/taskinfo", + }, + ], + }, ], containers: [ { - name: opts.runId, - image: this.#getImageFromRunId(opts.runId), + name: this.#getRunContainerName(opts.runId), + image: opts.checkpointRef, ports: [ { containerPort: 8000, @@ -250,44 +314,30 @@ class KubernetesTaskOperations implements TaskOperations { // }, lifecycle: { postStart: { - httpGet: { - path: "/connect", - port: 8000, + exec: { + command: this.#getLifecycleCommand("postStart", "restore"), + }, + }, + preStop: { + exec: { + command: this.#getLifecycleCommand("preStop", "restore"), }, }, }, - env: [ + volumeMounts: [ { - name: "DEBUG", - value: "true", - }, - { - name: "POD_NAME", - valueFrom: { - fieldRef: { - fieldPath: "metadata.name", - }, - }, - }, - { - name: "COORDINATOR_HOST", - valueFrom: { - fieldRef: { - fieldPath: "status.hostIP", - }, - }, - }, - { - name: "NODE_NAME", - valueFrom: { - fieldRef: { - fieldPath: "spec.nodeName", - }, - }, + name: "taskinfo", + mountPath: "/etc/taskinfo", }, ], }, ], + volumes: [ + { + name: "taskinfo", + emptyDir: {}, + }, + ], }, }, this.#namespace @@ -296,7 +346,7 @@ class KubernetesTaskOperations implements TaskOperations { async delete(opts: { runId: string }) { await this.#deletePod({ - podName: opts.runId, + runId: opts.runId, namespace: this.#namespace, }); } @@ -305,12 +355,16 @@ class KubernetesTaskOperations implements TaskOperations { await this.#getPod(opts.runId, this.#namespace); } - #getImageFromRunId(runId: string) { - return `${REGISTRY_FQDN}/${REPO_NAME}:${runId}`; + #getLifecycleCommand(type: "postStart" | "preStop", cause: "index" | "create" | "restore") { + return ["/bin/sh", "-c", `sleep 1; wget -q -O- 127.0.0.1:8000/${type}?cause=${cause}`]; } - #getRestoreImage(runId: string, checkpointId: string) { - return `${REGISTRY_FQDN}/${REPO_NAME}:${checkpointId}`; + #getIndexContainerName(suffix: string) { + return `task-index-${suffix}`; + } + + #getRunContainerName(suffix: string) { + return `task-run-${suffix}`; } #createK8sApi() { @@ -330,59 +384,67 @@ class KubernetesTaskOperations implements TaskOperations { }; } - async #createPod(pod: V1Pod, namespace: Namespace) { + async #createPod(pod: k8s.V1Pod, namespace: Namespace) { try { const res = await this.#k8sApi.core.createNamespacedPod(namespace.metadata.name, pod); logger.debug(res.body); - } catch (err: any) { - if ("body" in err) { - logger.error(err.body); - } else { - logger.error(err); - } + } catch (err: unknown) { + this.#handleK8sError(err); } } - async #deletePod(opts: { podName: string; namespace: Namespace }) { + async #deletePod(opts: { runId: string; namespace: Namespace }) { try { const res = await this.#k8sApi.core.deleteNamespacedPod( - opts.podName, + opts.runId, opts.namespace.metadata.name ); logger.debug(res.body); - } catch (err: any) { - if ("body" in err) { - logger.error(err.body); - } else { - logger.error(err); - } + } catch (err: unknown) { + this.#handleK8sError(err); } } - async #getPod(podName: string, namespace: Namespace) { + async #getPod(runId: string, namespace: Namespace) { try { - const res = await this.#k8sApi.core.readNamespacedPod(podName, namespace.metadata.name); + const res = await this.#k8sApi.core.readNamespacedPod(runId, namespace.metadata.name); logger.debug(res.body); return res.body; - } catch (err: any) { - if ("body" in err) { - logger.error(err.body); - } else { - logger.error(err); - } + } catch (err: unknown) { + this.#handleK8sError(err); } } - async #createJob(job: V1Job, namespace: Namespace) { + async #createJob(job: k8s.V1Job, namespace: Namespace) { try { const res = await this.#k8sApi.batch.createNamespacedJob(namespace.metadata.name, job); logger.debug(res.body); - } catch (err: any) { - if ("body" in err) { - logger.error(err.body); + } catch (err: unknown) { + this.#handleK8sError(err); + } + } + + #throwUnlessRecord(candidate: unknown): asserts candidate is Record { + if (typeof candidate !== "object" || candidate === null) { + throw candidate; + } + } + + #handleK8sError(err: unknown) { + this.#throwUnlessRecord(err); + + if ("body" in err && err.body) { + logger.error(err.body); + this.#throwUnlessRecord(err.body); + + if (typeof err.body.message === "string") { + throw new Error(err.body?.message); } else { - logger.error(err); + throw err.body; } + } else { + logger.error(err); + throw err; } } } diff --git a/apps/kubernetes-provider/tsconfig.json b/apps/kubernetes-provider/tsconfig.json index a491b740b..345326da8 100644 --- a/apps/kubernetes-provider/tsconfig.json +++ b/apps/kubernetes-provider/tsconfig.json @@ -7,10 +7,10 @@ "strict": true, "skipLibCheck": true, "paths": { - "@trigger.dev/core/v3": ["../core/src/v3"], - "@trigger.dev/core/v3/*": ["../core/src/v3/*"], - "@trigger.dev/core-apps": ["../core-apps/src"], - "@trigger.dev/core-apps/*": ["../core-apps/src/*"] + "@trigger.dev/core/v3": ["../../packages/core/src/v3"], + "@trigger.dev/core/v3/*": ["../../packages/core/src/v3/*"], + "@trigger.dev/core-apps": ["../../packages/core-apps/src"], + "@trigger.dev/core-apps/*": ["../../packages/core-apps/src/*"] } } } diff --git a/apps/webapp/app/services/logger.server.ts b/apps/webapp/app/services/logger.server.ts index c2a413e2d..e38365072 100644 --- a/apps/webapp/app/services/logger.server.ts +++ b/apps/webapp/app/services/logger.server.ts @@ -30,3 +30,14 @@ export const workerLogger = new Logger( return fields ? { ...fields } : {}; } ); + +export const socketLogger = new Logger( + "socket", + (process.env.APP_LOG_LEVEL ?? "debug") as LogLevel, + [], + sensitiveDataReplacer, + () => { + const fields = currentFieldsStore.getStore(); + return fields ? { ...fields } : {}; + } +); diff --git a/apps/webapp/app/v3/handleSocketIo.server.ts b/apps/webapp/app/v3/handleSocketIo.server.ts index 6a2189660..7bdb7ee6e 100644 --- a/apps/webapp/app/v3/handleSocketIo.server.ts +++ b/apps/webapp/app/v3/handleSocketIo.server.ts @@ -52,7 +52,8 @@ function createCoordinatorNamespace(io: Server) { READY_FOR_EXECUTION: async (message) => { const payload = await sharedQueueTasks.getLatestExecutionPayloadFromRun( message.runId, - true + true, + !!message.totalCompletions ); if (!payload) { @@ -67,7 +68,11 @@ function createCoordinatorNamespace(io: Server) { }, TASK_RUN_COMPLETED: async (message) => { const completeAttempt = new CompleteAttemptService(); - await completeAttempt.call(message.completion, message.execution); + await completeAttempt.call({ + completion: message.completion, + execution: message.execution, + checkpoint: message.checkpoint, + }); }, TASK_HEARTBEAT: async (message) => { await sharedQueueTasks.taskHeartbeat(message.attemptFriendlyId); @@ -132,14 +137,14 @@ function createSharedQueueConsumerNamespace(io: Server) { clientMessages: ClientToSharedQueueMessages, serverMessages: SharedQueueToClientMessages, onConnection: async (socket, handler, sender, logger) => { - const sharedSocketConnection = new SharedSocketConnection( - sharedQueue.namespace, + const sharedSocketConnection = new SharedSocketConnection({ + namespace: sharedQueue.namespace, socket, - logger - ); + logger, + }); sharedSocketConnection.onClose.attach((closeEvent) => { - logger("Socket closed", { closeEvent }); + logger.info("Socket closed", { closeEvent }); }); await sharedSocketConnection.initialize(); diff --git a/apps/webapp/app/v3/marqs/devQueueConsumer.server.ts b/apps/webapp/app/v3/marqs/devQueueConsumer.server.ts index 637ae2c5c..46bad40f7 100644 --- a/apps/webapp/app/v3/marqs/devQueueConsumer.server.ts +++ b/apps/webapp/app/v3/marqs/devQueueConsumer.server.ts @@ -125,7 +125,7 @@ export class DevQueueConsumer { logger.debug("Task run completed", { taskRunCompletion: completion, execution }); const service = new CompleteAttemptService(); - const result = await service.call(completion, execution, this.env); + const result = await service.call({ completion, execution, env: this.env }); if (result === "COMPLETED") { this._inProgressRuns.delete(execution.run.id); diff --git a/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts b/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts index 48c68727d..3b3fbd6b1 100644 --- a/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts +++ b/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts @@ -10,7 +10,12 @@ import { ZodMessageSender, serverWebsocketMessages, } from "@trigger.dev/core/v3"; -import { BackgroundWorker, BackgroundWorkerTask } from "@trigger.dev/database"; +import { + BackgroundWorker, + BackgroundWorkerTask, + TaskRunAttemptStatus, + TaskRunStatus, +} from "@trigger.dev/database"; import { z } from "zod"; import { prisma } from "~/db.server"; import { logger } from "~/services/logger.server"; @@ -29,15 +34,18 @@ const MessageBody = z.discriminatedUnion("type", [ z.object({ type: z.literal("EXECUTE"), taskIdentifier: z.string(), + checkpointEventId: z.string().optional(), }), z.object({ type: z.literal("RESUME"), completedAttemptIds: z.string().array(), resumableAttemptId: z.string(), + checkpointEventId: z.string().optional(), }), z.object({ type: z.literal("RESUME_AFTER_DURATION"), resumableAttemptId: z.string(), + checkpointEventId: z.string(), }), ]); @@ -130,11 +138,6 @@ export class SharedQueueConsumer { logger.debug("Stopping shared queue consumer"); this._enabled = false; - - // TODO: think about automatic prod cancellation - - // We need to cancel all the in progress task run attempts and ack the messages so they will stop processing - // await this.#cancelInProgressAttempts(reason); } async #cancelInProgressAttempts(reason: string) { @@ -180,7 +183,7 @@ export class SharedQueueConsumer { this._taskFailures = 0; this._taskSuccesses = 0; - this.#doWork().finally(() => { }); + this.#doWork().finally(() => {}); } async #doWork() { @@ -241,7 +244,7 @@ export class SharedQueueConsumer { const message = await marqs?.dequeueMessageInSharedQueue(); if (!message) { - setTimeout(() => this.#doWork(), this._options.nextTickInterval); + this.#doMoreWork(this._options.nextTickInterval); return; } @@ -264,8 +267,8 @@ export class SharedQueueConsumer { queueMessage: message.data, envId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + this.#ackAndDoMoreWork(message.messageId); return; } @@ -278,9 +281,7 @@ export class SharedQueueConsumer { env: environment, }); - await marqs?.acknowledgeMessage(message.messageId); - - setTimeout(() => this.#doWork(), this._options.interval); + this.#ackAndDoMoreWork(message.messageId); return; } @@ -297,23 +298,36 @@ export class SharedQueueConsumer { queueMessage: message.data, messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + this.#ackAndDoMoreWork(message.messageId); return; } + const retryingFromCheckpoint = !!messageBody.data.checkpointEventId; + + const EXECUTABLE_RUN_STATUSES: { + fromCheckpoint: TaskRunStatus[]; + withoutCheckpoint: TaskRunStatus[]; + } = { + fromCheckpoint: ["WAITING_TO_RESUME"], + withoutCheckpoint: ["PENDING", "RETRYING_AFTER_FAILURE"], + }; + if ( - existingTaskRun.status !== "PENDING" && - existingTaskRun.status !== "RETRYING_AFTER_FAILURE" + (retryingFromCheckpoint && + !EXECUTABLE_RUN_STATUSES.fromCheckpoint.includes(existingTaskRun.status)) || + (!retryingFromCheckpoint && + !EXECUTABLE_RUN_STATUSES.withoutCheckpoint.includes(existingTaskRun.status)) ) { - logger.debug("Task run is not pending, aborting", { + logger.debug("Task run has invalid status for execution", { queueMessage: message.data, messageId: message.messageId, taskRun: existingTaskRun.id, status: existingTaskRun.status, + retryingFromCheckpoint, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + this.#ackAndDoMoreWork(message.messageId); return; } @@ -324,8 +338,8 @@ export class SharedQueueConsumer { queueMessage: message.data, messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + this.#ackAndDoMoreWork(message.messageId); return; } @@ -335,8 +349,8 @@ export class SharedQueueConsumer { messageId: message.messageId, deployment: deployment.id, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + this.#ackAndDoMoreWork(message.messageId); return; } @@ -353,9 +367,7 @@ export class SharedQueueConsumer { taskSlugs: deployment.worker.tasks.map((task) => task.slug), }); - await marqs?.acknowledgeMessage(message.messageId); - - setTimeout(() => this.#doWork(), this._options.interval); + this.#ackAndDoMoreWork(message.messageId); return; } @@ -391,9 +403,7 @@ export class SharedQueueConsumer { messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - - setTimeout(() => this.#doWork(), this._options.interval); + this.#ackAndDoMoreWork(message.messageId); return; } @@ -407,8 +417,7 @@ export class SharedQueueConsumer { }); if (!queue) { - await marqs?.nackMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.nextTickInterval); + await this.#nackAndDoMoreWork(message.messageId, this._options.nextTickInterval); return; } @@ -431,24 +440,31 @@ export class SharedQueueConsumer { }, }); - try { - const latestCheckpoint = lockedTaskRun.checkpoints[0]; + const isRetry = taskRunAttempt.number > 1; - if (lockedTaskRun.status === "RETRYING_AFTER_FAILURE" && latestCheckpoint) { - if (latestCheckpoint.reason !== "RETRYING_AFTER_FAILURE") { - logger.error("Latest checkpoint is invalid", { + try { + if (messageBody.data.checkpointEventId) { + const restoreService = new RestoreCheckpointService(); + + const checkpoint = await restoreService.call({ + eventId: messageBody.data.checkpointEventId, + isRetry, + }); + + if (!checkpoint) { + logger.error("Failed to restore checkpoint", { queueMessage: message.data, messageId: message.messageId, - resumableAttemptId: taskRunAttempt.id, - latestCheckpointId: latestCheckpoint.id, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + await this.#ackAndDoMoreWork(message.messageId); return; } - - const restoreService = new RestoreCheckpointService(); - await restoreService.call({ checkpointId: latestCheckpoint.id }); + } else if (isRetry) { + socketIo.coordinatorNamespace.emit("READY_FOR_RETRY", { + version: "v1", + runId: taskRunAttempt.taskRunId, + }); } else { await this._sender.send("BACKGROUND_WORKER_MESSAGE", { backgroundWorkerId: deployment.worker.friendlyId, @@ -458,6 +474,7 @@ export class SharedQueueConsumer { image: deployment.imageReference, envId: environment.id, runId: taskRunAttempt.taskRunId, + version: deployment.version, }, }); } @@ -490,22 +507,55 @@ export class SharedQueueConsumer { }), ]); - // Finally we need to nack the message so it can be retried - await marqs?.nackMessage(message.messageId); - } finally { - setTimeout(() => this.#doWork(), this._options.interval); + await this.#nackAndDoMoreWork(message.messageId); + return; } + break; } // Resume after dependency completed with no remaining retries case "RESUME": { + if (messageBody.data.checkpointEventId) { + try { + const restoreService = new RestoreCheckpointService(); + + const checkpoint = await restoreService.call({ + eventId: messageBody.data.checkpointEventId, + }); + + if (!checkpoint) { + logger.error("Failed to restore checkpoint", { + queueMessage: message.data, + messageId: message.messageId, + }); + + await this.#ackAndDoMoreWork(message.messageId); + return; + } + } catch (e) { + if (e instanceof Error) { + this._currentSpan?.recordException(e); + } else { + this._currentSpan?.recordException(new Error(String(e))); + } + + this._endSpanInNextIteration = true; + + await this.#nackAndDoMoreWork(message.messageId); + return; + } + + this.#doMoreWork(); + return; + } + if (messageBody.data.completedAttemptIds.length < 1) { logger.error("No attempt IDs provided", { queueMessage: message.data, messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + await this.#ackAndDoMoreWork(message.messageId); return; } @@ -520,8 +570,8 @@ export class SharedQueueConsumer { queueMessage: message.data, messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + await this.#ackAndDoMoreWork(message.messageId); return; } @@ -544,8 +594,8 @@ export class SharedQueueConsumer { queueMessage: message.data, messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + await this.#ackAndDoMoreWork(message.messageId); return; } @@ -559,8 +609,7 @@ export class SharedQueueConsumer { }); if (!queue) { - await marqs?.nackMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.nextTickInterval); + await this.#nackAndDoMoreWork(message.messageId, this._options.nextTickInterval); return; } @@ -569,28 +618,6 @@ export class SharedQueueConsumer { return; } - if (resumableAttempt.status === "PAUSED") { - // We need to restore the attempt from the latest checkpoint before we can resume - const latestCheckpoint = resumableAttempt.checkpoints[0]; - - if (!latestCheckpoint) { - logger.error("No checkpoint found", { - queueMessage: message.data, - messageId: message.messageId, - resumableAttemptId: resumableAttempt.id, - }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); - return; - } - - const restoreService = new RestoreCheckpointService(); - await restoreService.call({ checkpointId: latestCheckpoint.id }); - - setTimeout(() => this.#doWork(), this._options.interval); - return; - } - const completions: TaskRunExecutionResult[] = []; const executions: TaskRunExecution[] = []; @@ -614,16 +641,15 @@ export class SharedQueueConsumer { queueMessage: message.data, messageId: message.messageId, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + await this.#ackAndDoMoreWork(message.messageId); return; } const completion = await this._tasks.getCompletionPayloadFromAttempt(completedAttempt.id); if (!completion) { - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + await this.#ackAndDoMoreWork(message.messageId); return; } @@ -634,8 +660,7 @@ export class SharedQueueConsumer { ); if (!executionPayload) { - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + await this.#ackAndDoMoreWork(message.messageId); return; } @@ -644,9 +669,11 @@ export class SharedQueueConsumer { try { // The attempt should still be running so we can broadcast to all coordinators to resume immediately - socketIo.coordinatorNamespace.emit("RESUME", { + socketIo.coordinatorNamespace.emit("RESUME_AFTER_DEPENDENCY", { version: "v1", + runId: resumableAttempt.taskRunId, attemptId: resumableAttempt.id, + attemptFriendlyId: resumableAttempt.friendlyId, completions, executions, }); @@ -659,68 +686,30 @@ export class SharedQueueConsumer { this._endSpanInNextIteration = true; - // Finally we need to nack the message so it can be retried - await marqs?.nackMessage(message.messageId); - } finally { - setTimeout(() => this.#doWork(), this._options.interval); + await this.#nackAndDoMoreWork(message.messageId); + return; } + break; } // Resume after duration-based wait case "RESUME_AFTER_DURATION": { - const resumableAttempt = await prisma.taskRunAttempt.findUnique({ - where: { - id: messageBody.data.resumableAttemptId, - }, - include: { - checkpoints: { - take: 1, - orderBy: { - createdAt: "desc", - }, - }, - taskRun: true, - }, - }); - - if (!resumableAttempt) { - logger.error("Resumable attempt not found", { - queueMessage: message.data, - messageId: message.messageId, - }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); - return; - } - - if (resumableAttempt.status !== "PAUSED") { - logger.error("Attempt not paused", { - queueMessage: message.data, - messageId: message.messageId, - }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); - return; - } - try { - // We need to restore the attempt from the latest checkpoint before we can resume - const latestCheckpoint = resumableAttempt.checkpoints[0]; + const restoreService = new RestoreCheckpointService(); - if (!latestCheckpoint) { - logger.error("No checkpoint found", { + const checkpoint = await restoreService.call({ + eventId: messageBody.data.checkpointEventId, + }); + + if (!checkpoint) { + logger.error("Failed to restore checkpoint", { queueMessage: message.data, messageId: message.messageId, - resumableAttemptId: resumableAttempt.id, }); - await marqs?.acknowledgeMessage(message.messageId); - setTimeout(() => this.#doWork(), this._options.interval); + + await this.#ackAndDoMoreWork(message.messageId); return; } - - // The attempt will resume automatically after restore - const restoreService = new RestoreCheckpointService(); - await restoreService.call({ checkpointId: latestCheckpoint.id }); } catch (e) { if (e instanceof Error) { this._currentSpan?.recordException(e); @@ -730,19 +719,35 @@ export class SharedQueueConsumer { this._endSpanInNextIteration = true; - // Finally we need to nack the message so it can be retried - await marqs?.nackMessage(message.messageId); - } finally { - setTimeout(() => this.#doWork(), this._options.interval); + await this.#nackAndDoMoreWork(message.messageId); + return; } + break; } } + + this.#doMoreWork(); + return; } #envIdFromQueue(queueName: string) { return queueName.split(":")[1]; } + + #doMoreWork(intervalInMs = this._options.interval) { + setTimeout(() => this.#doWork(), intervalInMs); + } + + async #ackAndDoMoreWork(messageId: string, intervalInMs?: number) { + await marqs?.acknowledgeMessage(messageId); + this.#doMoreWork(intervalInMs); + } + + async #nackAndDoMoreWork(messageId: string, intervalInMs?: number) { + await marqs?.nackMessage(messageId); + this.#doMoreWork(intervalInMs); + } } class SharedQueueTasks { @@ -799,7 +804,8 @@ class SharedQueueTasks { async getExecutionPayloadFromAttempt( id: string, - setToExecuting?: boolean + setToExecuting?: boolean, + isRetrying?: boolean ): Promise { const attempt = await prisma.taskRunAttempt.findUnique({ where: { @@ -858,26 +864,42 @@ class SharedQueueTasks { } if (setToExecuting) { + const FINAL_RUN_STATUSES: TaskRunStatus[] = [ + "CANCELED", + "COMPLETED_SUCCESSFULLY", + "COMPLETED_WITH_ERRORS", + "INTERRUPTED", + "SYSTEM_FAILURE", + ]; + const FINAL_ATTEMPT_STATUSES: TaskRunAttemptStatus[] = ["CANCELED", "COMPLETED", "FAILED"]; + + if ( + FINAL_ATTEMPT_STATUSES.includes(attempt.status) || + FINAL_RUN_STATUSES.includes(attempt.taskRun.status) + ) { + logger.error("Status already in final state", { + attempt: { + id: attempt.id, + status: attempt.status, + }, + run: { + id: attempt.taskRunId, + status: attempt.taskRun.status, + }, + }); + return; + } + await prisma.taskRunAttempt.update({ where: { id, - taskRun: { - status: { - notIn: [ - "CANCELED", - "COMPLETED_SUCCESSFULLY", - "COMPLETED_WITH_ERRORS", - "SYSTEM_FAILURE", - ], - }, - }, }, data: { status: "EXECUTING", taskRun: { update: { data: { - status: "EXECUTING", + status: isRetrying ? "RETRYING_AFTER_FAILURE" : "EXECUTING", }, }, }, @@ -960,7 +982,8 @@ class SharedQueueTasks { async getLatestExecutionPayloadFromRun( id: string, - setToExecuting?: boolean + setToExecuting?: boolean, + isRetrying?: boolean ): Promise { const run = await prisma.taskRun.findUnique({ where: { @@ -983,7 +1006,7 @@ class SharedQueueTasks { return; } - return this.getExecutionPayloadFromAttempt(latestAttempt.id, setToExecuting); + return this.getExecutionPayloadFromAttempt(latestAttempt.id, setToExecuting, isRetrying); } async taskHeartbeat(attemptFriendlyId: string, seconds: number = 60) { diff --git a/apps/webapp/app/v3/services/cancelTaskRun.server.ts b/apps/webapp/app/v3/services/cancelTaskRun.server.ts index 3d2c29e99..fc9534e31 100644 --- a/apps/webapp/app/v3/services/cancelTaskRun.server.ts +++ b/apps/webapp/app/v3/services/cancelTaskRun.server.ts @@ -106,6 +106,7 @@ export class CancelTaskRunService extends BaseService { socketIo.coordinatorNamespace.emit("REQUEST_ATTEMPT_CANCELLATION", { version: "v1", attemptId: attempt.id, + attemptFriendlyId: attempt.friendlyId, }); break; diff --git a/apps/webapp/app/v3/services/completeAttempt.server.ts b/apps/webapp/app/v3/services/completeAttempt.server.ts index 9c76a3436..8a5e729d8 100644 --- a/apps/webapp/app/v3/services/completeAttempt.server.ts +++ b/apps/webapp/app/v3/services/completeAttempt.server.ts @@ -17,15 +17,28 @@ import { BaseService } from "./baseService.server"; import { CancelAttemptService } from "./cancelAttempt.server"; import { ResumeTaskRunDependenciesService } from "./resumeTaskRunDependencies.server"; import { MAX_TASK_RUN_ATTEMPTS } from "~/consts"; +import { CreateCheckpointService } from "./createCheckpoint.server"; +import { TaskRun } from "@trigger.dev/database"; type FoundAttempt = Awaited>; +type CheckpointData = { + docker: boolean; + location: string; +}; + export class CompleteAttemptService extends BaseService { - public async call( - completion: TaskRunExecutionResult, - execution: TaskRunExecution, - env?: AuthenticatedEnvironment - ): Promise<"COMPLETED" | "RETRIED"> { + public async call({ + completion, + execution, + env, + checkpoint, + }: { + completion: TaskRunExecutionResult; + execution: TaskRunExecution; + env?: AuthenticatedEnvironment; + checkpoint?: CheckpointData; + }): Promise<"COMPLETED" | "RETRIED"> { const taskRunAttempt = await findAttempt(this._prisma, completion.id); if (!taskRunAttempt) { @@ -47,7 +60,13 @@ export class CompleteAttemptService extends BaseService { if (completion.ok) { return await this.#completeAttemptSuccessfully(completion, taskRunAttempt, env); } else { - return await this.#completeAttemptFailed(completion, execution, taskRunAttempt, env); + return await this.#completeAttemptFailed( + completion, + execution, + taskRunAttempt, + env, + checkpoint + ); } } @@ -55,7 +74,7 @@ export class CompleteAttemptService extends BaseService { completion: TaskRunSuccessfulExecutionResult, taskRunAttempt: NonNullable, env?: AuthenticatedEnvironment - ): Promise<"COMPLETED" | "RETRIED"> { + ): Promise<"COMPLETED"> { await this._prisma.taskRunAttempt.update({ where: { friendlyId: completion.id }, data: { @@ -97,8 +116,9 @@ export class CompleteAttemptService extends BaseService { completion: TaskRunFailedExecutionResult, execution: TaskRunExecution, taskRunAttempt: NonNullable, - env?: AuthenticatedEnvironment - ) { + env?: AuthenticatedEnvironment, + checkpoint?: CheckpointData + ): Promise<"COMPLETED" | "RETRIED"> { if ( completion.error.type === "INTERNAL_ERROR" && completion.error.code === "TASK_RUN_CANCELLED" @@ -166,18 +186,47 @@ export class CompleteAttemptService extends BaseService { if (environment.type === "DEVELOPMENT") { // This is already an EXECUTE message so we can just NACK await marqs?.nackMessage(taskRunAttempt.taskRunId, completion.retry.timestamp); - } else { - // We have to replace a potential RESUME with EXECUTE to correctly retry the attempt - await marqs?.replaceMessage( - taskRunAttempt.taskRunId, - { - type: "EXECUTE", - taskIdentifier: taskRunAttempt.taskRun.taskIdentifier, - }, - completion.retry.timestamp - ); + return "RETRIED"; } + if (!checkpoint) { + await this.#enqueueRetry(taskRunAttempt.taskRun, completion.retry.timestamp); + return "RETRIED"; + } + + const createCheckpoint = new CreateCheckpointService(this._prisma); + const checkpointCreateResult = await createCheckpoint.call({ + attemptFriendlyId: execution.attempt.id, + docker: checkpoint.docker, + location: checkpoint.location, + reason: { + type: "RETRYING_AFTER_FAILURE", + attemptNumber: execution.attempt.number, + }, + }); + + if (!checkpointCreateResult) { + logger.error("Failed to create checkpoint", { checkpoint, execution: execution.run.id }); + + // Update the task run to be failed + await this._prisma.taskRun.update({ + where: { + friendlyId: execution.run.id, + }, + data: { + status: "SYSTEM_FAILURE", + }, + }); + + return "COMPLETED"; + } + + await this.#enqueueRetry( + taskRunAttempt.taskRun, + completion.retry.timestamp, + checkpointCreateResult.event.id + ); + return "RETRIED"; } else { // No more retries, we need to fail the task run @@ -210,6 +259,19 @@ export class CompleteAttemptService extends BaseService { } } + async #enqueueRetry(run: TaskRun, retryTimestamp: number, checkpointEventId?: string) { + // We have to replace a potential RESUME with EXECUTE to correctly retry the attempt + return await marqs?.replaceMessage( + run.id, + { + type: "EXECUTE", + taskIdentifier: run.taskIdentifier, + checkpointEventId: checkpointEventId, + }, + retryTimestamp + ); + } + #generateMetadataAttributesForNextAttempt(execution: TaskRunExecution) { const context = TaskRunContext.parse(execution); diff --git a/apps/webapp/app/v3/services/createCheckpoint.server.ts b/apps/webapp/app/v3/services/createCheckpoint.server.ts index f59092fdf..17500dba2 100644 --- a/apps/webapp/app/v3/services/createCheckpoint.server.ts +++ b/apps/webapp/app/v3/services/createCheckpoint.server.ts @@ -1,33 +1,79 @@ import { CoordinatorToPlatformMessages, InferSocketMessageSchema } from "@trigger.dev/core/v3"; -import type { Checkpoint } from "@trigger.dev/database"; -import { PrismaClient, prisma } from "~/db.server"; +import type { + CheckpointRestoreEvent, + TaskRunAttemptStatus, + TaskRunStatus, +} from "@trigger.dev/database"; import { logger } from "~/services/logger.server"; import { generateFriendlyId } from "../friendlyIdentifiers"; import { marqs } from "../marqs.server"; import { CreateCheckpointRestoreEventService } from "./createCheckpointRestoreEvent.server"; +import { BaseService } from "./baseService.server"; -export class CreateCheckpointService { - #prismaClient: PrismaClient; - - constructor(prismaClient: PrismaClient = prisma) { - this.#prismaClient = prismaClient; - } +const FREEZABLE_RUN_STATUSES: TaskRunStatus[] = ["EXECUTING", "RETRYING_AFTER_FAILURE"]; +const FREEZABLE_ATTEMPT_STATUSES: TaskRunAttemptStatus[] = ["EXECUTING", "FAILED"]; +export class CreateCheckpointService extends BaseService { public async call( - params: InferSocketMessageSchema - ): Promise { + params: Omit< + InferSocketMessageSchema, + "version" + > + ) { logger.debug(`Creating checkpoint`, params); - const attempt = await this.#prismaClient.taskRunAttempt.findUniqueOrThrow({ + const attempt = await this._prisma.taskRunAttempt.findUnique({ where: { - id: params.attemptId, + friendlyId: params.attemptFriendlyId, }, include: { taskRun: true, + backgroundWorker: { + select: { + id: true, + deployment: { + select: { + imageReference: true, + }, + }, + }, + }, }, }); - const checkpoint = await this.#prismaClient.checkpoint.create({ + if (!attempt) { + logger.error("Attempt not found", { attemptFriendlyId: params.attemptFriendlyId }); + return; + } + + if ( + !FREEZABLE_ATTEMPT_STATUSES.includes(attempt.status) || + !FREEZABLE_RUN_STATUSES.includes(attempt.taskRun.status) + ) { + logger.error("Unfreezable state", { + attempt: { + id: attempt.id, + status: attempt.status, + }, + run: { + id: attempt.taskRunId, + status: attempt.taskRun.status, + }, + }); + return; + } + + const imageRef = attempt.backgroundWorker.deployment?.imageReference; + + if (!imageRef) { + logger.error("Missing deployment or image ref", { + attemptId: attempt.id, + workerId: attempt.backgroundWorker.id, + }); + return; + } + + const checkpoint = await this._prisma.checkpoint.create({ data: { friendlyId: generateFriendlyId("checkpoint"), runtimeEnvironmentId: attempt.taskRun.runtimeEnvironmentId, @@ -38,44 +84,60 @@ export class CreateCheckpointService { type: params.docker ? "DOCKER" : "KUBERNETES", reason: params.reason.type, metadata: JSON.stringify(params.reason), + imageRef, }, }); - const eventService = new CreateCheckpointRestoreEventService(this.#prismaClient); - await eventService.call({ checkpointId: checkpoint.id, type: "CHECKPOINT" }); + const eventService = new CreateCheckpointRestoreEventService(this._prisma); - await this.#prismaClient.taskRunAttempt.update({ + await this._prisma.taskRunAttempt.update({ where: { - id: params.attemptId, + id: attempt.id, }, data: { - status: "PAUSED", + status: params.reason.type === "RETRYING_AFTER_FAILURE" ? undefined : "PAUSED", taskRun: { update: { - status: - params.reason.type === "RETRYING_AFTER_FAILURE" - ? "RETRYING_AFTER_FAILURE" - : "WAITING_TO_RESUME", + status: "WAITING_TO_RESUME", }, }, }, }); - switch (params.reason.type) { + const { reason } = params; + let checkpointEvent: CheckpointRestoreEvent | undefined; + + switch (reason.type) { case "WAIT_FOR_DURATION": { - await marqs?.replaceMessage( - attempt.taskRunId, - { type: "RESUME_AFTER_DURATION", resumableAttemptId: attempt.id }, - Date.now() + params.reason.ms - ); + checkpointEvent = await eventService.checkpoint({ + checkpointId: checkpoint.id, + }); + + break; + } + case "WAIT_FOR_TASK": { + checkpointEvent = await eventService.checkpoint({ + checkpointId: checkpoint.id, + dependencyFriendlyRunId: reason.friendlyId, + }); + + await marqs?.acknowledgeMessage(attempt.taskRunId); break; } - case "WAIT_FOR_TASK": case "WAIT_FOR_BATCH": { + checkpointEvent = await eventService.checkpoint({ + checkpointId: checkpoint.id, + batchDependencyFriendlyId: reason.batchFriendlyId, + }); + await marqs?.acknowledgeMessage(attempt.taskRunId); break; } case "RETRYING_AFTER_FAILURE": { + checkpointEvent = await eventService.checkpoint({ + checkpointId: checkpoint.id, + }); + // ACK is already handled by attempt completion break; } @@ -84,6 +146,30 @@ export class CreateCheckpointService { } } - return checkpoint; + if (!checkpointEvent) { + logger.error("No checkpoint event", { + attemptId: attempt.id, + checkpointId: checkpoint.id, + }); + await marqs?.acknowledgeMessage(attempt.taskRunId); + return; + } + + if (reason.type === "WAIT_FOR_DURATION") { + await marqs?.replaceMessage( + attempt.taskRunId, + { + type: "RESUME_AFTER_DURATION", + resumableAttemptId: attempt.id, + checkpointEventId: checkpointEvent.id, + }, + reason.now + reason.ms + ); + } + + return { + checkpoint, + event: checkpointEvent, + }; } } diff --git a/apps/webapp/app/v3/services/createCheckpointRestoreEvent.server.ts b/apps/webapp/app/v3/services/createCheckpointRestoreEvent.server.ts index f4acf5adc..cb6c75328 100644 --- a/apps/webapp/app/v3/services/createCheckpointRestoreEvent.server.ts +++ b/apps/webapp/app/v3/services/createCheckpointRestoreEvent.server.ts @@ -2,19 +2,69 @@ import type { CheckpointRestoreEvent, CheckpointRestoreEventType } from "@trigge import { logger } from "~/services/logger.server"; import { BaseService } from "./baseService.server"; -export class CreateCheckpointRestoreEventService extends BaseService { +interface CheckpointRestoreEventCallParams { + checkpointId: string; + type: CheckpointRestoreEventType; + dependencyFriendlyRunId?: string; + batchDependencyFriendlyId?: string; +} - public async call(params: { - checkpointId: string; - type: CheckpointRestoreEventType; - }): Promise { - const checkpoint = await this._prisma.checkpoint.findUniqueOrThrow({ +type CheckpointRestoreEventParams = Omit; + +export class CreateCheckpointRestoreEventService extends BaseService { + async checkpoint(params: CheckpointRestoreEventParams) { + return this.#call({ ...params, type: "CHECKPOINT" }); + } + + async restore(params: CheckpointRestoreEventParams) { + return this.#call({ ...params, type: "RESTORE" }); + } + + async #call( + params: CheckpointRestoreEventCallParams + ): Promise { + if (params.dependencyFriendlyRunId && params.batchDependencyFriendlyId) { + logger.error("Only one dependency can be set", { params }); + return; + } + + const checkpoint = await this._prisma.checkpoint.findUnique({ where: { id: params.checkpointId, }, }); - logger.debug(`Creating checkpoint/restore event`, params); + if (!checkpoint) { + logger.error("Checkpoint not found", { id: params.checkpointId }); + return; + } + + logger.debug(`Creating checkpoint/restore event`, { params }); + + let taskRunDependencyId: string | undefined; + + if (params.dependencyFriendlyRunId) { + const run = await this._prisma.taskRun.findUnique({ + where: { + friendlyId: params.dependencyFriendlyRunId, + }, + select: { + id: true, + dependency: { + select: { + id: true, + }, + }, + }, + }); + + taskRunDependencyId = run?.dependency?.id; + + if (!taskRunDependencyId) { + logger.error("Dependency or run not found", { runId: params.dependencyFriendlyRunId }); + return; + } + } const checkpointEvent = await this._prisma.checkpointRestoreEvent.create({ data: { @@ -26,6 +76,24 @@ export class CreateCheckpointRestoreEventService extends BaseService { type: params.type, reason: checkpoint.reason, metadata: checkpoint.metadata, + ...(taskRunDependencyId + ? { + taskRunDependency: { + connect: { + id: taskRunDependencyId, + }, + }, + } + : undefined), + ...(params.batchDependencyFriendlyId + ? { + batchTaskRunDependency: { + connect: { + friendlyId: params.batchDependencyFriendlyId, + }, + }, + } + : undefined), }, }); diff --git a/apps/webapp/app/v3/services/indexDeployment.server.ts b/apps/webapp/app/v3/services/indexDeployment.server.ts index 6ae1eaca7..854dcb034 100644 --- a/apps/webapp/app/v3/services/indexDeployment.server.ts +++ b/apps/webapp/app/v3/services/indexDeployment.server.ts @@ -47,7 +47,7 @@ export class IndexDeploymentService extends BaseService { try { const responses = await socketIo.providerNamespace.timeout(30_000).emitWithAck("INDEX", { version: "v1", - contentHash: deployment.contentHash, + shortCode: deployment.shortCode, imageTag: deployment.imageReference, envId: deployment.environmentId, apiKey: deployment.environment.apiKey, diff --git a/apps/webapp/app/v3/services/restoreCheckpoint.server.ts b/apps/webapp/app/v3/services/restoreCheckpoint.server.ts index 3704cb4e5..a61f95603 100644 --- a/apps/webapp/app/v3/services/restoreCheckpoint.server.ts +++ b/apps/webapp/app/v3/services/restoreCheckpoint.server.ts @@ -1,36 +1,79 @@ -import { type Checkpoint } from "@trigger.dev/database"; -import { PrismaClient, prisma } from "~/db.server"; +import { TaskRunStatus, type Checkpoint, TaskRunAttemptStatus } from "@trigger.dev/database"; import { logger } from "~/services/logger.server"; import { socketIo } from "../handleSocketIo.server"; import { CreateCheckpointRestoreEventService } from "./createCheckpointRestoreEvent.server"; +import { BaseService } from "./baseService.server"; -export class RestoreCheckpointService { - #prismaClient: PrismaClient; +const RESTORABLE_RUN_STATUSES: TaskRunStatus[] = ["WAITING_TO_RESUME"]; +const RESTORABLE_ATTEMPT_STATUSES: TaskRunAttemptStatus[] = ["PAUSED"]; - constructor(prismaClient: PrismaClient = prisma) { - this.#prismaClient = prismaClient; - } - - public async call(params: { checkpointId: string }): Promise { +export class RestoreCheckpointService extends BaseService { + public async call(params: { + eventId: string; + isRetry?: boolean; + }): Promise { logger.debug(`Restoring checkpoint`, params); - const checkpoint = await this.#prismaClient.checkpoint.findUniqueOrThrow({ + const checkpointEvent = await this._prisma.checkpointRestoreEvent.findUnique({ where: { - id: params.checkpointId, + id: params.eventId, + type: "CHECKPOINT", + }, + include: { + checkpoint: { + include: { + run: { + select: { + status: true, + }, + }, + attempt: { + select: { + status: true, + }, + }, + }, + }, }, }); - const eventService = new CreateCheckpointRestoreEventService(this.#prismaClient); - await eventService.call({ checkpointId: checkpoint.id, type: "RESTORE" }); + if (!checkpointEvent) { + logger.error("Checkpoint event not found", params); + return; + } + + const checkpoint = checkpointEvent.checkpoint; + + const runIsRestorable = RESTORABLE_RUN_STATUSES.includes(checkpoint.run.status); + const attemptIsRestorable = RESTORABLE_ATTEMPT_STATUSES.includes(checkpoint.attempt.status); + + if (!runIsRestorable) { + logger.error("Run is unrestorable", { + id: checkpoint.runId, + status: checkpoint.run.status, + }); + return; + } + + if (!attemptIsRestorable && !params.isRetry) { + logger.error("Attempt is unrestorable", { + id: checkpoint.attemptId, + status: checkpoint.attempt.status, + }); + return; + } + + const eventService = new CreateCheckpointRestoreEventService(this._prisma); + await eventService.restore({ checkpointId: checkpoint.id }); socketIo.providerNamespace.emit("RESTORE", { version: "v1", checkpointId: checkpoint.id, runId: checkpoint.runId, - attemptId: checkpoint.attemptId, type: checkpoint.type, location: checkpoint.location, reason: checkpoint.reason ?? undefined, + imageRef: checkpoint.imageRef, }); return checkpoint; diff --git a/apps/webapp/app/v3/services/resumeAttempt.server.ts b/apps/webapp/app/v3/services/resumeAttempt.server.ts index 0e4c20e5f..c7ec9771c 100644 --- a/apps/webapp/app/v3/services/resumeAttempt.server.ts +++ b/apps/webapp/app/v3/services/resumeAttempt.server.ts @@ -4,28 +4,23 @@ import { TaskRunExecution, TaskRunExecutionResult, } from "@trigger.dev/core/v3"; -import { $transaction, PrismaClient, prisma } from "~/db.server"; +import { $transaction } from "~/db.server"; import { logger } from "~/services/logger.server"; import { marqs } from "../marqs.server"; import { socketIo } from "../handleSocketIo.server"; import { sharedQueueTasks } from "../marqs/sharedQueueConsumer.server"; +import { BaseService } from "./baseService.server"; -export class ResumeAttemptService { - #prismaClient: PrismaClient; - - constructor(prismaClient: PrismaClient = prisma) { - this.#prismaClient = prismaClient; - } - +export class ResumeAttemptService extends BaseService { public async call( params: InferSocketMessageSchema ): Promise { logger.debug(`ResumeAttemptService.call()`, params); - await $transaction(this.#prismaClient, async (tx) => { + await $transaction(this._prisma, async (tx) => { const attempt = await tx.taskRunAttempt.findUnique({ where: { - id: params.attemptId, + friendlyId: params.attemptFriendlyId, }, include: { taskRun: true, @@ -71,13 +66,13 @@ export class ResumeAttemptService { }); if (!attempt) { - logger.error("Could not find attempt", { attemptId: params.attemptId }); + logger.error("Could not find attempt", { attemptFriendlyId: params.attemptFriendlyId }); return; } if (attempt.taskRun.status !== "WAITING_TO_RESUME") { logger.error("Run is not resumable", { - attemptId: params.attemptId, + attemptId: attempt.id, runId: attempt.taskRunId, }); return; @@ -85,7 +80,17 @@ export class ResumeAttemptService { switch (params.type) { case "WAIT_FOR_DURATION": { - // Nothing to do, but thanks for checking in! + logger.error( + "Attempt requested resume after duration wait, this is unexpected and likely a bug", + { attemptId: attempt.id } + ); + + // Attempts should not request resume for duration waits, this is just here as a backup + socketIo.coordinatorNamespace.emit("RESUME_AFTER_DURATION", { + version: "v1", + attemptId: attempt.id, + attemptFriendlyId: attempt.friendlyId, + }); break; } case "WAIT_FOR_TASK": @@ -96,7 +101,7 @@ export class ResumeAttemptService { const dependentAttempt = attempt.taskRunDependency.taskRun.attempts[0]; if (!dependentAttempt) { - logger.error("No dependent attempt", { attemptId: params.attemptId }); + logger.error("No dependent attempt", { attemptId: attempt.id }); return; } @@ -104,7 +109,7 @@ export class ResumeAttemptService { await tx.taskRunAttempt.update({ where: { - id: params.attemptId, + id: attempt.id, }, data: { taskRunDependency: { @@ -116,7 +121,7 @@ export class ResumeAttemptService { const dependentBatchItems = attempt.batchTaskRunDependency.items; if (!dependentBatchItems) { - logger.error("No dependent batch items", { attemptId: params.attemptId }); + logger.error("No dependent batch items", { attemptId: attempt.id }); return; } @@ -124,7 +129,7 @@ export class ResumeAttemptService { await tx.taskRunAttempt.update({ where: { - id: params.attemptId, + id: attempt.id, }, data: { batchTaskRunDependency: { @@ -133,12 +138,12 @@ export class ResumeAttemptService { }, }); } else { - logger.error("No dependencies", { attemptId: params.attemptId }); + logger.error("No dependencies", { attemptId: attempt.id }); return; } if (completedAttemptIds.length === 0) { - logger.error("No completed attempt IDs", { attemptId: params.attemptId }); + logger.error("No completed attempt IDs", { attemptId: attempt.id }); return; } @@ -146,7 +151,7 @@ export class ResumeAttemptService { const executions: TaskRunExecution[] = []; for (const completedAttemptId of completedAttemptIds) { - const completedAttempt = await prisma.taskRunAttempt.findUnique({ + const completedAttempt = await tx.taskRunAttempt.findUnique({ where: { id: completedAttemptId, taskRun: { @@ -162,7 +167,7 @@ export class ResumeAttemptService { if (!completedAttempt) { logger.error("Completed attempt not found", { - attemptId: params.attemptId, + attemptId: attempt.id, completedAttemptId, }); await marqs?.acknowledgeMessage(attempt.taskRunId); @@ -175,7 +180,7 @@ export class ResumeAttemptService { if (!completion) { logger.error("Failed to get completion payload", { - attemptId: params.attemptId, + attemptId: attempt.id, completedAttemptId, }); await marqs?.acknowledgeMessage(attempt.taskRunId); @@ -190,7 +195,7 @@ export class ResumeAttemptService { if (!executionPayload) { logger.error("Failed to get execution payload", { - attemptId: params.attemptId, + attemptId: attempt.id, completedAttemptId, }); await marqs?.acknowledgeMessage(attempt.taskRunId); @@ -200,25 +205,27 @@ export class ResumeAttemptService { executions.push(executionPayload.execution); } - await prisma.taskRunAttempt.update({ + const updated = await tx.taskRunAttempt.update({ where: { - id: params.attemptId, + id: attempt.id, }, data: { status: "EXECUTING", taskRun: { update: { data: { - status: "EXECUTING", + status: attempt.number > 1 ? "RETRYING_AFTER_FAILURE" : "EXECUTING", }, }, }, }, }); - socketIo.coordinatorNamespace.emit("RESUME", { + socketIo.coordinatorNamespace.emit("RESUME_AFTER_DEPENDENCY", { version: "v1", - attemptId: params.attemptId, + runId: attempt.taskRunId, + attemptId: attempt.id, + attemptFriendlyId: attempt.friendlyId, completions, executions, }); diff --git a/apps/webapp/app/v3/services/resumeBatchRun.server.ts b/apps/webapp/app/v3/services/resumeBatchRun.server.ts index deb19657c..5866b0b0b 100644 --- a/apps/webapp/app/v3/services/resumeBatchRun.server.ts +++ b/apps/webapp/app/v3/services/resumeBatchRun.server.ts @@ -2,6 +2,7 @@ import { PrismaClientOrTransaction } from "~/db.server"; import { workerQueue } from "~/services/worker.server"; import { marqs } from "../marqs.server"; import { BaseService } from "./baseService.server"; +import { logger } from "~/services/logger.server"; export class ResumeBatchRunService extends BaseService { public async call(batchRunId: string, sourceTaskAttemptId: string) { @@ -40,6 +41,7 @@ export class ResumeBatchRunService extends BaseService { return; } + // We need to update the batchRun status so we don't resume it again await this._prisma.batchTaskRun.update({ where: { id: batchRun.id, @@ -49,8 +51,6 @@ export class ResumeBatchRunService extends BaseService { }, }); - // We need to update the batchRun status so we don't resume it again - // This batch has a dependent attempt and just finalized, we should resume that attempt const environment = batchRun.dependentTaskAttempt.runtimeEnvironment; @@ -62,6 +62,15 @@ export class ResumeBatchRunService extends BaseService { const dependentRun = batchRun.dependentTaskAttempt.taskRun; if (batchRun.dependentTaskAttempt.status === "PAUSED") { + if (!batchRun.checkpointEventId) { + logger.error("Can't resume paused attempt without checkpoint event", { + batchRunId: batchRun.id, + }); + + await marqs?.acknowledgeMessage(dependentRun.id); + return; + } + await marqs?.enqueueMessage( environment, dependentRun.queue, @@ -70,6 +79,7 @@ export class ResumeBatchRunService extends BaseService { type: "RESUME", completedAttemptIds: [sourceTaskAttemptId], resumableAttemptId: batchRun.dependentTaskAttempt.id, + checkpointEventId: batchRun.checkpointEventId, }, dependentRun.concurrencyKey ?? undefined ); diff --git a/apps/webapp/app/v3/services/resumeTaskDependency.server.ts b/apps/webapp/app/v3/services/resumeTaskDependency.server.ts index cbfdfd3da..f4ebe1bdd 100644 --- a/apps/webapp/app/v3/services/resumeTaskDependency.server.ts +++ b/apps/webapp/app/v3/services/resumeTaskDependency.server.ts @@ -2,6 +2,7 @@ import { PrismaClientOrTransaction } from "~/db.server"; import { workerQueue } from "~/services/worker.server"; import { marqs } from "../marqs.server"; import { BaseService } from "./baseService.server"; +import { logger } from "~/services/logger.server"; export class ResumeTaskDependencyService extends BaseService { public async call(dependencyId: string, sourceTaskAttemptId: string) { @@ -34,9 +35,19 @@ export class ResumeTaskDependencyService extends BaseService { if (dependency.taskRun.runtimeEnvironment.type === "DEVELOPMENT") { return; } + const dependentRun = dependency.dependentAttempt.taskRun; if (dependency.dependentAttempt.status === "PAUSED") { + if (!dependency.checkpointEventId) { + logger.error("Can't resume paused attempt without checkpoint event", { + attemptId: dependency.id, + }); + + await marqs?.acknowledgeMessage(dependentRun.id); + return; + } + await marqs?.enqueueMessage( dependency.taskRun.runtimeEnvironment, dependentRun.queue, @@ -45,6 +56,7 @@ export class ResumeTaskDependencyService extends BaseService { type: "RESUME", completedAttemptIds: [sourceTaskAttemptId], resumableAttemptId: dependency.dependentAttempt.id, + checkpointEventId: dependency.checkpointEventId, }, dependentRun.concurrencyKey ?? undefined ); diff --git a/apps/webapp/app/v3/sharedSocketConnection.ts b/apps/webapp/app/v3/sharedSocketConnection.ts index 1e7992dfc..ac6d0fb76 100644 --- a/apps/webapp/app/v3/sharedSocketConnection.ts +++ b/apps/webapp/app/v3/sharedSocketConnection.ts @@ -1,5 +1,6 @@ import { MessageCatalogToSocketIoEvents, + StructuredLogger, ZodMessageHandler, ZodMessageSender, clientWebsocketMessages, @@ -11,6 +12,18 @@ import { logger } from "~/services/logger.server"; import { SharedQueueConsumer } from "./marqs/sharedQueueConsumer.server"; import { DisconnectReason, Namespace, Socket } from "socket.io"; +interface SharedSocketConnectionOptions { + namespace: Namespace< + MessageCatalogToSocketIoEvents, + MessageCatalogToSocketIoEvents + >; + socket: Socket< + MessageCatalogToSocketIoEvents, + MessageCatalogToSocketIoEvents + >; + logger?: StructuredLogger; +} + export class SharedSocketConnection { public id: string; public onClose: Evt = new Evt(); @@ -19,17 +32,7 @@ export class SharedSocketConnection { private _sharedConsumer: SharedQueueConsumer; private _messageHandler: ZodMessageHandler; - constructor( - namespace: Namespace< - MessageCatalogToSocketIoEvents, - MessageCatalogToSocketIoEvents - >, - private socket: Socket< - MessageCatalogToSocketIoEvents, - MessageCatalogToSocketIoEvents - >, - logger?: (...args: any[]) => void - ) { + constructor(opts: SharedSocketConnectionOptions) { this.id = randomUUID(); this._sender = new ZodMessageSender({ @@ -38,7 +41,7 @@ export class SharedSocketConnection { return new Promise((resolve, reject) => { try { const { type, ...payload } = message; - namespace.emit(type, payload as any); + opts.namespace.emit(type, payload as any); resolve(); } catch (err) { reject(err); @@ -52,8 +55,8 @@ export class SharedSocketConnection { nextTickInterval: 1000, }); - socket.on("disconnect", this.#handleClose.bind(this)); - socket.on("error", this.#handleError.bind(this)); + opts.socket.on("disconnect", this.#handleClose.bind(this)); + opts.socket.on("error", this.#handleError.bind(this)); this._messageHandler = new ZodMessageHandler({ schema: clientWebsocketMessages, @@ -78,7 +81,7 @@ export class SharedSocketConnection { }, }, }); - this._messageHandler.registerHandlers(this.socket, logger); + this._messageHandler.registerHandlers(opts.socket, opts.logger ?? logger); } async initialize() { diff --git a/packages/cli-v3/src/Containerfile.prod b/packages/cli-v3/src/Containerfile.prod index bd3672a67..ec3a0e410 100644 --- a/packages/cli-v3/src/Containerfile.prod +++ b/packages/cli-v3/src/Containerfile.prod @@ -1,4 +1,4 @@ -FROM node:18-alpine@sha256:ca9f6cb0466f9638e59e0c249d335a07c867cd50c429b5c7830dda1bed584649 AS base +FROM node:20-alpine@sha256:bf77dc26e48ea95fca9d1aceb5acfa69d2e546b765ec2abfb502975f1a2d4def AS base RUN apk add --no-cache dumb-init diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index 547b4c09a..d3bc2d894 100644 --- a/packages/cli-v3/src/commands/deploy.ts +++ b/packages/cli-v3/src/commands/deploy.ts @@ -38,6 +38,7 @@ import { detectPackageNameFromImportPath, parsePackageName } from "../utilities/ import { logger } from "../utilities/logger.js"; import { createTaskFileImports, gatherTaskFiles } from "../utilities/taskFiles"; import { login } from "./login"; +import { SetOptional } from "type-fest"; const DeployCommandOptions = CommonCommandOptions.extend({ skipTypecheck: z.boolean().default(false), @@ -47,7 +48,7 @@ const DeployCommandOptions = CommonCommandOptions.extend({ buildPlatform: z.enum(["linux/amd64", "linux/arm64"]).default("linux/amd64"), selfHosted: z.boolean().default(false), registry: z.string().optional(), - pushImage: z.boolean().default(false), + push: z.boolean().default(false), config: z.string().optional(), projectRef: z.string().optional(), outputMetafile: z.string().optional(), @@ -82,14 +83,14 @@ export function configureDeployCommand(program: Command) { ) .addOption( new CommandOption( - "--push-image", - "(Coming soon) When using the --self-hosted flag, push the image to the default registry. (defaults to false when not using --registry)" + "--push", + "When using the --self-hosted flag, push the image to the default registry. (defaults to false when not using --registry)" ).hideHelp() ) .addOption( new CommandOption( "--registry ", - "(Coming soon) The registry to push the image to when using --self-hosted" + "The registry to push the image to when using --self-hosted" ).hideHelp() ) .addOption( @@ -233,12 +234,13 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { const deploymentSpinner = spinner(); deploymentSpinner.start(`Deploying version ${version}`); - const registryHost = - deploymentResponse.data.registryHost ?? options.registry ?? "registry.trigger.dev"; + const selfHostedRegistryHost = deploymentResponse.data.registryHost ?? options.registry; + const registryHost = selfHostedRegistryHost ?? "registry.trigger.dev"; const buildImage = async () => { if (options.selfHosted) { return buildAndPushSelfHostedImage({ + registryHost: selfHostedRegistryHost, imageTag: deploymentResponse.data.imageTag, cwd: compilation.path, projectId: resolvedConfig.config.project, @@ -247,6 +249,8 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { contentHash: deploymentResponse.data.contentHash, projectRef: resolvedConfig.config.project, buildPlatform: options.buildPlatform, + pushImage: options.push, + selfHostedRegistry: !!options.registry, }); } @@ -283,7 +287,9 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { } const imageReference = options.selfHosted - ? `${image.image}${image.digest ? `@${image.digest}` : ""}` + ? `${selfHostedRegistryHost ? `${selfHostedRegistryHost}/` : ""}${image.image}${ + image.digest ? `@${image.digest}` : "" + }` : `${registryHost}/${image.image}${image.digest ? `@${image.digest}` : ""}`; span?.setAttributes({ @@ -637,10 +643,16 @@ async function buildAndPushImage( }); } -type BuildAndPushSelfHostedImageOptions = Omit< - BuildAndPushImageOptions, - "registryHost" | "buildId" | "buildToken" | "buildProjectId" | "auth" | "loadImage" ->; +type BuildAndPushSelfHostedImageOptions = SetOptional< + Omit< + BuildAndPushImageOptions, + "buildId" | "buildToken" | "buildProjectId" | "auth" | "loadImage" + >, + "registryHost" +> & { + pushImage: boolean; + selfHostedRegistry: boolean; +}; async function buildAndPushSelfHostedImage( options: BuildAndPushSelfHostedImageOptions @@ -656,7 +668,9 @@ async function buildAndPushSelfHostedImage( "options.projectRef": options.projectRef, }); - const args = [ + const imageRef = `${options.registryHost ? `${options.registryHost}/` : ""}${options.imageTag}`; + + const buildArgs = [ "build", "-f", "Containerfile", @@ -673,48 +687,41 @@ async function buildAndPushSelfHostedImage( "--build-arg", `TRIGGER_PROJECT_REF=${options.projectRef}`, "-t", - `${options.imageTag}`, + imageRef, ".", // The build context ].filter(Boolean) as string[]; - logger.debug(`docker ${args.join(" ")}`); + logger.debug(`docker ${buildArgs.join(" ")}`); - span.setAttribute("docker.command", `docker ${args.join(" ")}`); + span.setAttribute("docker.command.build", `docker ${buildArgs.join(" ")}`); - // Step 4: Build and push the image - const childProcess = execa("docker", args, { + // Build the image + const buildProcess = execa("docker", buildArgs, { cwd: options.cwd, }); const errors: string[] = []; + let digest: string | undefined; try { await new Promise((res, rej) => { // For some reason everything is output on stderr, not stdout - childProcess.stderr?.on("data", (data: Buffer) => { + buildProcess.stderr?.on("data", (data: Buffer) => { const text = data.toString(); errors.push(text); logger.debug(text); }); - childProcess.on("error", (e) => rej(e)); - childProcess.on("close", () => res()); + buildProcess.on("error", (e) => rej(e)); + buildProcess.on("close", () => res()); }); - const digest = extractImageDigest(errors); + digest = extractImageDigest(errors); span.setAttributes({ "image.digest": digest, }); - - span.end(); - - return { - ok: true as const, - image: options.imageTag, - digest, - }; } catch (e) { recordSpanException(span, e); @@ -725,6 +732,57 @@ async function buildAndPushSelfHostedImage( error: e instanceof Error ? e.message : JSON.stringify(e), }; } + + const pushArgs = ["push", imageRef].filter(Boolean) as string[]; + + logger.debug(`docker ${pushArgs.join(" ")}`); + + span.setAttribute("docker.command.push", `docker ${pushArgs.join(" ")}`); + + if (options.selfHostedRegistry || options.pushImage) { + // Push the image + const pushProcess = execa("docker", pushArgs, { + cwd: options.cwd, + }); + + try { + await new Promise((res, rej) => { + pushProcess.stdout?.on("data", (data: Buffer) => { + const text = data.toString(); + + logger.debug(text); + }); + + pushProcess.stderr?.on("data", (data: Buffer) => { + const text = data.toString(); + + logger.debug(text); + }); + + pushProcess.on("error", (e) => rej(e)); + pushProcess.on("close", () => res()); + }); + + span.end(); + } catch (e) { + recordSpanException(span, e); + + span.end(); + + return { + ok: false as const, + error: e instanceof Error ? e.message : JSON.stringify(e), + }; + } + } + + span.end(); + + return { + ok: true as const, + image: options.imageTag, + digest, + }; }); } diff --git a/packages/cli-v3/src/workers/prod/backgroundWorker.ts b/packages/cli-v3/src/workers/prod/backgroundWorker.ts index 4fc2bfc25..26ed569f0 100644 --- a/packages/cli-v3/src/workers/prod/backgroundWorker.ts +++ b/packages/cli-v3/src/workers/prod/backgroundWorker.ts @@ -2,6 +2,7 @@ import { BackgroundWorkerProperties, Config, CreateBackgroundWorkerResponse, + InferSocketMessageSchema, ProdChildToWorkerMessages, ProdTaskRunExecutionPayload, ProdWorkerToChildMessages, @@ -17,7 +18,6 @@ import { } from "@trigger.dev/core/v3"; import { Evt } from "evt"; import { ChildProcess, fork } from "node:child_process"; -import { safeDeleteFileSync } from "../../utilities/fileSystem"; import { UncaughtExceptionError } from "../common/errors"; class UnexpectedExitError extends Error { @@ -56,11 +56,19 @@ export class ProdBackgroundWorker { public onTaskHeartbeat: Evt = new Evt(); - public onWaitForDuration: Evt<{ version?: "v1"; ms: number }> = new Evt(); - public onWaitForTask: Evt<{ version?: "v1"; id: string }> = new Evt(); - public onWaitForBatch: Evt<{ version?: "v1"; id: string; runs: string[] }> = new Evt(); + public onWaitForBatch: Evt< + InferSocketMessageSchema + > = new Evt(); + public onWaitForDuration: Evt< + InferSocketMessageSchema + > = new Evt(); + public onWaitForTask: Evt< + InferSocketMessageSchema + > = new Evt(); public preCheckpointNotification = Evt.create<{ willCheckpointAndRestore: boolean }>(); + public onReadyForCheckpoint = Evt.create<{ version?: "v1" }>(); + public onCancelCheckpoint = Evt.create<{ version?: "v1" }>(); private _onClose: Evt = new Evt(); @@ -221,6 +229,15 @@ export class ProdBackgroundWorker { this.onWaitForTask.post(message); }); + taskRunProcess.onReadyForCheckpoint.attach((message) => { + this.onReadyForCheckpoint.post(message); + }); + + taskRunProcess.onCancelCheckpoint.attach((message) => { + this.onCancelCheckpoint.post(message); + }); + + // Notify down the chain this.preCheckpointNotification.attach((message) => { taskRunProcess.preCheckpointNotification.post(message); }); @@ -342,11 +359,19 @@ class TaskRunProcess { public onTaskHeartbeat: Evt = new Evt(); public onExit: Evt = new Evt(); - public onWaitForBatch: Evt<{ version?: "v1"; id: string; runs: string[] }> = new Evt(); - public onWaitForDuration: Evt<{ version?: "v1"; ms: number }> = new Evt(); - public onWaitForTask: Evt<{ version?: "v1"; id: string }> = new Evt(); + public onWaitForBatch: Evt< + InferSocketMessageSchema + > = new Evt(); + public onWaitForDuration: Evt< + InferSocketMessageSchema + > = new Evt(); + public onWaitForTask: Evt< + InferSocketMessageSchema + > = new Evt(); public preCheckpointNotification = Evt.create<{ willCheckpointAndRestore: boolean }>(); + public onReadyForCheckpoint = Evt.create<{ version?: "v1" }>(); + public onCancelCheckpoint = Evt.create<{ version?: "v1" }>(); constructor( private path: string, @@ -415,6 +440,12 @@ class TaskRunProcess { WAIT_FOR_TASK: async (message) => { this.onWaitForTask.post(message); }, + READY_FOR_CHECKPOINT: async (message) => { + this.onReadyForCheckpoint.post(message); + }, + CANCEL_CHECKPOINT: async (message) => { + this.onCancelCheckpoint.post(message); + }, }, }); diff --git a/packages/cli-v3/src/workers/prod/entry-point.ts b/packages/cli-v3/src/workers/prod/entry-point.ts index 6d5de2ac7..39a853798 100644 --- a/packages/cli-v3/src/workers/prod/entry-point.ts +++ b/packages/cli-v3/src/workers/prod/entry-point.ts @@ -3,12 +3,16 @@ import { CoordinatorToProdWorkerMessages, ProdWorkerToCoordinatorMessages, TaskResource, + WaitReason, ZodSocketConnection, } from "@trigger.dev/core/v3"; -import { HttpReply, getTextBody, SimpleLogger, getRandomPortNumber } from "@trigger.dev/core-apps"; +import { HttpReply, SimpleLogger, getRandomPortNumber } from "@trigger.dev/core-apps"; +import { readFile } from "node:fs/promises"; import { createServer } from "node:http"; +import { z } from "zod"; import { ProdBackgroundWorker } from "./backgroundWorker"; import { UncaughtExceptionError } from "../common/errors"; +import { setTimeout } from "node:timers/promises"; declare const __PROJECT_CONFIG__: Config; @@ -28,14 +32,17 @@ class ProdWorker { private projectRef = process.env.TRIGGER_PROJECT_REF!; private envId = process.env.TRIGGER_ENV_ID!; private runId = process.env.TRIGGER_RUN_ID || "index-only"; - private attemptId = process.env.TRIGGER_ATTEMPT_ID || "index-only"; private deploymentId = process.env.TRIGGER_DEPLOYMENT_ID!; + private deploymentVersion = process.env.TRIGGER_DEPLOYMENT_VERSION!; + private runningInKubernetes = !!process.env.KUBERNETES_PORT; private executing = false; private completed = new Set(); private paused = false; + private attemptFriendlyId?: string; - private nextResumeAfter: "WAIT_FOR_DURATION" | "WAIT_FOR_TASK" | "WAIT_FOR_BATCH" | undefined; + private nextResumeAfter?: WaitReason; + private waitForPostStart = false; #httpPort: number; #backgroundWorker: ProdBackgroundWorker; @@ -49,7 +56,7 @@ class ProdWorker { port: number, private host = "0.0.0.0" ) { - this.#coordinatorSocket = this.#createCoordinatorSocket(); + this.#coordinatorSocket = this.#createCoordinatorSocket(COORDINATOR_HOST); this.#backgroundWorker = new ProdBackgroundWorker("worker.js", { projectConfig: __PROJECT_CONFIG__, @@ -68,76 +75,154 @@ class ProdWorker { this.#coordinatorSocket.socket.emit("TASK_HEARTBEAT", { version: "v1", attemptFriendlyId }); }); + this.#backgroundWorker.onReadyForCheckpoint.attach(async (message) => { + this.#coordinatorSocket.socket.emit("READY_FOR_CHECKPOINT", { version: "v1" }); + }); + + this.#backgroundWorker.onCancelCheckpoint.attach(async (message) => { + logger.log("onCancelCheckpoint() clearing paused state, don't wait for post start hook", { + paused: this.paused, + nextResumeAfter: this.nextResumeAfter, + waitForPostStart: this.waitForPostStart, + }); + + this.paused = false; + this.nextResumeAfter = undefined; + this.waitForPostStart = false; + + this.#coordinatorSocket.socket.emit("CANCEL_CHECKPOINT", { version: "v1" }); + }); + this.#backgroundWorker.onWaitForDuration.attach(async (message) => { - // TODO: Switch to .send() once coordinator uses zod handler for all messages + if (!this.attemptFriendlyId) { + logger.error("Failed to send wait message, attempt friendly ID not set", { message }); + return; + } + const { willCheckpointAndRestore } = await this.#coordinatorSocket.socket.emitWithAck( "WAIT_FOR_DURATION", - { version: "v1", ...message } + { + ...message, + attemptFriendlyId: this.attemptFriendlyId, + } ); - logger.log("WAIT_FOR_DURATION", { willCheckpointAndRestore }); - - this.#backgroundWorker.preCheckpointNotification.post({ willCheckpointAndRestore }); - - setTimeout(() => { - if (willCheckpointAndRestore) { - this.paused = true; - this.nextResumeAfter = "WAIT_FOR_DURATION"; - } - // Forcing a reconnect will ensure the connection handler runs to trigger automatic resume - this.#coordinatorSocket.close(); - this.#coordinatorSocket.connect(); - }, 3_000); + this.#prepareForWait("WAIT_FOR_DURATION", willCheckpointAndRestore); }); this.#backgroundWorker.onWaitForTask.attach(async (message) => { - // TODO: Switch to .send() once coordinator uses zod handler for all messages + if (!this.attemptFriendlyId) { + logger.error("Failed to send wait message, attempt friendly ID not set", { message }); + return; + } + const { willCheckpointAndRestore } = await this.#coordinatorSocket.socket.emitWithAck( "WAIT_FOR_TASK", - { version: "v1", ...message } + { + ...message, + attemptFriendlyId: this.attemptFriendlyId, + } ); - logger.log("WAIT_FOR_TASK", { willCheckpointAndRestore }); - - this.#backgroundWorker.preCheckpointNotification.post({ willCheckpointAndRestore }); - - setTimeout(() => { - if (willCheckpointAndRestore) { - this.paused = true; - this.nextResumeAfter = "WAIT_FOR_TASK"; - } - // Forcing a reconnect will ensure the connection handler runs to trigger automatic resume - this.#coordinatorSocket.close(); - this.#coordinatorSocket.connect(); - }, 3_000); + this.#prepareForWait("WAIT_FOR_TASK", willCheckpointAndRestore); }); this.#backgroundWorker.onWaitForBatch.attach(async (message) => { - // TODO: Switch to .send() once coordinator uses zod handler for all messages + if (!this.attemptFriendlyId) { + logger.error("Failed to send wait message, attempt friendly ID not set", { message }); + return; + } + const { willCheckpointAndRestore } = await this.#coordinatorSocket.socket.emitWithAck( "WAIT_FOR_BATCH", - { version: "v1", ...message } + { + ...message, + attemptFriendlyId: this.attemptFriendlyId, + } ); - logger.log("WAIT_FOR_BATCH", { willCheckpointAndRestore }); - - this.#backgroundWorker.preCheckpointNotification.post({ willCheckpointAndRestore }); - - setTimeout(() => { - if (willCheckpointAndRestore) { - this.paused = true; - this.nextResumeAfter = "WAIT_FOR_BATCH"; - } - // Forcing a reconnect will ensure the connection handler runs to trigger automatic resume - this.#coordinatorSocket.close(); - this.#coordinatorSocket.connect(); - }, 3_000); + this.#prepareForWait("WAIT_FOR_BATCH", willCheckpointAndRestore); }); this.#httpPort = port; this.#httpServer = this.#createHttpServer(); } + async #reconnect(isPostStart = false) { + if (isPostStart) { + this.waitForPostStart = false; + } + + this.#coordinatorSocket.close(); + + if (!this.runningInKubernetes) { + this.#coordinatorSocket.connect(); + return; + } + + try { + const coordinatorHost = (await readFile("/etc/taskinfo/coordinator-host", "utf-8")).replace( + "\n", + "" + ); + + logger.log("reconnecting", { + coordinatorHost: { + fromEnv: COORDINATOR_HOST, + fromVolume: coordinatorHost, + current: this.#coordinatorSocket.socket.io.opts.hostname, + }, + }); + + this.#coordinatorSocket = this.#createCoordinatorSocket(coordinatorHost); + } catch (error) { + logger.error("taskinfo read error during reconnect", { error }); + this.#coordinatorSocket.connect(); + } + } + + #prepareForWait(reason: WaitReason, willCheckpointAndRestore: boolean) { + logger.log(`prepare for ${reason}`, { willCheckpointAndRestore }); + + this.#backgroundWorker.preCheckpointNotification.post({ willCheckpointAndRestore }); + + if (willCheckpointAndRestore) { + this.paused = true; + this.nextResumeAfter = reason; + this.waitForPostStart = true; + } + } + + async #prepareForRetry(willCheckpointAndRestore: boolean, shouldExit: boolean) { + logger.log("prepare for retry", { willCheckpointAndRestore, shouldExit }); + + // Graceful shutdown on final attempt + if (shouldExit) { + if (willCheckpointAndRestore) { + logger.log("WARNING: Will checkpoint but also requested exit. This won't end well."); + } + + await this.#backgroundWorker.close(); + process.exit(0); + } + + this.executing = false; + this.attemptFriendlyId = undefined; + + if (willCheckpointAndRestore) { + this.waitForPostStart = true; + this.#coordinatorSocket.socket.emit("READY_FOR_CHECKPOINT", { version: "v1" }); + return; + } + } + + #resumeAfterDuration() { + this.paused = false; + this.nextResumeAfter = undefined; + + this.#backgroundWorker.waitCompletedNotification(); + } + #returnValidatedExtraHeaders(headers: Record) { for (const [key, value] of Object.entries(headers)) { if (value === undefined) { @@ -148,33 +233,82 @@ class ProdWorker { return headers; } - #createCoordinatorSocket() { + #createCoordinatorSocket(host: string) { const extraHeaders = this.#returnValidatedExtraHeaders({ "x-machine-name": MACHINE_NAME, "x-pod-name": POD_NAME, "x-trigger-content-hash": this.contentHash, "x-trigger-project-ref": this.projectRef, - "x-trigger-attempt-id": this.attemptId, "x-trigger-env-id": this.envId, "x-trigger-deployment-id": this.deploymentId, "x-trigger-run-id": this.runId, + "x-trigger-deployment-version": this.deploymentVersion, }); + if (this.attemptFriendlyId) { + extraHeaders["x-trigger-attempt-friendly-id"] = this.attemptFriendlyId; + } + logger.log("connecting to coordinator", { - host: COORDINATOR_HOST, + host, port: COORDINATOR_PORT, extraHeaders, }); const coordinatorConnection = new ZodSocketConnection({ namespace: "prod-worker", - host: COORDINATOR_HOST, + host, port: COORDINATOR_PORT, clientMessages: ProdWorkerToCoordinatorMessages, serverMessages: CoordinatorToProdWorkerMessages, extraHeaders, handlers: { - RESUME: async (message) => { + RESUME_AFTER_DEPENDENCY: async (message) => { + if (!this.paused) { + logger.error("worker not paused", { + completions: message.completions, + executions: message.executions, + }); + return; + } + + if (message.completions.length !== message.executions.length) { + logger.error("did not receive the same number of completions and executions", { + completions: message.completions, + executions: message.executions, + }); + return; + } + + if (message.completions.length === 0 || message.executions.length === 0) { + logger.error("no completions or executions", { + completions: message.completions, + executions: message.executions, + }); + return; + } + + if ( + this.nextResumeAfter !== "WAIT_FOR_TASK" && + this.nextResumeAfter !== "WAIT_FOR_BATCH" + ) { + logger.error("not waiting to resume after dependency", { + nextResumeAfter: this.nextResumeAfter, + }); + return; + } + + if (this.nextResumeAfter === "WAIT_FOR_TASK" && message.completions.length > 1) { + logger.error("waiting for single task but got multiple completions", { + completions: message.completions, + executions: message.executions, + }); + return; + } + + this.paused = false; + this.nextResumeAfter = undefined; + for (let i = 0; i < message.completions.length; i++) { const completion = message.completions[i]; const execution = message.executions[i]; @@ -185,7 +319,21 @@ class ProdWorker { } }, RESUME_AFTER_DURATION: async (message) => { - this.#backgroundWorker.waitCompletedNotification(); + if (!this.paused) { + logger.error("worker not paused", { + attemptId: message.attemptId, + }); + return; + } + + if (this.nextResumeAfter !== "WAIT_FOR_DURATION") { + logger.error("not waiting to resume after duration", { + nextResumeAfter: this.nextResumeAfter, + }); + return; + } + + this.#resumeAfterDuration(); }, EXECUTE_TASK_RUN: async ({ executionPayload }) => { if (this.executing) { @@ -199,34 +347,25 @@ class ProdWorker { } this.executing = true; + this.attemptFriendlyId = executionPayload.execution.attempt.id; const completion = await this.#backgroundWorker.executeTaskRun(executionPayload); logger.log("completed", completion); this.completed.add(executionPayload.execution.attempt.id); - this.executing = false; await this.#backgroundWorker.flushTelemetry(); - const { didCheckpoint, shouldExit } = await this.#coordinatorSocket.socket.emitWithAck( - "TASK_RUN_COMPLETED", - { + const { willCheckpointAndRestore, shouldExit } = + await this.#coordinatorSocket.socket.emitWithAck("TASK_RUN_COMPLETED", { version: "v1", execution: executionPayload.execution, completion, - } - ); + }); - logger.log("completion acknowledged", { didCheckpoint, shouldExit }); + logger.log("completion acknowledged", { willCheckpointAndRestore, shouldExit }); - if (shouldExit) { - await this.#backgroundWorker.close(); - process.exit(0); - } - - // Forcing a reconnect will ensure the connection handler runs and signals we are ready for another execution - this.#coordinatorSocket.close(); - this.#coordinatorSocket.connect(); + this.#prepareForRetry(willCheckpointAndRestore, shouldExit); }, REQUEST_ATTEMPT_CANCELLATION: async (message) => { if (!this.executing) { @@ -236,10 +375,27 @@ class ProdWorker { await this.#backgroundWorker.cancelAttempt(message.attemptId); }, REQUEST_EXIT: async () => { + this.#coordinatorSocket.close(); process.exit(0); }, + READY_FOR_RETRY: async (message) => { + if (this.completed.size < 1) { + return; + } + + this.#coordinatorSocket.socket.emit("READY_FOR_EXECUTION", { + version: "v1", + runId: this.runId, + totalCompletions: this.completed.size, + }); + }, }, onConnection: async (socket, handler, sender, logger) => { + if (this.waitForPostStart) { + logger.log("skip connection handler, waiting for post start hook"); + return; + } + if (process.env.INDEX_TASKS === "true") { try { const taskResources = await this.#initializeWorker(); @@ -251,15 +407,15 @@ class ProdWorker { }); if (success) { - logger("indexing done, shutting down.."); + logger.info("indexing done, shutting down.."); process.exit(0); } else { - logger("indexing failure, shutting down.."); + logger.info("indexing failure, shutting down.."); process.exit(1); } } catch (e) { if (e instanceof UncaughtExceptionError) { - logger("uncaught exception", e.originalError.message); + logger.error("uncaught exception", { message: e.originalError.message }); socket.emit("INDEXING_FAILED", { version: "v1", @@ -271,7 +427,7 @@ class ProdWorker { }, }); } else if (e instanceof Error) { - logger("error", e.message); + logger.error("error", { message: e.message }); socket.emit("INDEXING_FAILED", { version: "v1", @@ -283,7 +439,7 @@ class ProdWorker { }, }); } else if (typeof e === "string") { - logger("string error", e); + logger.error("string error", { message: e }); socket.emit("INDEXING_FAILED", { version: "v1", @@ -294,7 +450,7 @@ class ProdWorker { }, }); } else { - logger("unknown error", e); + logger.error("unknown error", { error: e }); socket.emit("INDEXING_FAILED", { version: "v1", @@ -306,9 +462,8 @@ class ProdWorker { }); } - setTimeout(() => { - process.exit(1); - }, 200); + await setTimeout(200); + process.exit(1); } } @@ -317,15 +472,22 @@ class ProdWorker { return; } + if (!this.attemptFriendlyId) { + logger.error("Missing friendly ID"); + return; + } + + if (this.nextResumeAfter === "WAIT_FOR_DURATION") { + this.#resumeAfterDuration(); + return; + } + socket.emit("READY_FOR_RESUME", { version: "v1", - attemptId: this.attemptId, + attemptFriendlyId: this.attemptFriendlyId, type: this.nextResumeAfter, }); - this.#backgroundWorker.waitCompletedNotification(); - this.paused = false; - return; } @@ -335,10 +497,23 @@ class ProdWorker { socket.emit("READY_FOR_EXECUTION", { version: "v1", - attemptId: this.attemptId, runId: this.runId, + totalCompletions: this.completed.size, }); }, + onError: async (socket, err, logger) => { + logger.error("onError", { + error: { + name: err.name, + message: err.message, + }, + }); + + await this.#reconnect(); + }, + onDisconnect: async (socket, reason, description, logger) => { + // this.#reconnect(); + }, }); return coordinatorConnection; @@ -347,84 +522,117 @@ class ProdWorker { #createHttpServer() { const httpServer = createServer(async (req, res) => { logger.log(`[${req.method}]`, req.url); - const reply = new HttpReply(res); - switch (req.url) { - case "/complete": - setTimeout(() => process.exit(0), 1000); - return reply.text("ok"); + try { + const url = new URL(req.url ?? "", `http://${req.headers.host}`); - case "/date": - const date = new Date(); - return reply.text(date.toString()); + switch (url.pathname) { + case "/health": { + return reply.text("ok"); + } - case "/fail": - setTimeout(() => process.exit(1), 1000); - return reply.text("ok"); + case "/status": { + return reply.json({ + executing: this.executing, + pause: this.paused, + nextResumeAfter: this.nextResumeAfter, + }); + } - case "/health": - return reply.text("ok"); + case "/connect": { + this.#coordinatorSocket.connect(); - case "/whoami": - return reply.text(this.contentHash); + return reply.text("Connected to coordinator"); + } - case "/wait": - const { willCheckpointAndRestore } = await this.#coordinatorSocket.sendWithAck( - "WAIT_FOR_DURATION", - { + case "/close": { + await this.#coordinatorSocket.sendWithAck("LOG", { version: "v1", - ms: 60_000, - } - ); - logger.log("WAIT_FOR_DURATION", { willCheckpointAndRestore }); - // this is required when C/Ring established connections - this.#coordinatorSocket.close(); - return reply.text("sent WAIT"); + text: `[${req.method}] ${req.url}`, + }); - case "/connect": - this.#coordinatorSocket.connect(); - return reply.empty(); - - case "/close": - this.#coordinatorSocket.sendWithAck("LOG", { - version: "v1", - text: "close without delay", - }); - this.#coordinatorSocket.close(); - return reply.empty(); - - case "/close-delay": - this.#coordinatorSocket.sendWithAck("LOG", { - version: "v1", - text: "close with delay", - }); - setTimeout(() => { this.#coordinatorSocket.close(); - }, 200); - return reply.empty(); - case "/log": - this.#coordinatorSocket.sendWithAck("LOG", { - version: "v1", - text: await getTextBody(req), - }); - return reply.empty(); + return reply.text("Disconnected from coordinator"); + } - case "/preStop": - logger.log("should do preStop stuff, e.g. checkpoint and graceful shutdown"); - return reply.text("got preStop request"); + case "/test": { + await this.#coordinatorSocket.sendWithAck("LOG", { + version: "v1", + text: `[${req.method}] ${req.url}`, + }); - case "/ready": - this.#coordinatorSocket.send("READY_FOR_EXECUTION", { - version: "v1", - attemptId: this.attemptId, - runId: this.runId, - }); - return reply.empty(); + return reply.text("Received ACK from coordinator"); + } - default: - return reply.empty(404); + case "/preStop": { + const schema = z.enum(["index", "create", "restore"]); + + const cause = schema.safeParse(url.searchParams.get("cause")); + + if (!cause.success) { + logger.error("Failed to parse cause", { cause }); + return; + } + + switch (cause.data) { + case "index": { + break; + } + case "create": { + break; + } + case "restore": { + break; + } + default: { + logger.error("Unhandled cause", { cause: cause.data }); + break; + } + } + logger.log("preStop", { url: req.url }); + + return reply.text("preStop ok"); + } + + case "/postStart": { + const schema = z.enum(["index", "create", "restore"]); + + const cause = schema.safeParse(url.searchParams.get("cause")); + + if (!cause.success) { + logger.error("Failed to parse cause", { cause }); + return; + } + + switch (cause.data) { + case "index": { + break; + } + case "create": { + break; + } + case "restore": { + await this.#reconnect(true); + break; + } + default: { + logger.error("Unhandled cause", { cause: cause.data }); + break; + } + } + + return reply.text("postStart ok"); + } + + default: { + return reply.empty(404); + } + } + } catch (error) { + logger.error("HTTP server error", { error }); + reply.empty(500); } }); @@ -436,7 +644,7 @@ class ProdWorker { logger.log("http server listening on port", this.#httpPort); }); - httpServer.on("error", (error) => { + httpServer.on("error", async (error) => { // @ts-expect-error if (error.code != "EADDRINUSE") { return; @@ -446,9 +654,8 @@ class ProdWorker { this.#httpPort = getRandomPortNumber(); - setTimeout(() => { - this.start(); - }, 100); + await setTimeout(100); + this.start(); }); return httpServer; diff --git a/packages/core-apps/package.json b/packages/core-apps/package.json index bebf33384..5eeb914b6 100644 --- a/packages/core-apps/package.json +++ b/packages/core-apps/package.json @@ -21,17 +21,12 @@ "./package.json": "./package.json" }, "scripts": { - "clean": "rimraf dist", - "build": "npm run clean && npm run build:tsup", - "build:tsup": "tsup --dts-resolve", "typecheck": "tsc --noEmit" }, "devDependencies": { + "@trigger.dev/core": "workspace:*", "@trigger.dev/tsconfig": "workspace:*", - "@trigger.dev/tsup": "workspace:*", "@types/node": "18", - "rimraf": "^3.0.2", - "tsup": "^8.0.1", "typescript": "^5.3.0" }, "engines": { diff --git a/packages/core-apps/src/http.ts b/packages/core-apps/src/http.ts index 60eeb67a0..0a7a8560d 100644 --- a/packages/core-apps/src/http.ts +++ b/packages/core-apps/src/http.ts @@ -26,6 +26,14 @@ export class HttpReply { .writeHead(status ?? 200, { "Content-Type": contentType || "text/plain" }) .end(text.endsWith("\n") ? text : `${text}\n`); } + + json(value: any, pretty?: boolean) { + return this.text( + JSON.stringify(value, undefined, pretty ? 2 : undefined), + 200, + "application/json" + ); + } } function getRandomInteger(min: number, max: number) { diff --git a/packages/core-apps/src/provider.ts b/packages/core-apps/src/provider.ts index 1b120664b..d304b4fa5 100644 --- a/packages/core-apps/src/provider.ts +++ b/packages/core-apps/src/provider.ts @@ -2,6 +2,7 @@ import { createServer } from "node:http"; import { ClientToSharedQueueMessages, clientWebsocketMessages, + Machine, PlatformToProviderMessages, ProviderToPlatformMessages, SharedQueueToClientMessages, @@ -20,12 +21,36 @@ const PLATFORM_SECRET = process.env.PLATFORM_SECRET || "provider-secret"; const logger = new SimpleLogger(`[${MACHINE_NAME}]`); +export interface TaskOperationsIndexOptions { + shortCode: string; + imageRef: string; + envId: string; + apiKey: string; + apiUrl: string; +} + +export interface TaskOperationsCreateOptions { + runId: string; + image: string; + machine: Machine; + envId: string; + version: string; +} + +export interface TaskOperationsRestoreOptions { + runId: string; + imageRef: string; + checkpointRef: string; + machine: Machine; +} + export interface TaskOperations { - create: (...args: any[]) => Promise; - restore: (...args: any[]) => Promise; + index: (opts: TaskOperationsIndexOptions) => Promise; + create: (opts: TaskOperationsCreateOptions) => Promise; + restore: (opts: TaskOperationsRestoreOptions) => Promise; + delete: (...args: any[]) => Promise; get: (...args: any[]) => Promise; - index: (...args: any[]) => Promise; } type ProviderShellOptions = { @@ -74,13 +99,17 @@ export class ProviderShell implements Provider { }, BACKGROUND_WORKER_MESSAGE: async (message) => { if (message.data.type === "SCHEDULE_ATTEMPT") { - this.tasks.create({ - envId: message.data.envId, - runId: message.data.runId, - attemptId: message.data.id, - image: message.data.image, - machine: {}, - }); + try { + this.tasks.create({ + envId: message.data.envId, + runId: message.data.runId, + image: message.data.image, + machine: {}, + version: message.version, + }); + } catch (error) { + logger.error("create failed", error); + } } }, }, @@ -134,8 +163,8 @@ export class ProviderShell implements Provider { INDEX: async (message) => { try { await this.tasks.index({ - contentHash: message.contentHash, - imageTag: message.imageTag, + shortCode: message.shortCode, + imageRef: message.imageTag, envId: message.envId, apiKey: message.apiKey, apiUrl: message.apiUrl, @@ -178,10 +207,12 @@ export class ProviderShell implements Provider { try { await this.tasks.restore({ runId: message.runId, - attemptId: message.attemptId, checkpointRef: message.location, - // TODO - // machine: message.machine, + machine: { + cpu: "1", + memory: "100Mi", + }, + imageRef: message.imageRef, }); } catch (error) { logger.error("restore failed", error); @@ -221,13 +252,14 @@ export class ProviderShell implements Provider { const body = await getTextBody(req); await this.tasks.create({ - attemptId: body, envId: "placeholder", image: body, machine: { cpu: "1", memory: "100Mi", }, + runId: "", + version: "", }); return reply.text(`sent restore request: ${body}`); diff --git a/packages/core-apps/tsconfig.build.json b/packages/core-apps/tsconfig.build.json deleted file mode 100644 index f444efc19..000000000 --- a/packages/core-apps/tsconfig.build.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@trigger.dev/tsconfig/node18.json", - "include": ["src/globals.d.ts", "./src/**/*.ts", "tsup.config.ts"], - "compilerOptions": { - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declaration": false, - "declarationMap": false - }, - "exclude": ["node_modules"] -} diff --git a/packages/core-apps/tsup.config.ts b/packages/core-apps/tsup.config.ts deleted file mode 100644 index 5a0b9c86a..000000000 --- a/packages/core-apps/tsup.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { packageOptions, defineConfig } from "@trigger.dev/tsup"; - -export default defineConfig({ - ...packageOptions, - config: "tsconfig.build.json", - banner: { - js: "import { createRequire } from 'module';const require = createRequire(import.meta.url);", - }, -}); diff --git a/packages/core/src/v3/runtime/prodRuntimeManager.ts b/packages/core/src/v3/runtime/prodRuntimeManager.ts index 0f9889bb6..c7359802d 100644 --- a/packages/core/src/v3/runtime/prodRuntimeManager.ts +++ b/packages/core/src/v3/runtime/prodRuntimeManager.ts @@ -49,6 +49,8 @@ export class ProdRuntimeManager implements RuntimeManager { async waitForDuration(ms: number): Promise { let timeout: NodeJS.Timeout | undefined; + const now = Date.now(); + const resolveAfterDuration = new Promise((resolve) => { timeout = setTimeout(resolve, ms); }); @@ -58,21 +60,28 @@ export class ProdRuntimeManager implements RuntimeManager { return; } - const waitForRestore = new Promise((resolve, reject) => { + const waitForRestore = new Promise((resolve, reject) => { this._waitForRestore = { resolve, reject }; }); - // There is a slight delay before actually checkpointing, so this has a chance to return - const { willCheckpointAndRestore } = await this.ipc.sendWithAck("WAIT_FOR_DURATION", { ms }); + const { willCheckpointAndRestore } = await this.ipc.sendWithAck("WAIT_FOR_DURATION", { + ms, + now, + }); if (!willCheckpointAndRestore) { await resolveAfterDuration; return; } - // Checkpointing should happen after this line + this.ipc.send("READY_FOR_CHECKPOINT", {}); + + // Don't wait for checkpoint beyond the requested wait duration + await Promise.race([waitForRestore, resolveAfterDuration]); + + // The coordinator can then cancel any in-progress checkpoints + this.ipc.send("CANCEL_CHECKPOINT", {}); - await waitForRestore; clearTimeout(timeout); } @@ -95,7 +104,7 @@ export class ProdRuntimeManager implements RuntimeManager { }); await this.ipc.send("WAIT_FOR_TASK", { - id: params.id, + friendlyId: params.id, }); return await promise; @@ -119,8 +128,8 @@ export class ProdRuntimeManager implements RuntimeManager { ); await this.ipc.send("WAIT_FOR_BATCH", { - id: params.id, - runs: params.runs, + batchFriendlyId: params.id, + runFriendlyIds: params.runs, }); const results = await promise; diff --git a/packages/core/src/v3/schemas/messages.ts b/packages/core/src/v3/schemas/messages.ts index 2cb724d43..f37ad1c27 100644 --- a/packages/core/src/v3/schemas/messages.ts +++ b/packages/core/src/v3/schemas/messages.ts @@ -43,6 +43,7 @@ export const BackgroundWorkerServerMessages = z.discriminatedUnion("type", [ image: z.string(), envId: z.string(), runId: z.string(), + version: z.string(), }), ]); @@ -302,10 +303,21 @@ export const ProdChildToWorkerMessages = { READY_TO_DISPOSE: { message: z.undefined(), }, + READY_FOR_CHECKPOINT: { + message: z.object({ + version: z.literal("v1").default("v1"), + }), + }, + CANCEL_CHECKPOINT: { + message: z.object({ + version: z.literal("v1").default("v1"), + }), + }, WAIT_FOR_DURATION: { message: z.object({ version: z.literal("v1").default("v1"), ms: z.number(), + now: z.number(), }), callback: z.object({ willCheckpointAndRestore: z.boolean(), @@ -314,14 +326,14 @@ export const ProdChildToWorkerMessages = { WAIT_FOR_TASK: { message: z.object({ version: z.literal("v1").default("v1"), - id: z.string(), + friendlyId: z.string(), }), }, WAIT_FOR_BATCH: { message: z.object({ version: z.literal("v1").default("v1"), - id: z.string(), - runs: z.string().array(), + batchFriendlyId: z.string(), + runFriendlyIds: z.string().array(), }), }, UNCAUGHT_EXCEPTION: { diff --git a/packages/core/src/v3/schemas/schemas.ts b/packages/core/src/v3/schemas/schemas.ts index 06640caec..710a49329 100644 --- a/packages/core/src/v3/schemas/schemas.ts +++ b/packages/core/src/v3/schemas/schemas.ts @@ -37,6 +37,10 @@ export const Machine = z.object({ export type Machine = z.infer; +export const WaitReason = z.enum(["WAIT_FOR_DURATION", "WAIT_FOR_TASK", "WAIT_FOR_BATCH"]); + +export type WaitReason = z.infer; + export const ProviderToPlatformMessages = { LOG: { message: z.object({ @@ -68,7 +72,7 @@ export const PlatformToProviderMessages = { message: z.object({ version: z.literal("v1").default("v1"), imageTag: z.string(), - contentHash: z.string(), + shortCode: z.string(), envId: z.string(), apiKey: z.string(), apiUrl: z.string(), @@ -99,10 +103,10 @@ export const PlatformToProviderMessages = { version: z.literal("v1").default("v1"), checkpointId: z.string(), runId: z.string(), - attemptId: z.string(), type: z.enum(["DOCKER", "KUBERNETES"]), location: z.string(), reason: z.string().optional(), + imageRef: z.string(), }), }, DELETE: { @@ -155,8 +159,8 @@ export const CoordinatorToPlatformMessages = { READY_FOR_EXECUTION: { message: z.object({ version: z.literal("v1").default("v1"), - attemptId: z.string(), runId: z.string(), + totalCompletions: z.number(), }), callback: z.discriminatedUnion("success", [ z.object({ @@ -171,8 +175,8 @@ export const CoordinatorToPlatformMessages = { READY_FOR_RESUME: { message: z.object({ version: z.literal("v1").default("v1"), - attemptId: z.string(), - type: z.enum(["WAIT_FOR_DURATION", "WAIT_FOR_TASK", "WAIT_FOR_BATCH"]), + attemptFriendlyId: z.string(), + type: WaitReason, }), }, TASK_RUN_COMPLETED: { @@ -180,6 +184,12 @@ export const CoordinatorToPlatformMessages = { version: z.literal("v1").default("v1"), execution: ProdTaskRunExecution, completion: TaskRunExecutionResult, + checkpoint: z + .object({ + docker: z.boolean(), + location: z.string(), + }) + .optional(), }), }, TASK_HEARTBEAT: { @@ -191,21 +201,23 @@ export const CoordinatorToPlatformMessages = { CHECKPOINT_CREATED: { message: z.object({ version: z.literal("v1").default("v1"), - attemptId: z.string(), + attemptFriendlyId: z.string(), docker: z.boolean(), location: z.string(), reason: z.discriminatedUnion("type", [ z.object({ type: z.literal("WAIT_FOR_DURATION"), ms: z.number(), + now: z.number(), }), z.object({ type: z.literal("WAIT_FOR_BATCH"), - id: z.string(), + batchFriendlyId: z.string(), + runFriendlyIds: z.string().array(), }), z.object({ type: z.literal("WAIT_FOR_TASK"), - id: z.string(), + friendlyId: z.string(), }), z.object({ type: z.literal("RETRYING_AFTER_FAILURE"), @@ -228,10 +240,12 @@ export const CoordinatorToPlatformMessages = { }; export const PlatformToCoordinatorMessages = { - RESUME: { + RESUME_AFTER_DEPENDENCY: { message: z.object({ version: z.literal("v1").default("v1"), + runId: z.string(), attemptId: z.string(), + attemptFriendlyId: z.string(), completions: TaskRunExecutionResult.array(), executions: TaskRunExecution.array(), }), @@ -240,12 +254,20 @@ export const PlatformToCoordinatorMessages = { message: z.object({ version: z.literal("v1").default("v1"), attemptId: z.string(), + attemptFriendlyId: z.string(), }), }, REQUEST_ATTEMPT_CANCELLATION: { message: z.object({ version: z.literal("v1").default("v1"), attemptId: z.string(), + attemptFriendlyId: z.string(), + }), + }, + READY_FOR_RETRY: { + message: z.object({ + version: z.literal("v1").default("v1"), + runId: z.string(), }), }, }; @@ -315,15 +337,25 @@ export const ProdWorkerToCoordinatorMessages = { READY_FOR_EXECUTION: { message: z.object({ version: z.literal("v1").default("v1"), - attemptId: z.string(), runId: z.string(), + totalCompletions: z.number(), }), }, READY_FOR_RESUME: { message: z.object({ version: z.literal("v1").default("v1"), - attemptId: z.string(), - type: z.enum(["WAIT_FOR_DURATION", "WAIT_FOR_TASK", "WAIT_FOR_BATCH"]), + attemptFriendlyId: z.string(), + type: WaitReason, + }), + }, + READY_FOR_CHECKPOINT: { + message: z.object({ + version: z.literal("v1").default("v1"), + }), + }, + CANCEL_CHECKPOINT: { + message: z.object({ + version: z.literal("v1").default("v1"), }), }, TASK_HEARTBEAT: { @@ -339,7 +371,7 @@ export const ProdWorkerToCoordinatorMessages = { completion: TaskRunExecutionResult, }), callback: z.object({ - didCheckpoint: z.boolean(), + willCheckpointAndRestore: z.boolean(), shouldExit: z.boolean(), }), }, @@ -347,6 +379,8 @@ export const ProdWorkerToCoordinatorMessages = { message: z.object({ version: z.literal("v1").default("v1"), ms: z.number(), + now: z.number(), + attemptFriendlyId: z.string(), }), callback: z.object({ willCheckpointAndRestore: z.boolean(), @@ -355,7 +389,9 @@ export const ProdWorkerToCoordinatorMessages = { WAIT_FOR_TASK: { message: z.object({ version: z.literal("v1").default("v1"), - id: z.string(), + friendlyId: z.string(), + // This is the attempt that is waiting + attemptFriendlyId: z.string(), }), callback: z.object({ willCheckpointAndRestore: z.boolean(), @@ -364,8 +400,10 @@ export const ProdWorkerToCoordinatorMessages = { WAIT_FOR_BATCH: { message: z.object({ version: z.literal("v1").default("v1"), - id: z.string(), - runs: z.string().array(), + batchFriendlyId: z.string(), + runFriendlyIds: z.string().array(), + // This is the attempt that is waiting + attemptFriendlyId: z.string(), }), callback: z.object({ willCheckpointAndRestore: z.boolean(), @@ -385,7 +423,7 @@ export const ProdWorkerToCoordinatorMessages = { }; export const CoordinatorToProdWorkerMessages = { - RESUME: { + RESUME_AFTER_DEPENDENCY: { message: z.object({ version: z.literal("v1").default("v1"), attemptId: z.string(), @@ -416,6 +454,12 @@ export const CoordinatorToProdWorkerMessages = { version: z.literal("v1").default("v1"), }), }, + READY_FOR_RETRY: { + message: z.object({ + version: z.literal("v1").default("v1"), + runId: z.string(), + }), + }, }; export const ProdWorkerSocketData = z.object({ @@ -423,7 +467,8 @@ export const ProdWorkerSocketData = z.object({ projectRef: z.string(), envId: z.string(), runId: z.string(), - attemptId: z.string(), + attemptFriendlyId: z.string().optional(), podName: z.string(), deploymentId: z.string(), + deploymentVersion: z.string(), }); diff --git a/packages/core/src/v3/zodMessageHandler.ts b/packages/core/src/v3/zodMessageHandler.ts index b4a64c1b6..4627cb29d 100644 --- a/packages/core/src/v3/zodMessageHandler.ts +++ b/packages/core/src/v3/zodMessageHandler.ts @@ -1,4 +1,5 @@ import { z } from "zod"; +import { StructuredLogger } from "./zodNamespace"; export type ZodMessageValueSchema> = | z.ZodFirstPartySchemaTypes @@ -92,17 +93,20 @@ export class ZodMessageHandler }; } - public registerHandlers(emitter: EventEmitterLike, logger?: (...args: any[]) => void) { - const log = logger ?? console.log; + public registerHandlers(emitter: EventEmitterLike, logger?: StructuredLogger) { + const log = logger ?? console; if (!this.#handlers) { - log("No handlers provided"); + log.info("No handlers provided"); return; } for (const eventName of Object.keys(this.#schema)) { emitter.on(eventName, async (message: any, callback?: any): Promise => { - log(`handling ${eventName}`, message); + log.info(`handling ${eventName}`, { + payload: message, + hasCallback: !!callback, + }); let ack; diff --git a/packages/core/src/v3/zodNamespace.ts b/packages/core/src/v3/zodNamespace.ts index d6dd5976c..fac0a109f 100644 --- a/packages/core/src/v3/zodNamespace.ts +++ b/packages/core/src/v3/zodNamespace.ts @@ -25,6 +25,87 @@ export type ZodNamespaceSocket< z.infer >; +type StructuredArgs = (Record | undefined)[]; + +export interface StructuredLogger { + log: (message: string, ...args: StructuredArgs) => any; + error: (message: string, ...args: StructuredArgs) => any; + warn: (message: string, ...args: StructuredArgs) => any; + info: (message: string, ...args: StructuredArgs) => any; + debug: (message: string, ...args: StructuredArgs) => any; + child: (fields: Record) => StructuredLogger; +} + +export enum LogLevel { + "log", + "error", + "warn", + "info", + "debug", +} + +export class SimpleStructuredLogger implements StructuredLogger { + constructor( + private name: string, + private level: LogLevel = ["1", "true"].includes(process.env.DEBUG ?? "") + ? LogLevel.debug + : LogLevel.info, + private fields?: Record + ) {} + + child(fields: Record, level?: LogLevel) { + return new SimpleStructuredLogger(this.name, level, { ...this.fields, ...fields }); + } + + log(message: string, ...args: StructuredArgs) { + if (this.level < LogLevel.log) return; + + this.#structuredLog(console.log, message, "log", ...args); + } + + error(message: string, ...args: StructuredArgs) { + if (this.level < LogLevel.error) return; + + this.#structuredLog(console.error, message, "error", ...args); + } + + warn(message: string, ...args: StructuredArgs) { + if (this.level < LogLevel.warn) return; + + this.#structuredLog(console.warn, message, "warn", ...args); + } + + info(message: string, ...args: StructuredArgs) { + if (this.level < LogLevel.info) return; + + this.#structuredLog(console.info, message, "info", ...args); + } + + debug(message: string, ...args: StructuredArgs) { + if (this.level < LogLevel.debug) return; + + this.#structuredLog(console.debug, message, "debug", ...args); + } + + #structuredLog( + loggerFunction: (message: string, ...args: any[]) => void, + message: string, + level: string, + ...args: StructuredArgs + ) { + const structuredLog = { + ...(args.length === 1 ? args[0] : args), + ...this.fields, + timestamp: new Date(), + name: this.name, + message, + level, + }; + + loggerFunction(JSON.stringify(structuredLog)); + } +} + interface ZodNamespaceOptions< TClientMessages extends ZodSocketMessageCatalogSchema, TServerMessages extends ZodSocketMessageCatalogSchema, @@ -38,32 +119,33 @@ interface ZodNamespaceOptions< socketData?: TSocketData; handlers?: ZodSocketMessageHandlers; authToken?: string; + logger?: StructuredLogger; preAuth?: ( socket: ZodNamespaceSocket, next: (err?: ExtendedError) => void, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; postAuth?: ( socket: ZodNamespaceSocket, next: (err?: ExtendedError) => void, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; onConnection?: ( socket: ZodNamespaceSocket, handler: ZodSocketMessageHandler, sender: ZodMessageSender, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; onDisconnect?: ( socket: ZodNamespaceSocket, reason: DisconnectReason, description: any, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; onError?: ( socket: ZodNamespaceSocket, err: Error, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; } @@ -73,6 +155,7 @@ export class ZodNamespace< TSocketData extends z.ZodObject = any, TServerSideEvents extends EventsMap = DefaultEventsMap, > { + #logger: StructuredLogger; #handler: ZodSocketMessageHandler; sender: ZodMessageSender; @@ -87,6 +170,8 @@ export class ZodNamespace< constructor( opts: ZodNamespaceOptions ) { + this.#logger = opts.logger ?? new SimpleStructuredLogger(opts.name); + this.#handler = new ZodSocketMessageHandler({ schema: opts.clientMessages, handlers: opts.handlers, @@ -114,7 +199,7 @@ export class ZodNamespace< if (opts.preAuth) { this.namespace.use(async (socket, next) => { - const logger = createLogger(`[${opts.name}][${socket.id}][preAuth]`); + const logger = this.#logger.child({ socketId: socket.id, socketStage: "preAuth" }); if (typeof opts.preAuth === "function") { await opts.preAuth(socket, next, logger); @@ -124,21 +209,21 @@ export class ZodNamespace< if (opts.authToken) { this.namespace.use((socket, next) => { - const logger = createLogger(`[${opts.name}][${socket.id}][auth]`); + const logger = this.#logger.child({ socketId: socket.id, socketStage: "auth" }); const { auth } = socket.handshake; if (!("token" in auth)) { - logger("no token"); + logger.error("no token"); return socket.disconnect(true); } if (auth.token !== opts.authToken) { - logger("invalid token"); + logger.error("invalid token"); return socket.disconnect(true); } - logger("success"); + logger.info("success"); next(); }); @@ -146,7 +231,7 @@ export class ZodNamespace< if (opts.postAuth) { this.namespace.use(async (socket, next) => { - const logger = createLogger(`[${opts.name}][${socket.id}][postAuth]`); + const logger = this.#logger.child({ socketId: socket.id, socketStage: "auth" }); if (typeof opts.postAuth === "function") { await opts.postAuth(socket, next, logger); @@ -155,13 +240,13 @@ export class ZodNamespace< } this.namespace.on("connection", async (socket) => { - const logger = createLogger(`[${opts.name}][${socket.id}]`); - logger("connection"); + const logger = this.#logger.child({ socketId: socket.id, socketStage: "connection" }); + logger.info("connected"); this.#handler.registerHandlers(socket, logger); socket.on("disconnect", async (reason, description) => { - logger("disconnect", { reason, description }); + logger.info("disconnect", { reason, description }); if (opts.onDisconnect) { await opts.onDisconnect(socket, reason, description, logger); @@ -169,7 +254,7 @@ export class ZodNamespace< }); socket.on("error", async (error) => { - logger("error", error); + logger.error("error", { error }); if (opts.onError) { await opts.onError(socket, error, logger); @@ -186,7 +271,3 @@ export class ZodNamespace< return this.namespace.fetchSockets(); } } - -function createLogger(prefix: string) { - return (...args: any[]) => console.log(prefix, ...args); -} diff --git a/packages/core/src/v3/zodSocket.ts b/packages/core/src/v3/zodSocket.ts index 68d489796..294cdc89f 100644 --- a/packages/core/src/v3/zodSocket.ts +++ b/packages/core/src/v3/zodSocket.ts @@ -1,6 +1,7 @@ import { io, Socket } from "socket.io-client"; import { z } from "zod"; import { EventEmitterLike, ZodMessageValueSchema } from "./zodMessageHandler"; +import { LogLevel, SimpleStructuredLogger, StructuredLogger } from "./zodNamespace"; export interface ZodSocketMessageCatalogSchema { [key: string]: @@ -137,27 +138,35 @@ export class ZodSocketMessageHandler void) { - const log = logger ?? console.log; + public registerHandlers(emitter: EventEmitterLike, logger?: StructuredLogger) { + const log = logger ?? console; if (!this.#handlers) { - log("No handlers provided"); + log.info("No handlers provided"); return; } for (const eventName of Object.keys(this.#handlers)) { emitter.on(eventName, async (message: any, callback?: any): Promise => { - log(`handling ${eventName}`, message); + log.info(`handling ${eventName}`, { + payload: message, + hasCallback: !!callback, + }); let ack; - // FIXME: this only works if the message doesn't have genuine payload prop - if ("payload" in message) { - ack = await this.handleMessage({ type: eventName, ...message }); - } else { - // Handle messages not sent by ZodMessageSender - const { version, ...payload } = message; - ack = await this.handleMessage({ type: eventName, version, payload }); + try { + // FIXME: this only works if the message doesn't have genuine payload prop + if ("payload" in message) { + ack = await this.handleMessage({ type: eventName, ...message }); + } else { + // Handle messages not sent by ZodMessageSender + const { version, ...payload } = message; + ack = await this.handleMessage({ type: eventName, version, payload }); + } + } catch (error) { + log.error("Error while handling message", { error }); + return; } if (callback && typeof callback === "function") { @@ -267,18 +276,18 @@ interface ZodSocketConnectionOptions< socket: ZodSocket, handler: ZodSocketMessageHandler, sender: ZodSocketMessageSender, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; onDisconnect?: ( socket: ZodSocket, reason: Socket.DisconnectReason, description: any, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; onError?: ( socket: ZodSocket, err: Error, - logger: (...args: any[]) => void + logger: StructuredLogger ) => Promise; } @@ -290,7 +299,7 @@ export class ZodSocketConnection< socket: ZodSocket; #handler: ZodSocketMessageHandler; - #logger: (...args: any[]) => void; + #logger: StructuredLogger; constructor(opts: ZodSocketConnectionOptions) { this.socket = io(`ws://${opts.host}:${opts.port}/${opts.namespace}`, { @@ -301,7 +310,9 @@ export class ZodSocketConnection< extraHeaders: opts.extraHeaders, }); - this.#logger = createLogger(`[${opts.namespace}][${this.socket.id}]`); + this.#logger = new SimpleStructuredLogger(opts.namespace, LogLevel.info, { + socketId: this.socket.id, + }); this.#handler = new ZodSocketMessageHandler({ schema: opts.serverMessages, @@ -315,7 +326,7 @@ export class ZodSocketConnection< }); this.socket.on("connect_error", async (error) => { - this.#logger(`connect_error: ${error}`); + this.#logger.error(`connect_error: ${error}`); if (opts.onError) { await opts.onError(this.socket, error, this.#logger); @@ -323,7 +334,7 @@ export class ZodSocketConnection< }); this.socket.on("connect", async () => { - this.#logger("connect"); + this.#logger.info("connect"); if (opts.onConnection) { await opts.onConnection(this.socket, this.#handler, this.#sender, this.#logger); @@ -331,7 +342,7 @@ export class ZodSocketConnection< }); this.socket.on("disconnect", async (reason, description) => { - this.#logger("disconnect"); + this.#logger.info("disconnect", { reason, description }); if (opts.onDisconnect) { await opts.onDisconnect(this.socket, reason, description, this.#logger); diff --git a/packages/database/prisma/migrations/20240318170823_add_image_ref_to_checkpoint/migration.sql b/packages/database/prisma/migrations/20240318170823_add_image_ref_to_checkpoint/migration.sql new file mode 100644 index 000000000..1f12a8b59 --- /dev/null +++ b/packages/database/prisma/migrations/20240318170823_add_image_ref_to_checkpoint/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - Added the required column `imageRef` to the `Checkpoint` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "Checkpoint" ADD COLUMN "imageRef" TEXT NOT NULL; diff --git a/packages/database/prisma/migrations/20240322172035_add_checkpoint_event_to_dependencies/migration.sql b/packages/database/prisma/migrations/20240322172035_add_checkpoint_event_to_dependencies/migration.sql new file mode 100644 index 000000000..91fb3276a --- /dev/null +++ b/packages/database/prisma/migrations/20240322172035_add_checkpoint_event_to_dependencies/migration.sql @@ -0,0 +1,24 @@ +/* + Warnings: + + - A unique constraint covering the columns `[checkpointEventId]` on the table `BatchTaskRun` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[checkpointEventId]` on the table `TaskRunDependency` will be added. If there are existing duplicate values, this will fail. + +*/ +-- AlterTable +ALTER TABLE "BatchTaskRun" ADD COLUMN "checkpointEventId" TEXT; + +-- AlterTable +ALTER TABLE "TaskRunDependency" ADD COLUMN "checkpointEventId" TEXT; + +-- CreateIndex +CREATE UNIQUE INDEX "BatchTaskRun_checkpointEventId_key" ON "BatchTaskRun"("checkpointEventId"); + +-- CreateIndex +CREATE UNIQUE INDEX "TaskRunDependency_checkpointEventId_key" ON "TaskRunDependency"("checkpointEventId"); + +-- AddForeignKey +ALTER TABLE "TaskRunDependency" ADD CONSTRAINT "TaskRunDependency_checkpointEventId_fkey" FOREIGN KEY ("checkpointEventId") REFERENCES "CheckpointRestoreEvent"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BatchTaskRun" ADD CONSTRAINT "BatchTaskRun_checkpointEventId_fkey" FOREIGN KEY ("checkpointEventId") REFERENCES "CheckpointRestoreEvent"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/packages/database/prisma/schema.prisma b/packages/database/prisma/schema.prisma index 750a98697..dd075354f 100644 --- a/packages/database/prisma/schema.prisma +++ b/packages/database/prisma/schema.prisma @@ -1653,6 +1653,9 @@ model TaskRunDependency { taskRun TaskRun @relation(fields: [taskRunId], references: [id], onDelete: Cascade, onUpdate: Cascade) taskRunId String @unique + checkpointEvent CheckpointRestoreEvent? @relation(fields: [checkpointEventId], references: [id], onDelete: Cascade, onUpdate: Cascade) + checkpointEventId String? @unique + /// An attempt that is dependent on this task run. dependentAttempt TaskRunAttempt? @relation("dependentAttempt", fields: [dependentAttemptId], references: [id]) dependentAttemptId String? @unique @@ -1878,6 +1881,9 @@ model BatchTaskRun { idempotencyKey String taskIdentifier String + checkpointEvent CheckpointRestoreEvent? @relation(fields: [checkpointEventId], references: [id], onDelete: Cascade, onUpdate: Cascade) + checkpointEventId String? @unique + runtimeEnvironment RuntimeEnvironment @relation(fields: [runtimeEnvironmentId], references: [id], onDelete: Cascade, onUpdate: Cascade) runtimeEnvironmentId String @@ -1959,6 +1965,7 @@ model Checkpoint { type CheckpointType location String + imageRef String reason String? metadata String? @@ -2007,6 +2014,9 @@ model CheckpointRestoreEvent { runtimeEnvironment RuntimeEnvironment @relation(fields: [runtimeEnvironmentId], references: [id], onDelete: Cascade, onUpdate: Cascade) runtimeEnvironmentId String + taskRunDependency TaskRunDependency? + batchTaskRunDependency BatchTaskRun? + createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } diff --git a/packages/trigger-sdk/src/v3/wait.ts b/packages/trigger-sdk/src/v3/wait.ts index 9600d7a44..c3130af58 100644 --- a/packages/trigger-sdk/src/v3/wait.ts +++ b/packages/trigger-sdk/src/v3/wait.ts @@ -29,9 +29,12 @@ export const wait = { return tracer.startActiveSpan( `wait.for()`, async (span) => { + const start = Date.now(); const durationInMs = calculateDurationInMs(options); await runtime.waitForDuration(durationInMs); + + span.end(start + durationInMs); }, { attributes: { @@ -53,13 +56,17 @@ export const wait = { return tracer.startActiveSpan( `wait.until()`, async (span) => { + const start = Date.now(); + if (options.throwIfInThePast && options.date < new Date()) { throw new Error("Date is in the past"); } - const durationInMs = options.date.getTime() - new Date().getTime(); + const durationInMs = options.date.getTime() - start; await runtime.waitForDuration(durationInMs); + + span.end(start + durationInMs); }, { attributes: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d85c3e932..91e4c0c8b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,6 +55,7 @@ importers: dotenv: ^16.4.2 esbuild: ^0.19.11 execa: ^8.0.1 + nanoid: ^5.0.6 prom-client: ^15.1.0 socket.io: ^4.7.4 socket.io-client: ^4.7.4 @@ -64,6 +65,7 @@ importers: '@trigger.dev/core': link:../../packages/core '@trigger.dev/core-apps': link:../../packages/core-apps execa: 8.0.1 + nanoid: 5.0.6 prom-client: 15.1.0 socket.io: 4.7.4 socket.io-client: 4.7.4 @@ -1267,18 +1269,14 @@ importers: packages/core-apps: specifiers: + '@trigger.dev/core': workspace:* '@trigger.dev/tsconfig': workspace:* - '@trigger.dev/tsup': workspace:* '@types/node': '18' - rimraf: ^3.0.2 - tsup: ^8.0.1 typescript: ^5.3.0 devDependencies: + '@trigger.dev/core': link:../core '@trigger.dev/tsconfig': link:../../config-packages/tsconfig - '@trigger.dev/tsup': link:../../config-packages/tsup '@types/node': 18.17.1 - rimraf: 3.0.2 - tsup: 8.0.2_typescript@5.3.3 typescript: 5.3.3 packages/core-backend: @@ -30803,6 +30801,12 @@ packages: hasBin: true dev: false + /nanoid/5.0.6: + resolution: {integrity: sha512-rRq0eMHoGZxlvaFOUdK1Ev83Bd1IgzzR+WJ3IbDJ7QOSdAxYjlurSPqFs9s4lJg29RT6nPwizFtJhQS6V5xgiA==} + engines: {node: ^18 || >=20} + hasBin: true + dev: false + /nanomatch/1.2.13: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} @@ -37618,45 +37622,6 @@ packages: - ts-node dev: true - /tsup/8.0.2_typescript@5.3.3: - resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - dependencies: - bundle-require: 4.0.1_esbuild@0.19.11 - cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 - esbuild: 0.19.11 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.1 - resolve-from: 5.0.0 - rollup: 4.6.1 - source-map: 0.8.0-beta.0 - sucrase: 3.32.0 - tree-kill: 1.2.2 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - /tsutils/3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} diff --git a/references/v3-catalog/src/trigger/retries.ts b/references/v3-catalog/src/trigger/retries.ts index dab7222e1..d067dcea7 100644 --- a/references/v3-catalog/src/trigger/retries.ts +++ b/references/v3-catalog/src/trigger/retries.ts @@ -1,4 +1,4 @@ -import { logger, retry, task } from "@trigger.dev/sdk/v3"; +import { logger, retry, task, wait } from "@trigger.dev/sdk/v3"; import { cache } from "./utils/cache"; import { interceptor } from "./utils/interceptor"; diff --git a/references/v3-catalog/src/trigger/subtasks.ts b/references/v3-catalog/src/trigger/subtasks.ts index 6f0f9692d..a1e6a742d 100644 --- a/references/v3-catalog/src/trigger/subtasks.ts +++ b/references/v3-catalog/src/trigger/subtasks.ts @@ -1,4 +1,5 @@ -import { Context, logger, task } from "@trigger.dev/sdk/v3"; +import { logger, task } from "@trigger.dev/sdk/v3"; +import { taskWithRetries } from "./retries"; export const simpleParentTask = task({ id: "simple-parent-task", @@ -47,3 +48,69 @@ export const simpleChildTask = task({ logger.log("Simple child task payload", { payload, ctx }); }, }); + +export const subtasksWithRetries = task({ + id: "subtasks-with-retries", + run: async (payload: { message: string }) => { + await taskWithRetries.triggerAndWait({ + payload: { + message: `${payload.message} - 2.b`, + }, + }); + + await taskWithRetries.batchTrigger({ + items: [ + { + payload: { + message: `${payload.message} - 2.c`, + }, + }, + { + payload: { + message: `${payload.message} - 2.cc`, + }, + }, + ], + }); + + await taskWithRetries.batchTriggerAndWait({ + items: [ + { + payload: { + message: `${payload.message} - 2.d`, + }, + }, + { + payload: { + message: `${payload.message} - 2.dd`, + }, + }, + ], + }); + + await taskWithRetries.triggerAndWait({ + payload: { + message: `${payload.message} - 2.e`, + }, + }); + + await taskWithRetries.batchTriggerAndWait({ + items: [ + { + payload: { + message: `${payload.message} - 2.f`, + }, + }, + { + payload: { + message: `${payload.message} - 2.ff`, + }, + }, + ], + }); + + return { + hello: "world", + }; + }, +}); From b35eebb66696190f6d6a919472b7ca7c441bf6db Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Mon, 25 Mar 2024 16:39:20 +0000 Subject: [PATCH 3/5] Rate limit API requests and changed SQS reading speed (#969) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Trying to use the @upstash/ratelimit package with ioredis… * WIP using the redis package instead * Revert the action back * Removed redis * Started refactoring * SQS setting for the poll interval. Set the default queue reading to be slower * API rate limiter as Express middleware * Organise imports * Fixed spelling mistake “limitter” * No authorization header response is problem+json --- apps/webapp/app/entry.server.tsx | 1 + apps/webapp/app/env.server.ts | 15 +- .../app/services/apiRateLimit.server.ts | 179 ++++++++++++++++++ .../app/services/events/sqsEventConsumer.ts | 13 +- apps/webapp/package.json | 1 + apps/webapp/server.ts | 6 +- pnpm-lock.yaml | 37 +++- 7 files changed, 237 insertions(+), 15 deletions(-) create mode 100644 apps/webapp/app/services/apiRateLimit.server.ts diff --git a/apps/webapp/app/entry.server.tsx b/apps/webapp/app/entry.server.tsx index d2966f9f3..63ab3af85 100644 --- a/apps/webapp/app/entry.server.tsx +++ b/apps/webapp/app/entry.server.tsx @@ -198,3 +198,4 @@ const sqsEventConsumer = singleton("sqsEventConsumer", getSharedSqsEventConsumer export { wss } from "./v3/handleWebsockets.server"; export { socketIo } from "./v3/handleSocketIo.server"; export { registryProxy } from "./v3/registryProxy.server"; +export { apiRateLimiter } from "./services/apiRateLimit.server"; diff --git a/apps/webapp/app/env.server.ts b/apps/webapp/app/env.server.ts index 54fcae146..b706da45b 100644 --- a/apps/webapp/app/env.server.ts +++ b/apps/webapp/app/env.server.ts @@ -50,7 +50,8 @@ const EnvironmentSchema = z.object({ AWS_SQS_SECRET_ACCESS_KEY: z.string().optional(), /** Optional. Only used if you use the apps/proxy */ AWS_SQS_QUEUE_URL: z.string().optional(), - AWS_SQS_BATCH_SIZE: z.coerce.number().int().optional().default(10), + AWS_SQS_BATCH_SIZE: z.coerce.number().int().optional().default(1), + AWS_SQS_WAIT_TIME_MS: z.coerce.number().int().optional().default(100), DISABLE_SSE: z.string().optional(), // Redis options @@ -68,6 +69,18 @@ const EnvironmentSchema = z.object({ TUNNEL_HOST: z.string().optional(), TUNNEL_SECRET_KEY: z.string().optional(), + //API Rate limiting + /** + * @example "60s" + * @example "1m" + * @example "1h" + * @example "1d" + * @example "1000ms" + * @example "1000s" + */ + API_RATE_LIMIT_WINDOW: z.string().default("60s"), + API_RATE_LIMIT_MAX: z.coerce.number().int().default(600), + //v3 V3_ENABLED: z.string().default("false"), OTLP_EXPORTER_TRACES_URL: z.string().optional(), diff --git a/apps/webapp/app/services/apiRateLimit.server.ts b/apps/webapp/app/services/apiRateLimit.server.ts new file mode 100644 index 000000000..1545f6daa --- /dev/null +++ b/apps/webapp/app/services/apiRateLimit.server.ts @@ -0,0 +1,179 @@ +import { Ratelimit } from "@upstash/ratelimit"; +import { Request as ExpressRequest, Response as ExpressResponse, NextFunction } from "express"; +import Redis, { RedisOptions } from "ioredis"; +import { createHash } from "node:crypto"; +import { env } from "~/env.server"; +import { logger } from "./logger.server"; + +function createRedisRateLimitClient( + redisOptions: RedisOptions +): ConstructorParameters[0]["redis"] { + const redis = new Redis(redisOptions); + + return { + sadd: async (key: string, ...members: TData[]): Promise => { + return redis.sadd(key, members as (string | number | Buffer)[]); + }, + eval: ( + ...args: [script: string, keys: string[], args: TArgs] + ): Promise => { + const script = args[0]; + const keys = args[1]; + const argsArray = args[2]; + return redis.eval( + script, + keys.length, + ...keys, + ...(argsArray as (string | Buffer | number)[]) + ) as Promise; + }, + }; +} + +type Options = { + log?: { + requests?: boolean; + rejections?: boolean; + }; + redis: RedisOptions; + keyPrefix: string; + pathMatchers: (RegExp | string)[]; + limiter: ConstructorParameters[0]["limiter"]; +}; + +//returns an Express middleware that rate limits using the Bearer token in the Authorization header +export function authorizationRateLimitMiddleware({ + redis, + keyPrefix, + limiter, + pathMatchers, + log = { + rejections: true, + requests: true, + }, +}: Options) { + const rateLimiter = new Ratelimit({ + redis: createRedisRateLimitClient(redis), + limiter: limiter, + ephemeralCache: new Map(), + analytics: false, + prefix: keyPrefix, + }); + + return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => { + if (log.requests) { + logger.info(`RateLimiter (${keyPrefix}): request to ${req.path}`); + } + + //first check if any of the pathMatchers match the request path + const path = req.path; + if ( + !pathMatchers.some((matcher) => + matcher instanceof RegExp ? matcher.test(path) : path === matcher + ) + ) { + if (log.requests) { + logger.info(`RateLimiter (${keyPrefix}): didn't match ${req.path}`); + } + return next(); + } + + if (log.requests) { + logger.info(`RateLimiter (${keyPrefix}): matched ${req.path}`); + } + + const authorizationValue = req.headers.authorization; + if (!authorizationValue) { + if (log.requests) { + logger.info(`RateLimiter (${keyPrefix}): no key`); + } + res.setHeader("Content-Type", "application/problem+json"); + return res + .status(401) + .send( + JSON.stringify( + { + title: "Unauthorized", + status: 401, + type: "https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401", + detail: "No authorization header provided", + }, + null, + 2 + ) + ); + } + + const hash = createHash("sha256"); + hash.update(authorizationValue); + const hashedAuthorizationValue = hash.digest("hex"); + + const { success, pending, limit, reset, remaining } = await rateLimiter.limit( + hashedAuthorizationValue + ); + + res.set("x-ratelimit-limit", limit.toString()); + res.set("x-ratelimit-remaining", remaining.toString()); + res.set("x-ratelimit-reset", reset.toString()); + + if (success) { + if (log.requests) { + logger.info(`RateLimiter (${keyPrefix}): under rate limit`, { + limit, + reset, + remaining, + hashedAuthorizationValue, + }); + } + return next(); + } + + if (log.rejections) { + logger.warn(`RateLimiter (${keyPrefix}): rate limit exceeded`, { + limit, + reset, + remaining, + pending, + hashedAuthorizationValue, + }); + } + + res.setHeader("Content-Type", "application/problem+json"); + return res.status(429).send( + JSON.stringify( + { + title: "Rate Limit Exceeded", + status: 429, + type: "https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429", + detail: `Rate limit exceeded ${remaining}/${limit} requests remaining. Retry after ${reset} seconds.`, + reset: reset, + limit: limit, + }, + null, + 2 + ) + ); + }; +} + +type Duration = Parameters[1]; + +export const apiRateLimiter = authorizationRateLimitMiddleware({ + keyPrefix: "ratelimit:api", + redis: { + port: env.REDIS_PORT, + host: env.REDIS_HOST, + username: env.REDIS_USERNAME, + password: env.REDIS_PASSWORD, + enableAutoPipelining: true, + ...(env.REDIS_TLS_DISABLED === "true" ? {} : { tls: {} }), + }, + limiter: Ratelimit.slidingWindow(env.API_RATE_LIMIT_MAX, env.API_RATE_LIMIT_WINDOW as Duration), + pathMatchers: [/^\/api/], + log: { + rejections: true, + requests: false, + }, +}); + +export type RateLimitMiddleware = ReturnType; diff --git a/apps/webapp/app/services/events/sqsEventConsumer.ts b/apps/webapp/app/services/events/sqsEventConsumer.ts index a1ccd3bda..ceffee269 100644 --- a/apps/webapp/app/services/events/sqsEventConsumer.ts +++ b/apps/webapp/app/services/events/sqsEventConsumer.ts @@ -1,14 +1,13 @@ -import { Consumer } from "sqs-consumer"; -import { PrismaClientOrTransaction, prisma } from "~/db.server"; -import { logger, trace } from "../logger.server"; import { Message, SQSClient } from "@aws-sdk/client-sqs"; -import { authenticateApiKey } from "../apiAuth.server"; import { SendEventBodySchema } from "@trigger.dev/core"; +import { Consumer } from "sqs-consumer"; import { z } from "zod"; import { fromZodError } from "zod-validation-error"; -import { IngestSendEvent } from "./ingestSendEvent.server"; +import { PrismaClientOrTransaction, prisma } from "~/db.server"; import { env } from "~/env.server"; -import { singleton } from "~/utils/singleton"; +import { authenticateApiKey } from "../apiAuth.server"; +import { logger, trace } from "../logger.server"; +import { IngestSendEvent } from "./ingestSendEvent.server"; type SqsEventConsumerOptions = { queueUrl: string; @@ -17,6 +16,7 @@ type SqsEventConsumerOptions = { region: string; accessKeyId: string; secretAccessKey: string; + pollingWaitTimeMs: number; }; const messageSchema = SendEventBodySchema.extend({ @@ -137,6 +137,7 @@ export function getSharedSqsEventConsumer() { const consumer = new SqsEventConsumer(undefined, { queueUrl: env.AWS_SQS_QUEUE_URL, batchSize: env.AWS_SQS_BATCH_SIZE, + pollingWaitTimeMs: env.AWS_SQS_WAIT_TIME_MS, region: env.AWS_SQS_REGION, accessKeyId: env.AWS_SQS_ACCESS_KEY_ID, secretAccessKey: env.AWS_SQS_SECRET_ACCESS_KEY, diff --git a/apps/webapp/package.json b/apps/webapp/package.json index 5d4987b5d..59add391b 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -96,6 +96,7 @@ "@trigger.dev/yalt": "workspace:*", "@types/pg": "8.6.6", "@uiw/react-codemirror": "^4.19.5", + "@upstash/ratelimit": "^1.0.1", "@whatwg-node/fetch": "^0.9.14", "class-variance-authority": "^0.5.2", "clsx": "^1.2.1", diff --git a/apps/webapp/server.ts b/apps/webapp/server.ts index a09316f90..38baca5f3 100644 --- a/apps/webapp/server.ts +++ b/apps/webapp/server.ts @@ -8,6 +8,7 @@ import { broadcastDevReady, logDevReady } from "@remix-run/server-runtime"; import type { Server as IoServer } from "socket.io"; import type { Server as EngineServer } from "engine.io"; import { RegistryProxy } from "~/v3/registryProxy.server"; +import { RateLimitMiddleware, apiRateLimiter } from "~/services/apiRateLimit.server"; const app = express(); @@ -39,6 +40,7 @@ if (process.env.HTTP_SERVER_DISABLED !== "true") { const socketIo: { io: IoServer } | undefined = build.entry.module.socketIo; const wss: WebSocketServer | undefined = build.entry.module.wss; const registryProxy: RegistryProxy | undefined = build.entry.module.registryProxy; + const apiRateLimiter: RateLimitMiddleware = build.entry.module.apiRateLimiter; if (registryProxy && process.env.ENABLE_REGISTRY_PROXY === "true") { console.log(`🐳 Enabling container registry proxy to ${registryProxy.origin}`); @@ -69,6 +71,8 @@ if (process.env.HTTP_SERVER_DISABLED !== "true") { }); if (process.env.DASHBOARD_AND_API_DISABLED !== "true") { + app.use(apiRateLimiter); + app.all( "*", // @ts-ignore @@ -84,8 +88,6 @@ if (process.env.HTTP_SERVER_DISABLED !== "true") { }); } - - const server = app.listen(port, () => { console.log(`✅ server ready: http://localhost:${port} [NODE_ENV: ${MODE}]`); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91e4c0c8b..0b0a24723 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -252,6 +252,7 @@ importers: '@typescript-eslint/eslint-plugin': ^5.59.6 '@typescript-eslint/parser': ^5.59.6 '@uiw/react-codemirror': ^4.19.5 + '@upstash/ratelimit': ^1.0.1 '@whatwg-node/fetch': ^0.9.14 autoprefixer: ^10.4.13 babel-loader: ^9.1.3 @@ -408,6 +409,7 @@ importers: '@trigger.dev/yalt': link:../../packages/yalt '@types/pg': 8.6.6 '@uiw/react-codemirror': 4.19.5_th22fcplkuhrqjnlojwclcaim4 + '@upstash/ratelimit': 1.0.1 '@whatwg-node/fetch': 0.9.14 class-variance-authority: 0.5.2_typescript@5.2.2 clsx: 1.2.1 @@ -561,7 +563,7 @@ importers: devDependencies: eslint: 8.31.0 eslint-config-prettier: 8.6.0_eslint@8.31.0 - eslint-config-turbo: 1.12.5_eslint@8.31.0 + eslint-config-turbo: 1.13.0_eslint@8.31.0 eslint-plugin-react: 7.31.8_eslint@8.31.0 typescript: 4.9.4 @@ -19462,6 +19464,25 @@ packages: - '@codemirror/search' dev: false + /@upstash/core-analytics/0.0.7: + resolution: {integrity: sha512-lC2j5efqb1haX/fpTGaPUx1rue1WUkOZBVHDzCB7eMIVsRdFFp4xiHtyH/G9omiR1zj39fU5SCTWFiKJH3KOpw==} + engines: {node: '>=16.0.0'} + dependencies: + '@upstash/redis': 1.29.0 + dev: false + + /@upstash/ratelimit/1.0.1: + resolution: {integrity: sha512-G9LZ7idhlkuYknbUngCB3qzd7QnkK1xDkFG5jRtEJZuOUS5UKJ0UTKbhalCtp39eX2wu2Ubv8W7HCeaJQOWM0A==} + dependencies: + '@upstash/core-analytics': 0.0.7 + dev: false + + /@upstash/redis/1.29.0: + resolution: {integrity: sha512-kbO5fgMAeUzErnA/SOtaSbAa0dguYhhBT4MZHJ1O8gVl4iK754aC9+rIYY5hsp4nlxeCGfnIDkWpof991c9jjA==} + dependencies: + crypto-js: 4.2.0 + dev: false + /@vanilla-extract/babel-plugin-debug-ids/1.0.2: resolution: {integrity: sha512-LjnbQWGeMwaydmovx8jWUR8BxLtLiPyq0xz5C8G5OvFhsuJxvavLdrBHNNizvr1dq7/3qZGlPv0znsvU4P44YA==} dependencies: @@ -22306,6 +22327,10 @@ packages: resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} dev: false + /crypto-js/4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + /crypto-random-string/2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} @@ -24057,13 +24082,13 @@ packages: eslint: 8.45.0 dev: true - /eslint-config-turbo/1.12.5_eslint@8.31.0: - resolution: {integrity: sha512-wXytbX+vTzQ6rwgM6sIr447tjYJBlRj5V/eBFNGNXw5Xs1R715ppPYhbmxaFbkrWNQSGJsWRrYGAlyq0sT/OsQ==} + /eslint-config-turbo/1.13.0_eslint@8.31.0: + resolution: {integrity: sha512-xV13WrEjAJLeo6yqR1YEv5R5WPwNMyw8f4FlK2C4zWMr7e8ZiRg81jajltabEOZdeVboHIQ6gGn+FnSmgdVSSQ==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 8.31.0 - eslint-plugin-turbo: 1.12.5_eslint@8.31.0 + eslint-plugin-turbo: 1.13.0_eslint@8.31.0 dev: true /eslint-doc-generator/1.4.3_eslint@8.45.0: @@ -24766,8 +24791,8 @@ packages: - typescript dev: true - /eslint-plugin-turbo/1.12.5_eslint@8.31.0: - resolution: {integrity: sha512-cXy7mCzAdngBTJIWH4DASXHy0vQpujWDBqRTu0YYqCN/QEGsi3HWM+STZEbPYELdjtm5EsN2HshOSSqWnjdRHg==} + /eslint-plugin-turbo/1.13.0_eslint@8.31.0: + resolution: {integrity: sha512-y9YRXMSOc43SijAFFkDnrFpstV2k/w6Qmbr5mO/w7tUGzDWkHc87btLa0e/L2PJxod5bzNwsmzeyj8c/AsMMCQ==} peerDependencies: eslint: '>6.6.0' dependencies: From 395abe1b92abf27526eca0b87af64ec30473611c Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Mon, 25 Mar 2024 17:02:49 +0000 Subject: [PATCH 4/5] v3: Various fixes to support papermark use-case (#970) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adding a changeset for v3 * Add a version field to @trigger.dev/core-apps package.json * Build trigger.dev when doing a prerelease * bundle @trigger.dev/core-apps with trigger.dev cli * Fix the init command config template * Don’t use * for the @trigger.dev/core dep version specifier * strip workspace: from the package version before installing it * Added dependenciesToBundle config option to bundle ESM only packages * Added logging around resolving dependency paths * Try again * Resolve dependencies based on the project dir first * flip the bundled default * Adding some logs around dev task completion notifications * Adding some additional logs * Add more logs * Write out the log using process.stdout * Store pending completion notifications and resume them when awaited (fixes race condition) * Cleanup some of the logs * Copy over the postinstall step from the projects package.json * Add support for including additional files when deploying (e.g. prisma schema) * Don’t run scripts when resolving deps * copy all the files just in case anything is needed in postinstall * Remove duplicate option * Use the tag when outputting the dev command * Remove the postinstall script * add the trigger dir to the config if the default is not chosen * Remove the “hud” display in the dev command * trigger file names with dashes now work * Better file watching in dev * Much better duplicate ID experience now * Much better “Project not found” error * Export the handleError function types from sdk * Add support for configuring instrumentation * Upgrade and unify @opentelemetry/* packages (and remove storybook from the webapp) * Fix typescript error in react package * Upgrade react types in webapp * Allow span icons to be determined based on the span name (e.g. prisma:) * Ignore built-in env vars when checking for env vars, and allow continuing the deployment even if missing env vars were detected * Improve the retry.fetch default behavior and option structure * Fixed typescript errors with packages/email react types * Update the retry.fetch docs --- .changeset/config.json | 5 +- .changeset/sweet-lizards-press.md | 8 + CHANGESETS.md | 2 +- apps/webapp/.storybook/main.ts | 48 - apps/webapp/.storybook/preview.tsx | 50 - .../webapp/app/components/runs/v3/RunIcon.tsx | 22 +- apps/webapp/app/entry.server.tsx | 17 - apps/webapp/app/root.tsx | 5 +- .../route.tsx | 6 +- .../route.tsx | 6 +- .../services/createBackgroundWorker.server.ts | 113 +- apps/webapp/package.json | 52 +- docs/v3/errors-retrying.mdx | 36 +- packages/cli-v3/package.json | 38 +- packages/cli-v3/src/Containerfile.prod | 7 +- packages/cli-v3/src/commands/deploy.ts | 122 +- packages/cli-v3/src/commands/dev.tsx | 113 +- packages/cli-v3/src/commands/init.ts | 34 +- packages/cli-v3/src/telemetry/tracing.ts | 63 +- .../{simple.js => simple.ts.template} | 0 ...r.config.ts => trigger.config.ts.template} | 6 +- packages/cli-v3/src/utilities/build.ts | 198 + packages/cli-v3/src/utilities/configFiles.ts | 8 +- .../cli-v3/src/utilities/installPackages.ts | 12 + packages/cli-v3/src/utilities/logger.ts | 1 + packages/cli-v3/src/utilities/taskFiles.ts | 2 +- .../src/workers/dev/backgroundWorker.ts | 18 +- .../cli-v3/src/workers/dev/worker-facade.ts | 1 - .../cli-v3/src/workers/dev/worker-setup.ts | 9 +- .../cli-v3/src/workers/prod/worker-setup.ts | 10 +- packages/cli-v3/tsup.config.ts | 2 +- packages/cli-v3/tsup.workers.config.ts | 1 + packages/core-apps/package.json | 1 + packages/core-backend/package.json | 2 +- packages/core/package.json | 24 +- packages/core/src/v3/otel/index.ts | 1 - packages/core/src/v3/otel/instrumentations.ts | 2 - .../core/src/v3/runtime/devRuntimeManager.ts | 27 + packages/core/src/v3/schemas/fetch.ts | 18 +- packages/core/src/v3/schemas/schemas.ts | 14 +- packages/core/src/v3/types/config.ts | 22 + .../core/src/v3/utils/flattenAttributes.ts | 60 +- packages/core/src/v3/utils/retries.ts | 13 +- packages/core/test/flattenAttributes.test.ts | 186 + packages/emails/package.json | 4 +- packages/emails/tsconfig.json | 2 +- packages/react/tsconfig.json | 2 +- packages/trigger-sdk/package.json | 4 +- packages/trigger-sdk/src/v3/config.ts | 6 +- packages/trigger-sdk/src/v3/retry.ts | 333 +- pnpm-lock.yaml | 8509 ++--------------- references/v3-catalog/package.json | 3 + references/v3-catalog/src/handleError.ts | 2 +- references/v3-catalog/src/trigger/logging.ts | 3 +- references/v3-catalog/src/trigger/retries.ts | 47 +- .../src/trigger/utils/interceptor.ts | 9 + .../src/trigger/weird-file-names.ts | 6 + references/v3-catalog/trigger.config.ts | 8 +- references/v3-catalog/wrangler/wrangler.toml | 7 + 59 files changed, 1879 insertions(+), 8451 deletions(-) create mode 100644 .changeset/sweet-lizards-press.md delete mode 100644 apps/webapp/.storybook/main.ts delete mode 100644 apps/webapp/.storybook/preview.tsx rename packages/cli-v3/src/templates/examples/{simple.js => simple.ts.template} (100%) rename packages/cli-v3/src/templates/{trigger.config.ts => trigger.config.ts.template} (62%) create mode 100644 packages/cli-v3/src/utilities/build.ts delete mode 100644 packages/core/src/v3/otel/instrumentations.ts create mode 100644 packages/core/test/flattenAttributes.test.ts create mode 100644 references/v3-catalog/src/trigger/weird-file-names.ts create mode 100644 references/v3-catalog/wrangler/wrangler.toml diff --git a/.changeset/config.json b/.changeset/config.json index 20abe0764..92eca4c40 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -16,7 +16,10 @@ "emails", "proxy", "yalt", - "@trigger.dev/database" + "@trigger.dev/database", + "coordinator", + "docker-provider", + "kubernetes-provider" ], "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true diff --git a/.changeset/sweet-lizards-press.md b/.changeset/sweet-lizards-press.md new file mode 100644 index 000000000..a374d121a --- /dev/null +++ b/.changeset/sweet-lizards-press.md @@ -0,0 +1,8 @@ +--- +"trigger.dev": major +"@trigger.dev/core": major +"@trigger.dev/otlp-importer": major +"@trigger.dev/sdk": major +--- + +Updates to support Trigger.dev v3 diff --git a/CHANGESETS.md b/CHANGESETS.md index dab130bc8..12022fa72 100644 --- a/CHANGESETS.md +++ b/CHANGESETS.md @@ -47,7 +47,7 @@ pnpm exec changeset version --snapshot prerelease 3. Build the packages: ```sh -pnpm run build --filter "@trigger.dev/*" +pnpm run build --filter "@trigger.dev/*" --filter "trigger.dev" ``` 4. Publish the snapshot (replace "dev" with your tag) diff --git a/apps/webapp/.storybook/main.ts b/apps/webapp/.storybook/main.ts deleted file mode 100644 index 60217579c..000000000 --- a/apps/webapp/.storybook/main.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { StorybookConfig } from "@storybook/react-webpack5"; -import path from "path"; - -const root = path.resolve(__dirname, "../app"); - -const config: StorybookConfig = { - webpackFinal: async (config) => { - return { - ...config, - resolve: { - ...config.resolve, - alias: { - ...(config.resolve?.alias ?? {}), - "~": root, - }, - extensions: [ - ...(config.resolve?.extensions ?? []), - ...[".ts", ".tsx", ".js", ".jsx", ".mdx"], - ], - }, - }; - }, - stories: ["../app/**/stories/*.mdx", "../app/**/stories/*.stories.@(js|jsx|ts|tsx)"], - addons: [ - "@storybook/addon-links", - "@storybook/addon-essentials", - "@storybook/addon-interactions", - "storybook-addon-variants", - "storybook-addon-designs", - { - name: "@storybook/addon-styling", - options: { - // Check out https://github.com/storybookjs/addon-styling/blob/main/docs/api.md - // For more details on this addon's options. - postCss: true, - }, - }, - ], - framework: { - name: "@storybook/react-webpack5", - options: {}, - }, - docs: { - autodocs: "tag", - }, - staticDirs: [path.resolve("public")], -}; -export default config; diff --git a/apps/webapp/.storybook/preview.tsx b/apps/webapp/.storybook/preview.tsx deleted file mode 100644 index c5113ec63..000000000 --- a/apps/webapp/.storybook/preview.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import type { Preview } from "@storybook/react"; -import "../app/tailwind.css"; -import { createRemixStub } from "@remix-run/testing"; -import React from "react"; -import { LocaleContextProvider } from "../app/components/primitives/LocaleProvider"; -import { OperatingSystemContextProvider } from "../app/components/primitives/OperatingSystemProvider"; - -const preview: Preview = { - parameters: { - actions: { argTypesRegex: "^on[A-Z].*" }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/, - }, - }, - backgrounds: { - default: "App background", - values: [ - { - name: "App background", - value: "#15171A", - }, - ], - }, - layout: "fullscreen", - }, - decorators: [ - (Story) => { - const RemixStub = createRemixStub([ - { - path: "/*", - action: () => ({ redirect: "/" }), - loader: () => ({ redirect: "/" }), - Component: Story, - }, - ]); - - return ( - - - - - - ); - }, - ], -}; - -export default preview; diff --git a/apps/webapp/app/components/runs/v3/RunIcon.tsx b/apps/webapp/app/components/runs/v3/RunIcon.tsx index ca708b5a4..210e215e4 100644 --- a/apps/webapp/app/components/runs/v3/RunIcon.tsx +++ b/apps/webapp/app/components/runs/v3/RunIcon.tsx @@ -12,10 +12,30 @@ import { cn } from "~/utils/cn"; type TaskIconProps = { name: string | undefined; + spanName: string; className?: string; }; -export function RunIcon({ name, className }: TaskIconProps) { +type SpanNameIcons = { + matcher: RegExp; + iconName: string; +}; + +const spanNameIcons: SpanNameIcons[] = [{ matcher: /^prisma:/, iconName: "brand-prisma" }]; + +export function RunIcon({ name, className, spanName }: TaskIconProps) { + const spanNameIcon = spanNameIcons.find(({ matcher }) => matcher.test(spanName)); + + if (spanNameIcon) { + return ( + } + /> + ); + } + if (!name) return ; switch (name) { diff --git a/apps/webapp/app/entry.server.tsx b/apps/webapp/app/entry.server.tsx index 63ab3af85..75759aea7 100644 --- a/apps/webapp/app/entry.server.tsx +++ b/apps/webapp/app/entry.server.tsx @@ -1,4 +1,3 @@ -import { H } from "@highlight-run/node"; import { createReadableStreamFromReadable, type DataFunctionArgs, @@ -165,10 +164,6 @@ function handleBrowserRequest( }); } -if (env.HIGHLIGHT_PROJECT_ID) { - H.init({ projectID: env.HIGHLIGHT_PROJECT_ID }); -} - export function handleError(error: unknown, { request, params, context }: DataFunctionArgs) { logError(error, request); } @@ -178,18 +173,6 @@ Worker.init().catch((error) => { }); function logError(error: unknown, request?: Request) { - if (env.HIGHLIGHT_PROJECT_ID) { - const parsed = request ? H.parseHeaders(Object.fromEntries(request.headers)) : undefined; - if (error instanceof Error) { - H.consumeError(error, parsed?.secureSessionId, parsed?.requestId); - } else { - H.consumeError( - new Error(`Unknown error: ${JSON.stringify(error)}`), - parsed?.secureSessionId, - parsed?.requestId - ); - } - } console.error(error); } diff --git a/apps/webapp/app/root.tsx b/apps/webapp/app/root.tsx index 61dcf12a6..409fd120f 100644 --- a/apps/webapp/app/root.tsx +++ b/apps/webapp/app/root.tsx @@ -1,4 +1,3 @@ -import { ErrorBoundary as HighlightErrorBoundary } from "@highlight-run/react"; import type { LinksFunction, LoaderFunctionArgs, MetaFunction } from "@remix-run/node"; import type { ShouldRevalidateFunction } from "@remix-run/react"; import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration } from "@remix-run/react"; @@ -111,9 +110,7 @@ function App() { - - - + diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route.tsx index 18e030e78..edb752b34 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route.tsx @@ -60,7 +60,11 @@ export default function Page() { >
- + diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx index bf5098a71..4e82c0d4c 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx @@ -362,7 +362,11 @@ function TasksTreeView({
- + {node.data.isRoot && Root}
diff --git a/apps/webapp/app/v3/services/createBackgroundWorker.server.ts b/apps/webapp/app/v3/services/createBackgroundWorker.server.ts index 1c937ff3f..00765d34a 100644 --- a/apps/webapp/app/v3/services/createBackgroundWorker.server.ts +++ b/apps/webapp/app/v3/services/createBackgroundWorker.server.ts @@ -1,6 +1,6 @@ import { CreateBackgroundWorkerRequestBody, TaskResource } from "@trigger.dev/core/v3"; import type { BackgroundWorker } from "@trigger.dev/database"; -import { PrismaClientOrTransaction } from "~/db.server"; +import { Prisma, PrismaClientOrTransaction } from "~/db.server"; import { AuthenticatedEnvironment } from "~/services/apiAuth.server"; import { logger } from "~/services/logger.server"; import { generateFriendlyId } from "../friendlyIdentifiers"; @@ -89,46 +89,83 @@ export async function createBackgroundTasks( prisma: PrismaClientOrTransaction ) { for (const task of tasks) { - await prisma.backgroundWorkerTask.create({ - data: { - friendlyId: generateFriendlyId("task"), - projectId: worker.projectId, - runtimeEnvironmentId: worker.runtimeEnvironmentId, - workerId: worker.id, - slug: task.id, - filePath: task.filePath, - exportName: task.exportName, - retryConfig: task.retry, - queueConfig: task.queue, - }, - }); - - const queueName = task.queue?.name ?? `task/${task.id}`; - - const taskQueue = await prisma.taskQueue.upsert({ - where: { - runtimeEnvironmentId_name: { + try { + await prisma.backgroundWorkerTask.create({ + data: { + friendlyId: generateFriendlyId("task"), + projectId: worker.projectId, runtimeEnvironmentId: worker.runtimeEnvironmentId, - name: queueName, + workerId: worker.id, + slug: task.id, + filePath: task.filePath, + exportName: task.exportName, + retryConfig: task.retry, + queueConfig: task.queue, }, - }, - update: { - concurrencyLimit: task.queue?.concurrencyLimit, - rateLimit: task.queue?.rateLimit, - }, - create: { - friendlyId: generateFriendlyId("queue"), - name: queueName, - concurrencyLimit: task.queue?.concurrencyLimit, - runtimeEnvironmentId: worker.runtimeEnvironmentId, - projectId: worker.projectId, - rateLimit: task.queue?.rateLimit, - type: task.queue?.name ? "NAMED" : "VIRTUAL", - }, - }); + }); - if (taskQueue.concurrencyLimit) { - await marqs?.updateQueueConcurrency(env, taskQueue.name, taskQueue.concurrencyLimit); + const queueName = task.queue?.name ?? `task/${task.id}`; + + const taskQueue = await prisma.taskQueue.upsert({ + where: { + runtimeEnvironmentId_name: { + runtimeEnvironmentId: worker.runtimeEnvironmentId, + name: queueName, + }, + }, + update: { + concurrencyLimit: task.queue?.concurrencyLimit, + rateLimit: task.queue?.rateLimit, + }, + create: { + friendlyId: generateFriendlyId("queue"), + name: queueName, + concurrencyLimit: task.queue?.concurrencyLimit, + runtimeEnvironmentId: worker.runtimeEnvironmentId, + projectId: worker.projectId, + rateLimit: task.queue?.rateLimit, + type: task.queue?.name ? "NAMED" : "VIRTUAL", + }, + }); + + if (taskQueue.concurrencyLimit) { + await marqs?.updateQueueConcurrency(env, taskQueue.name, taskQueue.concurrencyLimit); + } + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + // The error code for unique constraint violation in Prisma is P2002 + if (error.code === "P2002") { + logger.warn("Task already exists", { + task, + worker, + }); + } else { + logger.error("Prisma Error creating background worker task", { + error: { + code: error.code, + message: error.message, + }, + task, + worker, + }); + } + } else if (error instanceof Error) { + logger.error("Error creating background worker task", { + error: { + name: error.name, + message: error.message, + stack: error.stack, + }, + task, + worker, + }); + } else { + logger.error("Unknown error creating background worker task", { + error, + task, + worker, + }); + } } } } diff --git a/apps/webapp/package.json b/apps/webapp/package.json index 59add391b..0afdd6f43 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -19,9 +19,7 @@ "generate:sourcemaps": "remix build --sourcemap", "clean:sourcemaps": "run-s clean:sourcemaps:*", "clean:sourcemaps:public": "rimraf ./build/**/*.map", - "clean:sourcemaps:build": "rimraf ./public/build/**/*.map", - "storybook": "storybook dev -p 6006 --no-open", - "build-storybook": "storybook build" + "clean:sourcemaps:build": "rimraf ./public/build/**/*.map" }, "eslintIgnore": [ "/node_modules", @@ -44,24 +42,22 @@ "@depot/sdk-node": "^0.5.0", "@headlessui/react": "^1.7.8", "@heroicons/react": "^2.0.12", - "@highlight-run/node": "^3.1.0", - "@highlight-run/react": "^3.2.0", "@internationalized/date": "^3.5.1", "@lezer/highlight": "^1.1.6", - "@opentelemetry/api": "^1.7.0", - "@opentelemetry/core": "^1.21.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.48.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.48.0", - "@opentelemetry/instrumentation": "^0.48.0", - "@opentelemetry/instrumentation-express": "^0.35.0", - "@opentelemetry/instrumentation-http": "^0.48.0", - "@opentelemetry/resources": "^1.21.0", - "@opentelemetry/sdk-logs": "^0.48.0", - "@opentelemetry/sdk-node": "^0.48.0", - "@opentelemetry/sdk-trace-base": "^1.21.0", - "@opentelemetry/sdk-trace-node": "^1.21.0", - "@opentelemetry/semantic-conventions": "^1.21.0", - "@prisma/instrumentation": "^5.9.1", + "@opentelemetry/api": "^1.8.0", + "@opentelemetry/core": "^1.22.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.49.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.49.1", + "@opentelemetry/instrumentation": "^0.49.1", + "@opentelemetry/instrumentation-express": "^0.36.1", + "@opentelemetry/instrumentation-http": "^0.49.1", + "@opentelemetry/resources": "^1.22.0", + "@opentelemetry/sdk-logs": "^0.49.1", + "@opentelemetry/sdk-node": "^0.49.1", + "@opentelemetry/sdk-trace-base": "^1.22.0", + "@opentelemetry/sdk-trace-node": "^1.22.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@prisma/instrumentation": "^5.11.0", "@radix-ui/react-alert-dialog": "^1.0.4", "@radix-ui/react-dialog": "^1.0.3", "@radix-ui/react-label": "^2.0.1", @@ -165,17 +161,6 @@ "@remix-run/dev": "2.1.0", "@remix-run/eslint-config": "2.1.0", "@remix-run/testing": "^2.1.0", - "@storybook/addon-backgrounds": "^7.0.7", - "@storybook/addon-docs": "^7.0.12", - "@storybook/addon-essentials": "^7.0.7", - "@storybook/addon-interactions": "^7.0.7", - "@storybook/addon-links": "^7.0.7", - "@storybook/addon-styling": "^1.0.5", - "@storybook/addon-viewport": "^7.0.7", - "@storybook/blocks": "^7.0.7", - "@storybook/react": "^7.0.7", - "@storybook/react-webpack5": "^7.0.7", - "@storybook/testing-library": "^0.0.14-next.2", "@swc/core": "^1.3.4", "@swc/helpers": "^0.4.11", "@tailwindcss/forms": "^0.5.3", @@ -194,7 +179,7 @@ "@types/node-fetch": "^2.6.2", "@types/prismjs": "^1.26.0", "@types/qs": "^6.9.7", - "@types/react": "18.2.17", + "@types/react": "18.2.69", "@types/react-collapse": "^5.0.4", "@types/react-dom": "18.2.7", "@types/semver": "^7.3.13", @@ -220,9 +205,6 @@ "prettier-plugin-tailwindcss": "^0.3.0", "prop-types": "^15.8.1", "rimraf": "^3.0.2", - "storybook": "^7.0.7", - "storybook-addon-designs": "7.0.0-beta.2", - "storybook-addon-variants": "^0.2.0", "style-loader": "^3.3.4", "tailwind-scrollbar": "^3.0.1", "tailwindcss": "3.4.1", @@ -233,4 +215,4 @@ "engines": { "node": ">=16.0.0" } -} +} \ No newline at end of file diff --git a/docs/v3/errors-retrying.mdx b/docs/v3/errors-retrying.mdx index 0dde4dd38..91cdf3888 100644 --- a/docs/v3/errors-retrying.mdx +++ b/docs/v3/errors-retrying.mdx @@ -106,12 +106,14 @@ export const taskWithFetchRetries = task({ //if the Response is a 429 (too many requests), it will retry using the data from the response. A lot of good APIs send these headers. const headersResponse = await retry.fetch("http://my.host/test-headers", { retry: { - "429": { - strategy: "headers", - limitHeader: "x-ratelimit-limit", - remainingHeader: "x-ratelimit-remaining", - resetHeader: "x-ratelimit-reset", - resetFormat: "unix_timestamp_in_ms", + byStatus: { + "429": { + strategy: "headers", + limitHeader: "x-ratelimit-limit", + remainingHeader: "x-ratelimit-remaining", + resetHeader: "x-ratelimit-reset", + resetFormat: "unix_timestamp_in_ms", + }, }, }, }); @@ -121,13 +123,15 @@ export const taskWithFetchRetries = task({ //if the Response is a 500-599 (issue with the server you're calling), it will retry up to 10 times with exponential backoff const backoffResponse = await retry.fetch("http://my.host/test-backoff", { retry: { - "500-599": { - strategy: "backoff", - maxAttempts: 10, - factor: 2, - minTimeoutInMs: 1_000, - maxTimeoutInMs: 30_000, - randomize: false, + byStatus: { + "500-599": { + strategy: "backoff", + maxAttempts: 10, + factor: 2, + minTimeoutInMs: 1_000, + maxTimeoutInMs: 30_000, + randomize: false, + }, }, }, }); @@ -136,9 +140,9 @@ export const taskWithFetchRetries = task({ //You can additionally specify a timeout. In this case if the response takes longer than 1 second, it will retry up to 5 times with exponential backoff const timeoutResponse = await retry.fetch("https://httpbin.org/delay/2", { - timeout: { - durationInMs: 1000, - retry: { + timeoutInMs: 1000, + retry: { + timeout: { maxAttempts: 5, factor: 1.8, minTimeoutInMs: 500, diff --git a/packages/cli-v3/package.json b/packages/cli-v3/package.json index 8f17bf321..34f10a4e5 100644 --- a/packages/cli-v3/package.json +++ b/packages/cli-v3/package.json @@ -1,6 +1,6 @@ { "name": "trigger.dev", - "version": "1.0.7", + "version": "2.3.18", "description": "A Command-Line Interface for Trigger.dev (v3) projects", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -35,7 +35,7 @@ "trigger.dev": "./dist/index.js" }, "devDependencies": { - "@trigger.dev/core": "workspace:*", + "@trigger.dev/core-apps": "workspace:*", "@trigger.dev/tsconfig": "workspace:*", "@types/gradient-string": "^1.1.2", "@types/jsonlines": "^0.1.5", @@ -75,27 +75,21 @@ "test": "vitest" }, "dependencies": { - "@baselime/node-opentelemetry": "^0.4.6", "@clack/prompts": "^0.7.0", "@depot/cli": "0.0.1-cli.2.55.0", - "@opentelemetry/api": "^1.7.0", - "@opentelemetry/api-logs": "^0.48.0", - "@opentelemetry/auto-instrumentations-node": "^0.40.3", - "@opentelemetry/exporter-collector": "^0.25.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.48.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.48.0", - "@opentelemetry/instrumentation": "^0.48.0", - "@opentelemetry/instrumentation-fetch": "^0.48.0", - "@opentelemetry/instrumentation-http": "^0.48.0", - "@opentelemetry/resources": "^1.21.0", - "@opentelemetry/sdk-logs": "^0.48.0", - "@opentelemetry/sdk-node": "^0.48.0", - "@opentelemetry/sdk-trace-base": "^1.21.0", - "@opentelemetry/sdk-trace-node": "^1.21.0", - "@opentelemetry/semantic-conventions": "^1.21.0", - "@traceloop/instrumentation-openai": "^0.3.9", - "@trigger.dev/core": "workspace:*", - "@trigger.dev/core-apps": "workspace:*", + "@opentelemetry/api": "^1.8.0", + "@opentelemetry/api-logs": "^0.49.1", + "@opentelemetry/exporter-logs-otlp-http": "^0.49.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.49.1", + "@opentelemetry/instrumentation": "^0.49.1", + "@opentelemetry/instrumentation-fetch": "^0.49.1", + "@opentelemetry/resources": "^1.22.0", + "@opentelemetry/sdk-logs": "^0.49.1", + "@opentelemetry/sdk-node": "^0.49.1", + "@opentelemetry/sdk-trace-base": "^1.22.0", + "@opentelemetry/sdk-trace-node": "^1.22.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@trigger.dev/core": "workspace:^2.3.18", "@types/degit": "^2.8.3", "chalk": "^5.2.0", "chokidar": "^3.5.3", @@ -107,6 +101,7 @@ "evt": "^2.4.13", "execa": "^8.0.0", "find-up": "^7.0.0", + "glob": "^10.3.10", "gradient-string": "^2.0.2", "import-meta-resolve": "^4.0.0", "ink": "^4.4.1", @@ -130,6 +125,7 @@ "supports-color": "^9.4.0", "terminal-link": "^3.0.0", "tiny-invariant": "^1.2.0", + "tsconfig-paths": "^4.2.0", "update-check": "^1.5.4", "url": "^0.11.1", "ws": "^8.12.0", diff --git a/packages/cli-v3/src/Containerfile.prod b/packages/cli-v3/src/Containerfile.prod index ec3a0e410..d56c3ea20 100644 --- a/packages/cli-v3/src/Containerfile.prod +++ b/packages/cli-v3/src/Containerfile.prod @@ -4,16 +4,13 @@ RUN apk add --no-cache dumb-init WORKDIR /app -# Install dependencies -COPY --chown=node:node package.json package-lock.json ./ +# copy all the files just in case anything is needed in postinstall +COPY --chown=node:node . . RUN npm ci --no-fund --no-audit && npm cache clean --force # Development or production stage builds upon the base stage FROM base AS final -# Copy the rest of the application -COPY --chown=node:node . . - # Use ARG for build-time variables ARG TRIGGER_PROJECT_ID ARG TRIGGER_DEPLOYMENT_ID diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index d3bc2d894..090268954 100644 --- a/packages/cli-v3/src/commands/deploy.ts +++ b/packages/cli-v3/src/commands/deploy.ts @@ -15,7 +15,7 @@ import { resolve as importResolve } from "import-meta-resolve"; import { createHash } from "node:crypto"; import { readFileSync } from "node:fs"; import { copyFile, mkdir, readFile, writeFile } from "node:fs/promises"; -import { join } from "node:path"; +import { dirname, join, relative } from "node:path"; import { setTimeout } from "node:timers/promises"; import terminalLink from "terminal-link"; import invariant from "tiny-invariant"; @@ -34,15 +34,23 @@ import { import { readConfig } from "../utilities/configFiles.js"; import { createTempDir, readJSONFile, writeJSONFile } from "../utilities/fileSystem"; import { printStandloneInitialBanner } from "../utilities/initialBanner.js"; -import { detectPackageNameFromImportPath, parsePackageName } from "../utilities/installPackages"; +import { + detectPackageNameFromImportPath, + parsePackageName, + stripWorkspaceFromVersion, +} from "../utilities/installPackages"; import { logger } from "../utilities/logger.js"; import { createTaskFileImports, gatherTaskFiles } from "../utilities/taskFiles"; import { login } from "./login"; -import { SetOptional } from "type-fest"; + +import type { SetOptional } from "type-fest"; +import { bundleDependenciesPlugin, workerSetupImportConfigPlugin } from "../utilities/build"; +import { Glob } from "glob"; const DeployCommandOptions = CommonCommandOptions.extend({ skipTypecheck: z.boolean().default(false), skipDeploy: z.boolean().default(false), + ignoreEnvVarCheck: z.boolean().default(false), env: z.enum(["prod", "staging"]), loadImage: z.boolean().default(false), buildPlatform: z.enum(["linux/amd64", "linux/arm64"]).default("linux/amd64"), @@ -68,7 +76,11 @@ export function configureDeployCommand(program: Command) { "Deploy to a specific environment (currently only prod and staging are supported)", "prod" ) - .option("-T, --skip-typecheck", "Whether to skip the pre-build typecheck") + .option("--skip-typecheck", "Whether to skip the pre-build typecheck") + .option( + "--ignore-env-var-check", + "Detected missing environment variables won't block deployment" + ) .option("-c, --config ", "The name of the config file, found at [path]") .option( "-p, --project-ref ", @@ -425,7 +437,11 @@ async function checkEnvVars( environmentVariablesSpinner.stop( `Found missing env vars in ${options.env}: ${arrayToSentence( missingEnvironmentVariables - )}. Aborting deployment. ${chalk.bgBlueBright( + )}. ${ + options.ignoreEnvVarCheck + ? "Continuing deployment because of --ignore-env-var-check. " + : "Aborting deployment. " + }${chalk.bgBlueBright( terminalLink( "Manage env vars", `${apiUrl}/projects/v3/${config.project}/environment-variables` @@ -437,7 +453,12 @@ async function checkEnvVars( "envVars.missing": missingEnvironmentVariables, }); - throw new SkipLoggingError("Found missing environment variables"); + if (!options.ignoreEnvVarCheck) { + throw new SkipLoggingError("Found missing environment variables"); + } else { + span.end(); + return; + } } environmentVariablesSpinner.stop(`Environment variable check passed`); @@ -859,7 +880,6 @@ async function compileProject( write: false, minify: false, sourcemap: "external", // does not set the //# sourceMappingURL= comment in the file, we handle it ourselves - packages: "external", // https://esbuild.github.io/api/#packages logLevel: "error", platform: "node", format: "cjs", // This is needed to support opentelemetry instrumentation that uses module patching @@ -869,6 +889,7 @@ async function compileProject( TRIGGER_API_URL: `"${config.triggerUrl}"`, __PROJECT_CONFIG__: JSON.stringify(config), }, + plugins: [bundleDependenciesPlugin(config), workerSetupImportConfigPlugin(configPath)], }); if (result.errors.length > 0) { @@ -984,17 +1005,29 @@ async function compileProject( // Get all the required dependencies from the metaOutputs and save them to /tmp/dir/package.json const allImports = [...metaOutput.imports, ...entryPointMetaOutput.imports]; - const dependencies = await gatherRequiredDependencies(allImports, config); + + const externalPackageJson = await readJSONFile(join(config.projectDir, "package.json")); + + const dependencies = await gatherRequiredDependencies( + allImports, + config, + externalPackageJson + ); const packageJsonContents = { name: "trigger-worker", version: "0.0.0", description: "", dependencies, + scripts: { + postinstall: externalPackageJson?.scripts?.postinstall, + }, }; await writeJSONFile(join(tempDir, "package.json"), packageJsonContents); + await copyAdditionalFiles(config, tempDir); + compileSpinner.stop("Project built successfully"); const resolvingDependenciesResult = await resolveDependencies( @@ -1112,7 +1145,7 @@ async function resolveDependencies( logger.debug(`No cached package-lock.json found for ${digest}`); try { - await execa("npm", ["install", "--package-lock-only"], { + await execa("npm", ["install", "--package-lock-only", "--ignore-scripts", "--no-audit"], { cwd: projectDir, stdio: logger.loggerLevel === "debug" ? "inherit" : "pipe", }); @@ -1207,10 +1240,9 @@ async function typecheckProject(config: ResolvedConfig, options: DeployCommandOp // Returns the dependency names and the version to use (taken from the CLI deps package.json) async function gatherRequiredDependencies( imports: Metafile["outputs"][string]["imports"], - config: ResolvedConfig + config: ResolvedConfig, + projectPackageJson: any ) { - const externalPackageJson = await readJSONFile(join(config.projectDir, "package.json")); - const dependencies: Record = {}; for (const file of imports) { @@ -1224,10 +1256,10 @@ async function gatherRequiredDependencies( continue; } - const externalDependencyVersion = (externalPackageJson?.dependencies ?? {})[packageName]; + const externalDependencyVersion = (projectPackageJson?.dependencies ?? {})[packageName]; if (externalDependencyVersion) { - dependencies[packageName] = externalDependencyVersion; + dependencies[packageName] = stripWorkspaceFromVersion(externalDependencyVersion); continue; } @@ -1236,7 +1268,7 @@ async function gatherRequiredDependencies( detectDependencyVersion(packageName); if (internalDependencyVersion) { - dependencies[packageName] = internalDependencyVersion; + dependencies[packageName] = stripWorkspaceFromVersion(internalDependencyVersion); } } @@ -1253,8 +1285,8 @@ async function gatherRequiredDependencies( continue; } else { const externalDependencyVersion = { - ...externalPackageJson?.devDependencies, - ...externalPackageJson?.dependencies, + ...projectPackageJson?.devDependencies, + ...projectPackageJson?.dependencies, }[packageName]; if (externalDependencyVersion) { @@ -1273,6 +1305,56 @@ async function gatherRequiredDependencies( return Object.fromEntries(Object.entries(dependencies).sort(([a], [b]) => a.localeCompare(b))); } +async function copyAdditionalFiles(config: ResolvedConfig, tempDir: string) { + const additionalFiles = config.additionalFiles ?? []; + + if (additionalFiles.length === 0) { + return; + } + + return await tracer.startActiveSpan( + "copyAdditionalFiles", + { + attributes: { + "config.additionalFiles": additionalFiles, + }, + }, + async (span) => { + try { + logger.debug(`Copying files to ${tempDir}`, { + additionalFiles, + }); + + const glob = new Glob(additionalFiles, { + withFileTypes: true, + ignore: ["node_modules"], + cwd: config.projectDir, + nodir: true, + }); + + for await (const file of glob) { + const relativeDestinationPath = join( + tempDir, + relative(config.projectDir, file.fullpath()) + ); + + logger.debug(`Copying file ${file.fullpath()} to ${relativeDestinationPath}`); + await mkdir(dirname(relativeDestinationPath), { recursive: true }); + await copyFile(file.fullpath(), relativeDestinationPath); + } + + span.end(); + } catch (error) { + recordSpanException(span, error); + + span.end(); + + throw error; + } + } + ); +} + async function ensureLoggedIntoDockerRegistry( registryHost: string, auth: { username: string; password: string } @@ -1300,6 +1382,8 @@ async function findAllEnvironmentVariableReferencesInFile(filePath: string) { return findAllEnvironmentVariableReferences(fileContents); } +const IGNORED_ENV_VARS = ["NODE_ENV", "SHELL", "HOME", "PWD", "LOGNAME", "USER", "PATH"]; + function findAllEnvironmentVariableReferences(code: string): string[] { const regex = /\bprocess\.env\.([a-zA-Z_][a-zA-Z0-9_]*)\b/g; @@ -1307,8 +1391,10 @@ function findAllEnvironmentVariableReferences(code: string): string[] { const matchesArray = Array.from(matches, (match) => match[1]).filter(Boolean) as string[]; + const filteredMatches = matchesArray.filter((match) => !IGNORED_ENV_VARS.includes(match)); + // Make sure and remove duplicates - return Array.from(new Set(matchesArray)); + return Array.from(new Set(filteredMatches)); } function arrayToSentence(items: string[]): string { diff --git a/packages/cli-v3/src/commands/dev.tsx b/packages/cli-v3/src/commands/dev.tsx index 10b630acf..0cf49047c 100644 --- a/packages/cli-v3/src/commands/dev.tsx +++ b/packages/cli-v3/src/commands/dev.tsx @@ -13,7 +13,7 @@ import { watch } from "chokidar"; import { Command } from "commander"; import { BuildContext, Metafile, context } from "esbuild"; import { resolve as importResolve } from "import-meta-resolve"; -import { Box, Text, render, useApp, useInput } from "ink"; +import { render, useInput } from "ink"; import { createHash } from "node:crypto"; import fs, { readFileSync } from "node:fs"; import { ClientRequestArgs } from "node:http"; @@ -26,10 +26,16 @@ import { z } from "zod"; import * as packageJson from "../../package.json"; import { CliApiClient } from "../apiClient"; import { CommonCommandOptions, commonOptions, wrapCommandAction } from "../cli/common.js"; +import { bundleDependenciesPlugin, workerSetupImportConfigPlugin } from "../utilities/build"; +import { chalkPurple } from "../utilities/colors"; import { readConfig } from "../utilities/configFiles"; import { readJSONFile } from "../utilities/fileSystem"; import { printStandloneInitialBanner } from "../utilities/initialBanner.js"; -import { detectPackageNameFromImportPath, parsePackageName } from "../utilities/installPackages"; +import { + detectPackageNameFromImportPath, + parsePackageName, + stripWorkspaceFromVersion, +} from "../utilities/installPackages"; import { logger } from "../utilities/logger.js"; import { isLoggedIn } from "../utilities/session.js"; import { createTaskFileImports, gatherTaskFiles } from "../utilities/taskFiles"; @@ -124,7 +130,17 @@ async function startDev( }); if (!devEnv.success) { - throw new Error(devEnv.error); + if (devEnv.error === "Project not found") { + logger.error( + `Project not found: ${config.config.project}. Ensure you are using the correct project ref and CLI profile (use --profile). Currently using the "${options.profile}" profile, which points to ${authorization.apiUrl}` + ); + } else { + logger.error( + `Failed to initialize dev environment: ${devEnv.error}. Using project ref ${config.config.project}` + ); + } + + process.exit(1); } const environmentClient = new CliApiClient(apiUrl, devEnv.data.apiKey); @@ -283,7 +299,7 @@ function useDev({ async function runBuild() { if (ctx) { - await ctx.cancel(); + // This will stop the watching await ctx.dispose(); } @@ -336,7 +352,6 @@ function useDev({ write: false, minify: false, sourcemap: "external", // does not set the //# sourceMappingURL= comment in the file, we handle it ourselves - packages: "external", // https://esbuild.github.io/api/#packages logLevel: "error", platform: "node", format: "cjs", // This is needed to support opentelemetry instrumentation that uses module patching @@ -347,6 +362,8 @@ function useDev({ __PROJECT_CONFIG__: JSON.stringify(config), }, plugins: [ + bundleDependenciesPlugin(config), + workerSetupImportConfigPlugin(configPath), { name: "trigger.dev v3", setup(build) { @@ -458,6 +475,19 @@ function useDev({ throw new Error(`Background Worker started without package version`); } + // Check for any duplicate task ids + const taskIds = taskResources.map((task) => task.id); + const duplicateTaskIds = taskIds.filter( + (id, index) => taskIds.indexOf(id) !== index + ); + + if (duplicateTaskIds.length > 0) { + logger.error( + createDuplicateTaskIdOutputErrorMessage(duplicateTaskIds, taskResources) + ); + return; + } + const backgroundWorkerBody: CreateBackgroundWorkerRequestBody = { localOnly: true, metadata: { @@ -526,8 +556,9 @@ function useDev({ } const throttle = pThrottle({ - limit: 2, + limit: 1, interval: 1000, + strict: true, }); const throttledRebuild = throttle(runBuild); @@ -539,7 +570,7 @@ function useDev({ } ); - taskFileWatcher.on("add", async (path) => { + taskFileWatcher.on("change", async (path) => { throttledRebuild().catch((error) => { logger.error(error); }); @@ -588,58 +619,13 @@ function DevUIImp(props: DevProps) { } function useHotkeys() { - const { exit } = useApp(); - - useInput(async (input, key) => { - if (key.return) { - console.log(""); - return; - } - switch (input.toLowerCase()) { - // clear console - case "c": - console.clear(); - // This console.log causes Ink to re-render the `DevSession` component. - // Couldn't find a better way to tell it to do so... - console.log(); - break; - // open browser - case "b": { - break; - } - // toggle inspector - // case "d": { - // if (inspect) { - // await openInspector(inspectorPort, props.worker); - // } - // break; - // } - - // shut down - case "q": - case "x": - exit(); - break; - default: - // nothing? - break; - } - }); + useInput(async (input, key) => {}); } function HotKeys() { useHotkeys(); - return ( - - [b] - open a browser, - [c] - clear console, - [x] - to exit - - ); + return <>; } function WebsocketFactory(apiKey: string) { @@ -674,7 +660,7 @@ async function gatherRequiredDependencies( detectDependencyVersion(packageName); if (internalDependencyVersion) { - dependencies[packageName] = internalDependencyVersion; + dependencies[packageName] = stripWorkspaceFromVersion(internalDependencyVersion); } } @@ -712,6 +698,23 @@ async function gatherRequiredDependencies( return dependencies; } +function createDuplicateTaskIdOutputErrorMessage( + duplicateTaskIds: Array, + taskResources: Array +) { + const duplicateTable = duplicateTaskIds + .map((id) => { + const tasks = taskResources.filter((task) => task.id === id); + + return `id "${chalkPurple(id)}" was found in:\n${tasks + .map((task) => `${task.filePath} -> ${task.exportName}`) + .join("\n")}`; + }) + .join("\n\n"); + + return `Duplicate task ids detected:\n\n${duplicateTable}\n\n`; +} + function gatherProcessEnv() { const env = { NODE_ENV: process.env.NODE_ENV ?? "development", diff --git a/packages/cli-v3/src/commands/init.ts b/packages/cli-v3/src/commands/init.ts index 03dcfc640..f0c752da8 100644 --- a/packages/cli-v3/src/commands/init.ts +++ b/packages/cli-v3/src/commands/init.ts @@ -52,10 +52,6 @@ export function configureInitCommand(program: Command) { "-p, --project-ref ", "The project ref to use when initializing the project" ) - .option( - "-p, --project-ref ", - "The project ref to use when initializing the project" - ) .option( "-t, --tag ", "The version of the @trigger.dev/sdk package to install", @@ -145,11 +141,11 @@ async function _initCommand(dir: string, options: InitCommandOptions) { log.info("Skipping package installation"); } - // Create the config file - await writeConfigFile(dir, selectedProject, options); - // Create the trigger dir - await createTriggerDir(dir, options); + const triggerDir = await createTriggerDir(dir, options); + + // Create the config file + await writeConfigFile(dir, selectedProject, options, triggerDir); // Add trigger.config.ts to tsconfig.json await addConfigFileToTsConfig(dir, options); @@ -166,7 +162,7 @@ async function _initCommand(dir: string, options: InitCommandOptions) { log.info("Next steps:"); log.info( ` 1. To start developing, run ${chalk.green( - "npx trigger.dev@latest dev" + `npx trigger.dev@${options.tag} dev` )} in your project directory` ); log.info(` 2. Visit your ${projectDashboard} to view your newly created tasks.`); @@ -189,10 +185,12 @@ async function _initCommand(dir: string, options: InitCommandOptions) { async function createTriggerDir(dir: string, options: InitCommandOptions) { return await tracer.startActiveSpan("createTriggerDir", async (span) => { try { + const defaultValue = `${dir}/src/trigger`; + const location = await text({ message: "Where would you like to create the Trigger.dev directory?", - defaultValue: `${dir}/src/trigger`, - placeholder: `${dir}/src/trigger`, + defaultValue: defaultValue, + placeholder: defaultValue, }); if (isCancel(location)) { @@ -238,10 +236,10 @@ async function createTriggerDir(dir: string, options: InitCommandOptions) { log.step(`Created directory at ${location}`); span.end(); - return; + return { location, isCustomValue: location !== defaultValue }; } - const exampleFile = resolveInternalFilePath(`./templates/examples/${example}.js`); + const exampleFile = resolveInternalFilePath(`./templates/examples/${example}.ts.template`); const outputPath = join(triggerDir, "example.ts"); await createFileFromTemplate({ @@ -255,6 +253,8 @@ async function createTriggerDir(dir: string, options: InitCommandOptions) { log.step(`Created example file at ${relativeOutputPath}`); span.end(); + + return { location, isCustomValue: location !== defaultValue }; } catch (e) { if (!(e instanceof SkipCommandError)) { recordSpanException(span, e); @@ -431,7 +431,8 @@ async function installPackages(dir: string, options: InitCommandOptions) { async function writeConfigFile( dir: string, project: GetProjectResponseBody, - options: InitCommandOptions + options: InitCommandOptions, + triggerDir: { location: string; isCustomValue: boolean } ) { return await tracer.startActiveSpan("writeConfigFile", async (span) => { try { @@ -439,7 +440,7 @@ async function writeConfigFile( spnnr.start("Creating config file"); const projectDir = resolve(process.cwd(), dir); - const templatePath = resolveInternalFilePath("./templates/trigger.config.ts"); + const templatePath = resolveInternalFilePath("./templates/trigger.config.ts.template"); const outputPath = join(projectDir, "trigger.config.ts"); span.setAttributes({ @@ -452,6 +453,9 @@ async function writeConfigFile( templatePath, replacements: { projectRef: project.externalRef, + triggerDirectoriesOption: triggerDir.isCustomValue + ? `\n triggerDirectories: ["${triggerDir.location}"],` + : "", }, outputPath, override: options.overrideConfig, diff --git a/packages/cli-v3/src/telemetry/tracing.ts b/packages/cli-v3/src/telemetry/tracing.ts index bf397b401..6da77e900 100644 --- a/packages/cli-v3/src/telemetry/tracing.ts +++ b/packages/cli-v3/src/telemetry/tracing.ts @@ -1,20 +1,59 @@ -import { BaselimeSDK } from "@baselime/node-opentelemetry"; -import { trace } from "@opentelemetry/api"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import { registerInstrumentations } from "@opentelemetry/instrumentation"; +import { Resource, detectResourcesSync, processDetectorSync } from "@opentelemetry/resources"; +import { NodeTracerProvider, SimpleSpanProcessor } from "@opentelemetry/sdk-trace-node"; import { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch"; -import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"; +import { DiagConsoleLogger, DiagLogLevel, diag, trace } from "@opentelemetry/api"; import * as packageJson from "../../package.json"; -const sdk = new BaselimeSDK({ - baselimeKey: "e9f963244f8b092850d42e34a5339b2d5e68070b".split("").reverse().join(""), // this is a joke - instrumentations: [new FetchInstrumentation()], - service: "cli-v3", - serverless: true, -}); - function initializeTracing(): NodeTracerProvider | undefined { - if (!process.argv.includes("--skip-telemetry")) { - return sdk.start(); + if (process.argv.includes("--skip-telemetry") || process.env.TRIGGER_DEV_SKIP_TELEMETRY) { + return; } + + if (process.env.OTEL_INTERNAL_DIAG_DEBUG) { + diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG); + } + + const resource = detectResourcesSync({ + detectors: [processDetectorSync], + }).merge( + new Resource({ + service: "trigger.dev cli v3", + }) + ); + + const traceProvider = new NodeTracerProvider({ + forceFlushTimeoutMillis: 500, + resource, + spanLimits: { + attributeCountLimit: 1000, + attributeValueLengthLimit: 1000, + eventCountLimit: 100, + attributePerEventCountLimit: 100, + linkCountLimit: 10, + attributePerLinkCountLimit: 100, + }, + }); + + const spanExporter = new OTLPTraceExporter({ + url: "https://otel.baselime.io/v1", + timeoutMillis: 500, + headers: { + "x-api-key": "e9f963244f8b092850d42e34a5339b2d5e68070b".split("").reverse().join(""), // this is a joke + }, + }); + + const spanProcessor = new SimpleSpanProcessor(spanExporter); + + traceProvider.addSpanProcessor(spanProcessor); + traceProvider.register(); + + registerInstrumentations({ + instrumentations: [new FetchInstrumentation()], + }); + + return traceProvider; } export const provider = initializeTracing(); diff --git a/packages/cli-v3/src/templates/examples/simple.js b/packages/cli-v3/src/templates/examples/simple.ts.template similarity index 100% rename from packages/cli-v3/src/templates/examples/simple.js rename to packages/cli-v3/src/templates/examples/simple.ts.template diff --git a/packages/cli-v3/src/templates/trigger.config.ts b/packages/cli-v3/src/templates/trigger.config.ts.template similarity index 62% rename from packages/cli-v3/src/templates/trigger.config.ts rename to packages/cli-v3/src/templates/trigger.config.ts.template index c9f2a18ae..d17d82e79 100644 --- a/packages/cli-v3/src/templates/trigger.config.ts +++ b/packages/cli-v3/src/templates/trigger.config.ts.template @@ -1,6 +1,6 @@ -import type { ProjectConfig } from "@trigger.dev/core/v3"; +import type { TriggerConfig } from "@trigger.dev/sdk/v3"; -export const config: ProjectConfig = { +export const config: TriggerConfig = { project: "${projectRef}", retries: { enabledInDev: false, @@ -11,5 +11,5 @@ export const config: ProjectConfig = { factor: 2, randomize: true, }, - }, + },${triggerDirectoriesOption} }; diff --git a/packages/cli-v3/src/utilities/build.ts b/packages/cli-v3/src/utilities/build.ts new file mode 100644 index 000000000..d1eea449f --- /dev/null +++ b/packages/cli-v3/src/utilities/build.ts @@ -0,0 +1,198 @@ +import { ResolvedConfig } from "@trigger.dev/core/v3"; +import type * as esbuild from "esbuild"; +import type { Plugin } from "esbuild"; +import { extname, isAbsolute } from "node:path"; +import tsConfigPaths from "tsconfig-paths"; +import { logger } from "./logger"; +import { readFileSync } from "node:fs"; + +export function workerSetupImportConfigPlugin(configPath?: string): Plugin { + return { + name: "trigger-worker-setup", + setup(build) { + if (!configPath) { + return; + } + + build.onLoad({ filter: /worker-setup\.js$/ }, async (args) => { + let workerSetupContents = readFileSync(args.path, "utf-8"); + + workerSetupContents = workerSetupContents.replace( + "__SETUP_IMPORTED_PROJECT_CONFIG__", + `import * as setupImportedConfigExports from "${configPath}"; const setupImportedConfig = setupImportedConfigExports.config;` + ); + + logger.debug("Loading worker setup", { + args, + workerSetupContents, + configPath, + }); + + return { + contents: workerSetupContents, + loader: "js", + }; + }); + }, + }; +} + +export function bundleDependenciesPlugin(config: ResolvedConfig): Plugin { + const matchPath = config.tsconfigPath ? createMatchPath(config.tsconfigPath) : undefined; + + function resolvePath(id: string) { + if (!matchPath) { + return id; + } + return matchPath(id, undefined, undefined, [".ts", ".tsx", ".js", ".jsx"]) || id; + } + + return { + name: "trigger-bundle-dependencies", + setup(build) { + build.onResolve({ filter: /.*/ }, (args) => { + const resolvedPath = resolvePath(args.path); + + logger.ignore(`Checking if ${args.path} should be bundled or external`, { + ...args, + resolvedPath, + }); + + if (!isBareModuleId(resolvedPath)) { + logger.ignore(`Bundling ${args.path} because its not a bareModuleId`, { + ...args, + }); + + return undefined; // let esbuild bundle it + } + + if (args.path.startsWith("@trigger.dev/")) { + logger.ignore(`Bundling ${args.path} because its a trigger.dev package`, { + ...args, + }); + + return undefined; // let esbuild bundle it + } + + // Skip assets that are treated as files (.css, .svg, .png, etc.). + // Otherwise, esbuild would emit code that would attempt to require() + // or import these files --- which aren't JavaScript! + let loader; + try { + loader = getLoaderForFile(args.path); + } catch (e) { + if (!(e instanceof Error && e.message.startsWith("Cannot get loader for file"))) { + throw e; + } + } + if (loader === "file") { + return undefined; + } + + for (let pattern of config.dependenciesToBundle ?? []) { + if (typeof pattern === "string" ? args.path === pattern : pattern.test(args.path)) { + return undefined; // let esbuild bundle it + } + } + + logger.ignore(`Externalizing ${args.path}`, { + ...args, + }); + + // Everything else should be external + return { + path: args.path, + external: true, + }; + }); + }, + }; +} + +function isBareModuleId(id: string): boolean { + return !id.startsWith("node:") && !id.startsWith(".") && !isAbsolute(id); +} + +export function createMatchPath(tsconfigPath: string | undefined) { + // There is no tsconfig to match paths against. + if (!tsconfigPath) { + return undefined; + } + + // When passing a absolute path, loadConfig assumes that the path contains + // a tsconfig file. + // Ref.: https://github.com/dividab/tsconfig-paths/blob/v4.0.0/src/__tests__/config-loader.test.ts#L74 + let configLoaderResult = tsConfigPaths.loadConfig(tsconfigPath); + + if (configLoaderResult.resultType === "failed") { + if (configLoaderResult.message === "Missing baseUrl in compilerOptions") { + throw new Error( + `🚨 Oops! No baseUrl found, please set compilerOptions.baseUrl in your tsconfig or jsconfig` + ); + } + return undefined; + } + + return tsConfigPaths.createMatchPath( + configLoaderResult.absoluteBaseUrl, + configLoaderResult.paths, + configLoaderResult.mainFields, + configLoaderResult.addMatchAll + ); +} + +const loaders: { [ext: string]: esbuild.Loader } = { + ".aac": "file", + ".avif": "file", + ".css": "file", + ".csv": "file", + ".eot": "file", + ".fbx": "file", + ".flac": "file", + ".gif": "file", + ".glb": "file", + ".gltf": "file", + ".gql": "text", + ".graphql": "text", + ".hdr": "file", + ".ico": "file", + ".jpeg": "file", + ".jpg": "file", + ".js": "jsx", + ".jsx": "jsx", + ".json": "json", + // We preprocess md and mdx files using @mdx-js/mdx and send through + // the JSX for esbuild to handle + ".md": "jsx", + ".mdx": "jsx", + ".mov": "file", + ".mp3": "file", + ".mp4": "file", + ".node": "copy", + ".ogg": "file", + ".otf": "file", + ".png": "file", + ".psd": "file", + ".sql": "text", + ".svg": "file", + ".ts": "ts", + ".tsx": "tsx", + ".ttf": "file", + ".wasm": "file", + ".wav": "file", + ".webm": "file", + ".webmanifest": "file", + ".webp": "file", + ".woff": "file", + ".woff2": "file", + ".zip": "file", +}; + +export function getLoaderForFile(file: string): esbuild.Loader { + const ext = extname(file); + const loader = loaders[ext]; + + if (loader) return loader; + + throw new Error(`Cannot get loader for file ${file}`); +} diff --git a/packages/cli-v3/src/utilities/configFiles.ts b/packages/cli-v3/src/utilities/configFiles.ts index bdabc3157..ca5a4257a 100644 --- a/packages/cli-v3/src/utilities/configFiles.ts +++ b/packages/cli-v3/src/utilities/configFiles.ts @@ -131,7 +131,7 @@ export async function readConfig( const tempDir = await createTempDir(); - const builtConfigFilePath = join(tempDir, "config.mjs"); + const builtConfigFilePath = join(tempDir, "config.js"); const builtConfigFileHref = pathToFileURL(builtConfigFilePath).href; logger.debug("Building config file", { @@ -147,7 +147,7 @@ export async function readConfig( metafile: true, minify: false, write: true, - format: "esm", + format: "cjs", platform: "node", target: ["es2018", "node18"], outfile: builtConfigFilePath, @@ -183,6 +183,10 @@ export async function resolveConfig(path: string, config: Config): Promise this.doLog("debug", args); + ignore = (...args: unknown[]) => {}; debugWithSanitization = (label: string, ...args: unknown[]) => { this.doLog("debug", [label, ...args]); }; diff --git a/packages/cli-v3/src/utilities/taskFiles.ts b/packages/cli-v3/src/utilities/taskFiles.ts index a0fe0e8de..d63d6c9be 100644 --- a/packages/cli-v3/src/utilities/taskFiles.ts +++ b/packages/cli-v3/src/utilities/taskFiles.ts @@ -30,7 +30,7 @@ export async function gatherTaskFiles(config: ResolvedConfig): Promise = new Evt(); constructor( + private runId: string, private path: string, private env: NodeJS.ProcessEnv, private metadata: BackgroundWorkerProperties, @@ -529,7 +531,7 @@ class TaskRunProcess { schema: workerToChildMessages, sender: async (message) => { if (this._child?.connected && !this._isBeingKilled && !this._child.killed) { - this._child?.send?.(message); + this._child.send(message); } }, }); @@ -542,10 +544,9 @@ class TaskRunProcess { } async initialize() { - logger.debug("initializing task run process", { + logger.debug(`[${this.runId}] initializing task run process`, { env: this.env, path: this.path, - processEnv: process.env, }); this._child = fork(this.path, { @@ -575,6 +576,8 @@ class TaskRunProcess { return; } + logger.debug(`[${this.runId}] cleaning up task run process`, { kill }); + await this._sender.send("CLEANUP", { flush: true, kill, @@ -619,6 +622,13 @@ class TaskRunProcess { return; } + if (execution.run.id === this.runId) { + // We don't need to notify the task run process if it's the same as the one we're running + return; + } + + logger.debug(`[${this.runId}] task run completed notification`, { completion, execution }); + this._sender.send("TASK_RUN_COMPLETED_NOTIFICATION", { completion, execution, @@ -669,6 +679,8 @@ class TaskRunProcess { } async #handleExit(code: number) { + logger.debug(`[${this.runId}] task run process exiting`, { code }); + // Go through all the attempts currently pending and reject them for (const [id, status] of this._attemptStatuses.entries()) { if (status === "PENDING") { diff --git a/packages/cli-v3/src/workers/dev/worker-facade.ts b/packages/cli-v3/src/workers/dev/worker-facade.ts index 0592703c6..f2449538c 100644 --- a/packages/cli-v3/src/workers/dev/worker-facade.ts +++ b/packages/cli-v3/src/workers/dev/worker-facade.ts @@ -6,7 +6,6 @@ import { type TracingSDK, type HandleErrorFunction, } from "@trigger.dev/core/v3"; -import "source-map-support/register.js"; __WORKER_SETUP__; declare const __WORKER_SETUP__: unknown; diff --git a/packages/cli-v3/src/workers/dev/worker-setup.ts b/packages/cli-v3/src/workers/dev/worker-setup.ts index ad9d9bf24..a20fb8e8c 100644 --- a/packages/cli-v3/src/workers/dev/worker-setup.ts +++ b/packages/cli-v3/src/workers/dev/worker-setup.ts @@ -1,6 +1,7 @@ +import "source-map-support/register.js"; import { Resource } from "@opentelemetry/resources"; -import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai"; import { + ProjectConfig, SemanticInternalAttributes, TracingDiagnosticLogLevel, TracingSDK, @@ -8,12 +9,16 @@ import { childToWorkerMessages, } from "@trigger.dev/core/v3"; +__SETUP_IMPORTED_PROJECT_CONFIG__; +declare const __SETUP_IMPORTED_PROJECT_CONFIG__: unknown; +declare const setupImportedConfig: ProjectConfig | undefined; + export const tracingSDK = new TracingSDK({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318", resource: new Resource({ [SemanticInternalAttributes.CLI_VERSION]: "3.0.0", }), - instrumentations: [new OpenAIInstrumentation()], + instrumentations: setupImportedConfig?.instrumentations ?? [], diagLogLevel: (process.env.OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none", }); diff --git a/packages/cli-v3/src/workers/prod/worker-setup.ts b/packages/cli-v3/src/workers/prod/worker-setup.ts index 535670edc..34aa5c29d 100644 --- a/packages/cli-v3/src/workers/prod/worker-setup.ts +++ b/packages/cli-v3/src/workers/prod/worker-setup.ts @@ -1,19 +1,21 @@ import { Resource } from "@opentelemetry/resources"; -import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai"; import { + ProjectConfig, SemanticInternalAttributes, TracingDiagnosticLogLevel, TracingSDK, - ZodMessageSender, - childToWorkerMessages, } from "@trigger.dev/core/v3"; +__SETUP_IMPORTED_PROJECT_CONFIG__; +declare const __SETUP_IMPORTED_PROJECT_CONFIG__: unknown; +declare const setupImportedConfig: ProjectConfig | undefined; + export const tracingSDK = new TracingSDK({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318", resource: new Resource({ [SemanticInternalAttributes.CLI_VERSION]: "3.0.0", }), - instrumentations: [new OpenAIInstrumentation()], + instrumentations: setupImportedConfig?.instrumentations ?? [], diagLogLevel: (process.env.OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none", }); diff --git a/packages/cli-v3/tsup.config.ts b/packages/cli-v3/tsup.config.ts index 7208671be..dcedcf568 100644 --- a/packages/cli-v3/tsup.config.ts +++ b/packages/cli-v3/tsup.config.ts @@ -17,6 +17,6 @@ export default defineConfig({ outDir: "dist", onSuccess: isDev ? `${copyTemplates} && node dist/index.js` : copyTemplates, banner: { - js: "import { createRequire } from 'module';const require = createRequire(import.meta.url);", + js: "import { createRequire as createRequireFromMetaUrl } from 'node:module';const require = createRequireFromMetaUrl(import.meta.url);", }, }); diff --git a/packages/cli-v3/tsup.workers.config.ts b/packages/cli-v3/tsup.workers.config.ts index f582f968d..6ecc248f6 100644 --- a/packages/cli-v3/tsup.workers.config.ts +++ b/packages/cli-v3/tsup.workers.config.ts @@ -18,4 +18,5 @@ export default defineConfig({ sourcemap: false, target: "esnext", outDir: "dist/workers", + noExternal: ["@trigger.dev/core-apps"], }); diff --git a/packages/core-apps/package.json b/packages/core-apps/package.json index 5eeb914b6..571694f08 100644 --- a/packages/core-apps/package.json +++ b/packages/core-apps/package.json @@ -1,6 +1,7 @@ { "name": "@trigger.dev/core-apps", "description": "Backend core code used across apps", + "version": "0.0.0", "private": true, "license": "MIT", "main": "./dist/index.js", diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json index 1e62c5fc8..e265e04b3 100644 --- a/packages/core-backend/package.json +++ b/packages/core-backend/package.json @@ -46,6 +46,6 @@ "node": ">=18.0.0" }, "dependencies": { - "@opentelemetry/api": "^1.7.0" + "@opentelemetry/api": "^1.8.0" } } \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index 17d2ea737..f292d1af6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -59,21 +59,17 @@ }, "dependencies": { "@google-cloud/precise-date": "^4.0.0", - "@opentelemetry/api": "^1.7.0", + "@opentelemetry/api": "^1.8.0", "@opentelemetry/api-logs": "^0.48.0", - "@opentelemetry/auto-instrumentations-node": "^0.40.3", - "@opentelemetry/exporter-collector": "^0.25.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.48.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.48.0", - "@opentelemetry/instrumentation": "^0.48.0", - "@opentelemetry/instrumentation-fetch": "^0.48.0", - "@opentelemetry/instrumentation-http": "^0.48.0", - "@opentelemetry/resources": "^1.21.0", - "@opentelemetry/sdk-logs": "^0.48.0", - "@opentelemetry/sdk-node": "^0.48.0", - "@opentelemetry/sdk-trace-base": "^1.21.0", - "@opentelemetry/sdk-trace-node": "^1.21.0", - "@opentelemetry/semantic-conventions": "^1.21.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.49.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.49.1", + "@opentelemetry/instrumentation": "^0.49.1", + "@opentelemetry/resources": "^1.22.0", + "@opentelemetry/sdk-logs": "^0.49.1", + "@opentelemetry/sdk-node": "^0.49.1", + "@opentelemetry/sdk-trace-base": "^1.22.0", + "@opentelemetry/sdk-trace-node": "^1.22.0", + "@opentelemetry/semantic-conventions": "^1.22.0", "humanize-duration": "^3.27.3", "socket.io": "^4.7.4", "socket.io-client": "^4.7.4", diff --git a/packages/core/src/v3/otel/index.ts b/packages/core/src/v3/otel/index.ts index b796a67a5..399649134 100644 --- a/packages/core/src/v3/otel/index.ts +++ b/packages/core/src/v3/otel/index.ts @@ -1,7 +1,6 @@ import { Span, SpanStatusCode } from "@opentelemetry/api"; export { TracingSDK, type TracingSDKConfig, type TracingDiagnosticLogLevel } from "./tracingSDK"; -export { HttpInstrumentation, FetchInstrumentation } from "./instrumentations"; export function recordSpanException(span: Span, error: unknown) { if (error instanceof Error) { diff --git a/packages/core/src/v3/otel/instrumentations.ts b/packages/core/src/v3/otel/instrumentations.ts deleted file mode 100644 index 0df8eb222..000000000 --- a/packages/core/src/v3/otel/instrumentations.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { HttpInstrumentation } from "@opentelemetry/instrumentation-http"; -export { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch"; diff --git a/packages/core/src/v3/runtime/devRuntimeManager.ts b/packages/core/src/v3/runtime/devRuntimeManager.ts index ac8b76af7..007749639 100644 --- a/packages/core/src/v3/runtime/devRuntimeManager.ts +++ b/packages/core/src/v3/runtime/devRuntimeManager.ts @@ -20,6 +20,8 @@ export class DevRuntimeManager implements RuntimeManager { _tasks: Map = new Map(); + _pendingCompletionNotifications: Map = new Map(); + disable(): void { // do nothing } @@ -47,6 +49,14 @@ export class DevRuntimeManager implements RuntimeManager { } async waitForTask(params: { id: string; ctx: TaskRunContext }): Promise { + const pendingCompletion = this._pendingCompletionNotifications.get(params.id); + + if (pendingCompletion) { + this._pendingCompletionNotifications.delete(params.id); + + return pendingCompletion; + } + const promise = new Promise((resolve, reject) => { this._taskWaits.set(params.id, { resolve, reject }); }); @@ -66,6 +76,20 @@ export class DevRuntimeManager implements RuntimeManager { const promise = Promise.all( params.runs.map((runId) => { return new Promise((resolve, reject) => { + const pendingCompletion = this._pendingCompletionNotifications.get(runId); + + if (pendingCompletion) { + this._pendingCompletionNotifications.delete(runId); + + if (pendingCompletion.ok) { + resolve(pendingCompletion); + } else { + reject(pendingCompletion); + } + + return; + } + this._taskWaits.set(runId, { resolve, reject }); }); }) @@ -83,6 +107,9 @@ export class DevRuntimeManager implements RuntimeManager { const wait = this._taskWaits.get(execution.run.id); if (!wait) { + // We need to store the completion in case the task is awaited later + this._pendingCompletionNotifications.set(execution.run.id, completion); + return; } diff --git a/packages/core/src/v3/schemas/fetch.ts b/packages/core/src/v3/schemas/fetch.ts index 2b12eb21f..b901b8d69 100644 --- a/packages/core/src/v3/schemas/fetch.ts +++ b/packages/core/src/v3/schemas/fetch.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { RetryOptions } from "./messages"; import { EventFilter } from "./eventFilter"; +import { Prettify } from "../types"; export const FetchRetryHeadersStrategy = z.object({ /** The `headers` strategy retries the request using info from the response headers. */ @@ -45,14 +46,14 @@ export const FetchRetryStrategy = z.discriminatedUnion("strategy", [ export type FetchRetryStrategy = z.infer; -export const FetchRetryOptions = z.record(FetchRetryStrategy); +export const FetchRetryByStatusOptions = z.record(z.string(), FetchRetryStrategy); /** An object where the key is a status code pattern and the value is a retrying strategy. Supported patterns are: - Specific status codes: 429 - Ranges: 500-599 - Wildcards: 2xx, 3xx, 4xx, 5xx */ -export type FetchRetryOptions = z.infer; +export type FetchRetryByStatusOptions = Prettify>; export const FetchTimeoutOptions = z.object({ /** The maximum time to wait for the request to complete. */ @@ -61,3 +62,16 @@ export const FetchTimeoutOptions = z.object({ }); export type FetchTimeoutOptions = z.infer; + +export const FetchRetryOptions = z.object({ + /** The retrying strategy for specific status codes. */ + byStatus: FetchRetryByStatusOptions.optional(), + /** The timeout options for the request. */ + timeout: RetryOptions.optional(), + /** + * The retrying strategy for connection errors. + */ + connectionError: RetryOptions.optional(), +}); + +export type FetchRetryOptions = Prettify>; diff --git a/packages/core/src/v3/schemas/schemas.ts b/packages/core/src/v3/schemas/schemas.ts index 710a49329..92fbf950b 100644 --- a/packages/core/src/v3/schemas/schemas.ts +++ b/packages/core/src/v3/schemas/schemas.ts @@ -10,11 +10,21 @@ import { } from "./messages"; import { TaskResource } from "./resources"; +const RegexSchema = z.custom((val) => { + try { + // Check to see if val is a regex + return typeof (val as RegExp).test === "function"; + } catch { + return false; + } +}); + export const Config = z.object({ project: z.string(), triggerDirectories: z.string().array().optional(), triggerUrl: z.string().optional(), projectDir: z.string().optional(), + tsconfigPath: z.string().optional(), retries: z .object({ enabledInDev: z.boolean().default(true), @@ -22,12 +32,14 @@ export const Config = z.object({ }) .optional(), additionalPackages: z.string().array().optional(), + additionalFiles: z.string().array().optional(), + dependenciesToBundle: z.array(z.union([z.string(), RegexSchema])).optional(), }); export type Config = z.infer; export type ResolvedConfig = RequireKeys< Config, - "triggerDirectories" | "triggerUrl" | "projectDir" + "triggerDirectories" | "triggerUrl" | "projectDir" | "tsconfigPath" >; export const Machine = z.object({ diff --git a/packages/core/src/v3/types/config.ts b/packages/core/src/v3/types/config.ts index f0e0d4a1c..de79fa163 100644 --- a/packages/core/src/v3/types/config.ts +++ b/packages/core/src/v3/types/config.ts @@ -1,4 +1,5 @@ import { RetryOptions } from "../schemas"; +import type { InstrumentationOption } from "@opentelemetry/instrumentation"; export interface ProjectConfig { project: string; @@ -9,4 +10,25 @@ export interface ProjectConfig { default?: RetryOptions; }; additionalPackages?: string[]; + + /** + * List of additional files to include in your trigger.dev bundle. e.g. ["./prisma/schema.prisma"] + * + * Supports glob patterns. + */ + additionalFiles?: string[]; + /** + * List of patterns that determine if a module is included in your trigger.dev bundle. This is needed when consuming ESM only packages, since the trigger.dev bundle is currently built as a CJS module. + */ + dependenciesToBundle?: Array; + + /** + * The path to your project's tsconfig.json file. Will use tsconfig.json in the project directory if not provided. + */ + tsconfigPath?: string; + + /** + * The OpenTelemetry instrumentations to enable + */ + instrumentations?: InstrumentationOption[]; } diff --git a/packages/core/src/v3/utils/flattenAttributes.ts b/packages/core/src/v3/utils/flattenAttributes.ts index 00e6e815e..a8afe13ce 100644 --- a/packages/core/src/v3/utils/flattenAttributes.ts +++ b/packages/core/src/v3/utils/flattenAttributes.ts @@ -32,9 +32,9 @@ export function flattenAttributes( for (let i = 0; i < value.length; i++) { if (typeof value[i] === "object" && value[i] !== null) { // update null check here as well - Object.assign(result, flattenAttributes(value[i], `${newPrefix}.${i}`)); + Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`)); } else { - result[`${newPrefix}.${i}`] = value[i]; + result[`${newPrefix}.[${i}]`] = value[i]; } } } else if (isRecord(value)) { @@ -55,46 +55,54 @@ function isRecord(value: unknown): value is Record { } export function unflattenAttributes(obj: Attributes): Record { - if ( - obj === null || - obj === undefined || - typeof obj === "string" || - typeof obj === "number" || - typeof obj === "boolean" || - Array.isArray(obj) - ) { + if (typeof obj !== "object" || obj === null || Array.isArray(obj)) { return obj; } const result: Record = {}; for (const [key, value] of Object.entries(obj)) { - const parts = key.split("."); - let current = result; + const parts = key.split(".").reduce((acc, part) => { + // Splitting array indices as separate parts + if (detectIsArrayIndex(part)) { + acc.push(part); + } else { + acc.push(...part.split(/\.\[(.*?)\]/).filter(Boolean)); + } + return acc; + }, [] as string[]); + + let current: Record = result; for (let i = 0; i < parts.length - 1; i++) { const part = parts[i]; - - // Check if part is not undefined and it's a string. - if (typeof part === "string") { - const nextPart = parts[i + 1]; - const isArray = nextPart ? parseInt(nextPart, 10).toString() === nextPart : false; - if (current[part] == null) { - current[part] = isArray ? [] : {}; - } - - current = current[part] as Record; + const isArray = detectIsArrayIndex(part); + const cleanPart = isArray ? part.substring(1, part.length - 1) : part; + const nextIsArray = detectIsArrayIndex(parts[i + 1]); + if (!current[cleanPart]) { + current[cleanPart] = nextIsArray ? [] : {}; } + current = current[cleanPart] as Record; } - // For the last element, we must ensure we also check if it is not undefined and it's a string. const lastPart = parts[parts.length - 1]; - if (typeof lastPart === "string") { - current[lastPart] = value; - } + const cleanLastPart = detectIsArrayIndex(lastPart) + ? parseInt(lastPart.substring(1, lastPart.length - 1), 10) + : lastPart; + current[cleanLastPart] = value; } return result; } +function detectIsArrayIndex(key: string): boolean { + const match = key.match(/^\[(\d+)\]$/); + + if (match) { + return true; + } + + return false; +} + export function primitiveValueOrflattenedAttributes( obj: Record | Array | string | boolean | number | undefined, prefix: string | undefined diff --git a/packages/core/src/v3/utils/retries.ts b/packages/core/src/v3/utils/retries.ts index ef32475dd..9a9134665 100644 --- a/packages/core/src/v3/utils/retries.ts +++ b/packages/core/src/v3/utils/retries.ts @@ -1,5 +1,5 @@ -import { type RetryOptions } from "../schemas"; import { calculateResetAt as calculateResetAtInternal } from "../../retry"; +import { FetchRetryOptions, type RetryOptions } from "../schemas"; export const defaultRetryOptions = { maxAttempts: 3, @@ -9,6 +9,17 @@ export const defaultRetryOptions = { randomize: true, } satisfies RetryOptions; +export const defaultFetchRetryOptions = { + byStatus: { + "429,408,409,5xx": { + strategy: "backoff", + ...defaultRetryOptions, + }, + }, + connectionError: defaultRetryOptions, + timeout: defaultRetryOptions, +} satisfies FetchRetryOptions; + /** * * @param options diff --git a/packages/core/test/flattenAttributes.test.ts b/packages/core/test/flattenAttributes.test.ts new file mode 100644 index 000000000..3ce865112 --- /dev/null +++ b/packages/core/test/flattenAttributes.test.ts @@ -0,0 +1,186 @@ +import { flattenAttributes, unflattenAttributes } from "../src/v3/utils/flattenAttributes"; + +describe("flattenAttributes", () => { + it("handles null and undefined gracefully", () => { + expect(flattenAttributes(null)).toEqual({}); + expect(flattenAttributes(undefined)).toEqual({}); + }); + + it("flattens string attributes correctly", () => { + const result = flattenAttributes("testString"); + expect(result).toEqual({ "": "testString" }); + }); + + it("flattens number attributes correctly", () => { + const result = flattenAttributes(12345); + expect(result).toEqual({ "": 12345 }); + }); + + it("flattens boolean attributes correctly", () => { + const result = flattenAttributes(true); + expect(result).toEqual({ "": true }); + }); + + it("flattens complex objects correctly", () => { + const obj = { + level1: { + level2: { + value: "test", + }, + array: [1, 2, 3], + }, + }; + const expected = { + "level1.level2.value": "test", + "level1.array.[0]": 1, + "level1.array.[1]": 2, + "level1.array.[2]": 3, + }; + expect(flattenAttributes(obj)).toEqual(expected); + }); + + it("applies prefixes correctly", () => { + const obj = { key: "value" }; + const expected = { "prefix.key": "value" }; + expect(flattenAttributes(obj, "prefix")).toEqual(expected); + }); + + it("handles arrays of objects correctly", () => { + const obj = { + array: [{ key: "value" }, { key: "value" }, { key: "value" }], + }; + const expected = { + "array.[0].key": "value", + "array.[1].key": "value", + "array.[2].key": "value", + }; + expect(flattenAttributes(obj)).toEqual(expected); + }); + + it("handles arrays of objects correctly with prefixing correctly", () => { + const obj = { + array: [{ key: "value" }, { key: "value" }, { key: "value" }], + }; + const expected = { + "prefix.array.[0].key": "value", + "prefix.array.[1].key": "value", + "prefix.array.[2].key": "value", + }; + expect(flattenAttributes(obj, "prefix")).toEqual(expected); + }); + + it("handles objects of objects correctly", () => { + const obj = { + level1: { + level2: { + key: "value", + }, + }, + }; + const expected = { "level1.level2.key": "value" }; + expect(flattenAttributes(obj)).toEqual(expected); + }); + + it("handles objects of objects correctly with prefixing", () => { + const obj = { + level1: { + level2: { + key: "value", + }, + }, + }; + const expected = { "prefix.level1.level2.key": "value" }; + expect(flattenAttributes(obj, "prefix")).toEqual(expected); + }); + + it("handles retry.byStatus correctly", () => { + const obj = { + "500": { + strategy: "backoff", + maxAttempts: 2, + factor: 2, + minTimeoutInMs: 1_000, + maxTimeoutInMs: 30_000, + randomize: false, + }, + }; + + const expected = { + "retry.byStatus.500.strategy": "backoff", + "retry.byStatus.500.maxAttempts": 2, + "retry.byStatus.500.factor": 2, + "retry.byStatus.500.minTimeoutInMs": 1_000, + "retry.byStatus.500.maxTimeoutInMs": 30_000, + "retry.byStatus.500.randomize": false, + }; + + expect(flattenAttributes(obj, "retry.byStatus")).toEqual(expected); + }); +}); + +describe("unflattenAttributes", () => { + it("returns the original object for primitive types", () => { + // @ts-expect-error + expect(unflattenAttributes("testString")).toEqual("testString"); + // @ts-expect-error + expect(unflattenAttributes(12345)).toEqual(12345); + // @ts-expect-error + expect(unflattenAttributes(true)).toEqual(true); + }); + + it("correctly reconstructs an object from flattened attributes", () => { + const flattened = { + "level1.level2.value": "test", + "level1.array.[0]": 1, + "level1.array.[1]": 2, + "level1.array.[2]": 3, + }; + const expected = { + level1: { + level2: { + value: "test", + }, + array: [1, 2, 3], + }, + }; + expect(unflattenAttributes(flattened)).toEqual(expected); + }); + + it("handles complex nested objects with mixed types", () => { + const flattened = { + "user.details.name": "John Doe", + "user.details.age": 30, + "user.preferences.colors.[0]": "blue", + "user.preferences.colors.[1]": "green", + "user.active": true, + }; + const expected = { + user: { + details: { + name: "John Doe", + age: 30, + }, + preferences: { + colors: ["blue", "green"], + }, + active: true, + }, + }; + expect(unflattenAttributes(flattened)).toEqual(expected); + }); + + it("correctly identifies arrays vs objects", () => { + const flattened = { + "array.[0]": 1, + "array.[1]": 2, + "object.key": "value", + }; + const expected = { + array: [1, 2], + object: { + key: "value", + }, + }; + expect(unflattenAttributes(flattened)).toEqual(expected); + }); +}); diff --git a/packages/emails/package.json b/packages/emails/package.json index 1fef325a7..db61ce12a 100644 --- a/packages/emails/package.json +++ b/packages/emails/package.json @@ -30,10 +30,10 @@ "devDependencies": { "@trigger.dev/tsconfig": "workspace:*", "@types/node": "^18", - "@types/react": "18.2.17", + "@types/react": "18.2.69", "typescript": "^4.9.4" }, "engines": { "node": ">=18.0.0" } -} +} \ No newline at end of file diff --git a/packages/emails/tsconfig.json b/packages/emails/tsconfig.json index cc08919d2..e83b13f85 100644 --- a/packages/emails/tsconfig.json +++ b/packages/emails/tsconfig.json @@ -2,7 +2,7 @@ "extends": "@trigger.dev/tsconfig/node18.json", "include": ["src/globals.d.ts", "./src/**/*.ts", "./src/**/*.tsx"], "compilerOptions": { - "jsx": "react", + "jsx": "react-jsx", "lib": ["ES2021", "dom"], "experimentalDecorators": true, "emitDecoratorMetadata": true, diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index 4ab3ef959..2f74fd3a6 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -1,7 +1,7 @@ { "include": ["./src/**/*.ts", "./src/**/*.tsx", "tsup.config.ts"], "compilerOptions": { - "jsx": "react", + "jsx": "react-jsx", "moduleResolution": "node", "esModuleInterop": true, "strict": true, diff --git a/packages/trigger-sdk/package.json b/packages/trigger-sdk/package.json index 7167a43ac..321cb2873 100644 --- a/packages/trigger-sdk/package.json +++ b/packages/trigger-sdk/package.json @@ -45,9 +45,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@opentelemetry/api": "^1.7.0", + "@opentelemetry/api": "^1.8.0", "@opentelemetry/api-logs": "^0.48.0", - "@opentelemetry/semantic-conventions": "^1.21.0", + "@opentelemetry/semantic-conventions": "^1.22.0", "@trigger.dev/core": "workspace:^2.3.18", "@trigger.dev/core-backend": "workspace:^2.3.18", "chalk": "^5.2.0", diff --git a/packages/trigger-sdk/src/v3/config.ts b/packages/trigger-sdk/src/v3/config.ts index 5d1581097..48c50779b 100644 --- a/packages/trigger-sdk/src/v3/config.ts +++ b/packages/trigger-sdk/src/v3/config.ts @@ -1 +1,5 @@ -export type { ProjectConfig as Config } from "@trigger.dev/core/v3"; +export type { + ProjectConfig as TriggerConfig, + HandleErrorArgs, + HandleErrorFunction, +} from "@trigger.dev/core/v3"; diff --git a/packages/trigger-sdk/src/v3/retry.ts b/packages/trigger-sdk/src/v3/retry.ts index 03b93c156..d384f20f9 100644 --- a/packages/trigger-sdk/src/v3/retry.ts +++ b/packages/trigger-sdk/src/v3/retry.ts @@ -1,21 +1,30 @@ +import { Attributes, Span, SpanStatusCode, context, trace } from "@opentelemetry/api"; import { + SEMATTRS_HTTP_HOST, + SEMATTRS_HTTP_METHOD, + SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH, + SEMATTRS_HTTP_SCHEME, + SEMATTRS_HTTP_STATUS_CODE, + SEMATTRS_HTTP_URL, +} from "@opentelemetry/semantic-conventions"; +import { + FetchRetryByStatusOptions, FetchRetryOptions, FetchRetryStrategy, RetryOptions, SemanticInternalAttributes, accessoryAttributes, calculateNextRetryDelay, - defaultRetryOptions, - runtime, - eventFilterMatches, calculateResetAt, - FetchTimeoutOptions, + defaultRetryOptions, + eventFilterMatches, + flattenAttributes, + runtime, } from "@trigger.dev/core/v3"; -import { tracer } from "./tracer"; -import { SemanticAttributes } from "@opentelemetry/semantic-conventions"; -import { AsyncLocalStorage } from "node:async_hooks"; -import { Attributes, Span, SpanStatusCode, context, trace } from "@opentelemetry/api"; +import { defaultFetchRetryOptions } from "@trigger.dev/core/v3/utils/retries"; import type { HttpHandler } from "msw"; +import { AsyncLocalStorage } from "node:async_hooks"; +import { tracer } from "./tracer"; export type { RetryOptions }; @@ -102,7 +111,7 @@ function onThrow( export interface RetryFetchRequestInit extends RequestInit { retry?: FetchRetryOptions; - timeout?: FetchTimeoutOptions; + timeoutInMs?: number; } const normalizeUrlFromInput = (input: RequestInfo | URL | string): URL => { @@ -162,75 +171,6 @@ class FetchErrorWithSpan extends Error { } } -const doFetchRequest = async ( - input: RequestInfo | URL | string, - init?: RequestInit, - attemptCount: number = 0 -): Promise<[Response, Span]> => { - const url = normalizeUrlFromInput(input); - const httpMethod = normalizeHttpMethod(input, init); - - const span = tracer.startSpan(`HTTP ${httpMethod}`, { - attributes: { - [SemanticAttributes.HTTP_METHOD]: httpMethod, - [SemanticAttributes.HTTP_URL]: url.href, - [SemanticAttributes.HTTP_HOST]: url.hostname, - ["server.host"]: url.hostname, - ["server.port"]: url.port, - [SemanticAttributes.HTTP_SCHEME]: url.protocol.replace(":", ""), - [SemanticInternalAttributes.STYLE_ICON]: "world", - ...accessoryAttributes({ - items: [ - { - text: `${url.hostname}${url.pathname}`, - variant: "normal", - }, - ], - style: "codepath", - }), - ...(attemptCount > 1 ? { ["http.request.resend_count"]: attemptCount - 1 } : {}), - }, - }); - - try { - const response = await fetchWithInterceptors(input, { - ...init, - headers: { - ...init?.headers, - "x-retry-count": attemptCount.toString(), - }, - }); - - span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, response.status); - span.setAttribute("http.status_text", response.statusText); - span.setAttribute( - SemanticAttributes.HTTP_RESPONSE_CONTENT_LENGTH, - response.headers.get("content-length") || "0" - ); - span.setAttributes(createAttributesFromHeaders(response.headers)); - - if (!response.ok) { - span.recordException(`${response.status}: ${response.statusText}`); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: `${response.status}: ${response.statusText}`, - }); - } - - return [response, span]; - } catch (e) { - if (typeof e === "string" || e instanceof Error) { - span.recordException(e); - } - - span.setStatus({ code: SpanStatusCode.ERROR }); - span.setAttribute(SemanticAttributes.HTTP_STATUS_CODE, 0); - span.setAttribute("http.status_text", "This operation was aborted."); - - throw new FetchErrorWithSpan(e, span); - } -}; - const MAX_ATTEMPTS = 10; async function retryFetch( @@ -246,12 +186,12 @@ async function retryFetch( try { const abortController = new AbortController(); - const timeoutId = init?.timeout?.durationInMs + const timeoutId = init?.timeoutInMs ? setTimeout( () => { abortController.abort(); }, - init?.timeout?.durationInMs + init?.timeoutInMs ) : undefined; @@ -270,20 +210,30 @@ async function retryFetch( } if (response.ok) { + span.setAttributes(createFetchResponseAttributes(response)); + span.end(); return response; } - const nextRetry = await calculateRetryDelayForResponse(init?.retry, response, attempt); + const nextRetry = await calculateRetryDelayForResponse( + resolveDefaults(init?.retry, "byStatus", defaultFetchRetryOptions.byStatus), + response, + attempt + ); if (!nextRetry) { + span.setAttributes(createFetchResponseAttributes(response)); + span.end(); return response; } if (attempt >= MAX_ATTEMPTS) { + span.setAttributes(createFetchResponseAttributes(response)); + span.end(); return response; @@ -323,38 +273,72 @@ async function retryFetch( await runtime.waitUntil(new Date(nextRetry.value)); } } catch (e) { - if ( - e instanceof FetchErrorWithSpan && - e.originalError instanceof Error && - e.originalError.name === "AbortError" - ) { - const nextRetryDelay = calculateNextRetryDelay( - { ...defaultRetryOptions, ...(init?.timeout?.retry ?? {}) }, - attempt - ); + if (e instanceof FetchErrorWithSpan && e.originalError instanceof Error) { + if (e.originalError.name === "AbortError") { + const nextRetryDelay = calculateNextRetryDelay( + resolveDefaults(init?.retry, "timeout", defaultFetchRetryOptions.timeout), + attempt + ); + + if (!nextRetryDelay) { + e.span.end(); + throw e; + } + + if (attempt >= MAX_ATTEMPTS) { + e.span.end(); + throw e; + } + + e.span.setAttribute( + SemanticInternalAttributes.RETRY_AT, + new Date(Date.now() + nextRetryDelay).toISOString() + ); + e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt); + e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`); - if (!nextRetryDelay) { e.span.end(); - throw e; - } - if (attempt >= MAX_ATTEMPTS) { + await runtime.waitForDuration(nextRetryDelay); + + continue; // Move to the next attempt + } else if ( + e.originalError.name === "TypeError" && + "cause" in e.originalError && + e.originalError.cause instanceof Error + ) { + const nextRetryDelay = calculateNextRetryDelay( + resolveDefaults( + init?.retry, + "connectionError", + defaultFetchRetryOptions.connectionError + ), + attempt + ); + + if (!nextRetryDelay) { + e.span.end(); + throw e; + } + + if (attempt >= MAX_ATTEMPTS) { + e.span.end(); + throw e; + } + + e.span.setAttribute( + SemanticInternalAttributes.RETRY_AT, + new Date(Date.now() + nextRetryDelay).toISOString() + ); + e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt); + e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`); + e.span.end(); - throw e; + + await runtime.waitForDuration(nextRetryDelay); + + continue; // Move to the next attempt } - - e.span.setAttribute( - SemanticInternalAttributes.RETRY_AT, - new Date(Date.now() + nextRetryDelay).toISOString() - ); - e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt); - e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`); - - e.span.end(); - - await runtime.waitForDuration(nextRetryDelay); - - continue; // Move to the next attempt } if (e instanceof FetchErrorWithSpan) { @@ -370,13 +354,63 @@ async function retryFetch( { attributes: { [SemanticInternalAttributes.STYLE_ICON]: "arrow-capsule", + ...createFetchAttributes(input, init), + ...createFetchRetryOptionsAttributes(init?.retry), }, } ); } +const doFetchRequest = async ( + input: RequestInfo | URL | string, + init?: RequestInit, + attemptCount: number = 0 +): Promise<[Response, Span]> => { + const httpMethod = normalizeHttpMethod(input, init); + + const span = tracer.startSpan(`HTTP ${httpMethod}`, { + attributes: { + [SemanticInternalAttributes.STYLE_ICON]: "world", + ...(attemptCount > 1 ? { ["http.request.resend_count"]: attemptCount - 1 } : {}), + ...createFetchAttributes(input, init), + }, + }); + + try { + const response = await fetchWithInterceptors(input, { + ...init, + headers: { + ...init?.headers, + "x-retry-count": attemptCount.toString(), + }, + }); + + span.setAttributes(createFetchResponseAttributes(response)); + + if (!response.ok) { + span.recordException(`${response.status}: ${response.statusText}`); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: `${response.status}: ${response.statusText}`, + }); + } + + return [response, span]; + } catch (e) { + if (typeof e === "string" || e instanceof Error) { + span.recordException(e); + } + + span.setStatus({ code: SpanStatusCode.ERROR }); + span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, 0); + span.setAttribute("http.status_text", "This operation was aborted."); + + throw new FetchErrorWithSpan(e, span); + } +}; + const calculateRetryDelayForResponse = async ( - retry: FetchRetryOptions | undefined, + retry: FetchRetryByStatusOptions | undefined, response: Response, attemptCount: number ): Promise<{ type: "delay"; value: number } | { type: "timestamp"; value: number } | undefined> => { @@ -421,7 +455,7 @@ const calculateRetryDelayForResponse = async ( const getRetryStrategyForResponse = async ( response: Response, - retry: FetchRetryOptions + retry: FetchRetryByStatusOptions ): Promise => { const statusCodes = Object.keys(retry); const clonedResponse = response.clone(); @@ -455,7 +489,7 @@ const getRetryStrategyForResponse = async ( * The range can be a single status code (e.g. "200"), * a range of status codes (e.g. "500-599"), * a range of status codes with a wildcard (e.g. "4xx" for any 4xx status code), - * or a list of status codes separated by commas (e.g. "401,403,404"). + * or a list of status codes separated by commas (e.g. "401,403,404,409-412,5xx"). * Returns `true` if the status code falls within the range, and `false` otherwise. */ const isStatusCodeInRange = (statusCode: number, statusRange: string): boolean => { @@ -465,7 +499,8 @@ const isStatusCodeInRange = (statusCode: number, statusRange: string): boolean = if (statusRange.includes(",")) { const statusCodes = statusRange.split(",").map((s) => s.trim()); - return statusCodes.includes(statusCode.toString()); + + return statusCodes.some((s) => isStatusCodeInRange(statusCode, s)); } const [start, end] = statusRange.split("-"); @@ -527,6 +562,80 @@ const interceptFetch = (...handlers: Array) => { }; }; +// This function will resolve the defaults of a property within an options object. +// If the options object is undefined, it will return the defaults for that property (passed in as the 3rd arg). +// if the options object is defined, and the property exists, then it will return the defaults if the value of the property is undefined or null +const resolveDefaults = < + TObject extends Record, + K extends keyof TObject, + TValue extends TObject[K], +>( + obj: TObject | undefined, + key: K, + defaults: TValue +): TValue => { + if (!obj) { + return defaults; + } + + if (obj[key] === undefined || obj[key] === null) { + return defaults; + } + + return obj[key] as TValue; +}; + +const createFetchAttributes = ( + input: RequestInfo | URL, + init?: RetryFetchRequestInit | undefined +): Attributes => { + const url = normalizeUrlFromInput(input); + const httpMethod = normalizeHttpMethod(input, init); + + return { + [SEMATTRS_HTTP_METHOD]: httpMethod, + [SEMATTRS_HTTP_URL]: url.href, + [SEMATTRS_HTTP_HOST]: url.hostname, + ["server.host"]: url.hostname, + ["server.port"]: url.port, + [SEMATTRS_HTTP_SCHEME]: url.protocol.replace(":", ""), + ...accessoryAttributes({ + items: [ + { + text: url.hostname, + variant: "normal", + }, + ], + style: "codepath", + }), + }; +}; + +const createFetchResponseAttributes = (response: Response): Attributes => { + return { + [SEMATTRS_HTTP_STATUS_CODE]: response.status, + "http.status_text": response.statusText, + [SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH]: response.headers.get("content-length") || "0", + ...createAttributesFromHeaders(response.headers), + }; +}; + +const createFetchRetryOptionsAttributes = (retry?: FetchRetryOptions): Attributes => { + const byStatus = resolveDefaults(retry, "byStatus", defaultFetchRetryOptions.byStatus); + const connectionError = resolveDefaults( + retry, + "connectionError", + defaultFetchRetryOptions.connectionError + ); + const timeout = resolveDefaults(retry, "timeout", defaultFetchRetryOptions.timeout); + + return { + ...flattenAttributes(byStatus, "retry.byStatus"), + ...flattenAttributes(connectionError, "retry.connectionError"), + ...flattenAttributes(timeout, "retry.timeout"), + }; +}; + export const retry = { onThrow, fetch: retryFetch, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b0a24723..001e9f118 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -158,24 +158,22 @@ importers: '@depot/sdk-node': ^0.5.0 '@headlessui/react': ^1.7.8 '@heroicons/react': ^2.0.12 - '@highlight-run/node': ^3.1.0 - '@highlight-run/react': ^3.2.0 '@internationalized/date': ^3.5.1 '@lezer/highlight': ^1.1.6 - '@opentelemetry/api': ^1.7.0 - '@opentelemetry/core': ^1.21.0 - '@opentelemetry/exporter-logs-otlp-http': ^0.48.0 - '@opentelemetry/exporter-trace-otlp-http': ^0.48.0 - '@opentelemetry/instrumentation': ^0.48.0 - '@opentelemetry/instrumentation-express': ^0.35.0 - '@opentelemetry/instrumentation-http': ^0.48.0 - '@opentelemetry/resources': ^1.21.0 - '@opentelemetry/sdk-logs': ^0.48.0 - '@opentelemetry/sdk-node': ^0.48.0 - '@opentelemetry/sdk-trace-base': ^1.21.0 - '@opentelemetry/sdk-trace-node': ^1.21.0 - '@opentelemetry/semantic-conventions': ^1.21.0 - '@prisma/instrumentation': ^5.9.1 + '@opentelemetry/api': ^1.8.0 + '@opentelemetry/core': ^1.22.0 + '@opentelemetry/exporter-logs-otlp-http': ^0.49.1 + '@opentelemetry/exporter-trace-otlp-http': ^0.49.1 + '@opentelemetry/instrumentation': ^0.49.1 + '@opentelemetry/instrumentation-express': ^0.36.1 + '@opentelemetry/instrumentation-http': ^0.49.1 + '@opentelemetry/resources': ^1.22.0 + '@opentelemetry/sdk-logs': ^0.49.1 + '@opentelemetry/sdk-node': ^0.49.1 + '@opentelemetry/sdk-trace-base': ^1.22.0 + '@opentelemetry/sdk-trace-node': ^1.22.0 + '@opentelemetry/semantic-conventions': ^1.22.0 + '@prisma/instrumentation': ^5.11.0 '@radix-ui/react-alert-dialog': ^1.0.4 '@radix-ui/react-dialog': ^1.0.3 '@radix-ui/react-label': ^2.0.1 @@ -199,17 +197,6 @@ importers: '@remix-run/server-runtime': 2.1.0 '@remix-run/testing': ^2.1.0 '@remix-run/v1-meta': ^0.1.3 - '@storybook/addon-backgrounds': ^7.0.7 - '@storybook/addon-docs': ^7.0.12 - '@storybook/addon-essentials': ^7.0.7 - '@storybook/addon-interactions': ^7.0.7 - '@storybook/addon-links': ^7.0.7 - '@storybook/addon-styling': ^1.0.5 - '@storybook/addon-viewport': ^7.0.7 - '@storybook/blocks': ^7.0.7 - '@storybook/react': ^7.0.7 - '@storybook/react-webpack5': ^7.0.7 - '@storybook/testing-library': ^0.0.14-next.2 '@swc/core': ^1.3.4 '@swc/helpers': ^0.4.11 '@tabler/icons-react': ^2.39.0 @@ -241,7 +228,7 @@ importers: '@types/pg': 8.6.6 '@types/prismjs': ^1.26.0 '@types/qs': ^6.9.7 - '@types/react': 18.2.17 + '@types/react': 18.2.69 '@types/react-collapse': ^5.0.4 '@types/react-dom': 18.2.7 '@types/semver': ^7.3.13 @@ -321,9 +308,6 @@ importers: socket.io: ^4.7.4 sonner: ^1.0.3 sqs-consumer: ^7.4.0 - storybook: ^7.0.7 - storybook-addon-designs: 7.0.0-beta.2 - storybook-addon-variants: ^0.2.0 style-loader: ^3.3.4 tailwind-merge: ^1.12.0 tailwind-scrollbar: ^3.0.1 @@ -357,34 +341,32 @@ importers: '@depot/sdk-node': 0.5.0 '@headlessui/react': 1.7.8_biqbaboplfbrettd7655fr4n2y '@heroicons/react': 2.0.13_react@18.2.0 - '@highlight-run/node': 3.1.0 - '@highlight-run/react': 3.2.0_biqbaboplfbrettd7655fr4n2y '@internationalized/date': 3.5.1 '@lezer/highlight': 1.1.6 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-logs-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-express': 0.35.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-node': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@prisma/instrumentation': 5.9.1 - '@radix-ui/react-alert-dialog': 1.0.4_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-dialog': 1.0.3_bwbutfx4xj25dewzmxso6o3wga + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-logs-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation-express': 0.36.1_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-node': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-node': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 + '@prisma/instrumentation': 5.11.0 + '@radix-ui/react-alert-dialog': 1.0.4_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-dialog': 1.0.3_wbloxta2elt74wf76z3lmnnzzq '@radix-ui/react-label': 2.0.1_biqbaboplfbrettd7655fr4n2y - '@radix-ui/react-popover': 1.0.5_bwbutfx4xj25dewzmxso6o3wga - '@radix-ui/react-radio-group': 1.1.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-select': 1.2.1_bwbutfx4xj25dewzmxso6o3wga - '@radix-ui/react-slider': 1.1.2_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-switch': 1.0.3_daadhm4ohxobgnrt365as5bhny + '@radix-ui/react-popover': 1.0.5_wbloxta2elt74wf76z3lmnnzzq + '@radix-ui/react-radio-group': 1.1.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-select': 1.2.1_wbloxta2elt74wf76z3lmnnzzq + '@radix-ui/react-slider': 1.1.2_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-switch': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi '@radix-ui/react-tabs': 1.0.3_biqbaboplfbrettd7655fr4n2y - '@radix-ui/react-tooltip': 1.0.5_bwbutfx4xj25dewzmxso6o3wga + '@radix-ui/react-tooltip': 1.0.5_wbloxta2elt74wf76z3lmnnzzq '@react-aria/datepicker': 3.9.1_biqbaboplfbrettd7655fr4n2y '@react-stately/datepicker': 3.9.1_react@18.2.0 '@react-types/datepicker': 3.7.1_react@18.2.0 @@ -477,17 +459,6 @@ importers: '@remix-run/dev': 2.1.0_h4yxzoqkgkdcmxrorkwi6rxqz4 '@remix-run/eslint-config': 2.1.0_tivk2qwcsqyhxoqj22f6pjbp7e '@remix-run/testing': 2.1.0_vegmnuvoswdxuttpuhvewcem44 - '@storybook/addon-backgrounds': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-docs': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-essentials': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-interactions': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-links': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-styling': 1.0.6_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-viewport': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/blocks': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/react': 7.0.9_vegmnuvoswdxuttpuhvewcem44 - '@storybook/react-webpack5': 7.0.9_eunppc2ebbpop5kss6ctsxsd44 - '@storybook/testing-library': 0.0.14-next.2 '@swc/core': 1.3.26 '@swc/helpers': 0.4.14 '@tailwindcss/forms': 0.5.3_tailwindcss@3.4.1 @@ -506,7 +477,7 @@ importers: '@types/node-fetch': 2.6.2 '@types/prismjs': 1.26.0 '@types/qs': 6.9.7 - '@types/react': 18.2.17 + '@types/react': 18.2.69 '@types/react-collapse': 5.0.4 '@types/react-dom': 18.2.7 '@types/semver': 7.3.13 @@ -532,9 +503,6 @@ importers: prettier-plugin-tailwindcss: 0.3.0_prettier@2.8.8 prop-types: 15.8.1 rimraf: 3.0.2 - storybook: 7.0.9 - storybook-addon-designs: 7.0.0-beta.2_gtov7sygms2deenjyn5i42ywqa - storybook-addon-variants: 0.2.0_biqbaboplfbrettd7655fr4n2y style-loader: 3.3.4 tailwind-scrollbar: 3.0.1_tailwindcss@3.4.1 tailwindcss: 3.4.1_ts-node@10.9.1 @@ -1037,26 +1005,21 @@ importers: packages/cli-v3: specifiers: - '@baselime/node-opentelemetry': ^0.4.6 '@clack/prompts': ^0.7.0 '@depot/cli': 0.0.1-cli.2.55.0 - '@opentelemetry/api': ^1.7.0 - '@opentelemetry/api-logs': ^0.48.0 - '@opentelemetry/auto-instrumentations-node': ^0.40.3 - '@opentelemetry/exporter-collector': ^0.25.0 - '@opentelemetry/exporter-logs-otlp-http': ^0.48.0 - '@opentelemetry/exporter-trace-otlp-http': ^0.48.0 - '@opentelemetry/instrumentation': ^0.48.0 - '@opentelemetry/instrumentation-fetch': ^0.48.0 - '@opentelemetry/instrumentation-http': ^0.48.0 - '@opentelemetry/resources': ^1.21.0 - '@opentelemetry/sdk-logs': ^0.48.0 - '@opentelemetry/sdk-node': ^0.48.0 - '@opentelemetry/sdk-trace-base': ^1.21.0 - '@opentelemetry/sdk-trace-node': ^1.21.0 - '@opentelemetry/semantic-conventions': ^1.21.0 - '@traceloop/instrumentation-openai': ^0.3.9 - '@trigger.dev/core': workspace:* + '@opentelemetry/api': ^1.8.0 + '@opentelemetry/api-logs': ^0.49.1 + '@opentelemetry/exporter-logs-otlp-http': ^0.49.1 + '@opentelemetry/exporter-trace-otlp-http': ^0.49.1 + '@opentelemetry/instrumentation': ^0.49.1 + '@opentelemetry/instrumentation-fetch': ^0.49.1 + '@opentelemetry/resources': ^1.22.0 + '@opentelemetry/sdk-logs': ^0.49.1 + '@opentelemetry/sdk-node': ^0.49.1 + '@opentelemetry/sdk-trace-base': ^1.22.0 + '@opentelemetry/sdk-trace-node': ^1.22.0 + '@opentelemetry/semantic-conventions': ^1.22.0 + '@trigger.dev/core': workspace:^2.3.18 '@trigger.dev/core-apps': workspace:* '@trigger.dev/tsconfig': workspace:* '@types/degit': ^2.8.3 @@ -1079,6 +1042,7 @@ importers: evt: ^2.4.13 execa: ^8.0.0 find-up: ^7.0.0 + glob: ^10.3.10 gradient-string: ^2.0.2 import-meta-resolve: ^4.0.0 ink: ^4.4.1 @@ -1107,6 +1071,7 @@ importers: supports-color: ^9.4.0 terminal-link: ^3.0.0 tiny-invariant: ^1.2.0 + tsconfig-paths: ^4.2.0 tsup: ^8.0.1 type-fest: ^3.6.0 typescript: ^5.3.3 @@ -1118,27 +1083,21 @@ importers: zod: 3.22.3 zod-validation-error: ^1.5.0 dependencies: - '@baselime/node-opentelemetry': 0.4.6_supports-color@9.4.0 '@clack/prompts': 0.7.0 '@depot/cli': 0.0.1-cli.2.55.0 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/auto-instrumentations-node': 0.40.3_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/exporter-collector': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-logs-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-fetch': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-http': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_wj3rtarwgmsxddfed6zfae5bhe - '@opentelemetry/sdk-node': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@traceloop/instrumentation-openai': 0.3.9_rr4fxqkzz7nhz3auplkqn4p6em + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/exporter-logs-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_qeb7ibvqeyc6czmc3mcy7fziia + '@opentelemetry/instrumentation-fetch': 0.49.1_qeb7ibvqeyc6czmc3mcy7fziia + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_cwjguinjiwjm54qt6yboo3fici + '@opentelemetry/sdk-node': 0.49.1_qeb7ibvqeyc6czmc3mcy7fziia + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-node': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 '@trigger.dev/core': link:../core - '@trigger.dev/core-apps': link:../core-apps '@types/degit': 2.8.3 chalk: 5.3.0 chokidar: 3.5.3 @@ -1150,6 +1109,7 @@ importers: evt: 2.4.13 execa: 8.0.1 find-up: 7.0.0 + glob: 10.3.10 gradient-string: 2.0.2 import-meta-resolve: 4.0.0 ink: 4.4.1_7kh72gklg5qjlh5zc6s6v3p6v4 @@ -1173,12 +1133,14 @@ importers: supports-color: 9.4.0 terminal-link: 3.0.0 tiny-invariant: 1.3.1 + tsconfig-paths: 4.2.0 update-check: 1.5.4 url: 0.11.1 ws: 8.12.0 zod: 3.22.3 zod-validation-error: 1.5.0_zod@3.22.3 devDependencies: + '@trigger.dev/core-apps': link:../core-apps '@trigger.dev/tsconfig': link:../../config-packages/tsconfig '@types/gradient-string': 1.1.2 '@types/jsonlines': 0.1.5 @@ -1203,21 +1165,17 @@ importers: packages/core: specifiers: '@google-cloud/precise-date': ^4.0.0 - '@opentelemetry/api': ^1.7.0 + '@opentelemetry/api': ^1.8.0 '@opentelemetry/api-logs': ^0.48.0 - '@opentelemetry/auto-instrumentations-node': ^0.40.3 - '@opentelemetry/exporter-collector': ^0.25.0 - '@opentelemetry/exporter-logs-otlp-http': ^0.48.0 - '@opentelemetry/exporter-trace-otlp-http': ^0.48.0 - '@opentelemetry/instrumentation': ^0.48.0 - '@opentelemetry/instrumentation-fetch': ^0.48.0 - '@opentelemetry/instrumentation-http': ^0.48.0 - '@opentelemetry/resources': ^1.21.0 - '@opentelemetry/sdk-logs': ^0.48.0 - '@opentelemetry/sdk-node': ^0.48.0 - '@opentelemetry/sdk-trace-base': ^1.21.0 - '@opentelemetry/sdk-trace-node': ^1.21.0 - '@opentelemetry/semantic-conventions': ^1.21.0 + '@opentelemetry/exporter-logs-otlp-http': ^0.49.1 + '@opentelemetry/exporter-trace-otlp-http': ^0.49.1 + '@opentelemetry/instrumentation': ^0.49.1 + '@opentelemetry/resources': ^1.22.0 + '@opentelemetry/sdk-logs': ^0.49.1 + '@opentelemetry/sdk-node': ^0.49.1 + '@opentelemetry/sdk-trace-base': ^1.22.0 + '@opentelemetry/sdk-trace-node': ^1.22.0 + '@opentelemetry/semantic-conventions': ^1.22.0 '@trigger.dev/tsconfig': workspace:* '@trigger.dev/tsup': workspace:* '@types/humanize-duration': ^3.27.1 @@ -1236,21 +1194,17 @@ importers: zod-error: 1.5.0 dependencies: '@google-cloud/precise-date': 4.0.0 - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/auto-instrumentations-node': 0.40.3_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-collector': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-logs-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-fetch': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_wj3rtarwgmsxddfed6zfae5bhe - '@opentelemetry/sdk-node': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 + '@opentelemetry/exporter-logs-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_eoq5uhu4upakrvqc54cytmc6xq + '@opentelemetry/sdk-node': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-node': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 humanize-duration: 3.27.3 socket.io: 4.7.4 socket.io-client: 4.7.4 @@ -1283,7 +1237,7 @@ importers: packages/core-backend: specifiers: - '@opentelemetry/api': ^1.7.0 + '@opentelemetry/api': ^1.8.0 '@trigger.dev/tsconfig': workspace:* '@trigger.dev/tsup': workspace:* '@types/jest': ^29.5.3 @@ -1294,7 +1248,7 @@ importers: tsup: ^8.0.1 typescript: ^5.3.0 dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 devDependencies: '@trigger.dev/tsconfig': link:../../config-packages/tsconfig '@trigger.dev/tsup': link:../../config-packages/tsup @@ -1333,7 +1287,7 @@ importers: '@react-email/text': ^0.0.2 '@trigger.dev/tsconfig': workspace:* '@types/node': ^18 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: ^18.2.0 react-email: ^1.6.1 resend: ^3.2.0 @@ -1361,7 +1315,7 @@ importers: devDependencies: '@trigger.dev/tsconfig': link:../../config-packages/tsconfig '@types/node': 18.17.1 - '@types/react': 18.2.17 + '@types/react': 18.2.69 typescript: 4.9.5 packages/eslint-plugin: @@ -1646,9 +1600,9 @@ importers: packages/trigger-sdk: specifiers: - '@opentelemetry/api': ^1.7.0 + '@opentelemetry/api': ^1.8.0 '@opentelemetry/api-logs': ^0.48.0 - '@opentelemetry/semantic-conventions': ^1.21.0 + '@opentelemetry/semantic-conventions': ^1.22.0 '@trigger.dev/core': workspace:^2.3.18 '@trigger.dev/core-backend': workspace:^2.3.18 '@trigger.dev/tsconfig': workspace:* @@ -1678,9 +1632,9 @@ importers: ws: ^8.11.0 zod: 3.22.3 dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/semantic-conventions': 1.21.0 + '@opentelemetry/semantic-conventions': 1.22.0 '@trigger.dev/core': link:../core '@trigger.dev/core-backend': link:../core-backend chalk: 5.2.0 @@ -2183,6 +2137,9 @@ importers: references/v3-catalog: specifiers: + '@opentelemetry/api': ^1.8.0 + '@sindresorhus/slugify': ^2.2.1 + '@traceloop/instrumentation-openai': ^0.3.9 '@trigger.dev/sdk': 2.3.18 '@trigger.dev/tsconfig': workspace:* '@types/node': 20.4.2 @@ -2197,6 +2154,9 @@ importers: tsconfig-paths: ^3.14.1 typescript: 5.1.6 dependencies: + '@opentelemetry/api': 1.8.0 + '@sindresorhus/slugify': 2.2.1 + '@traceloop/instrumentation-openai': 0.3.9_@opentelemetry+api@1.8.0 '@trigger.dev/sdk': 2.3.18 msw: 2.2.1_typescript@5.1.6 openai: 4.28.0 @@ -2259,14 +2219,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - /@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.19 - dev: true - /@ampproject/remapping/2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -2440,13 +2392,6 @@ packages: transitivePeerDependencies: - supports-color - /@aw-web-design/x-default-browser/1.4.88: - resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==} - hasBin: true - dependencies: - default-browser-id: 3.0.0 - dev: true - /@aws-crypto/crc32/3.0.0: resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} dependencies: @@ -2923,29 +2868,6 @@ packages: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} - /@babel/core/7.21.8: - resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.21.5 - '@babel/helper-compilation-targets': 7.21.5_@babel+core@7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helpers': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/core/7.22.17: resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} engines: {node: '>=6.9.0'} @@ -2996,16 +2918,6 @@ packages: semver: 6.3.1 dev: true - /@babel/generator/7.21.5: - resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - dev: true - /@babel/generator/7.22.15: resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} engines: {node: '>=6.9.0'} @@ -3015,13 +2927,6 @@ packages: '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure/7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/helper-annotate-as-pure/7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -3036,20 +2941,6 @@ packages: '@babel/types': 7.24.0 dev: true - /@babel/helper-compilation-targets/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.21.8 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-compilation-targets/7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} @@ -3060,26 +2951,6 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin/7.21.8_@babel+core@7.21.8: - resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.21.5 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-class-features-plugin/7.21.8_@babel+core@7.22.17: resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} engines: {node: '>=6.9.0'} @@ -3100,24 +2971,6 @@ packages: - supports-color dev: true - /@babel/helper-create-class-features-plugin/7.24.0_@babel+core@7.21.8: - resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20_@babel+core@7.21.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin/7.24.0_@babel+core@7.22.17: resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} engines: {node: '>=6.9.0'} @@ -3136,17 +2989,6 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.21.8: - resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.2.2 - dev: true - /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.22.17: resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} engines: {node: '>=6.9.0'} @@ -3158,22 +3000,6 @@ packages: regexpu-core: 5.2.2 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.8: - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.4 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.22.17: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: @@ -3255,49 +3081,12 @@ packages: '@babel/types': 7.24.0 dev: true - /@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/helper-module-imports/7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.17 - /@babel/helper-module-transforms/7.21.5: - resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.17 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-module-transforms/7.22.17_@babel+core@7.21.8: - resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.15 - dev: true - /@babel/helper-module-transforms/7.22.17_@babel+core@7.22.17: resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} engines: {node: '>=6.9.0'} @@ -3325,11 +3114,6 @@ packages: '@babel/types': 7.22.17 dev: true - /@babel/helper-plugin-utils/7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-plugin-utils/7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} @@ -3338,21 +3122,6 @@ packages: resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -3382,18 +3151,6 @@ packages: - supports-color dev: true - /@babel/helper-replace-supers/7.22.20_@babel+core@7.21.8: - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - /@babel/helper-replace-supers/7.22.20_@babel+core@7.22.17: resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} @@ -3464,17 +3221,6 @@ packages: - supports-color dev: true - /@babel/helpers/7.21.5: - resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.17 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helpers/7.22.15: resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} engines: {node: '>=6.9.0'} @@ -3493,14 +3239,6 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.0 - dev: true - /@babel/parser/7.22.16: resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} engines: {node: '>=6.0.0'} @@ -3508,16 +3246,6 @@ packages: dependencies: '@babel/types': 7.22.17 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -3528,18 +3256,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.8 - dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.22.17: resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} @@ -3552,22 +3268,6 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.22.17: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} @@ -3584,20 +3284,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -3612,19 +3298,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.8: - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead. - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.24.0_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.22.17: resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} @@ -3650,18 +3323,6 @@ packages: '@babel/plugin-syntax-decorators': 7.24.0_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} @@ -3674,18 +3335,6 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} @@ -3698,18 +3347,6 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} @@ -3722,18 +3359,6 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.22.17: resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} @@ -3746,18 +3371,6 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -3770,18 +3383,6 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} @@ -3794,21 +3395,6 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.22.17: resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} @@ -3824,18 +3410,6 @@ packages: '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} @@ -3848,19 +3422,6 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.8: - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.8 - dev: true - /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.22.17: resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} @@ -3874,20 +3435,6 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.22.17 dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -3902,22 +3449,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.8: - resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.8_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.22.17: resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} @@ -3934,18 +3465,6 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} @@ -3958,15 +3477,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.8: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.22.17: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -3985,15 +3495,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.8: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.22.17: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -4003,16 +3504,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.8: - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.22.17: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -4043,15 +3534,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -4061,15 +3543,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: @@ -4079,15 +3552,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-flow/7.18.6: - resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} @@ -4098,16 +3562,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.8: - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.22.17: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} @@ -4118,15 +3572,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.8: - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.22.17: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -4136,15 +3581,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -4154,35 +3590,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.22.17: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-jsx/7.22.5: - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx/7.22.5_@babel+core@7.22.17: resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} @@ -4192,15 +3599,6 @@ packages: '@babel/core': 7.22.17 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.8: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.22.17: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -4210,15 +3608,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -4228,15 +3617,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.8: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.22.17: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -4246,15 +3626,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -4264,15 +3635,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -4282,15 +3644,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.8: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.22.17: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -4300,16 +3653,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.8: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.22.17: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -4320,16 +3663,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.8: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.22.17: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} @@ -4350,16 +3683,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-arrow-functions/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-arrow-functions/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} engines: {node: '>=6.9.0'} @@ -4370,20 +3693,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.22.17: resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} @@ -4398,16 +3707,6 @@ packages: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} @@ -4418,16 +3717,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.8: - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.22.17: resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} @@ -4438,24 +3727,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.8: - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.22.20_@babel+core@7.21.8 - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - dev: true - /@babel/plugin-transform-classes/7.21.0_@babel+core@7.22.17: resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} @@ -4474,17 +3745,6 @@ packages: globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/template': 7.22.15 - dev: true - /@babel/plugin-transform-computed-properties/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} engines: {node: '>=6.9.0'} @@ -4496,16 +3756,6 @@ packages: '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.21.8: - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.22.17: resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} @@ -4516,17 +3766,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} @@ -4538,16 +3777,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} @@ -4558,17 +3787,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} @@ -4580,16 +3798,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-flow-strip-types/7.19.0: - resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.18.6 - dev: true - /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.22.17: resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} engines: {node: '>=6.9.0'} @@ -4601,16 +3809,6 @@ packages: '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.22.17 dev: true - /@babel/plugin-transform-for-of/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-for-of/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} engines: {node: '>=6.9.0'} @@ -4621,18 +3819,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} @@ -4645,16 +3831,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} @@ -4665,16 +3841,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} @@ -4685,17 +3851,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.8: - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.22.17_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.22.17: resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} @@ -4707,18 +3862,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-commonjs/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.22.17_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 - dev: true - /@babel/plugin-transform-modules-commonjs/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} engines: {node: '>=6.9.0'} @@ -4731,19 +3874,6 @@ packages: '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.8: - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.17_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.22.17: resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} @@ -4757,17 +3887,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.22.17_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} @@ -4779,17 +3898,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.8: - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.22.17: resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} @@ -4801,16 +3909,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} @@ -4821,17 +3919,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.22.20_@babel+core@7.21.8 - dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} @@ -4843,16 +3930,6 @@ packages: '@babel/helper-replace-supers': 7.22.20_@babel+core@7.22.17 dev: true - /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.21.8: - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.22.17: resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} @@ -4863,16 +3940,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} @@ -4883,15 +3950,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-display-name/7.18.6: - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} @@ -4902,15 +3960,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-development/7.18.6: - resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/plugin-transform-react-jsx': 7.22.15 - dev: true - /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} @@ -4921,47 +3970,6 @@ packages: '@babel/plugin-transform-react-jsx': 7.22.15_@babel+core@7.22.17 dev: true - /@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.8 - '@babel/types': 7.20.7 - dev: true - - /@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.22.17: - resolution: {integrity: sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.22.17 - '@babel/types': 7.20.7 - dev: true - - /@babel/plugin-transform-react-jsx/7.22.15: - resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.22.5 - '@babel/types': 7.22.17 - dev: true - /@babel/plugin-transform-react-jsx/7.22.15_@babel+core@7.22.17: resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} engines: {node: '>=6.9.0'} @@ -4975,16 +3983,6 @@ packages: '@babel/plugin-syntax-jsx': 7.22.5_@babel+core@7.22.17 '@babel/types': 7.22.17 - /@babel/plugin-transform-react-pure-annotations/7.18.6: - resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} engines: {node: '>=6.9.0'} @@ -4996,17 +3994,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-regenerator/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - regenerator-transform: 0.15.1 - dev: true - /@babel/plugin-transform-regenerator/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} engines: {node: '>=6.9.0'} @@ -5018,16 +4005,6 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} @@ -5055,16 +4032,6 @@ packages: - supports-color dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} @@ -5075,17 +4042,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.8: - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.22.17: resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} @@ -5097,16 +4053,6 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} @@ -5117,16 +4063,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -5137,16 +4073,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.8: - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.22.17: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} @@ -5170,16 +4096,6 @@ packages: '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.22.17 dev: true - /@babel/plugin-transform-unicode-escapes/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-unicode-escapes/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} engines: {node: '>=6.9.0'} @@ -5190,17 +4106,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.8: - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} @@ -5212,93 +4117,6 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/preset-env/7.21.5_@babel+core@7.21.8: - resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.8 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.8 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.8 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.8 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.8 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.8 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.8 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.8 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.8 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.8 - '@babel/plugin-transform-arrow-functions': 7.21.5_@babel+core@7.21.8 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.8 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.8 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.8 - '@babel/plugin-transform-computed-properties': 7.21.5_@babel+core@7.21.8 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.21.8 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-for-of': 7.21.5_@babel+core@7.21.8 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.8 - '@babel/plugin-transform-modules-commonjs': 7.21.5_@babel+core@7.21.8 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.8 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.8 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.21.8 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-regenerator': 7.21.5_@babel+core@7.21.8 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.8 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.8 - '@babel/plugin-transform-unicode-escapes': 7.21.5_@babel+core@7.21.8 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.8 - '@babel/preset-modules': 0.1.5_@babel+core@7.21.8 - '@babel/types': 7.22.17 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.8 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.8 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.8 - core-js-compat: 3.27.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/preset-env/7.21.5_@babel+core@7.22.17: resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} engines: {node: '>=6.9.0'} @@ -5386,42 +4204,6 @@ packages: - supports-color dev: true - /@babel/preset-flow/7.18.6: - resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-transform-flow-strip-types': 7.19.0 - dev: true - - /@babel/preset-flow/7.18.6_@babel+core@7.22.17: - resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.22.17 - dev: true - - /@babel/preset-modules/0.1.5_@babel+core@7.21.8: - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.8 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.8 - '@babel/types': 7.24.0 - esutils: 2.0.3 - dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.22.17: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: @@ -5435,20 +4217,6 @@ packages: esutils: 2.0.3 dev: true - /@babel/preset-react/7.18.6: - resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-transform-react-display-name': 7.18.6 - '@babel/plugin-transform-react-jsx': 7.22.15 - '@babel/plugin-transform-react-jsx-development': 7.18.6 - '@babel/plugin-transform-react-pure-annotations': 7.18.6 - dev: true - /@babel/preset-react/7.18.6_@babel+core@7.22.17: resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} engines: {node: '>=6.9.0'} @@ -5478,20 +4246,6 @@ packages: '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.22.17 dev: true - /@babel/register/7.18.9_@babel+core@7.22.17: - resolution: {integrity: sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.17 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.5 - source-map-support: 0.5.21 - dev: true - /@babel/runtime/7.20.7: resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} engines: {node: '>=6.9.0'} @@ -5504,15 +4258,6 @@ packages: dependencies: regenerator-runtime: 0.13.11 - /@babel/template/7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.16 - '@babel/types': 7.24.0 - dev: true - /@babel/template/7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} @@ -5521,24 +4266,6 @@ packages: '@babel/parser': 7.22.16 '@babel/types': 7.22.17 - /@babel/traverse/7.21.5: - resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.16 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/traverse/7.22.17: resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==} engines: {node: '>=6.9.0'} @@ -5556,24 +4283,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types/7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@babel/types/7.21.5: - resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - /@babel/types/7.22.17: resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} engines: {node: '>=6.9.0'} @@ -5590,32 +4299,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@base2/pretty-print-object/1.0.1: - resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} - dev: true - - /@baselime/node-opentelemetry/0.4.6_supports-color@9.4.0: - resolution: {integrity: sha512-ZsPa4y0WW9/rGELsaAT3oheM19c1EaTOY3W5Rx5CeNzcB7EZAWL8xMF6fNKf6u8Bk/gQ5x6PHKzd2rs3GeRLmQ==} - peerDependencies: - '@trpc/server': ^10.0.0 || ^11.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-http': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/resource-detector-aws': 1.3.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-node': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/sdk-trace-node': 1.21.0_@opentelemetry+api@1.7.0 - '@types/aws-lambda': 8.10.136 - axios: 1.6.2 - flat: 6.0.1 - undici: 5.28.3 - transitivePeerDependencies: - - debug - - supports-color - dev: false - /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -6176,11 +4859,6 @@ packages: '@connectrpc/connect-node': 0.13.2_@bufbuild+protobuf@1.7.2 dev: false - /@discoveryjs/json-ext/0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: true - /@emotion/hash/0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: true @@ -6198,14 +4876,6 @@ packages: dev: false optional: true - /@emotion/use-insertion-effect-with-fallbacks/1.0.1_react@18.2.0: - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: true - /@esbuild-kit/cjs-loader/2.4.1: resolution: {integrity: sha512-lhc/XLith28QdW0HpHZvZKkorWgmCNT7sVelMHDj3HFdTfdqkwEKvT+aXVQtNAmCC39VJhunDkWhONWB7335mg==} dependencies: @@ -7490,10 +6160,6 @@ packages: resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@fal-works/esbuild-plugin-global-externals/2.1.2: - resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} - dev: true - /@fastify/ajv-compiler/3.5.0: resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} dependencies: @@ -7520,22 +6186,6 @@ packages: fast-json-stringify: 5.8.0 dev: true - /@figspec/components/1.0.1: - resolution: {integrity: sha512-UvnEamPEAMh9HExViqpobWmX25g1+soA9kcJu+It3VerMa7CeVyaIbQydNf1Gys5v/rxJVdTDRgQ7OXW2zAAig==} - dependencies: - lit: 2.7.4 - dev: true - - /@figspec/react/1.0.3_react@18.2.0: - resolution: {integrity: sha512-r683qOko+5CbT48Ox280fMx2MNAtaFPgCNJvldOqN3YtmAzlcTT+YSxd3OahA+kjXGGrnzDbUgeTOX1cPLII+g==} - peerDependencies: - react: ^16.14.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@figspec/components': 1.0.1 - '@lit-labs/react': 1.1.1 - react: 18.2.0 - dev: true - /@floating-ui/core/0.7.3: resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} dev: false @@ -7546,7 +6196,7 @@ packages: '@floating-ui/core': 0.7.3 dev: false - /@floating-ui/react-dom/0.7.2_bwbutfx4xj25dewzmxso6o3wga: + /@floating-ui/react-dom/0.7.2_wbloxta2elt74wf76z3lmnnzzq: resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} peerDependencies: react: '>=16.8.0' @@ -7555,7 +6205,7 @@ packages: '@floating-ui/dom': 0.5.4 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - use-isomorphic-layout-effect: 1.1.2_e74vmjybjy5dsfplslbsgtbvvi + use-isomorphic-layout-effect: 1.1.2_4aprenwzvd25d3zno6rr4bqbqq transitivePeerDependencies: - '@types/react' dev: false @@ -7650,39 +6300,16 @@ packages: yargs: 17.7.2 dev: false - /@hapi/b64/5.0.0: - resolution: {integrity: sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: false - /@hapi/boom/10.0.1: resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} dependencies: '@hapi/hoek': 11.0.2 dev: false - /@hapi/boom/9.1.4: - resolution: {integrity: sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: false - - /@hapi/bourne/2.1.0: - resolution: {integrity: sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==} - dev: false - /@hapi/bourne/3.0.0: resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} dev: false - /@hapi/cryptiles/5.1.0: - resolution: {integrity: sha512-fo9+d1Ba5/FIoMySfMqPBR/7Pa29J2RsiPrl7bkwo5W5o+AN1dAYQRi4SPrPwwVxVGKjgLOEWrsvt1BonJSfLA==} - engines: {node: '>=12.0.0'} - dependencies: - '@hapi/boom': 9.1.4 - dev: false - /@hapi/hoek/10.0.1: resolution: {integrity: sha512-CvlW7jmOhWzuqOqiJQ3rQVLMcREh0eel4IBnxDx2FAcK8g7qoJRQK4L1CPBASoCY6y8e6zuCy3f2g+HWdkzcMw==} dev: false @@ -7694,41 +6321,11 @@ packages: /@hapi/hoek/9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - /@hapi/iron/6.0.0: - resolution: {integrity: sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw==} - dependencies: - '@hapi/b64': 5.0.0 - '@hapi/boom': 9.1.4 - '@hapi/bourne': 2.1.0 - '@hapi/cryptiles': 5.1.0 - '@hapi/hoek': 9.3.0 - dev: false - - /@hapi/podium/4.1.3: - resolution: {integrity: sha512-ljsKGQzLkFqnQxE7qeanvgGj4dejnciErYd30dbrYzUOF/FyS/DOF97qcrT3bhoVwCYmxa6PEMhxfCPlnUcD2g==} - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/teamwork': 5.1.1 - '@hapi/validate': 1.1.3 - dev: false - - /@hapi/teamwork/5.1.1: - resolution: {integrity: sha512-1oPx9AE5TIv+V6Ih54RP9lTZBso3rP8j4Xhb6iSVwPXtAM+sDopl5TFMv5Paw73UnpZJ9gjcrTE1BXrWt9eQrg==} - engines: {node: '>=12.0.0'} - dev: false - /@hapi/topo/5.1.0: resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} dependencies: '@hapi/hoek': 9.3.0 - /@hapi/validate/1.1.3: - resolution: {integrity: sha512-/XMR0N0wjw0Twzq2pQOzPBZlDzkekGcoCtzO314BpIEsbXdYGthQUbxgkGDf4nhk1+IPDAsXqWjMohRQYO06UA==} - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - dev: false - /@hapi/wreck/18.0.1: resolution: {integrity: sha512-OLHER70+rZxvDl75xq3xXOfd3e8XIvz8fWY0dqg92UvhZ29zo24vQgfqgHSYhB5ZiuFpSLeriOisAlxAo/1jWg==} dependencies: @@ -7757,33 +6354,6 @@ packages: react: 18.2.0 dev: false - /@highlight-run/node/3.1.0: - resolution: {integrity: sha512-HawGRA7K5IvAevw+4hKO/9+OfGukpdid36zTEgaALIlYC0lOiYeu7rb7wjxDdq1vnlWgGJm7VMY0so9SZKEVmA==} - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/auto-instrumentations-node': 0.36.5_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-node': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 - error-stack-parser: 2.0.7 - highlight.run: 7.2.0 - lru-cache: 7.18.3 - npm-run-all: 4.1.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@highlight-run/react/3.2.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-9W7kcGJIFz0AHglMW2nFkHmINuLwjlA4TQJ9yqkJ96tcmBWWFK0uJgqmyuGl6u+9p32tL/8WkxKNreHfVO7JIQ==} - peerDependencies: - react: '>=16' - react-dom: '>=16' - dependencies: - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: false - /@hono/node-server/1.3.1: resolution: {integrity: sha512-eQBCDbH1Vv/TiYXNP8aGfJTuXi9xGhEd/EZg9u6dhr7zC5/WKKztcBmbrOTtixVBvvV6bfcay6KEginwiqHyXg==} engines: {node: '>=18.14.1'} @@ -8081,29 +6651,6 @@ packages: slash: 3.0.0 dev: true - /@jest/transform/29.5.0: - resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.22.17 - '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.19 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 - jest-haste-map: 29.6.2 - jest-regex-util: 29.4.3 - jest-util: 29.6.2 - micromatch: 4.0.5 - pirates: 4.0.5 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/transform/29.6.2: resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8127,17 +6674,6 @@ packages: - supports-color dev: true - /@jest/types/27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.11.22 - '@types/yargs': 16.0.5 - chalk: 4.1.2 - dev: true - /@jest/types/29.6.1: resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8150,14 +6686,6 @@ packages: chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@jridgewell/gen-mapping/0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} @@ -8200,10 +6728,6 @@ packages: resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} dev: true - /@juggle/resize-observer/3.4.0: - resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - dev: true - /@kubernetes/client-node/0.20.0: resolution: {integrity: sha512-xxlv5GLX4FVR/dDKEsmi4SPeuB49aRc35stndyxcC73XnUEEwF39vXbROpHOirmDse8WE9vxOjABnSVS+jb7EA==} dependencies: @@ -8289,20 +6813,6 @@ packages: - encoding dev: false - /@lit-labs/react/1.1.1: - resolution: {integrity: sha512-9TC+/ZWb6BJlWCyUr14FKFlaGnyKpeEDorufXozQgke/VoVrslUQNaL7nBmrAWdNrmzx5jWgi8lFmWwrxMjnlA==} - dev: true - - /@lit-labs/ssr-dom-shim/1.1.1: - resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} - dev: true - - /@lit/reactive-element/1.6.1: - resolution: {integrity: sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA==} - dependencies: - '@lit-labs/ssr-dom-shim': 1.1.1 - dev: true - /@lukeed/csprng/1.1.0: resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -8369,16 +6879,6 @@ packages: - supports-color dev: true - /@mdx-js/react/2.3.0_react@18.2.0: - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} - peerDependencies: - react: '>=16' - dependencies: - '@types/mdx': 2.0.5 - '@types/react': 18.2.17 - react: 18.2.0 - dev: true - /@mrmlnc/readdir-enhanced/2.2.1: resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} engines: {node: '>=4'} @@ -8426,14 +6926,6 @@ packages: outvariant: 1.4.2 strict-event-emitter: 0.5.1 - /@ndelangen/get-tarball/3.0.7: - resolution: {integrity: sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==} - dependencies: - gunzip-maybe: 1.4.2 - pump: 3.0.0 - tar-fs: 2.1.1 - dev: true - /@nestjs/cli/10.1.18: resolution: {integrity: sha512-jQtG47keLsACt7b4YwJbTBYRm90n82gJpMaiR1HGAyQ9pccbctjSYu592eT4bxqkUWxPgBE3mpNynXj7dWAfrw==} engines: {node: '>= 16'} @@ -9292,28 +7784,18 @@ packages: /@open-draft/until/2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - /@opentelemetry/api-logs/0.46.0: - resolution: {integrity: sha512-+9BcqfiEDGPXEIo+o3tso/aqGM5dGbGwAkGVp3FPpZ8GlkK1YlaKRd9gMVyPaeRATwvO5wYGGnCsAc/sMMM9Qw==} - engines: {node: '>=14'} - dependencies: - '@opentelemetry/api': 1.7.0 - dev: false - /@opentelemetry/api-logs/0.48.0: resolution: {integrity: sha512-1/aMiU4Eqo3Zzpfwu51uXssp5pzvHFObk8S9pKAiXb1ne8pvg1qxBQitYL1XUiAMEXFzgjaidYG2V6624DRhhw==} engines: {node: '>=14'} dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 dev: false - /@opentelemetry/api-metrics/0.25.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-9T0c9NQAEGRujUC7HzPa2/qZ5px/UvB2sfSU5CAKFRrAlDl2gn25B0oUbDqSRHW/IG1X2rnQ3z2bBQkJyJvE4g==} - engines: {node: '>=8.0.0'} - deprecated: Please use @opentelemetry/api >= 1.3.0 - peerDependencies: - '@opentelemetry/api': ^1.0.2 + /@opentelemetry/api-logs/0.49.1: + resolution: {integrity: sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q==} + engines: {node: '>=14'} dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 dev: false /@opentelemetry/api/1.7.0: @@ -9321,2124 +7803,152 @@ packages: engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/auto-instrumentations-node/0.36.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-tps0UDvV9H9Cz+XlycvLHo/3t5zYwXVUq5mW2WLubfWUheZiRYKpo4F7va7oFt7r1RKRo19YJVuJVHOFkgJZdw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.35.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-amqplib': 0.32.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-aws-lambda': 0.35.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-aws-sdk': 0.34.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-bunyan': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-cassandra-driver': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-connect': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-dataloader': 0.4.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-dns': 0.31.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-express': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-fastify': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-fs': 0.7.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-generic-pool': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-graphql': 0.34.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-grpc': 0.35.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-hapi': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-http': 0.35.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-ioredis': 0.34.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-knex': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-koa': 0.34.6_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-lru-memoizer': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-memcached': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mongodb': 0.34.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mongoose': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mysql': 0.33.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mysql2': 0.33.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-nestjs-core': 0.32.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-net': 0.31.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-pg': 0.35.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-pino': 0.33.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-redis': 0.34.7_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-redis-4': 0.34.6_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-restify': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-router': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-socket.io': 0.33.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-tedious': 0.5.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-winston': 0.31.4_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/auto-instrumentations-node/0.40.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-MgBCzpFU4FBQEsXPgt5driYzxErf2JGntQ8Amtc94sqrnvq+FKdEBa6vxOpZlPM+c4Xr6tPpAT1ecTBV8U87hw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.4.1 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-amqplib': 0.33.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-aws-lambda': 0.37.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-aws-sdk': 0.37.2_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-bunyan': 0.34.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-cassandra-driver': 0.34.2_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-connect': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-cucumber': 0.2.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-dataloader': 0.5.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-dns': 0.32.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-express': 0.34.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-fastify': 0.32.6_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-fs': 0.8.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-generic-pool': 0.32.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-graphql': 0.36.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-grpc': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-hapi': 0.33.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-http': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-ioredis': 0.36.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-knex': 0.32.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-koa': 0.36.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-lru-memoizer': 0.33.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-memcached': 0.32.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mongodb': 0.38.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mongoose': 0.34.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mysql': 0.34.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-mysql2': 0.34.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-nestjs-core': 0.33.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-net': 0.32.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-pg': 0.37.2_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-pino': 0.34.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-redis': 0.35.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-redis-4': 0.35.6_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-restify': 0.34.3_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-router': 0.33.4_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-socket.io': 0.35.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-tedious': 0.6.5_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation-winston': 0.33.1_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-alibaba-cloud': 0.28.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-aws': 1.3.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-container': 0.3.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-gcp': 0.29.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-node': 0.46.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@opentelemetry/auto-instrumentations-node/0.40.3_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-MgBCzpFU4FBQEsXPgt5driYzxErf2JGntQ8Amtc94sqrnvq+FKdEBa6vxOpZlPM+c4Xr6tPpAT1ecTBV8U87hw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.4.1 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-amqplib': 0.33.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-aws-lambda': 0.37.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-aws-sdk': 0.37.2_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-bunyan': 0.34.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-cassandra-driver': 0.34.2_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-connect': 0.32.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-cucumber': 0.2.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-dataloader': 0.5.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-dns': 0.32.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-express': 0.34.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-fastify': 0.32.6_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-fs': 0.8.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-generic-pool': 0.32.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-graphql': 0.36.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-grpc': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-hapi': 0.33.3_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-http': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-ioredis': 0.36.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-knex': 0.32.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-koa': 0.36.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-lru-memoizer': 0.33.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-memcached': 0.32.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-mongodb': 0.38.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-mongoose': 0.34.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-mysql': 0.34.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-mysql2': 0.34.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-nestjs-core': 0.33.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-net': 0.32.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-pg': 0.37.2_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-pino': 0.34.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-redis': 0.35.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-redis-4': 0.35.6_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-restify': 0.34.3_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-router': 0.33.4_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-socket.io': 0.35.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-tedious': 0.6.5_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/instrumentation-winston': 0.33.1_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/resource-detector-alibaba-cloud': 0.28.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-aws': 1.3.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-container': 0.3.6_@opentelemetry+api@1.7.0 - '@opentelemetry/resource-detector-gcp': 0.29.6_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-node': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@opentelemetry/context-async-hooks/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-PmwAanPNWCyS9JYFzhzVzHgviLhc0UHjOwdth+hp3HgQQ9XZZNE635P8JhAUHZmbghW9/qQFafRWOS4VN9VVnQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - dev: false - - /@opentelemetry/context-async-hooks/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-0i1ECOc9daKK3rjUgDDXf0GDD5XfCou5lXnt2DALIc2qKoruPPcesobNKE54laSVUWnC3jX26RzuOa31g0V32A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - dev: false - - /@opentelemetry/context-async-hooks/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-t0iulGPiMjG/NrSjinPQoIf8ST/o9V0dGOJthfrFporJlNdlKIQPfC7lkrV+5s2dyBThfmSbJlp/4hO1eOcDXA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - dev: false - - /@opentelemetry/core/0.25.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-8OTWF4vfCENU112XB5ElLqf0eq/FhsY0SBvvY65vB3+fbZ2Oi+CPsRASrUZWGtC9MJ5rK2lBlY+/jI4a/NPPBg==} - engines: {node: '>=8.5.0'} - peerDependencies: - '@opentelemetry/api': ^1.0.2 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 0.25.0 - semver: 7.5.4 - dev: false - - /@opentelemetry/core/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-4DWYNb3dLs2mSCGl65jY3aEgbvPWSHVQV/dmDWiYeWUrMakZQFcymqZOSUNZO0uDrEJoxMu8O5tZktX6UKFwag==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.12.0 - dev: false - - /@opentelemetry/core/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-w42AukJh3TP8R0IZZOVJVM/kMWu8g+lm4LzT70WtuKqhwq7KVhcDzZZuZinWZa6TtQCl7Smt2wolEYzpHabOgw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - dev: false - - /@opentelemetry/core/1.20.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-lSRvk5AIdD6CtgYJcJXh0wGibQ3S/8bC2qbqKs9wK8e0K1tsWV6YkGFOqVc+jIRlCbZoIBeZzDe5UI+vb94uvg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.20.0 - dev: false - - /@opentelemetry/core/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-KP+OIweb3wYoP7qTYL/j5IpOlu52uxBv5M4+QhSmmUfLyTgu1OIS71msK3chFo1D6Y61BIH3wMiMYRCxJCQctA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/core/1.9.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-6/qon6tw2I8ZaJnHAQUUn4BqhTbTNRS0WP8/bA0ynaX+Uzp/DDbd0NS0Cq6TMlh8+mrlsyqDE7mO50nmv2Yvlg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.9.1 - dev: false - - /@opentelemetry/exporter-collector/0.25.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-xZYstLt4hz1aTloJaepWdjMMf9305MqwqbUWjcU/X9pOxvgFWRlchO6x/HQTw7ow0i/S+ShzC+greKnb+1WvLA==} + /@opentelemetry/api/1.8.0: + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} - deprecated: Please use trace and metric specific exporters @opentelemetry/exporter-trace-otlp-http and @opentelemetry/exporter-metrics-otlp-http - peerDependencies: - '@opentelemetry/api': ^1.0.2 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-metrics': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/core': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-metrics-base': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 0.25.0_@opentelemetry+api@1.7.0 dev: false - /@opentelemetry/exporter-jaeger/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-MGWslvok6tlNCHexHGnfXrSyobBqUDh4YOLENt2MeQ/F974SyVG4e73TD/CDM+227/rRM587hJ8dQBzvwUac/g==} + /@opentelemetry/context-async-hooks/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-Nfdxyg8YtWqVWkyrCukkundAjPhUXi93JtVQmqDT1mZRVKqA7e2r7eJCrI+F651XUBMp0hsOJSGiFk3QSpaIJw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + dev: false + + /@opentelemetry/core/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 + dev: false + + /@opentelemetry/exporter-logs-otlp-http/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-3QoBnIGCmEkujynUP0mK155QtOM0MSf9FNrEw7u9ieCFsoMiyatg2hPp+alEDONJ8N8wGEK+wP2q3icgXBiggw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.12.0 - jaeger-client: 3.19.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-transformer': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_cwjguinjiwjm54qt6yboo3fici dev: false - /@opentelemetry/exporter-logs-otlp-http/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Glxl0ZmyHqykGjcv5T4HMvw4fQVZoiCV0oMolPgXBBnuTuOHS/dEdoGX6hNp4Xqw55YALM/CJocHwkRqBQnPgw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_wj3rtarwgmsxddfed6zfae5bhe - dev: false - - /@opentelemetry/exporter-trace-otlp-grpc/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-9pwDRnBr7qDeAZ81WHbM+aA1GSu9p8nh2ARmKgA4YrCo1E9IY94goaSBV03pbGe7gh/frOp18FQMvXmiRITGUg==} + /@opentelemetry/exporter-trace-otlp-grpc/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-Zbd7f3zF7fI2587MVhBizaW21cO/SordyrZGtMtvhoxU6n4Qb02Gx71X4+PzXH620e0+JX+Pcr9bYb1HTeVyJA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@grpc/grpc-js': 1.8.17 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-grpc-exporter-base': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-grpc-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-transformer': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/exporter-trace-otlp-grpc/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-kR4kehnfIhv7v/2MuNYfrlh9A/ZtQofwCzurTIplornUjdzhKDGgjui1NkNTqTfM1QkqfCiavGsf5hwocx29bA==} + /@opentelemetry/exporter-trace-otlp-http/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-KOLtZfZvIrpGZLVvblKsiVQT7gQUZNKcUUH24Zz6Xbi7LJb9Vt6xtUZFYdR5IIjvt47PIqBKDWUQlU0o1wAsRw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.8.17 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-grpc-exporter-base': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-transformer': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/exporter-trace-otlp-grpc/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-+qRQXUbdRW6aNRT5yWOG3G6My1VxxKeqgUyLkkdIjkT20lvymjiN2RpBfGMtAf/oqnuRknf9snFl9VSIO2gniw==} + /@opentelemetry/exporter-trace-otlp-proto/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-n8ON/c9pdMyYAfSFWKkgsPwjYoxnki+6Olzo+klKfW7KqLWoyEkryNkbcMIYnGGNXwdkMIrjoaP0VxXB26Oxcg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.8.17 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-grpc-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-proto-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-transformer': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/exporter-trace-otlp-http/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-AWpTCyijC7kt2DbLj8FmdlRquA6/rTXZ+3U4MVl4P2YNI7KLUnx/FEhn2BMTB0+rOy7UxSAocqz2tJ/5Ss/6Ng==} + /@opentelemetry/exporter-zipkin/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-XcFs6rGvcTz0qW5uY7JZDYD0yNEXdekXAb6sFtnZgY/cHY6BQ09HMzOjv9SX+iaXplRDcHr1Gta7VQKM1XXM6g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 dev: false - /@opentelemetry/exporter-trace-otlp-http/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-vZ2pYOB+qrQ+jnKPY6Gnd58y1k/Ti//Ny6/XsSX7/jED0X77crtSVgC6N5UA0JiGJOh6QB2KE9gaH99010XHzg==} + /@opentelemetry/instrumentation-express/0.36.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-ltIE4kIMa+83QjW/p7oe7XCESF29w3FQ9/T1VgShdX7fzm56K2a0xfEX1vF8lnHRGERYxIWX9D086C6gJOjVGA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-fetch/0.49.1_qeb7ibvqeyc6czmc3mcy7fziia: + resolution: {integrity: sha512-hizhULZXlq02y8YC0vPQ4WtUWiXcwxPdEqHBy8p75jzF9rAuP/ldrVr0Oxvz5Xr9qQcdEOFLvEl0ZxbVL76WKw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_qeb7ibvqeyc6czmc3mcy7fziia + '@opentelemetry/sdk-trace-web': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 + transitivePeerDependencies: + - supports-color dev: false - /@opentelemetry/exporter-trace-otlp-http/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-QEZKbfWqXrbKVpr2PHd4KyKI0XVOhUYC+p2RPV8s+2K5QzZBE3+F9WlxxrXDfkrvGmpQAZytBoHQQYA3AGOtpw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/exporter-trace-otlp-proto/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-M1YctP+T6485noDAJPsnpsx85xsfqyCr06CadTQBJHIgjStgsKTDA86iVpv7XEqW5lwdIThn/boDou2vyi0bQA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-proto-exporter-base': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/exporter-trace-otlp-proto/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-A7PftDM57w1TLiirrhi8ceAnCpYkpUBObELdn239IyYF67zwngImGfBLf5Yo3TTAOA2Oj1TL76L8zWVL8W+Suw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-proto-exporter-base': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/exporter-trace-otlp-proto/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-hVXr/8DYlAKAzQYMsCf3ZsGweS6NTK3IHIEqmLokJZYcvJQBEEazeAdISfrL/utWnapg1Qnpw8u+W6SpxNzmTw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-proto-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-transformer': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/exporter-zipkin/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-HJ4ww7OjVIV4x5ZGgY+h+D1JS0GsCtnHuqZUVHl7EFFQxMGpbQcf5eISRtwqgQwlQKh2iqrEbiHdDyzbgA/7XQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.12.0 - dev: false - - /@opentelemetry/exporter-zipkin/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-TY1fy4JiOBN5a8T9fknqTMcz0DXIeFBr6sklaLCgwtj+G699a5R4CekNwpeM7DHSwC44UMX7gljO2I6dYsTS3A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - dev: false - - /@opentelemetry/exporter-zipkin/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-J0ejrOx52s1PqvjNalIHvY/4v9ZxR2r7XS7WZbwK3qpVYZlGVq5V1+iCNweqsKnb/miUt/4TFvJBc9f5Q/kGcA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/instrumentation-amqplib/0.32.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-D2hTvDfXQxj/9ydOcrz8Na7O3rLpNwSAKYHju37Mc15YLN2rmhnB/kW7YyW2+z1eC+cbLPg2iDIxzLd1FsJ15Q==} + /@opentelemetry/instrumentation-http/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-Yib5zrW2s0V8wTeUK/B3ZtpyP4ldgXj9L3Ws/axXrW1dW0/mEFKifK50MxMQK9g5NNJQS9dWH7rvcEGZdWdQDA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-amqplib/0.33.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-WQ/XPzNLOHL3fpsmgoQUkiKCkJ09hvPN8wGrGzzOHMiJ5/3LqvfvxsJ4Rcd6aWkA4il3hEfpl+V0VF0t/DP65A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-amqplib/0.33.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-WQ/XPzNLOHL3fpsmgoQUkiKCkJ09hvPN8wGrGzzOHMiJ5/3LqvfvxsJ4Rcd6aWkA4il3hEfpl+V0VF0t/DP65A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-aws-lambda/0.35.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-GCG0MyKSOyRfRUcWNUA0xLZQ5gVS+GDHXX//IIc01n81sFoWhgEl0wYWIa/ziLu7qKAAsJF1klKlMo/HppfkLQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-aws-xray': 1.2.1_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/aws-lambda': 8.10.81 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-aws-lambda/0.37.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-/wdZwUalIWAbxeycvmE+25c1xCMhe5EUuj8bN0MWWN3L8N2SYvfv6DmiRgwrTIPXRgIyFugh2udNiF4MezZN4Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-aws-xray': 1.3.1_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/aws-lambda': 8.10.122 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-aws-lambda/0.37.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-/wdZwUalIWAbxeycvmE+25c1xCMhe5EUuj8bN0MWWN3L8N2SYvfv6DmiRgwrTIPXRgIyFugh2udNiF4MezZN4Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/propagator-aws-xray': 1.3.1_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/aws-lambda': 8.10.122 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-aws-sdk/0.34.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-esz3PUIKnRlzu9rXtSPfQkoR/amvrNDqFJK7RGAmcOxvXg+4TQGLF3BY74ZCv84iBjSgvObL8ELkVofYH6cDWg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagation-utils': 0.29.5_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-aws-sdk/0.37.2_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-eFHHOk0P9EFQ9Ho+2w7KH9R8cH7hut0/ePSsrk0nAM6Tiq2lBPeHn8ialCWESAA9jSjy+iuDelwmqAEXEe+jrg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagation-utils': 0.30.6_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-aws-sdk/0.37.2_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-eFHHOk0P9EFQ9Ho+2w7KH9R8cH7hut0/ePSsrk0nAM6Tiq2lBPeHn8ialCWESAA9jSjy+iuDelwmqAEXEe+jrg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/propagation-utils': 0.30.6_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-bunyan/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-uwQPzNXq+f2/7odtYPsBlozm2bjDHLOB/r3pSO02BEnHG5L7RyzV7aPLH1xYTHrLnZAd8ew8Am5dGM4uRiO4sA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@types/bunyan': 1.8.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-bunyan/0.34.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-+eshbCFr2dkUYO2jCpbYGFC5hs94UCOsQRK1XqNOjeiNvQRtqvKYqk8ARwJBYBX+aW4J02jOliAHQUh/d7gYPg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.46.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@types/bunyan': 1.8.9 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-bunyan/0.34.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-+eshbCFr2dkUYO2jCpbYGFC5hs94UCOsQRK1XqNOjeiNvQRtqvKYqk8ARwJBYBX+aW4J02jOliAHQUh/d7gYPg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.46.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@types/bunyan': 1.8.9 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-cassandra-driver/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-xBWXyg585E/8PFoIgEyUdvVo4y/9rO/plkH9h1LF7aE4xXpAiYKVKNVFh4BsOTcylJkFSEZEvbHnFM8z8zb4jA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-cassandra-driver/0.34.2_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-wuzq7QQ9o7PJnzseblNfBcURtM+9AwO6e1m644QYtAb/6YRR6qg6gAmAipVeQu01H5BuHBFC/92svaAkdIV2WQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-cassandra-driver/0.34.2_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-wuzq7QQ9o7PJnzseblNfBcURtM+9AwO6e1m644QYtAb/6YRR6qg6gAmAipVeQu01H5BuHBFC/92svaAkdIV2WQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-connect/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-cce1AVRfWyQUOvJHMARaT+0KK5gN5qvKfmiiecmNSlj4NVC6w2DzknMuoHy3WkHQEQKPgF0pJG034UaU6bLKFA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/connect': 3.4.35 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-connect/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-oUGph9idncdnHlQMwdIs6m6mii7Kdp9PpHkM9roOZy71h+2vvf6+cVn45bs2unBbE2Vxho2i/049QQbaYKDYlw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/connect': 3.4.36 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-connect/0.32.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-oUGph9idncdnHlQMwdIs6m6mii7Kdp9PpHkM9roOZy71h+2vvf6+cVn45bs2unBbE2Vxho2i/049QQbaYKDYlw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/connect': 3.4.36 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-cucumber/0.2.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-ydF0DpmE0D6wccAbxx1F+6kokzcSSRy3X78Bvgok/3fHUSSshGLErqNiQL1HV44OIcV6392P3tu/jtXtUq3UDQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-cucumber/0.2.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-ydF0DpmE0D6wccAbxx1F+6kokzcSSRy3X78Bvgok/3fHUSSshGLErqNiQL1HV44OIcV6392P3tu/jtXtUq3UDQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-dataloader/0.4.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-iV1noFh7rOjDJ5WXg3o5mQIaEnxTCIpFGWPxqwK2kta3p78wU0KpYIz9x4MvdEVjFyTXxfB7iVz1kQ2g2b6Kpw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-dataloader/0.5.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-l1qQvvygxZJw+S+4hgYgzvT4GArqBrar42wzB5LVsOy04+gmbDw/4y7IqxZYepFyXKuBownGS8pR4huRL/Tj/A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-dataloader/0.5.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-l1qQvvygxZJw+S+4hgYgzvT4GArqBrar42wzB5LVsOy04+gmbDw/4y7IqxZYepFyXKuBownGS8pR4huRL/Tj/A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-dns/0.31.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-jGMpUzUlPT0mPum2N931Q918cuAfrEJOTHM35O1+YpCfjBnpbj+Vx77pIX0dSdWPxrigiPNZqdxQ2GadfdwBCA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 semver: 7.5.4 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/instrumentation-dns/0.32.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-fHJqrbezpZSipo4O9nF9yGq6R8oyr1W2gSlyk1foJNXBaqdCODTlzIa7BP50vGtLBN/m+qO8pMOWCJmYSBX35g==} + /@opentelemetry/instrumentation/0.48.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-sjtZQB5PStIdCw5ovVTDGwnmQC+GGYArJNgIcydrDSqUTdYBnMrN9P4pwQZgS3vTGIp+TU1L8vMXGe51NVmIKQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-dns/0.32.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-fHJqrbezpZSipo4O9nF9yGq6R8oyr1W2gSlyk1foJNXBaqdCODTlzIa7BP50vGtLBN/m+qO8pMOWCJmYSBX35g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-express/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-67o/pc2GYRxNpgC5nw6xrPvxlpGKjr43dsukR23IJom45gtsZjt0V7YjEGw40MAvtdsrG0PMkthjXNBvr34Y6A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/express': 4.17.13 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-express/0.34.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-pQBQxXpkH6imvzwCdPcw2FKjB1cphoRpmWTiGi6vtBdKXCP0hpne613ycpwhGG7C17S+mbarVmukbJKR4rmh6Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-express/0.34.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-pQBQxXpkH6imvzwCdPcw2FKjB1cphoRpmWTiGi6vtBdKXCP0hpne613ycpwhGG7C17S+mbarVmukbJKR4rmh6Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-express/0.35.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-ZmSB4WMd88sSecOL7DlghzdBl56/8ymb02n+xEJ/6zUgONuw/1uoTh1TAaNPKfEWdNLoLKXQm+Gd2zBrUVOX0w==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fastify/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-3qYJySc+Eo0cpQVpE/MGbMi+WKU7n9OxQIEj/CswTcn3W1H7ot9dreV8IchNdM6WrRhUjFmAMCtrDS7Ewdvkpg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fastify/0.32.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-UkBu8rAqeVC034jsRMiEAmYhFQ03pvmE/MnoPKE9gAbgVtPILdekHYqAKM0MdqnEjW7pO45t4wWsbtIcN0eiBw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fastify/0.32.6_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-UkBu8rAqeVC034jsRMiEAmYhFQ03pvmE/MnoPKE9gAbgVtPILdekHYqAKM0MdqnEjW7pO45t4wWsbtIcN0eiBw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fetch/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-y4Zw9VeUUMaowg3aXYZXcaUJQ7IKfpR6sjClrAQOJwWG8LYFpM6NIRSoAeJv/ShfxWWCPWC0P4zgXcKRqpURFQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-web': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fetch/0.48.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-y4Zw9VeUUMaowg3aXYZXcaUJQ7IKfpR6sjClrAQOJwWG8LYFpM6NIRSoAeJv/ShfxWWCPWC0P4zgXcKRqpURFQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/sdk-trace-web': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fs/0.7.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-JN+X7nfBeEbl2dvyd/6IBqVujjqE5/fY0oJdju2kW6X/fsKyIBTlEoKW1nlI+VLO6JVwTMTkvREFTvTOlGZqsA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fs/0.8.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-g99963nK8TuisUM3KH+ee5hOCHdCHSKiAdmy0RMdiKT7ITh3rXUct7fghQibViQA7FVPkdwM9+uRKkigJSFS9w==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-fs/0.8.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-g99963nK8TuisUM3KH+ee5hOCHdCHSKiAdmy0RMdiKT7ITh3rXUct7fghQibViQA7FVPkdwM9+uRKkigJSFS9w==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-generic-pool/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-S9LpOtGhk7COsC6GmkF5i/BB+XQD8qBbMgLHR0/fccsrzxTw7wd2IMo2hZOLPBYDvaSrywmOy8etJGT34eOEQA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/generic-pool': 3.8.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-generic-pool/0.32.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-MNFloXa3SDg/rHh397JnWADr7iYQ6HHRwT7ZId5Vt0L1Xx+Qp3XSIILsXk5qTXVUIytEIVgn8iMT+kZILHzSqg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-generic-pool/0.32.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-MNFloXa3SDg/rHh397JnWADr7iYQ6HHRwT7ZId5Vt0L1Xx+Qp3XSIILsXk5qTXVUIytEIVgn8iMT+kZILHzSqg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-graphql/0.34.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-5NTOZWpIr0/E6FbftUHpoR6MxdySjcnNbHA3XAVqqAgLg5w5cmsaJepeKPxrbbNI91CShXqwcrNcaHueUGGCBw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-graphql/0.36.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-EOvaS+d2909TOJJjNTsb0vHaLg8WdTLoQS8bRKdy3lMgdd7I4OL9/LSC7dp4M8CvJKz9B464Ix9PnARvhMkNOw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-graphql/0.36.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-EOvaS+d2909TOJJjNTsb0vHaLg8WdTLoQS8bRKdy3lMgdd7I4OL9/LSC7dp4M8CvJKz9B464Ix9PnARvhMkNOw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-grpc/0.35.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-EBmpCD+5QfUXPmupynjwxt3tUG5bgTrGZT12B0/+By9ZMLboDAryHjpiermanbPh5mTOq0q73YzruGQWU9TExg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.35.1_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.9.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-grpc/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-KemIpB4jmywQv/+MbVoUIMVp3vr+rzra37TYbN7kTsbrn213YlzdXVamf6nq/yChI6q+9JlUnCdSZf86D6NO6g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-grpc/0.46.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-KemIpB4jmywQv/+MbVoUIMVp3vr+rzra37TYbN7kTsbrn213YlzdXVamf6nq/yChI6q+9JlUnCdSZf86D6NO6g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.19.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-hapi/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-6A8jxzeHow6RwrlM2PRfV10C2sVAeqy3L8EBa8FvNoUQiZbmmHhJssu0lxgeRabI3VS/1vDrac1zASN3aMqecQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/hapi__hapi': 20.0.9 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-hapi/0.33.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-l14u1TFPXMUjfHqnrHtzuMyLq6V8BikwhYJO/hIgkbaPCxS38TloCtDLJvcs8S8AZlcQfkUqE/NFgXYETZRo+Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/hapi__hapi': 20.0.13 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-hapi/0.33.3_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-l14u1TFPXMUjfHqnrHtzuMyLq6V8BikwhYJO/hIgkbaPCxS38TloCtDLJvcs8S8AZlcQfkUqE/NFgXYETZRo+Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/hapi__hapi': 20.0.13 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-http/0.35.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-tH92LznX5pcxpuTSb6A662IdldlMk8QTtneDN66h4nIT9ch98Gtu68GSSKjMoTR25GzH3opvPC9mX2xJamxMJw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.9.1_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.35.1_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.9.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-http/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-t5cxgqfV9AcxVP00/OL1ggkOSZM57VXDpvlWaOidYyyfLKcUJ9e2fGbNwoVsGFboRDeH0iFo7gLA3EEvX13wCA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-http/0.46.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-t5cxgqfV9AcxVP00/OL1ggkOSZM57VXDpvlWaOidYyyfLKcUJ9e2fGbNwoVsGFboRDeH0iFo7gLA3EEvX13wCA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.19.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-http/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-uXqOsLhW9WC3ZlGm6+PSX0xjSDTCfy4CMjfYj6TPWusOO8dtdx040trOriF24y+sZmS3M+5UQc6/3/ZxBJh4Mw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-http/0.48.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-uXqOsLhW9WC3ZlGm6+PSX0xjSDTCfy4CMjfYj6TPWusOO8dtdx040trOriF24y+sZmS3M+5UQc6/3/ZxBJh4Mw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-ioredis/0.34.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-k/4zPfdZSkdRYbx6CEjwgqi/UZlTUKk+8ZsthOzYsvmpCwPb1a1PomOa+1gk+5OvF83HanSy4mO06FhMx/NUgQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/redis-common': 0.35.1 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/ioredis4': /@types/ioredis/4.28.10 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-ioredis/0.36.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-xxab7n4TD5igCFR5N0j5PJFYVeOXm54ZtCARVS32xavwGyGf+Sb6VtuVCLdl0re4JENCg18FO97Dyb1ql2EBUA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/ioredis4': /@types/ioredis/4.28.10 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-ioredis/0.36.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-xxab7n4TD5igCFR5N0j5PJFYVeOXm54ZtCARVS32xavwGyGf+Sb6VtuVCLdl0re4JENCg18FO97Dyb1ql2EBUA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/ioredis4': /@types/ioredis/4.28.10 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-knex/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-1Q0I5mn/pF5d42sZa9RWEayBft8c5XqQupC/MSaK6nuSZowQKcOPs5q8wMuPCB8Ma04xLmiH3N4MErjS3GIaSA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-knex/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-vqxK1wqhktQnBA7nGr6nqfhV5irSXK9v0R29hqlyTr/cB/86Hn3Z98zH58QvHo131FcE+d70QdiXu3P9S5vq4g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-knex/0.32.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-vqxK1wqhktQnBA7nGr6nqfhV5irSXK9v0R29hqlyTr/cB/86Hn3Z98zH58QvHo131FcE+d70QdiXu3P9S5vq4g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-koa/0.34.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Rohp13k6t8XkbIKWjblW+qOovqSl3+OmgWHoyM8lf12cN0DAdCklwCKiittvht4ecVU/uRLh3MBIPIMCnkQa6g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/koa': 2.13.6 - '@types/koa__router': 8.0.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-koa/0.36.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Qt6IF0mo3FZZ+x4NQhv/pViDtPSw/h/QYDvyIqMCuqUibqta619WLUCwAcanKnZWvzMuYh6lT0TnZ8ktjXo6jQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/koa': 2.13.9 - '@types/koa__router': 12.0.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-koa/0.36.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-Qt6IF0mo3FZZ+x4NQhv/pViDtPSw/h/QYDvyIqMCuqUibqta619WLUCwAcanKnZWvzMuYh6lT0TnZ8ktjXo6jQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/koa': 2.13.9 - '@types/koa__router': 12.0.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-lru-memoizer/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-5IxH+cW/2CsPR3owASTaO+RAlfs+oSZtHpCx/2LhjXms49yuLHB6YDFJcWyOW4QN6P2A3uLbxWYCxMt2XKy39Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-lru-memoizer/0.33.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-vbm9QPEYD3FZNGSa+7xQ7uOkgbJtskIwp1KnsCpmdBBiulhBaqqgeNLFo7gd8UxMrI2Vu3LTlZil2D0dVt8g/A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-lru-memoizer/0.33.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-vbm9QPEYD3FZNGSa+7xQ7uOkgbJtskIwp1KnsCpmdBBiulhBaqqgeNLFo7gd8UxMrI2Vu3LTlZil2D0dVt8g/A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-memcached/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-IDGys1d3aG7CGqgvZZ0dkmZCEFn1eQ3HPJCap+gUhjt7RRxLFYasa4h/GWviUHM3BNwJaA7VSmhEfbwxUCHxXw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/memcached': 2.2.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-memcached/0.32.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-1MS9LfgZruAsWOHVDTI+/Wy9mFFivUlpGUwYC4D+ho1I4NUyE33XHwL1BKcjMupkuRnE0JmbhdBfTG9Ai1vFkw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/memcached': 2.2.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-memcached/0.32.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-1MS9LfgZruAsWOHVDTI+/Wy9mFFivUlpGUwYC4D+ho1I4NUyE33XHwL1BKcjMupkuRnE0JmbhdBfTG9Ai1vFkw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/memcached': 2.2.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mongodb/0.34.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-QCsX5vGjmmUnqLOlT+eThfBQ35JbQ3bdZSOCFvYu24+vqDEzMf+sWmgQVZuSlEGooXJ9lhlyFszPyUrTk2jS3g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.39.1_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mongodb/0.38.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-X6YjE8dOCf8lG8FGmoAvczZq7LtgYaRzZcLGthZSUJQ2rfp1JJRlJixc+COvhrn1HJj5ab+AsSdUQgTpfQgEHQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-metrics': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mongodb/0.38.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-X6YjE8dOCf8lG8FGmoAvczZq7LtgYaRzZcLGthZSUJQ2rfp1JJRlJixc+COvhrn1HJj5ab+AsSdUQgTpfQgEHQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/sdk-metrics': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mongoose/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-JylmvZnH1ScQGc9tbV/6PIzk/rTNVgOtZDh9kJCYU0fbmX9a4lAsKav4kfnOK177IE+/jLsEECSUuytjqumGnQ==} - engines: {node: '>=14.0'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mongoose/0.34.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-/wGNK7qR/QXpcidXntKsnfACHETp8G/f2o/k8FPvJ2lukvdM9r7cHLys8QwkJkTN8Kt3qG1VIwarGKYtE/zOSw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mongoose/0.34.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-/wGNK7qR/QXpcidXntKsnfACHETp8G/f2o/k8FPvJ2lukvdM9r7cHLys8QwkJkTN8Kt3qG1VIwarGKYtE/zOSw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mysql/0.33.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-nzKW1mtEHu0YlUD+dRq+oPAMMQHMML5hLNDGKDwK/mcGqrXKHzaQKukVIKHv3AS3tMVBoayQi4Rz2LdZ/kylwA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/mysql': 2.15.19 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mysql/0.34.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-cE8z1uJTeLcMj+R31t1pLkLqt3ryGMl1HApxsqqf8YCSHetrkVwGZOcyQ3phfgGSaNlC4/pdf3CQqfjhXbLWlA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/mysql': 2.15.22 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mysql/0.34.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-cE8z1uJTeLcMj+R31t1pLkLqt3ryGMl1HApxsqqf8YCSHetrkVwGZOcyQ3phfgGSaNlC4/pdf3CQqfjhXbLWlA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/mysql': 2.15.22 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mysql2/0.33.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-niaBa79lmgXTvMJXDpucPdiyTv+gUejkAiweAqgpigTTQM4T4qtfxNcw+dlP3vWAkHfu44+INy+96BHGlROxYw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mysql2/0.34.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Ai3+cJ83b11kLypIVEPLHuYCiIQjf828hHJPpllr78EhmHiq4S1yTW34aP3BzCBY+5Adr5PS5Nnv7NLBI/YfaQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@opentelemetry/sql-common': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-mysql2/0.34.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-Ai3+cJ83b11kLypIVEPLHuYCiIQjf828hHJPpllr78EhmHiq4S1yTW34aP3BzCBY+5Adr5PS5Nnv7NLBI/YfaQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@opentelemetry/sql-common': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-nestjs-core/0.32.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-fqPLahEiAW21aO60R+O+j5PJyfLHBczF+Ol7dodXpbzxd+9JWmiB2jeEgAAoOePDTJQC98WBuzfSZ8wRct06sQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-nestjs-core/0.33.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-AynD6TesE0bZg9UzS4ZLG//6TmU8GkRrjubhxs7jYZ3JRAlJAq1In0zSwM082JOIs7wr286nhs1FmqK91cG1cg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-nestjs-core/0.33.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-AynD6TesE0bZg9UzS4ZLG//6TmU8GkRrjubhxs7jYZ3JRAlJAq1In0zSwM082JOIs7wr286nhs1FmqK91cG1cg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-net/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-KbQg0Qwhu98+kgo2jIWw0/WqSxHA/Old6yFj8MoNOo/OF+SWQwaPHK1+oV9dZGV6v3aaikb//YnoaubWucUOiQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-net/0.32.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-omBLTXyJeCtBy1MzVi+IzUcpXiup90k0z3AGhNKbzro4RhpsdMpN9O+3zZCXCIHMuyifhy7z8w99wmvvFO/FCQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-net/0.32.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-omBLTXyJeCtBy1MzVi+IzUcpXiup90k0z3AGhNKbzro4RhpsdMpN9O+3zZCXCIHMuyifhy7z8w99wmvvFO/FCQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-pg/0.35.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Q37HiZJ1KsHH/gdzRHI8ixgiR1v7/+bFL+E/f6bi4BpPdJGJzer+sYYhdPyzpvGMFwlzRcGJpv9jYaQvCwJp9Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/pg': 8.6.1 - '@types/pg-pool': 2.0.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-pg/0.37.2_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-MAiKqdtGItYjvD6rOCyGS27CdMaDnh2JuImIHXhrPjq/sb2JlBNm6m1e4BH4uik1VfcKt/I3pI3UkydSWIscCg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@opentelemetry/sql-common': 0.40.0_@opentelemetry+api@1.7.0 - '@types/pg': 8.6.1 - '@types/pg-pool': 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-pg/0.37.2_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-MAiKqdtGItYjvD6rOCyGS27CdMaDnh2JuImIHXhrPjq/sb2JlBNm6m1e4BH4uik1VfcKt/I3pI3UkydSWIscCg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@opentelemetry/sql-common': 0.40.0_@opentelemetry+api@1.7.0 - '@types/pg': 8.6.1 - '@types/pg-pool': 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-pino/0.33.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-9jRkfICHBkwcP/O363Ft3cA2t7cuYgOyiW1L+hJ4rmnCmfAVOM+uNQ1dTezftkodgTvurlQbDjOBSKhvh2r2Pw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-pino/0.34.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-auYDSeFhkPFXayT/060mQRL7O88Bt5NKcV0qOfquNa9J5/qs5dlJYdTOraxPrjiGPM3tHaAJ+AvAhR0CPYgZew==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-pino/0.34.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-auYDSeFhkPFXayT/060mQRL7O88Bt5NKcV0qOfquNa9J5/qs5dlJYdTOraxPrjiGPM3tHaAJ+AvAhR0CPYgZew==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-redis-4/0.34.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-owBvjxm5QjSLaJJT23yX0Wx6DzBEE0m+yq3wue4k3yGToGgYienS5ThfrWNtkoTKhECJNajR0LyqZCtC+CGHsw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/redis-common': 0.35.1 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-redis-4/0.35.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-OVSUJZAuy6OX18X2TKPdPlpwM5t4FooJU9QXiUxezhdMvfIAu00Agchw+gRbszkM7nvQ9dkXFOZO3nTmJNcLcA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-redis-4/0.35.6_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-OVSUJZAuy6OX18X2TKPdPlpwM5t4FooJU9QXiUxezhdMvfIAu00Agchw+gRbszkM7nvQ9dkXFOZO3nTmJNcLcA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-redis/0.34.7_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-mDfoMi73SXC5TRn/Xt1LRrQKYcz7w7TVekM8QlbPpx3KI7xKAjwa9+38psO1snhbX/nXdXgtcrtbXhz8nUJ+Sg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/redis-common': 0.35.1 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-redis/0.35.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-UPYUncDlLqDPtyU11UhyZOUxAyPQS6yQGT0b96KjpqMhmuRb3b0WxzZh3SoIaAyprL5f9fxyeV2HfSulR0aWFQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-redis/0.35.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-UPYUncDlLqDPtyU11UhyZOUxAyPQS6yQGT0b96KjpqMhmuRb3b0WxzZh3SoIaAyprL5f9fxyeV2HfSulR0aWFQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/redis-common': 0.36.1 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-restify/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-puF9DaSKgC8NvqrUUt/5XA9iua+qOdtm8HhUvBmUlEfo8aNc//wfSd1znGAhg8jXaf5lRdYbOmBbT7SMM8gxiA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-restify/0.34.3_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-nUqf4RTcQyc/YTWMT0e/ZqvuQqhRH04MOoSwaH6ocmyrEhKdPDq9AbvSMerQ/AxNC9yju/PytgzFFWH45hh3KA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-restify/0.34.3_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-nUqf4RTcQyc/YTWMT0e/ZqvuQqhRH04MOoSwaH6ocmyrEhKdPDq9AbvSMerQ/AxNC9yju/PytgzFFWH45hh3KA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-router/0.32.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-TbiufieBpP78UvVnECmhxuHtVWR0tfkZW53TwqsYShlNPeQjNYX377fLUw+S8Lnvnctqn47Wjt4SbCOBhNnZEg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-router/0.33.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-4140BgILsL0H8tA0BBN2tjzajgjxlDqd4xPatk2i5q9ofy8wlB0BlDJ4m36U7G1z0v+a+LshQSNqPP2VHZ9ORw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-router/0.33.4_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-4140BgILsL0H8tA0BBN2tjzajgjxlDqd4xPatk2i5q9ofy8wlB0BlDJ4m36U7G1z0v+a+LshQSNqPP2VHZ9ORw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-socket.io/0.33.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-6Rbg1d1q/OECrodA+ESFw30KA9zb0atrX+bk2rhLxhJMSO8s3MW9/rtdgkytLFS+nsEyPVMljmmOOPKwiki2Xg==} - engines: {node: '>=14.0'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-socket.io/0.35.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-ED1/Wco05H9fepKqX7n2kONq9EXxkBZTKS29nUH9vVL7wSIT8sBIDqpHz94CnQ8xuicaQQ7c5h9TVuhjtzV43Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-socket.io/0.35.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-ED1/Wco05H9fepKqX7n2kONq9EXxkBZTKS29nUH9vVL7wSIT8sBIDqpHz94CnQ8xuicaQQ7c5h9TVuhjtzV43Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-tedious/0.5.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-i3P+/9+i8yWoMhrw9vCKClpiWB4lp9CGRF/riaRGTrPNF14IO2B0E+DpNMlOjCWydnOLnjZ/m0vIkbVLAdP9aw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/tedious': 4.0.14 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-tedious/0.6.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-jjdrDegLUodz9np0yKCAa7sLxlAGTsxM7wU7l1mQ2NM6PHAGv4X3eSFClUk3fOipLx4+r5jTLnlsgu7g9CW+Qw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/tedious': 4.0.14 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-tedious/0.6.5_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-jjdrDegLUodz9np0yKCAa7sLxlAGTsxM7wU7l1mQ2NM6PHAGv4X3eSFClUk3fOipLx4+r5jTLnlsgu7g9CW+Qw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 - '@types/tedious': 4.0.14 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-winston/0.31.4_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-AmUq5Do7FUoPLrehsDh45sK34qlPNg1i9HUieop3F+d1+gk+YPv2Z29WGi7KEnhM4/GJu2OsWq/pwzgemeNHuQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.40.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-winston/0.33.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-4tSORoAY9f+yzqNVGcGr/3GydPMfgSiKK1OESc+qBwVTz0bmz4cOrhCruCngGzoqDCmPYpwqwR/8j4wRKgcUpw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation-winston/0.33.1_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-4tSORoAY9f+yzqNVGcGr/3GydPMfgSiKK1OESc+qBwVTz0bmz4cOrhCruCngGzoqDCmPYpwqwR/8j4wRKgcUpw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.35.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-EZsvXqxenbRTSNsft6LDcrT4pjAiyZOx3rkDNeqKpwZZe6GmZtsXaZZKuDkJtz9fTjOGjDHjZj9/h80Ya9iIJw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - require-in-the-middle: 5.2.0 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-wr1WkIbzHGV+oz6SCme88D2c+zNG23COkCjcida8b3jIzX2lJafOpEHPDcbBF38F8ChkRSj/tVnx1wnYAXZvbA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - require-in-the-middle: 6.0.0 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.39.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-s7/9tPmM0l5KCd07VQizC4AO2/5UJdkXq5gMSHPdCeiMKSeBEdyDyQX7A+Cq+RYZM452qzFmrJ4ut628J5bnSg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - require-in-the-middle: 7.1.1 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.40.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-23TzBKPflUS1uEq5SXymnQKQDSda35KvHjnvxdcDQGE+wg6hwDHgScUCWiBmZW4sxAaPcANfs+Wc9B7yDuyT6Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@types/shimmer': 1.0.2 - import-in-the-middle: 1.3.5 - require-in-the-middle: 7.1.1 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 '@types/shimmer': 1.0.2 import-in-the-middle: 1.7.1 require-in-the-middle: 7.1.1 @@ -11448,13 +7958,31 @@ packages: - supports-color dev: false - /@opentelemetry/instrumentation/0.46.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==} + /@opentelemetry/instrumentation/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@types/shimmer': 1.0.2 + import-in-the-middle: 1.7.1 + require-in-the-middle: 7.1.1 + semver: 7.5.4 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation/0.49.1_qeb7ibvqeyc6czmc3mcy7fziia: + resolution: {integrity: sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 '@types/shimmer': 1.0.2 import-in-the-middle: 1.7.1 require-in-the-middle: 7.1.1_supports-color@9.4.0 @@ -11464,794 +7992,227 @@ packages: - supports-color dev: false - /@opentelemetry/instrumentation/0.47.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-ZFhphFbowWwMahskn6BBJgMm8Z+TUx98IM+KpLIX3pwCK/zzgbCgwsJXRnjF9edDkc5jEhA7cEz/mP0CxfQkLA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@types/shimmer': 1.0.2 - import-in-the-middle: 1.7.3 - require-in-the-middle: 7.1.1 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-sjtZQB5PStIdCw5ovVTDGwnmQC+GGYArJNgIcydrDSqUTdYBnMrN9P4pwQZgS3vTGIp+TU1L8vMXGe51NVmIKQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@types/shimmer': 1.0.2 - import-in-the-middle: 1.7.1 - require-in-the-middle: 7.1.1 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/instrumentation/0.48.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-sjtZQB5PStIdCw5ovVTDGwnmQC+GGYArJNgIcydrDSqUTdYBnMrN9P4pwQZgS3vTGIp+TU1L8vMXGe51NVmIKQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@types/shimmer': 1.0.2 - import-in-the-middle: 1.7.1 - require-in-the-middle: 7.1.1_supports-color@9.4.0 - semver: 7.5.4 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/otlp-exporter-base/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-VWQo7vUDyW/7/FT8RErAtM/29i/fllCc9xMtnK7kDuheAjJU68zrZ88bQOsLamHvOCU3KVpozjfTZVxZKQRYXw==} + /@opentelemetry/otlp-exporter-base/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-z6sHliPqDgJU45kQatAettY9/eVF58qVPaTuejw9YWfSRqid9pXPYeegDCSdyS47KAUgAtm+nC28K3pfF27HWg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/otlp-exporter-base/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-hfkh7cG17l77ZSLRAogz19SIJzr0KeC7xv5PDyTFbHFpwwoxV/bEViO49CqUFH6ckXB63NrltASP9R7po+ahTQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/otlp-exporter-base/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-T4LJND+Ugl87GUONoyoQzuV9qCn4BFIPOnCH1biYqdGhc2JahjuLqVD9aefwLzGBW638iLAo88Lh68h2F1FLiA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/otlp-grpc-exporter-base/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-wwGxeJt80w+mIA0aE+K9OshkyEoYQrXuwXl1TNZBs9K7qE4AAiEuxU9cbd3VX3BTsp+xzNcDRWIb9WWkiU9+kA==} + /@opentelemetry/otlp-grpc-exporter-base/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-DNDNUWmOqtKTFJAyOyHHKotVox0NQ/09ETX8fUOeEtyNVHoGekAVtBbvIA3AtK+JflP7LC0PTjlLfruPM3Wy6w==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@grpc/grpc-js': 1.8.17 - '@grpc/proto-loader': 0.7.7 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/otlp-grpc-exporter-base/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-/KB/xfZZiWIY2JknvCoT/e9paIzQO3QCBN5gR6RyxpXM/AGx3YTAOKvB/Ts9Va19jo5aE74gB7emhFaCNy4Rmw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@grpc/grpc-js': 1.8.17 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.46.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 protobufjs: 7.2.6 dev: false - /@opentelemetry/otlp-grpc-exporter-base/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Vdp56RK9OU+Oeoy3YQC/UMOWglKQ9qvgGr49FgF4r8vk5DlcTUgVS0m3KG8pykmRPA+5ZKaDuqwPw5aTvWmHFw==} + /@opentelemetry/otlp-proto-exporter-base/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-x1qB4EUC7KikUl2iNuxCkV8yRzrSXSyj4itfpIO674H7dhI7Zv37SFaOJTDN+8Z/F50gF2ISFH9CWQ4KCtGm2A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.8.17 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/otlp-exporter-base': 0.49.1_@opentelemetry+api@1.8.0 protobufjs: 7.2.6 dev: false - /@opentelemetry/otlp-proto-exporter-base/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-/Z68pIgFv+IwQQfJOJQ9ga7KZ5ET2cFAnpWO9JsxrHjW9glmX+T9RgcF7rfSAFl2JSM9A+kQ11WYRjE2tNKxqg==} + /@opentelemetry/otlp-transformer/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-Z+koA4wp9L9e3jkFacyXTGphSWTbOKjwwXMpb0CxNb0kjTHGUxhYRN8GnkLFsFo5NbZPjP07hwAqeEG/uCratQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@opentelemetry/api': '>=1.3.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.7.0 - protobufjs: 7.2.6 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_cwjguinjiwjm54qt6yboo3fici + '@opentelemetry/sdk-metrics': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/otlp-proto-exporter-base/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-rEJBA8U2AxfEzrdIUcyyjOweyVFkO6V1XAxwP161JkxpvNuVDdULHAfRVnGtoZhiVA1XsJKcpIIq2MEKAqq4cg==} + /@opentelemetry/propagator-b3/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-qBItJm9ygg/jCB5rmivyGz1qmKZPsL/sX715JqPMFgq++Idm0x+N9sLQvWFHFt2+ZINnCSojw7FVBgFW6izcXA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@opentelemetry/api': '>=1.0.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.46.0_@opentelemetry+api@1.7.0 - protobufjs: 7.2.6 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/otlp-proto-exporter-base/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-14GSTvPZPfrWsB54fYMGb8v+Uge5xGXyz0r2rf4SzcRnO2hXCPHEuL3yyL50emaKPAY+fj29Dm0bweawe8UA6A==} + /@opentelemetry/propagator-jaeger/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-pMLgst3QIwrUfepraH5WG7xfpJ8J3CrPKrtINK0t7kBkuu96rn+HDYQ8kt3+0FXvrZI8YJE77MCQwnJWXIrgpA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@opentelemetry/api': '>=1.0.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/otlp-exporter-base': 0.48.0_@opentelemetry+api@1.7.0 - protobufjs: 7.2.6 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/otlp-transformer/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-ykQEipby0NVSi2ih5E8J2GNJ6y9zYDPSef0nD8j33XPKxfyVG5184rUrCsh6TIk1d/GlYl8gB9Wy4TdRvwl6kA==} + /@opentelemetry/resources/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-metrics': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 dev: false - /@opentelemetry/otlp-transformer/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-Fj9hZwr6xuqgsaERn667Uf6kuDG884puWhyrai2Jen2Fq+bGf4/5BzEJp/8xvty0VSU4EfXOto/ys3KpSz2UHg==} + /@opentelemetry/sdk-logs/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.46.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.46.0_b4ttzq43gtblpycwykjioqjhcq - '@opentelemetry/sdk-metrics': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/otlp-transformer/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-yuoS4cUumaTK/hhxW3JUy3wl2U4keMo01cFDrUOmjloAdSSXvv1zyQ920IIH4lymp5Xd21Dj2/jq2LOro56TJg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_wj3rtarwgmsxddfed6zfae5bhe - '@opentelemetry/sdk-metrics': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagation-utils/0.29.5_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-TRVQAZZfXmatJ8ZrjtQadxv+3n1DbQl42aK2/UOeZ0THdz9EqQ2+IBbvPD484c8H7pjUVUwqDOsk+1BOSPwXEw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - dev: false - - /@opentelemetry/propagation-utils/0.30.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-qvnYee5I/xrBY5XClUlOASIOdoTbnFGNI6+ViKqdoErF2xKmhysXcmxlJNzQFNDK0muTfjvJMZcFyEielARk7g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - dev: false - - /@opentelemetry/propagator-aws-xray/1.2.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-xGPBHXwMvrFuRUfyWj6HEUuQX/QSblN3pcGila/wX01/9KYO5TgFvwKOqR9uxLqvS1s/NaF8J1afsieYCGp7Tg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-aws-xray/1.3.1_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-6fDMzFlt5r6VWv7MUd0eOpglXPFqykW8CnOuUxJ1VZyLy6mV1bzBlzpsqEmhx1bjvZYvH93vhGkQZqrm95mlrQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-b3/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-WFcn98075QPc2zE1obhKydJHUehI5/HuLoelPEVwATj+487hjCwjHj9r2fgmQkWpvuNSB7CJaA0ys6qqq1N6lg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-b3/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-v7y5IBOKBm0vP3yf0DHzlw4L2gL6tZ0KeeMTaxfO5IuomMffDbrGWcvYFp0Dt4LdZctTSK523rVLBB9FBHBciQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-b3/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-3ZTobj2VDIOzLsIvvYCdpw6tunxUVElPxDvog9lS49YX4hohHeD84A8u9Ns/6UYUcaN5GSoEf891lzhcBFiOLA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-jaeger/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-ugtWF7GC6X5RIJ0+iMwW2iVAGNs206CAeq8XQ8OkJRg+v0lp4H0/i+gJ4hubTT8NIL5a3IxtIrAENPLIGdLucQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-jaeger/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-dedkOoTzKg+nYoLWCMp0Im+wo+XkTRW6aXhi8VQRtMW/9SNJGOllCJSu8llToLxMDF0+6zu7OCrKkevAof2tew==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/propagator-jaeger/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-8TQSwXjBmaDx7JkxRD7hdmBmRK2RGRgzHX1ArJfJhIc5trzlVweyorzqQrXOvqVEdEg+zxUMHkL5qbGH/HDTPA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - dev: false - - /@opentelemetry/redis-common/0.35.1: - resolution: {integrity: sha512-qLXe7h9VzFLx3LaizFiUlpuohCRyvHlDW5b9synE6omHKTZr/n0EHEdmhp3GezBeAqMGI+q499Mht4SmStaSqQ==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/redis-common/0.36.1: - resolution: {integrity: sha512-YjfNEr7DK1Ymc5H0bzhmqVvMcCs+PUEUerzrpTFdHfZxj3HpnnjZTIFKx/gxiL/sajQ8dxycjlreoYTVYKBXlw==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/resource-detector-alibaba-cloud/0.28.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-VuJXc+oDQ/SYRHBCQbEshl0WJtEMvgfSkTDBq+WSxj6y9sKe0HCt55Sxeb5nLmBdtCYWMQFniHe2K4GLSjDZVw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/resource-detector-aws/1.3.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-hFJ19yFwChqGCv1uMkXtjZU9BG8GcChe8cRCAkGWg1RZADse5S2ausf3D8pYw1cR3ktJtuAmRrGZniT6TDUPDw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/resource-detector-container/0.3.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-psxtzQakVuZKFl/ukn+nPW4Ixn+KPHGsWJMYKndmXrsgdFri78X+MHR0wLOO41Zn79sc35DiSk+GdJ24cCylbg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/resource-detector-gcp/0.29.6_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-cx03fXPknmiVW0hpWAJr0Nr8xwkwRB8VNWPvNrmP7UzJ8eEztY9lHnVke4ZVFaVGvm/4EFxk2y5hPNggbIezoA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - gcp-metadata: 6.1.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@opentelemetry/resource-detector-gcp/0.29.6_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-cx03fXPknmiVW0hpWAJr0Nr8xwkwRB8VNWPvNrmP7UzJ8eEztY9lHnVke4ZVFaVGvm/4EFxk2y5hPNggbIezoA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - gcp-metadata: 6.1.0_supports-color@9.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@opentelemetry/resources/0.25.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-O46u53vDBlxCML8O9dIjsRcCC2VT5ri1upwhp02ITobgJ16aVD/iScCo1lPl/x2E7yq9uwzMINENiiYZRFb6XA==} - engines: {node: '>=8.0.0'} - peerDependencies: - '@opentelemetry/api': ^1.0.2 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 0.25.0 - dev: false - - /@opentelemetry/resources/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-gunMKXG0hJrR0LXrqh7BVbziA/+iJBL3ZbXCXO64uY+SrExkwoyJkpiq9l5ismkGF/A20mDEV7tGwh+KyPw00Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.12.0 - dev: false - - /@opentelemetry/resources/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-RgxvKuuMOf7nctOeOvpDjt2BpZvZGr9Y0vf7eGtY5XYZPkh2p7e2qub1S2IArdBMf9kEbz0SfycqCviOu9isqg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - dev: false - - /@opentelemetry/resources/1.20.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-nOpV0vGegSq+9ze2cEDvO3BMA5pGBhmhKZiAlj+xQZjiEjPmJtdHIuBLRvptu2ahcbFJw85gIB9BYHZOvZK1JQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.20.0 - dev: false - - /@opentelemetry/resources/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-1Z86FUxPKL6zWVy2LdhueEGl9AHDJcx+bvHStxomruz6Whd02mE3lNUMjVJ+FGRoktx/xYQcxccYb03DiUP6Yw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/sdk-logs/0.46.0_b4ttzq43gtblpycwykjioqjhcq: - resolution: {integrity: sha512-Knlyk4+G72uEzNh6GRN1Fhmrj+/rkATI5/lOrevN7zRDLgp4kfyZBGGoWk7w+qQjlYvwhIIdPVxlIcipivdZIg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.8.0' + '@opentelemetry/api': '>=1.4.0 <1.9.0' '@opentelemetry/api-logs': '>=0.39.1' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.46.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/sdk-logs/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-lRcA5/qkSJuSh4ItWCddhdn/nNbVvnzM+cm9Fg1xpZUeTeozjJDBcHnmeKoOaWRnrGYBdz6UTY6bynZR9aBeAA==} + /@opentelemetry/sdk-logs/0.49.1_cwjguinjiwjm54qt6yboo3fici: + resolution: {integrity: sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.8.0' + '@opentelemetry/api': '>=1.4.0 <1.9.0' '@opentelemetry/api-logs': '>=0.39.1' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/sdk-logs/0.48.0_wj3rtarwgmsxddfed6zfae5bhe: - resolution: {integrity: sha512-lRcA5/qkSJuSh4ItWCddhdn/nNbVvnzM+cm9Fg1xpZUeTeozjJDBcHnmeKoOaWRnrGYBdz6UTY6bynZR9aBeAA==} + /@opentelemetry/sdk-logs/0.49.1_eoq5uhu4upakrvqc54cytmc6xq: + resolution: {integrity: sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.8.0' + '@opentelemetry/api': '>=1.4.0 <1.9.0' '@opentelemetry/api-logs': '>=0.39.1' dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 dev: false - /@opentelemetry/sdk-metrics-base/0.25.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-7fwPlAFB5Xw8mnVQfq0wqKNw3RXiAMad9T1bk5Sza9LK/L6hz8RTuHWCsFMsj+1OOSAaiPFuUMYrK1J75+2IAg==} - engines: {node: '>=8.0.0'} - deprecated: Please use @opentelemetry/sdk-metrics + /@opentelemetry/sdk-metrics/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-k6iIx6H3TZ+BVMr2z8M16ri2OxWaljg5h8ihGJxi/KQWcjign6FEaEzuigXt5bK9wVEhqAcWLCfarSftaNWkkg==} + engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.2 + '@opentelemetry/api': '>=1.3.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-metrics': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/core': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 0.25.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 lodash.merge: 4.6.2 dev: false - /@opentelemetry/sdk-metrics/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-zOy88Jfk88eTxqu+9ypHLs184dGydJocSWtvWMY10QKVVaxhC3SLKa0uxI/zBtD9S+x0LP65wxrTSfSoUNtCOA==} + /@opentelemetry/sdk-node/0.49.1_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-feBIT85ndiSHXsQ2gfGpXC/sNeX4GCHLksC4A9s/bfpUbbgbCSl0RvzZlmEpCHarNrkZMwFRi4H0xFfgvJEjrg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' + '@opentelemetry/api': '>=1.3.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - lodash.merge: 4.6.2 - dev: false - - /@opentelemetry/sdk-metrics/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-FiMii40zr0Fmys4F1i8gmuCvbinBnBsDeGBr4FQemOf0iPCLytYQm5AZJ/nn4xSc71IgKBQwTFQRAGJI7JvZ4Q==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - lodash.merge: 4.6.2 - dev: false - - /@opentelemetry/sdk-metrics/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-on1jTzIHc5DyWhRP+xpf+zrgrREXcHBH4EDAfaB5mIG7TWpKxNXooQ1JCylaPsswZUv4wGnVTinr4HrBdGARAQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - lodash.merge: 4.6.2 - dev: false - - /@opentelemetry/sdk-node/0.38.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-L91SSwq5Et9348ONtQGEimSAEKaqgJxoScRgh7OB/7OlIG0Q6l/pyIGULXtZkAlMMkiWdQOiYFkLV+0LLZr+JA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-jaeger': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-grpc': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-zipkin': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.38.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-metrics': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-grpc': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-proto': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-zipkin': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_cwjguinjiwjm54qt6yboo3fici + '@opentelemetry/sdk-metrics': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-node': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/sdk-node/0.46.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-BQhzdCRZXchhKjZaFkgxlgoowjOt/QXekJ1CZgfvFO9Yg5GV15LyJFUEyQkDyD8XbshGo3Cnj0WZMBnDWtWY1A==} + /@opentelemetry/sdk-node/0.49.1_qeb7ibvqeyc6czmc3mcy7fziia: + resolution: {integrity: sha512-feBIT85ndiSHXsQ2gfGpXC/sNeX4GCHLksC4A9s/bfpUbbgbCSl0RvzZlmEpCHarNrkZMwFRi4H0xFfgvJEjrg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' + '@opentelemetry/api': '>=1.3.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.46.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-grpc': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-zipkin': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.46.0_b4ttzq43gtblpycwykjioqjhcq - '@opentelemetry/sdk-metrics': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-grpc': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-http': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-trace-otlp-proto': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/exporter-zipkin': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.49.1_qeb7ibvqeyc6czmc3mcy7fziia + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-logs': 0.49.1_cwjguinjiwjm54qt6yboo3fici + '@opentelemetry/sdk-metrics': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-node': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/sdk-node/0.46.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-BQhzdCRZXchhKjZaFkgxlgoowjOt/QXekJ1CZgfvFO9Yg5GV15LyJFUEyQkDyD8XbshGo3Cnj0WZMBnDWtWY1A==} + /@opentelemetry/sdk-trace-base/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.46.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-grpc': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.46.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-zipkin': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.46.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.46.0_b4ttzq43gtblpycwykjioqjhcq - '@opentelemetry/sdk-metrics': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - transitivePeerDependencies: - - supports-color + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/resources': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 dev: false - /@opentelemetry/sdk-node/0.48.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-3o3GS6t+VLGVFCV5bqfGOcWIgOdkR/UE6Qz7hHksP5PXrVBeYsPqts7cPma5YXweaI3r3h26mydg9PqQIcqksg==} + /@opentelemetry/sdk-trace-node/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-gTGquNz7ue8uMeiWPwp3CU321OstQ84r7PCDtOaCicjbJxzvO8RZMlEC4geOipTeiF88kss5n6w+//A0MhP1lQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-grpc': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-zipkin': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_wj3rtarwgmsxddfed6zfae5bhe - '@opentelemetry/sdk-metrics': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/sdk-node/0.48.0_rr4fxqkzz7nhz3auplkqn4p6em: - resolution: {integrity: sha512-3o3GS6t+VLGVFCV5bqfGOcWIgOdkR/UE6Qz7hHksP5PXrVBeYsPqts7cPma5YXweaI3r3h26mydg9PqQIcqksg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.48.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-grpc': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-http': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.48.0_@opentelemetry+api@1.7.0 - '@opentelemetry/exporter-zipkin': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-logs': 0.48.0_wj3rtarwgmsxddfed6zfae5bhe - '@opentelemetry/sdk-metrics': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-node': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@opentelemetry/sdk-trace-base/0.25.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-TInkLSF/ThM3GNVM+9tgnCVjyNLnRxvAkG585Fhu0HNwaEtCTUwI0r7AvMRIREOreeRWttBG6kvT0LOKdo8yjw==} - engines: {node: '>=8.0.0'} - peerDependencies: - '@opentelemetry/api': ^1.0.2 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 0.25.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 0.25.0 - lodash.merge: 4.6.2 - dev: false - - /@opentelemetry/sdk-trace-base/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-pfCOB3tNDlYVoWuz4D7Ji+Jmy9MHnATWHVpkERdCEiwUGEZ+4IvNPXUcPc37wJVmMpjGLeaWgPPrie0KIpWf1A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.12.0 - dev: false - - /@opentelemetry/sdk-trace-base/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-+IRvUm+huJn2KqfFW3yW/cjvRwJ8Q7FzYHoUNx5Fr0Lws0LxjMJG1uVB8HDpLwm7mg5XXH2M5MF+0jj5cM8BpQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.19.0 - dev: false - - /@opentelemetry/sdk-trace-base/1.20.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-BAIZ0hUgnhdb3OBQjn1FKGz/Iwie4l+uOMKklP7FGh7PTqEAbbzDNMJKaZQh6KepF7Fq+CZDRKslD3yrYy2Tzw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.20.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.20.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.20.0 - dev: false - - /@opentelemetry/sdk-trace-base/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-yrElGX5Fv0umzp8Nxpta/XqU71+jCAyaLk34GmBzNcrW43nqbrqvdPs4gj4MVy/HcTjr6hifCDCYA3rMkajxxA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/resources': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/sdk-trace-node/1.12.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-PxpDemnNZLLeFNLAu95/K3QubjlaScXVjVQPlwPui65VRxIvxGVysnN7DFfsref+qoh1hI6nlrYSij43vxdm2w==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-b3': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-jaeger': 1.12.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/context-async-hooks': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/propagator-b3': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/propagator-jaeger': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 semver: 7.5.4 dev: false - /@opentelemetry/sdk-trace-node/1.19.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-TCiEq/cUjM15RFqBRwWomTVbOqzndWL4ILa7ZCu0zbjU1/XY6AgHkgrgAc7vGP6TjRqH4Xryuglol8tcIfbBUQ==} + /@opentelemetry/sdk-trace-web/1.22.0_@opentelemetry+api@1.8.0: + resolution: {integrity: sha512-id5bUhWYg475xbm4hjwWA4PnWM4duNK1EyFRkZxa3BZNuCITwiKCLvDkVhlE9RK2kvuDOPmcRxgSbU1apF9/1w==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' + '@opentelemetry/api': '>=1.0.0 <1.9.0' dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/core': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-b3': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-jaeger': 1.19.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.19.0_@opentelemetry+api@1.7.0 - semver: 7.5.4 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 dev: false - /@opentelemetry/sdk-trace-node/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-1pdm8jnqs+LuJ0Bvx6sNL28EhC8Rv7NYV8rnoXq3GIQo7uOHBDAFSj7makAfbakrla7ecO1FRfI8emnR4WvhYA==} + /@opentelemetry/semantic-conventions/1.22.0: + resolution: {integrity: sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==} engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-b3': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/propagator-jaeger': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - semver: 7.5.4 - dev: false - - /@opentelemetry/sdk-trace-web/1.21.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-MxkmY/UNXkDiZj7JUu5T7wWt8Ai4NJEwSjGoQQ9YLvgLUIivvaIo9Mne+Q+KLOUG2v/uhivz3qzxbCODVa0c1A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.8.0' - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/semantic-conventions': 1.21.0 - dev: false - - /@opentelemetry/semantic-conventions/0.25.0: - resolution: {integrity: sha512-V3N+MDBiv0TUlorbgiSqk6CvcP876CYUk/41Tg6s8OIyvniTwprE6vPvFQayuABiVkGlHOxv1Mlvp0w4qNdnVg==} - engines: {node: '>=8.0.0'} - dev: false - - /@opentelemetry/semantic-conventions/1.12.0: - resolution: {integrity: sha512-hO+bdeGOlJwqowUBoZF5LyP3ORUFOP1G0GRv8N45W/cztXbT2ZEXaAzfokRS9Xc9FWmYrDj32mF6SzH6wuoIyA==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/semantic-conventions/1.19.0: - resolution: {integrity: sha512-14jRpC8f5c0gPSwoZ7SbEJni1PqI+AhAE8m1bMz6v+RPM4OlP1PT2UHBJj5Qh/ALLPjhVU/aZUK3YyjTUqqQVg==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/semantic-conventions/1.20.0: - resolution: {integrity: sha512-3zLJJCgTKYpbqFX8drl8hOCHtdchELC+kGqlVcV4mHW1DiElTtv1Nt9EKBptTd1IfL56QkuYnWJ3DeHd2Gtu/A==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/semantic-conventions/1.21.0: - resolution: {integrity: sha512-lkC8kZYntxVKr7b8xmjCVUgE0a8xgDakPyDo9uSWavXPyYqLgYYGdEd2j8NxihRyb6UwpX3G/hFUF4/9q2V+/g==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/semantic-conventions/1.9.1: - resolution: {integrity: sha512-oPQdbFDmZvjXk5ZDoBGXG8B4tSB/qW5vQunJWQMFUBp7Xe8O1ByPANueJ+Jzg58esEBegyyxZ7LRmfJr7kFcFg==} - engines: {node: '>=14'} - dev: false - - /@opentelemetry/sql-common/0.40.0_@opentelemetry+api@1.7.0: - resolution: {integrity: sha512-vSqRJYUPJVjMFQpYkQS3ruexCPSZJ8esne3LazLwtCPaPRvzZ7WG3tX44RouAn7w4wMp8orKguBqtt+ng2UTnw==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.1.0 - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 dev: false /@peculiar/asn1-schema/2.3.6: @@ -12308,45 +8269,6 @@ packages: fsevents: 2.3.2 dev: true - /@pmmmwh/react-refresh-webpack-plugin/0.5.10_2kpgiq4mtlettjqmb64nc4esa4: - resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <4.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.30.2 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.3.3 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 3.3.0 - source-map: 0.7.4 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - /@pnpm/config.env-replace/1.1.0: resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -12394,12 +8316,12 @@ packages: resolution: {integrity: sha512-vJTdY4la/5V3N7SFvWRmSMUh4mIQnyb/MNoDjzVbh9iLmEC+uEykj/1GPviVsorvfz7DbYSQC4RiwmlEpTEvGA==} requiresBuild: true - /@prisma/instrumentation/5.9.1: - resolution: {integrity: sha512-1CKIuxeKTOGh9ENhWxdtJkJZwe6gQ1BbYG8p1nkiIeE+DpFnbMlrE9VHHyx/w3YUKzZ6yt3nOX9EXKrudlWJug==} + /@prisma/instrumentation/5.11.0: + resolution: {integrity: sha512-ou4nvDpNEY6+t3Dn9juOTz6tK33D0Y4XXkEZ2uPd8KH6Mqmc+4LYOOm470DP7noj7dyJjuGiM+wpPk//HKrcDg==} dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.47.0_@opentelemetry+api@1.7.0 - '@opentelemetry/sdk-trace-base': 1.20.0_@opentelemetry+api@1.7.0 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.49.1_@opentelemetry+api@1.8.0 + '@opentelemetry/sdk-trace-base': 1.22.0_@opentelemetry+api@1.8.0 transitivePeerDependencies: - supports-color dev: false @@ -12461,7 +8383,7 @@ packages: '@babel/runtime': 7.22.5 dev: false - /@radix-ui/react-alert-dialog/1.0.4_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-alert-dialog/1.0.4_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-jbfBCRlKYlhbitueOAv7z74PXYeIQmWpKwm3jllsdkw7fGWNkxqP3v0nY9WmOzcPqpQuoorNtvViBgL46n5gVg==} peerDependencies: '@types/react': '*' @@ -12476,12 +8398,12 @@ packages: dependencies: '@babel/runtime': 7.20.7 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-dialog': 1.0.4_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-slot': 1.0.2_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-dialog': 1.0.4_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-slot': 1.0.2_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -12514,7 +8436,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-collection/1.0.3_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-collection/1.0.3_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -12528,11 +8450,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-slot': 1.0.2_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-slot': 1.0.2_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -12547,7 +8469,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-compose-refs/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-compose-refs/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -12557,7 +8479,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -12570,7 +8492,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-context/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-context/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -12580,11 +8502,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false - /@radix-ui/react-dialog/1.0.3_bwbutfx4xj25dewzmxso6o3wga: + /@radix-ui/react-dialog/1.0.3_wbloxta2elt74wf76z3lmnnzzq: resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -12606,12 +8528,12 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-remove-scroll: 2.5.5_e74vmjybjy5dsfplslbsgtbvvi + react-remove-scroll: 2.5.5_4aprenwzvd25d3zno6rr4bqbqq transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-dialog/1.0.4_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-dialog/1.0.4_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} peerDependencies: '@types/react': '*' @@ -12626,23 +8548,23 @@ packages: dependencies: '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-dismissable-layer': 1.0.4_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-focus-guards': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-focus-scope': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-id': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-portal': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-presence': 1.0.1_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-slot': 1.0.2_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-controllable-state': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-dismissable-layer': 1.0.4_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-focus-guards': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-focus-scope': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-id': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-portal': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-presence': 1.0.1_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-slot': 1.0.2_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-controllable-state': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-remove-scroll: 2.5.5_e74vmjybjy5dsfplslbsgtbvvi + react-remove-scroll: 2.5.5_4aprenwzvd25d3zno6rr4bqbqq dev: false /@radix-ui/react-direction/1.0.0_react@18.2.0: @@ -12654,7 +8576,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-direction/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-direction/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -12664,7 +8586,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -12684,7 +8606,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-dismissable-layer/1.0.4_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-dismissable-layer/1.0.4_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -12699,11 +8621,11 @@ packages: dependencies: '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-use-callback-ref': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-escape-keydown': 1.0.3_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-use-callback-ref': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-escape-keydown': 1.0.3_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -12718,7 +8640,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-focus-guards/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-focus-guards/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -12728,7 +8650,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -12746,7 +8668,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-focus-scope/1.0.3_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-focus-scope/1.0.3_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -12760,10 +8682,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-use-callback-ref': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-use-callback-ref': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -12779,7 +8701,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-id/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-id/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -12789,8 +8711,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-use-layout-effect': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-use-layout-effect': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -12806,7 +8728,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-popover/1.0.5_bwbutfx4xj25dewzmxso6o3wga: + /@radix-ui/react-popover/1.0.5_wbloxta2elt74wf76z3lmnnzzq: resolution: {integrity: sha512-GRHZ8yD12MrN2NLobHPE8Rb5uHTxd9x372DE9PPNnBjpczAQHcZ5ne0KXG4xpf+RDdXSzdLv9ym6mYJCDTaUZg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -12820,7 +8742,7 @@ packages: '@radix-ui/react-focus-guards': 1.0.0_react@18.2.0 '@radix-ui/react-focus-scope': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-id': 1.0.0_react@18.2.0 - '@radix-ui/react-popper': 1.1.1_bwbutfx4xj25dewzmxso6o3wga + '@radix-ui/react-popper': 1.1.1_wbloxta2elt74wf76z3lmnnzzq '@radix-ui/react-portal': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-presence': 1.0.0_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-primitive': 1.0.2_biqbaboplfbrettd7655fr4n2y @@ -12829,19 +8751,19 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-remove-scroll: 2.5.5_e74vmjybjy5dsfplslbsgtbvvi + react-remove-scroll: 2.5.5_4aprenwzvd25d3zno6rr4bqbqq transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-popper/1.1.1_bwbutfx4xj25dewzmxso6o3wga: + /@radix-ui/react-popper/1.1.1_wbloxta2elt74wf76z3lmnnzzq: resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.22.5 - '@floating-ui/react-dom': 0.7.2_bwbutfx4xj25dewzmxso6o3wga + '@floating-ui/react-dom': 0.7.2_wbloxta2elt74wf76z3lmnnzzq '@radix-ui/react-arrow': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 '@radix-ui/react-context': 1.0.0_react@18.2.0 @@ -12869,7 +8791,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-portal/1.0.3_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-portal/1.0.3_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -12883,8 +8805,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@types/react': 18.2.17 + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -12903,7 +8825,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-presence/1.0.1_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-presence/1.0.1_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -12917,9 +8839,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-layout-effect': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-layout-effect': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -12937,7 +8859,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-primitive/1.0.3_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-primitive/1.0.3_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -12951,14 +8873,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-slot': 1.0.2_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-slot': 1.0.2_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-radio-group/1.1.3_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-radio-group/1.1.3_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} peerDependencies: '@types/react': '*' @@ -12973,16 +8895,16 @@ packages: dependencies: '@babel/runtime': 7.20.7 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-direction': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-presence': 1.0.1_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-roving-focus': 1.0.4_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-use-controllable-state': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-previous': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-size': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-direction': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-presence': 1.0.1_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-roving-focus': 1.0.4_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-use-controllable-state': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-previous': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-size': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -13008,7 +8930,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-roving-focus/1.0.4_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-roving-focus/1.0.4_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -13023,21 +8945,21 @@ packages: dependencies: '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-direction': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-id': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-use-callback-ref': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-controllable-state': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-collection': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-direction': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-id': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-use-callback-ref': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-controllable-state': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-select/1.2.1_bwbutfx4xj25dewzmxso6o3wga: + /@radix-ui/react-select/1.2.1_wbloxta2elt74wf76z3lmnnzzq: resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -13054,7 +8976,7 @@ packages: '@radix-ui/react-focus-guards': 1.0.0_react@18.2.0 '@radix-ui/react-focus-scope': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-id': 1.0.0_react@18.2.0 - '@radix-ui/react-popper': 1.1.1_bwbutfx4xj25dewzmxso6o3wga + '@radix-ui/react-popper': 1.1.1_wbloxta2elt74wf76z3lmnnzzq '@radix-ui/react-portal': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-primitive': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-slot': 1.0.1_react@18.2.0 @@ -13066,12 +8988,12 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-remove-scroll: 2.5.5_e74vmjybjy5dsfplslbsgtbvvi + react-remove-scroll: 2.5.5_4aprenwzvd25d3zno6rr4bqbqq transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-slider/1.1.2_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-slider/1.1.2_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} peerDependencies: '@types/react': '*' @@ -13087,16 +9009,16 @@ packages: '@babel/runtime': 7.22.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-direction': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-use-controllable-state': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-layout-effect': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-previous': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-size': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-collection': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-direction': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-use-controllable-state': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-layout-effect': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-previous': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-size': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -13122,7 +9044,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-slot/1.0.2_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-slot/1.0.2_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -13132,12 +9054,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 react: 18.2.0 dev: false - /@radix-ui/react-switch/1.0.3_daadhm4ohxobgnrt365as5bhny: + /@radix-ui/react-switch/1.0.3_rsjtvpp4i2x3g4jl4aduajkofi: resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: '@types/react': '*' @@ -13152,13 +9074,13 @@ packages: dependencies: '@babel/runtime': 7.20.7 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-context': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-primitive': 1.0.3_daadhm4ohxobgnrt365as5bhny - '@radix-ui/react-use-controllable-state': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-previous': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@radix-ui/react-use-size': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-compose-refs': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-context': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-primitive': 1.0.3_rsjtvpp4i2x3g4jl4aduajkofi + '@radix-ui/react-use-controllable-state': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-previous': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@radix-ui/react-use-size': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -13183,7 +9105,7 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@radix-ui/react-tooltip/1.0.5_bwbutfx4xj25dewzmxso6o3wga: + /@radix-ui/react-tooltip/1.0.5_wbloxta2elt74wf76z3lmnnzzq: resolution: {integrity: sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -13195,7 +9117,7 @@ packages: '@radix-ui/react-context': 1.0.0_react@18.2.0 '@radix-ui/react-dismissable-layer': 1.0.3_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-id': 1.0.0_react@18.2.0 - '@radix-ui/react-popper': 1.1.1_bwbutfx4xj25dewzmxso6o3wga + '@radix-ui/react-popper': 1.1.1_wbloxta2elt74wf76z3lmnnzzq '@radix-ui/react-portal': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-presence': 1.0.0_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-primitive': 1.0.2_biqbaboplfbrettd7655fr4n2y @@ -13217,7 +9139,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-callback-ref/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-use-callback-ref/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -13227,7 +9149,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -13241,7 +9163,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-use-controllable-state/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -13251,8 +9173,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-use-callback-ref': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-use-callback-ref': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -13266,7 +9188,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown/1.0.3_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-use-escape-keydown/1.0.3_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -13276,8 +9198,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-use-callback-ref': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-use-callback-ref': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -13290,7 +9212,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-use-layout-effect/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -13300,7 +9222,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -13313,7 +9235,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-previous/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-use-previous/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' @@ -13323,7 +9245,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -13347,7 +9269,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-size/1.0.1_e74vmjybjy5dsfplslbsgtbvvi: + /@radix-ui/react-use-size/1.0.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -13357,8 +9279,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.5 - '@radix-ui/react-use-layout-effect': 1.0.1_e74vmjybjy5dsfplslbsgtbvvi - '@types/react': 18.2.17 + '@radix-ui/react-use-layout-effect': 1.0.1_4aprenwzvd25d3zno6rr4bqbqq + '@types/react': 18.2.69 react: 18.2.0 dev: false @@ -15470,6 +11392,21 @@ packages: engines: {node: '>=14.16'} dev: false + /@sindresorhus/slugify/2.2.1: + resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} + engines: {node: '>=12'} + dependencies: + '@sindresorhus/transliterate': 1.6.0 + escape-string-regexp: 5.0.0 + dev: false + + /@sindresorhus/transliterate/1.6.0: + resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: false + /@sinonjs/commons/3.0.0: resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: @@ -15880,1351 +11817,6 @@ packages: resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} dev: false - /@storybook/addon-actions/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-xEO/Ekj6m6p1l4CXGh75BNBD/sqF7TqnUA/f2T3UCtLf9xVMoGEczxNi28iZq2RHoIAaV2aKArqjM+qTwoLjZw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - dequal: 2.0.3 - lodash: 4.17.21 - polished: 4.2.2 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-inspector: 6.0.1_react@18.2.0 - telejson: 7.1.0 - ts-dedent: 2.2.0 - uuid: 9.0.0 - dev: true - - /@storybook/addon-backgrounds/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-95ZyTrzsW3ii7iJAgRh6Tiykg9vw0zK7ZzPi7+jMXV3F1MjX5GNnXzhtlb3b0GpTZacmLzdWhKexukZtbki/6Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-controls/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-KEFffKNh7BNnY2+xKUC4BlOudjA+yzFa9zGHUSGz2JB3Lplyd1hV5fX7Qnqp5Wk1SFeQ/5BiEOfhopJpuN/0ow==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/blocks': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.0.9 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/node-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/addon-docs/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-zgg4sq34Zz8TN74+kSogxRHsIZ5gsIazJpa0osZp91nJQvsKUEfldjBtQWbBWzjVCrWmzOhW5/RLCnmCNm9y/w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.21.8 - '@jest/transform': 29.5.0 - '@mdx-js/react': 2.3.0_react@18.2.0 - '@storybook/blocks': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/client-logger': 7.0.12 - '@storybook/components': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/csf-plugin': 7.0.12 - '@storybook/csf-tools': 7.0.12 - '@storybook/global': 5.0.0 - '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.0.12 - '@storybook/postinstall': 7.0.12 - '@storybook/preview-api': 7.0.12 - '@storybook/react-dom-shim': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/theming': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.12 - fs-extra: 11.1.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - remark-external-links: 8.0.0 - remark-slug: 6.1.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/addon-docs/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-jUJogghXpwZR8dMyFL3fmQIJUC9fTNO2ywp3wDSwuXT0OUtvWigu8Ny0l35AoPng+wCYS7wY7dZNf/RZKAfm7Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/core': 7.22.17 - '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.22.17 - '@jest/transform': 29.6.2 - '@mdx-js/react': 2.3.0_react@18.2.0 - '@storybook/blocks': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/csf-plugin': 7.0.9 - '@storybook/csf-tools': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/mdx2-csf': 1.1.0 - '@storybook/node-logger': 7.0.9 - '@storybook/postinstall': 7.0.9 - '@storybook/preview-api': 7.0.9 - '@storybook/react-dom-shim': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - fs-extra: 11.1.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - remark-external-links: 8.0.0 - remark-slug: 6.1.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/addon-essentials/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-XNZpFA1K2PLV4NdS99tpD6+L4yeLYMFeBuxI7u7dJo1kT0z5fDF+nZltEcnghDlZiWPsI2XvGaHsdS7AjLswcA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/addon-actions': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-backgrounds': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-controls': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-docs': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-highlight': 7.0.9 - '@storybook/addon-measure': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-outline': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-toolbars': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/addon-viewport': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.0.9 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/node-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/addon-highlight/7.0.9: - resolution: {integrity: sha512-gYMMkg/UXBdsFbHvbGZopaeuiefqKuVo+W6Eqjm5wxaSMvpSZFwbMXoKuACewLB0ByDUrSSZ3EewWR22ymbt8Q==} - dependencies: - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.9 - dev: true - - /@storybook/addon-interactions/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-LM4qMt+PwRnip8uXxoNvBDI4X8ykFlWHxN5RW836ysMhwGXx4l00LAdGy6l6HswIwCdHlo7+u4hgdNiEh55oxg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 7.0.9 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - jest-mock: 27.5.1 - polished: 4.2.2 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/addon-links/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-boWXtXgGJSDnnTARA2CHyb8dyGGLl8M8NBUvTC9DVJp5haIjfROF3zc9Pxar/SiTaZV3crHu3vnhJ7FyihS0cA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/router': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-measure/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-URaWN6tTbFuJDsFX8eGPAObNTdv3UyNE+h8ZxZSo/8W21dlfdmDk8voCkBxpKjPijvwOQAJg7tMlL+8Pt1fCvw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/types': 7.0.9 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/addon-outline/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-evcvgZMMMOKUyDnuNqfUddK1TUCv9/2VLa1DEt/GPY3vSvomWvN0sWt54aNxbJkciGhNdUGbkGn38YZHO9MTVQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/types': 7.0.9 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/addon-styling/1.0.6_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-OHs6Yj04TjyFQ+1NQrMBxf+5tCEMDWGvkztB1XQf0+hNqNDRsoRvDkeXeS462RHCt3ffSYUi5leUvotmDYno6g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/node-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - css-loader: 6.10.0 - less-loader: 11.1.0 - postcss-loader: 7.3.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - resolve-url-loader: 5.0.0 - sass-loader: 13.2.2 - style-loader: 3.3.4 - transitivePeerDependencies: - - '@rspack/core' - - fibers - - less - - node-sass - - postcss - - sass - - sass-embedded - - webpack - dev: true - - /@storybook/addon-toolbars/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-zipiWCsxe0L9sSLIVtvU2vkbjjePKxqHW9d2DnJm+EXKwJfJxqIIjdZx3MU6lCV8wdCqkTGKR2lMXH7G4NzuAA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/addon-viewport/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-zSR2lbuvyzzrv7XwzRqEX+PFgqHZm+kt2QCgMFXY27YpRAWM6Vh8soeq1j4dq+KCZiQcYOiEJj8XQgcmd2QAPg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - memoizerific: 1.11.3 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/addons/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-WxjURCJW2sNktYWgANqi/pzmRWTfFyB66mCTZNnhwagmbRkR7ifevUUqTX2cm5dgWSEoqYhVk91MQuEpBE3NoQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/types': 7.0.9 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/api/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-CbQ2YyWwYIVkHzj7RLusqgGWdQO8Q5GnUVdxsv7yoqe8ZKdCjOhexWLUWQDcpRKZXAxoEH+iGopzt6sISC5imQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/blocks/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-MbJKjuTJ7xVbkUVwkEwb6vTYGrkRk4+Xtx1UGo+512o91ubqFs8hXwCHP+x/49RCIIQs5zl93Ig8fTtm+MejWw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/channels': 7.0.12 - '@storybook/client-logger': 7.0.12 - '@storybook/components': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.12 - '@storybook/csf': 0.1.0 - '@storybook/docs-tools': 7.0.12 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.12 - '@storybook/theming': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.12 - '@types/lodash': 4.14.191 - color-convert: 2.0.1 - dequal: 2.0.3 - lodash: 4.17.21 - markdown-to-jsx: 7.2.0_react@18.2.0 - memoizerific: 1.11.3 - polished: 4.2.2 - react: 18.2.0 - react-colorful: 5.6.1_biqbaboplfbrettd7655fr4n2y - react-dom: 18.2.0_react@18.2.0 - telejson: 7.1.0 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/blocks/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-Mk0sMYvpKy0S+nmxl3QUzf7uqYTrYv9y06D+Ii4Se1Czmwo2+a7ABjmLIzAKQbdBx7ZqUCxW48Ip+X9vQHL/Iw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/channels': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-events': 7.0.9 - '@storybook/csf': 0.1.0 - '@storybook/docs-tools': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/preview-api': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - '@types/lodash': 4.14.191 - color-convert: 2.0.1 - dequal: 2.0.3 - lodash: 4.17.21 - markdown-to-jsx: 7.2.0_react@18.2.0 - memoizerific: 1.11.3 - polished: 4.2.2 - react: 18.2.0 - react-colorful: 5.6.1_biqbaboplfbrettd7655fr4n2y - react-dom: 18.2.0_react@18.2.0 - telejson: 7.1.0 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/builder-manager/7.0.9: - resolution: {integrity: sha512-7yGEQsJgUZzuOuatE987e/VlB75THoNvsZn1TxbLDsrt6NgyFF+bxypon4rzmNhtCnoW77yC/1hXQTZuOqeHLQ==} - dependencies: - '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.0.9 - '@storybook/manager': 7.0.9 - '@storybook/node-logger': 7.0.9 - '@types/ejs': 3.1.2 - '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15_esbuild@0.17.19 - browser-assert: 1.2.1 - ejs: 3.1.8 - esbuild: 0.17.19 - esbuild-plugin-alias: 0.2.1 - express: 4.18.2 - find-cache-dir: 3.3.2 - fs-extra: 11.1.0 - process: 0.11.10 - util: 0.12.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/builder-webpack5/7.0.9_eunppc2ebbpop5kss6ctsxsd44: - resolution: {integrity: sha512-a2482TEsk3K+FKC0rma3Z6oOvedUMXMCLrPJ5Zxl5BbtK8kAjJhlAxCZVNiKqckFW3CoN4v3zdOGs96I1mORLA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.22.17 - '@storybook/addons': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/channel-postmessage': 7.0.9 - '@storybook/channel-websocket': 7.0.9 - '@storybook/channels': 7.0.9 - '@storybook/client-api': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/components': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/core-common': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/core-webpack': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/node-logger': 7.0.9 - '@storybook/preview': 7.0.9 - '@storybook/preview-api': 7.0.9 - '@storybook/router': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/store': 7.0.9 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@types/node': 16.18.11 - '@types/semver': 7.3.13 - babel-loader: 9.1.3_m7zg4tehf4iagxalhjjv66vmni - babel-plugin-named-exports-order: 0.0.2 - browser-assert: 1.2.1 - case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.10.0_webpack@5.88.2 - express: 4.18.2 - fork-ts-checker-webpack-plugin: 7.3.0_dtthwp2bsqb7yvb7hoeealjg4i - fs-extra: 11.1.0 - html-webpack-plugin: 5.5.1_webpack@5.88.2 - path-browserify: 1.0.1 - process: 0.11.10 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - semver: 7.5.4 - style-loader: 3.3.4_webpack@5.88.2 - terser-webpack-plugin: 5.3.7_nww33inhqu3uc3cp573wawoccu - ts-dedent: 2.2.0 - typescript: 5.2.2 - util: 0.12.5 - util-deprecate: 1.0.2 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - webpack-dev-middleware: 5.3.3_webpack@5.88.2 - webpack-hot-middleware: 2.25.3 - webpack-virtual-modules: 0.4.6 - transitivePeerDependencies: - - '@rspack/core' - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - vue-template-compiler - - webpack-cli - dev: true - - /@storybook/channel-postmessage/7.0.12: - resolution: {integrity: sha512-Tc7kQZ5yxlZ44Nmmzec92JaDJ6UZ3Ze4cBfiHik4XcnM1PtN8hr8VFoC6a2AIm1ybfIRenfT5w9TH5yriiPIhw==} - dependencies: - '@storybook/channels': 7.0.12 - '@storybook/client-logger': 7.0.12 - '@storybook/core-events': 7.0.12 - '@storybook/global': 5.0.0 - qs: 6.11.0 - telejson: 7.1.0 - dev: true - - /@storybook/channel-postmessage/7.0.9: - resolution: {integrity: sha512-6zsUPlsD3GVhKNq4UZ5MePJPjiMcPs/K02mH5/uVTN2JSgLdWgbLhZ4VYit4HgwE+d98bd9zWbgNgSOXpTArag==} - dependencies: - '@storybook/channels': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - qs: 6.11.0 - telejson: 7.1.0 - dev: true - - /@storybook/channel-websocket/7.0.9: - resolution: {integrity: sha512-fth6k/YSO75clM60+ermBmWSZ5lqV+9ARLp471UR0ZIAAyJ06KAguj2VOSxO0DEUd4Z/9j/3DC5ZZFHVqBPWhg==} - dependencies: - '@storybook/channels': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/global': 5.0.0 - telejson: 7.1.0 - dev: true - - /@storybook/channels/7.0.12: - resolution: {integrity: sha512-KDdDmDs8kxAJU+vndTqTNazjLO+XoIPiTRlfP7mk7cgHiQXSjMYy3JSCQ7W0of0Q+9VSl/ve9CNbnGbcQF7rNQ==} - dev: true - - /@storybook/channels/7.0.9: - resolution: {integrity: sha512-LF/Mkr0/+VOawEAospLGUcfZIPak3yV/ZjEAe/lubvLPJ6s2FFOjDUsyDIa2oM4ZE9TI6AGVN51kddVToelM8A==} - dev: true - - /@storybook/cli/7.0.9: - resolution: {integrity: sha512-x1UkqSx0kVCvt6V+QV94CivnvWWBPmi4503nB7dtGH6VBh469oWZrFA2gYzH0yl+W3IAPRmgEMTVszLxguBo/g==} - hasBin: true - dependencies: - '@babel/core': 7.22.17 - '@babel/preset-env': 7.21.5_@babel+core@7.22.17 - '@ndelangen/get-tarball': 3.0.7 - '@storybook/codemod': 7.0.9 - '@storybook/core-common': 7.0.9 - '@storybook/core-server': 7.0.9 - '@storybook/csf-tools': 7.0.9 - '@storybook/node-logger': 7.0.9 - '@storybook/telemetry': 7.0.9 - '@storybook/types': 7.0.9 - '@types/semver': 7.3.13 - boxen: 5.1.2 - chalk: 4.1.2 - commander: 6.2.1 - cross-spawn: 7.0.3 - detect-indent: 6.1.0 - envinfo: 7.8.1 - execa: 5.1.1 - express: 4.18.2 - find-up: 5.0.0 - fs-extra: 11.1.0 - get-npm-tarball-url: 2.0.3 - get-port: 5.1.1 - giget: 1.1.2 - globby: 11.1.0 - jscodeshift: 0.14.0_@babel+preset-env@7.21.5 - leven: 3.1.0 - prettier: 2.8.8 - prompts: 2.4.2 - puppeteer-core: 2.1.1 - read-pkg-up: 7.0.1 - semver: 7.5.4 - shelljs: 0.8.5 - simple-update-notifier: 1.1.0 - strip-json-comments: 3.1.1 - tempy: 1.0.1 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@storybook/client-api/7.0.9: - resolution: {integrity: sha512-H1tmFi/zmrZIwHTMlt/LkyPSbNXkWDSBKkxLBSo3FIhH2vdTVM1v8M5Jf9Pq/Tc2ARq9Vpl1R7b25xxAGSQ/lQ==} - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - dev: true - - /@storybook/client-logger/7.0.12: - resolution: {integrity: sha512-MQMtIgGEgdixvxnBvZ2m8hhc0DGJWeCpHtxg7oqBLBEBmCYFueTqDZHl4Z6SoCrK0a2YS5X/BIXOcEtP1ulMKw==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/client-logger/7.0.9: - resolution: {integrity: sha512-EJnXWvpTFEj462ixZbDouTN9X/FinRgaKKN6zXdhSSZUnm5PcZBtnoX5S+982z3LiAjdNIuAdZE/4vwBIAF88A==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - - /@storybook/codemod/7.0.9: - resolution: {integrity: sha512-ElBZj7MyUIOc4jmsPgORShqwQw7z7vtqeXsrcuVg4GoUYMCuva88+zOiHcKBnXMXYOSYAINKLHtcKD8t3PHuhA==} - dependencies: - '@babel/core': 7.21.8 - '@babel/preset-env': 7.21.5_@babel+core@7.21.8 - '@babel/types': 7.21.5 - '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.0.9 - '@storybook/node-logger': 7.0.9 - '@storybook/types': 7.0.9 - cross-spawn: 7.0.3 - globby: 11.1.0 - jscodeshift: 0.14.0_@babel+preset-env@7.21.5 - lodash: 4.17.21 - prettier: 2.8.8 - recast: 0.23.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/components/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-6TxByzYS4+LxwZRioGpP6Zh9If5ctjQs5OnR2UmQvP6HDjmMWYTntoHKIbDwAL9C6MrnQYpPOGCPkqrtODQ4/w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/client-logger': 7.0.12 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/theming': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.12 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - use-resize-observer: 9.1.0_biqbaboplfbrettd7655fr4n2y - util-deprecate: 1.0.2 - dev: true - - /@storybook/components/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-60TcZSHYjHkJ6YyheL5SQ8zWi4zmefUKzjcRdIJwMQ57PyEK0LL7wKv63xD3ePbKHTZaQaIB3yOJSF/HQ1BHcQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - use-resize-observer: 9.1.0_biqbaboplfbrettd7655fr4n2y - util-deprecate: 1.0.2 - dev: true - - /@storybook/core-client/7.0.9: - resolution: {integrity: sha512-gBZnwh+YgFVBdwyYX4SKQyjVq56WyJU3l2s5on6im2SjxKLZXFfeOpl6XtAgbP2eIU8oaV9txY2hURsUJRkEoA==} - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - dev: true - - /@storybook/core-common/7.0.12: - resolution: {integrity: sha512-PFVjYXHUxDQO1oqfqwQe7S3XoLNO0aZYEr9Zl0LiexlxxnU1v+TQjEfNd/H3T0xxpXlsgzhtEcagdzJeAKyh2g==} - dependencies: - '@storybook/node-logger': 7.0.12 - '@storybook/types': 7.0.12 - '@types/node': 16.18.11 - '@types/pretty-hrtime': 1.0.1 - chalk: 4.1.2 - esbuild: 0.17.19 - esbuild-register: 3.4.2_esbuild@0.17.19 - file-system-cache: 2.1.1 - find-up: 5.0.0 - fs-extra: 11.1.0 - glob: 8.1.0 - glob-promise: 6.0.2_glob@8.1.0 - handlebars: 4.7.7 - lazy-universal-dotenv: 4.0.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/core-common/7.0.9: - resolution: {integrity: sha512-IchifM372HCKfhqSIL9uShSNBHEGoPaDnKky3XfAz4IeI/iepFVWUtJ95znnhfRj4lzMenA6/Ng7TWWuQj5Q8w==} - dependencies: - '@storybook/node-logger': 7.0.9 - '@storybook/types': 7.0.9 - '@types/node': 16.18.11 - '@types/pretty-hrtime': 1.0.1 - chalk: 4.1.2 - esbuild: 0.17.19 - esbuild-register: 3.4.2_esbuild@0.17.19 - file-system-cache: 2.1.1 - find-up: 5.0.0 - fs-extra: 11.1.0 - glob: 8.1.0 - glob-promise: 6.0.2_glob@8.1.0 - handlebars: 4.7.7 - lazy-universal-dotenv: 4.0.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/core-events/7.0.12: - resolution: {integrity: sha512-VTmb/zjbz3o1bg+bATzLigVXMVDC/S1FP8CqIrz4mkiys52139FGzMandL2Y2AecPZPGss7ZRdfma28HKVYTRg==} - dev: true - - /@storybook/core-events/7.0.9: - resolution: {integrity: sha512-xJiyX7Gq/TgDdBv+8KbfTJ4Sc7fCMeIEUqWTtnYCHWB7Mp6Iui37+caDX3aGQRTz7FVgb7aL5QkQES9Ihc1+dg==} - dev: true - - /@storybook/core-server/7.0.9: - resolution: {integrity: sha512-cB8CX0EyneqdiE6f2Unk3p8ooFyr3dszzX8ffv+f1XVcidh98HuoUzGduqJYfLBZWjfMQIu9OuayAca9KvsOpQ==} - dependencies: - '@aw-web-design/x-default-browser': 1.4.88 - '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.0.9 - '@storybook/core-common': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.0.9 - '@storybook/docs-mdx': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/manager': 7.0.9 - '@storybook/node-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - '@storybook/telemetry': 7.0.9 - '@storybook/types': 7.0.9 - '@types/detect-port': 1.3.2 - '@types/node': 16.18.11 - '@types/node-fetch': 2.6.4 - '@types/pretty-hrtime': 1.0.1 - '@types/semver': 7.5.1 - better-opn: 2.1.1 - boxen: 5.1.2 - chalk: 4.1.2 - cli-table3: 0.6.3 - compression: 1.7.4 - detect-port: 1.5.1 - express: 4.18.2 - fs-extra: 11.1.0 - globby: 11.1.0 - ip: 2.0.0 - lodash: 4.17.21 - node-fetch: 2.6.12 - open: 8.4.0 - pretty-hrtime: 1.0.3 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - semver: 7.5.4 - serve-favicon: 2.5.0 - telejson: 7.1.0 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - watchpack: 2.4.0 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@storybook/core-webpack/7.0.9: - resolution: {integrity: sha512-rulpzpQXeQurI69sicR1C110jKQ6TR0jwonVfTgD8UvBYQm0Q4Zujv4S3YGJLwRMYLNk4DKZ/mC0DNP32K/Pjg==} - dependencies: - '@storybook/core-common': 7.0.9 - '@storybook/node-logger': 7.0.9 - '@storybook/types': 7.0.9 - '@types/node': 16.18.11 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf-plugin/7.0.12: - resolution: {integrity: sha512-iiH0ynLQV5BYFc0o7RlSJS2S3GT/ffyfbV4rnCnPKdqyo4REEVvmhOuLhwzurtsXsjh+xF6VUYUDN+8/5mbkYw==} - dependencies: - '@storybook/csf-tools': 7.0.12 - unplugin: 0.10.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf-plugin/7.0.9: - resolution: {integrity: sha512-h4VBKgd14Ep8jL+un5PtHSrCIyVBbo0h9lJpF9wgOn0MADlfCZ/LTQMaZa9bCEpiWoXwRl+QAzBg1HephjkGfw==} - dependencies: - '@storybook/csf-tools': 7.0.9 - unplugin: 0.10.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf-tools/7.0.12: - resolution: {integrity: sha512-EcDzKeENzs4awyjx0VxlONDLibiEtIPDP1XdOCcZGtv3nXXBFtS2WDsYhJHkwyvE37jWTyw2e4xKQmBi0Hjvbw==} - dependencies: - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - '@storybook/csf': 0.1.0 - '@storybook/types': 7.0.12 - fs-extra: 11.1.0 - recast: 0.23.1 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf-tools/7.0.9: - resolution: {integrity: sha512-m2qwUELMQ+mg0E4djjKw2MAnH8r97ZARO5er7KdrZRafH61ucxbVOv1zr0JzlN0TQd5PQM9Q+MsromuPY7GmvA==} - dependencies: - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - '@storybook/csf': 0.1.0 - '@storybook/types': 7.0.9 - fs-extra: 11.1.0 - recast: 0.23.1 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/csf/0.1.0: - resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} - dependencies: - type-fest: 2.19.0 - dev: true - - /@storybook/docs-mdx/0.1.0: - resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} - dev: true - - /@storybook/docs-tools/7.0.12: - resolution: {integrity: sha512-+HykeQLgjyDyF9G7HqY0FHXlX7X5YpQcmNjftJzBrc/GO1EeO0M78d54avcOPyyTfuWOh7oZtSJ0MzjA1qrqaQ==} - dependencies: - '@babel/core': 7.22.17 - '@storybook/core-common': 7.0.12 - '@storybook/preview-api': 7.0.12 - '@storybook/types': 7.0.12 - '@types/doctrine': 0.0.3 - doctrine: 3.0.0 - lodash: 4.17.21 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/docs-tools/7.0.9: - resolution: {integrity: sha512-E/4aIDDGbSReqggPDVp+TchxnwKKZ7AmODV0N0yYi/srHuunZ8SgpshF5t0EQmoy8UpxzURU1VeSoZvzVIrLQw==} - dependencies: - '@babel/core': 7.22.17 - '@storybook/core-common': 7.0.9 - '@storybook/preview-api': 7.0.9 - '@storybook/types': 7.0.9 - '@types/doctrine': 0.0.3 - doctrine: 3.0.0 - lodash: 4.17.21 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/global/5.0.0: - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - dev: true - - /@storybook/instrumenter/7.0.9: - resolution: {integrity: sha512-ly/vLeQIGbcw3RLQv4vPugvlaMah7+rsYZtwN/ocseBbsDfFBqxI7NbJNBXSTo44eTTbzQUkeOZWqf6dZzRm0Q==} - dependencies: - '@storybook/channels': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.9 - dev: true - - /@storybook/manager-api/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-3QXARtxpc6Xxqf5pviUw2UuhK53+IsINSljeWhAqdQ1Gzbywl67TpibTd7xVN6NKxhUH5Bzo9bIZTAzMZGqaKw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/channels': 7.0.12 - '@storybook/client-logger': 7.0.12 - '@storybook/core-events': 7.0.12 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/router': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/theming': 7.0.12_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.12 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - semver: 7.5.4 - store2: 2.14.2 - telejson: 7.1.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/manager-api/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-x3sbSkf1HPSTVci2N/uaRr7Hdc7dOwk4YUO37jWLi1aWeaoawgLJS6w0qWsgFNE8Yn7mSMybdvI+1IIhj69ghg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/channels': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/router': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/theming': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - semver: 7.5.4 - store2: 2.14.2 - telejson: 7.1.0 - ts-dedent: 2.2.0 - dev: true - - /@storybook/manager/7.0.9: - resolution: {integrity: sha512-fyUb9DhTCnWBxjVQR0oTnXPStyIZh4DhQ1oXKEYKtV6ZeS+Qw4yXRDgciVXv6ifIBAdSEZOJ0o869c6NUt0iVQ==} - dev: true - - /@storybook/mdx2-csf/1.1.0: - resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} - dev: true - - /@storybook/node-logger/7.0.12: - resolution: {integrity: sha512-VL+NXzc9NuOP6/9alg4Sofz9kh8tmlo3p+UtCIYCHH088yCsB3XsNhkG9lF1C5EZVWcuHxc2u6MMF3ezOjvKfQ==} - dependencies: - '@types/npmlog': 4.1.4 - chalk: 4.1.2 - npmlog: 5.0.1 - pretty-hrtime: 1.0.3 - dev: true - - /@storybook/node-logger/7.0.9: - resolution: {integrity: sha512-aD3OxqnXxDDx3yPoUhoQ863cTfALWhx5i8wKDECb2LWZBAMsh21wJk/CB/fW5FPd9YwzJ8nbvQxlaNpfsM4N7w==} - dependencies: - '@types/npmlog': 4.1.4 - chalk: 4.1.2 - npmlog: 5.0.1 - pretty-hrtime: 1.0.3 - dev: true - - /@storybook/postinstall/7.0.12: - resolution: {integrity: sha512-RKNvBLgABBTQwvGyF2jX4vP7OMLB3KvEEOQDoeOKjqyWfekDn5smI+eT714mtmKIH0YMcwmvzLgEdZkjmM/XhA==} - dev: true - - /@storybook/postinstall/7.0.9: - resolution: {integrity: sha512-KUcHqRDC7wANt9dE8gpymzKcqXMSFUPDC/EJSc8mhbuRBW9/DUmkFBgRDj+h3a+orWNzhFTDGr+CnXezV/0X+A==} - dev: true - - /@storybook/preset-react-webpack/7.0.9_eunppc2ebbpop5kss6ctsxsd44: - resolution: {integrity: sha512-LNXej/lyYKDxjQicpShCjC37Ew+RSeNISrFpA1kKGR8ub9IUSZvCHUT0qC6B++bfeUbNiFesltja6/xi+VjWQA==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@babel/core': ^7.11.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - '@babel/core': - optional: true - typescript: - optional: true - dependencies: - '@babel/preset-flow': 7.18.6 - '@babel/preset-react': 7.18.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_2kpgiq4mtlettjqmb64nc4esa4 - '@storybook/core-webpack': 7.0.9 - '@storybook/docs-tools': 7.0.9 - '@storybook/node-logger': 7.0.9 - '@storybook/react': 7.0.9_vegmnuvoswdxuttpuhvewcem44 - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0_dtthwp2bsqb7yvb7hoeealjg4i - '@types/node': 16.18.11 - '@types/semver': 7.3.13 - babel-plugin-add-react-displayname: 0.0.5 - babel-plugin-react-docgen: 4.2.1 - fs-extra: 11.1.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-refresh: 0.11.0 - semver: 7.5.4 - typescript: 5.2.2 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - transitivePeerDependencies: - - '@swc/core' - - '@types/webpack' - - esbuild - - sockjs-client - - supports-color - - type-fest - - uglify-js - - webpack-cli - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - - /@storybook/preview-api/7.0.12: - resolution: {integrity: sha512-YI/AfHszIOYt967fsRlc7j6I0zZB+RSsBwD/nMA8y9vszdpQ0MgRhxHgQxFf6cgqbuQcdCsnTIpT0iQ4GHjDXg==} - dependencies: - '@storybook/channel-postmessage': 7.0.12 - '@storybook/channels': 7.0.12 - '@storybook/client-logger': 7.0.12 - '@storybook/core-events': 7.0.12 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/types': 7.0.12 - '@types/qs': 6.9.7 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.11.0 - synchronous-promise: 2.0.17 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - dev: true - - /@storybook/preview-api/7.0.9: - resolution: {integrity: sha512-cLyhq2nk0eiMOUwIIKhgDgZoS1ecRGojl92hR0agZDzNJrb1lvXK6uIkJh/Anl2Jbir28lAjQGU54voPODwTUA==} - dependencies: - '@storybook/channel-postmessage': 7.0.9 - '@storybook/channels': 7.0.9 - '@storybook/client-logger': 7.0.9 - '@storybook/core-events': 7.0.9 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/types': 7.0.9 - '@types/qs': 6.9.7 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.11.0 - synchronous-promise: 2.0.17 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - dev: true - - /@storybook/preview/7.0.9: - resolution: {integrity: sha512-09tD+rBWMqBAdVqKhyotO6bTTJlCbVX9uVmc8la4jBoLL1JdE3qkBBmDivEsMDK5AoVaM5Zg2maDO4jm2HyZFw==} - dev: true - - /@storybook/react-docgen-typescript-plugin/1.0.6--canary.9.0c3f3b7.0_dtthwp2bsqb7yvb7hoeealjg4i: - resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} - peerDependencies: - typescript: '>= 4.x' - webpack: '>= 4' - dependencies: - debug: 4.3.4 - endent: 2.1.0 - find-cache-dir: 3.3.2 - flat-cache: 3.0.4 - micromatch: 4.0.5 - react-docgen-typescript: 2.2.2_typescript@5.2.2 - tslib: 2.6.2 - typescript: 5.2.2 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/react-dom-shim/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-4z9J54TD7uphxPqSuLEzeKTV4oF8Fmv8qFfnT0XZJ2mpYTC2NTbkYoYZQ8N0eYzvNOk6xgfpDqBdmIANf4NaYw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/react-dom-shim/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-3S+zJtC0L7yBwLItF3GHn3dZ3T3/9chuzpKU36K+h+oNde/JEBMi8xNh00qXjr/wyl4kJgMhktczCLFgS23dOQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/react-webpack5/7.0.9_eunppc2ebbpop5kss6ctsxsd44: - resolution: {integrity: sha512-DaUMrM99CGb0HTfcLP1H/qH89f3Y1YvOcqOW7HJFSor2GXqOh4hH6Pkjrk0fO5ShpbX7ApHMLejReNZ1oZLY5g==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@babel/core': ^7.11.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - '@babel/core': - optional: true - typescript: - optional: true - dependencies: - '@storybook/builder-webpack5': 7.0.9_eunppc2ebbpop5kss6ctsxsd44 - '@storybook/preset-react-webpack': 7.0.9_eunppc2ebbpop5kss6ctsxsd44 - '@storybook/react': 7.0.9_vegmnuvoswdxuttpuhvewcem44 - '@types/node': 16.18.11 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - typescript: 5.2.2 - transitivePeerDependencies: - - '@rspack/core' - - '@swc/core' - - '@types/webpack' - - esbuild - - sockjs-client - - supports-color - - type-fest - - uglify-js - - vue-template-compiler - - webpack-cli - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - - /@storybook/react/7.0.9_vegmnuvoswdxuttpuhvewcem44: - resolution: {integrity: sha512-wYrtyk6qVqgqODgBh/vWO31SrjzFER0NfnrZy6FvwR4AAHhM0u2qMs8ZXCJFXFIgwjkgGwpD9/EwjRuYHUqDTQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/core-client': 7.0.9 - '@storybook/docs-tools': 7.0.9 - '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.9 - '@storybook/react-dom-shim': 7.0.9_biqbaboplfbrettd7655fr4n2y - '@storybook/types': 7.0.9 - '@types/escodegen': 0.0.6 - '@types/estree': 0.0.51 - '@types/node': 16.18.11 - acorn: 7.4.1 - acorn-jsx: 5.3.2_acorn@7.4.1 - acorn-walk: 7.2.0 - escodegen: 2.0.0 - html-tags: 3.3.1 - lodash: 4.17.21 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-element-to-jsx-string: 15.0.0_biqbaboplfbrettd7655fr4n2y - ts-dedent: 2.2.0 - type-fest: 2.19.0 - typescript: 5.2.2 - util-deprecate: 1.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@storybook/router/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-dOtBiCBGeDem86BCWR7AlTVQjoBk0yw/XZLXS9qcpUfpe+UDjd0Rh21ZdEEMHG1Wfu4d2AhhG5l/JSJ1IE83jQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/client-logger': 7.0.12 - memoizerific: 1.11.3 - qs: 6.11.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/router/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-1htgfqGuQxMB258ErNfShpJQncbY4/EL/5qhVB//7Ph98ZeJkaXzdVM9N8MYME5htuoVX43Jpg5hf3W6FB9jIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@storybook/client-logger': 7.0.9 - memoizerific: 1.11.3 - qs: 6.11.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/store/7.0.9: - resolution: {integrity: sha512-g/rB0n2Z9muv8NH66SPISVrgb6prTLjI6ypqOQFmB9t+hnwsaRy8MANXn337f9T5yoHkKKONNxVjBtvLxX6U5w==} - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/preview-api': 7.0.9 - dev: true - - /@storybook/telemetry/7.0.9: - resolution: {integrity: sha512-2NB1k1eHgGq35g1nU+m3f9Poa85CiwwdlKVBIXpG5ht4J4XreCRrRDmiSF1vXLvZm7KEhXVS/IzLBAhR2vBdpA==} - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/core-common': 7.0.9 - chalk: 4.1.2 - detect-package-manager: 2.0.1 - fetch-retry: 5.0.5 - fs-extra: 11.1.0 - isomorphic-unfetch: 3.1.0 - nanoid: 3.3.7 - read-pkg-up: 7.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@storybook/testing-library/0.0.14-next.2: - resolution: {integrity: sha512-i/SLSGm0o978ELok/SB4Qg1sZ3zr+KuuCkzyFqcCD0r/yf+bG35aQGkFqqxfSAdDxuQom0NO02FE+qys5Eapdg==} - dependencies: - '@storybook/client-logger': 7.0.9 - '@storybook/instrumenter': 7.0.9 - '@testing-library/dom': 8.19.1 - '@testing-library/user-event': 13.5.0_ua4wuun3fnehcjqtqj2e2ldgpe - ts-dedent: 2.2.0 - dev: true - - /@storybook/theming/7.0.12_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-frBkvH7LF8j23ODaywLK4m4LLscw49oKblkZ+30QZkBAzRf2o3a/QSZW2V1zfBo7ygcXiUJ5bIjh7Y17mMJqbQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1_react@18.2.0 - '@storybook/client-logger': 7.0.12 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/theming/7.0.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-HVbl4ljFRe5VIcg/HGUdZP7Vc8k9rPhWhE4K98MbuSdxnaU+uvHUhj0fE1umoCn39N9/Ws8Lm596+PKoTE3D1g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1_react@18.2.0 - '@storybook/client-logger': 7.0.9 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /@storybook/types/7.0.12: - resolution: {integrity: sha512-nlvU4MyO2grwPCRQ8alA3AnY1bQxGJ6A4QgJu+1MhtjVenifFlxOQX4H1OiA+YXfjlV096oO5LrxvetJPFAKKQ==} - dependencies: - '@storybook/channels': 7.0.12 - '@types/babel__core': 7.20.0 - '@types/express': 4.17.18 - file-system-cache: 2.1.1 - dev: true - - /@storybook/types/7.0.9: - resolution: {integrity: sha512-6aKrrsX3wgPMg9Nu3AK1GYmCZQiHqHv7l24ywNxZPv0T63rcpS86kWK4qVAywoaXGFc9GtRT+dz1rK8Fx50J9Q==} - dependencies: - '@storybook/channels': 7.0.9 - '@types/babel__core': 7.20.0 - '@types/express': 4.17.18 - file-system-cache: 2.1.1 - dev: true - /@supabase/functions-js/2.1.2: resolution: {integrity: sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==} dependencies: @@ -17662,16 +12254,6 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/user-event/13.5.0_ua4wuun3fnehcjqtqj2e2ldgpe: - resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} - engines: {node: '>=10', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@babel/runtime': 7.22.5 - '@testing-library/dom': 8.19.1 - dev: true - /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -17689,13 +12271,13 @@ packages: engines: {node: '>=14'} dev: false - /@traceloop/instrumentation-openai/0.3.9_rr4fxqkzz7nhz3auplkqn4p6em: + /@traceloop/instrumentation-openai/0.3.9_@opentelemetry+api@1.8.0: resolution: {integrity: sha512-Ru2QBK6crx0dtWXd4aMyFNRP9cA2WF+8Rjt2ctOgu/R7M7fmNvtcXveY0qXZ1doKYzzt0+icZqs0ahJEn8WYcQ==} engines: {node: '>=14'} dependencies: - '@opentelemetry/core': 1.21.0_@opentelemetry+api@1.7.0 - '@opentelemetry/instrumentation': 0.48.0_rr4fxqkzz7nhz3auplkqn4p6em - '@opentelemetry/semantic-conventions': 1.21.0 + '@opentelemetry/core': 1.22.0_@opentelemetry+api@1.8.0 + '@opentelemetry/instrumentation': 0.48.0_@opentelemetry+api@1.8.0 + '@opentelemetry/semantic-conventions': 1.22.0 '@traceloop/ai-semantic-conventions': 0.3.8 transitivePeerDependencies: - '@opentelemetry/api' @@ -17841,12 +12423,6 @@ packages: - debug dev: false - /@types/accepts/1.3.5: - resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} - dependencies: - '@types/node': 20.11.22 - dev: false - /@types/acorn/4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: @@ -17861,28 +12437,6 @@ packages: resolution: {integrity: sha512-M8WpEGfC9iQ6V2Ccq6nGIXoQgeVc6z0Ngk8yCOL5V/TYIxshvb0MWQYLFFTZDesL0zmsoBc4OBjG9DB/4rei6w==} dev: false - /@types/aws-lambda/8.10.122: - resolution: {integrity: sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==} - dev: false - - /@types/aws-lambda/8.10.136: - resolution: {integrity: sha512-cmmgqxdVGhxYK9lZMYYXYRJk6twBo53ivtXjIUEFZxfxe4TkZTZBK3RRWrY2HjJcUIix0mdifn15yjOAat5lTA==} - dev: false - - /@types/aws-lambda/8.10.81: - resolution: {integrity: sha512-C1rFKGVZ8KwqhwBOYlpoybTSRtxu2433ea6JaO3amc6ubEe08yQoFsPa9aU9YqvX7ppeZ25CnCtC4AH9mhtxsQ==} - dev: false - - /@types/babel__core/7.20.0: - resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} - dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.24.0 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.5 - dev: true - /@types/babel__core/7.20.1: resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: @@ -17917,23 +12471,12 @@ packages: dependencies: '@types/connect': 3.4.35 '@types/node': 20.11.22 + dev: true /@types/btoa-lite/1.0.0: resolution: {integrity: sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==} dev: false - /@types/bunyan/1.8.7: - resolution: {integrity: sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg==} - dependencies: - '@types/node': 20.11.22 - dev: false - - /@types/bunyan/1.8.9: - resolution: {integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==} - dependencies: - '@types/node': 20.11.22 - dev: false - /@types/cacheable-request/6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: @@ -17968,16 +12511,7 @@ packages: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 20.11.22 - - /@types/connect/3.4.36: - resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} - dependencies: - '@types/node': 20.11.22 - dev: false - - /@types/content-disposition/0.5.5: - resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} - dev: false + dev: true /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} @@ -17993,15 +12527,6 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true - /@types/cookies/0.7.7: - resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} - dependencies: - '@types/connect': 3.4.36 - '@types/express': 4.17.18 - '@types/keygrip': 1.0.2 - '@types/node': 20.11.22 - dev: false - /@types/cors/2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: @@ -18058,22 +12583,6 @@ packages: resolution: {integrity: sha512-CL7y71j2zaDmtPLD5Xq5S1Gv2dFoHl0/GBZm6s39Mj/ls28L3NzAOqf7H4H0/2TNVMgMjMVf9CAFYSjmXhi3bw==} dev: false - /@types/detect-port/1.3.2: - resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==} - dev: true - - /@types/doctrine/0.0.3: - resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} - dev: true - - /@types/ejs/3.1.2: - resolution: {integrity: sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==} - dev: true - - /@types/escodegen/0.0.6: - resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} - dev: true - /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -18100,10 +12609,6 @@ packages: '@types/estree': 1.0.2 dev: true - /@types/estree/0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: true - /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} @@ -18126,15 +12631,7 @@ packages: '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.2 - - /@types/express/4.17.13: - resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.37 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 - dev: false + dev: true /@types/express/4.17.15: resolution: {integrity: sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==} @@ -18152,31 +12649,14 @@ packages: '@types/express-serve-static-core': 4.17.37 '@types/qs': 6.9.7 '@types/serve-static': 1.15.0 - - /@types/find-cache-dir/3.2.1: - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} dev: true - /@types/generic-pool/3.8.1: - resolution: {integrity: sha512-eaMAbZS0EfKvaP5PUZ/Cdf5uJBO2t6T3RdvQTKuMqUwGhNpCnPAsKWEMyV+mCeCQG3UiHrtgdzni8X6DmhxRaQ==} - deprecated: This is a stub types definition. generic-pool provides its own type definitions, so you do not need this installed. - dependencies: - generic-pool: 3.9.0 - dev: false - /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 '@types/node': 20.11.22 - /@types/glob/8.1.0: - resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 20.11.22 - dev: true - /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: @@ -18189,68 +12669,14 @@ packages: '@types/tinycolor2': 1.4.3 dev: true - /@types/hapi__catbox/10.2.4: - resolution: {integrity: sha512-A6ivRrXD5glmnJna1UAGw87QNZRp/vdFO9U4GS+WhOMWzHnw+oTGkMvg0g6y1930CbeheGOCm7A1qHsqH7AXqg==} - dev: false - - /@types/hapi__hapi/20.0.13: - resolution: {integrity: sha512-LP4IPfhIO5ZPVOrJo7H8c8Slc0WYTFAUNQX1U0LBPKyXioXhH5H2TawIgxKujIyOhbwoBbpvOsBf6o5+ToJIrQ==} - dependencies: - '@hapi/boom': 9.1.4 - '@hapi/iron': 6.0.0 - '@hapi/podium': 4.1.3 - '@types/hapi__catbox': 10.2.4 - '@types/hapi__mimos': 4.1.4 - '@types/hapi__shot': 4.1.2 - '@types/node': 20.11.22 - joi: 17.7.0 - dev: false - - /@types/hapi__hapi/20.0.9: - resolution: {integrity: sha512-fGpKScknCKZityRXdZgpCLGbm41R1ppFgnKHerfZlqOOlCX/jI129S6ghgBqkqCE8m9A0CIu1h7Ch04lD9KOoA==} - dependencies: - '@hapi/boom': 9.1.4 - '@hapi/iron': 6.0.0 - '@hapi/podium': 4.1.3 - '@types/hapi__catbox': 10.2.4 - '@types/hapi__mimos': 4.1.4 - '@types/hapi__shot': 4.1.2 - '@types/node': 20.11.22 - joi: 17.7.0 - dev: false - - /@types/hapi__mimos/4.1.4: - resolution: {integrity: sha512-i9hvJpFYTT/qzB5xKWvDYaSXrIiNqi4ephi+5Lo6+DoQdwqPXQgmVVOZR+s3MBiHoFqsCZCX9TmVWG3HczmTEQ==} - dependencies: - '@types/mime-db': 1.43.1 - dev: false - - /@types/hapi__shot/4.1.2: - resolution: {integrity: sha512-8wWgLVP1TeGqgzZtCdt+F+k15DWQvLG1Yv6ZzPfb3D5WIo5/S+GGKtJBVo2uNEcqabP5Ifc71QnJTDnTmw1axA==} - dependencies: - '@types/node': 20.11.22 - dev: false - /@types/hast/2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} dependencies: '@types/unist': 2.0.6 - /@types/html-minifier-terser/6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: true - - /@types/http-assert/1.5.3: - resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} - dev: false - /@types/http-cache-semantics/4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - /@types/http-errors/2.0.1: - resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} - dev: false - /@types/humanize-duration/3.27.1: resolution: {integrity: sha512-K3e+NZlpCKd6Bd/EIdqjFJRFHbrq5TzPPLwREk5Iv/YoIjQrs6ljdAUCo+Lb2xFlGNOjGSE0dqsVD19cZL137w==} dev: true @@ -18262,12 +12688,6 @@ packages: rxjs: 7.8.0 dev: true - /@types/ioredis/4.28.10: - resolution: {integrity: sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==} - dependencies: - '@types/node': 20.11.22 - dev: false - /@types/is-ci/3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} dependencies: @@ -18345,59 +12765,11 @@ packages: '@types/node': 20.11.22 dev: false - /@types/keygrip/1.0.2: - resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} - dev: false - /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 20.11.22 - /@types/koa-compose/3.2.5: - resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} - dependencies: - '@types/koa': 2.13.9 - dev: false - - /@types/koa/2.13.6: - resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} - dependencies: - '@types/accepts': 1.3.5 - '@types/content-disposition': 0.5.5 - '@types/cookies': 0.7.7 - '@types/http-assert': 1.5.3 - '@types/http-errors': 2.0.1 - '@types/keygrip': 1.0.2 - '@types/koa-compose': 3.2.5 - '@types/node': 20.11.22 - dev: false - - /@types/koa/2.13.9: - resolution: {integrity: sha512-tPX3cN1dGrMn+sjCDEiQqXH2AqlPoPd594S/8zxwUm/ZbPsQXKqHPUypr2gjCPhHUc+nDJLduhh5lXI/1olnGQ==} - dependencies: - '@types/accepts': 1.3.5 - '@types/content-disposition': 0.5.5 - '@types/cookies': 0.7.7 - '@types/http-assert': 1.5.3 - '@types/http-errors': 2.0.1 - '@types/keygrip': 1.0.2 - '@types/koa-compose': 3.2.5 - '@types/node': 20.11.22 - dev: false - - /@types/koa__router/12.0.3: - resolution: {integrity: sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==} - dependencies: - '@types/koa': 2.13.9 - dev: false - - /@types/koa__router/8.0.7: - resolution: {integrity: sha512-OB3Ax75nmTP+WR9AgdzA42DI7YmBtiNKN2g1Wxl+d5Dyek9SWt740t+ukwXSmv/jMBCUPyV3YEI93vZHgdP7UQ==} - dependencies: - '@types/koa': 2.13.9 - dev: false - /@types/lodash.omit/4.5.7: resolution: {integrity: sha512-6q6cNg0tQ6oTWjSM+BcYMBhan54P/gLqBldG4AuXd3nKr0oeVekWNS4VrNEu3BhCSDXtGapi7zjhnna0s03KpA==} dependencies: @@ -18429,25 +12801,13 @@ packages: resolution: {integrity: sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==} dev: true - /@types/memcached/2.2.7: - resolution: {integrity: sha512-ImJbz1i8pl+OnyhYdIDnHe8jAuM8TOwM/7VsciqhYX3IL0jPPUToAtVxklfcWFGYckahEYZxhd9FS0z3MM1dpA==} - dependencies: - '@types/node': 20.11.22 - dev: false - - /@types/mime-db/1.43.1: - resolution: {integrity: sha512-kGZJY+R+WnR5Rk+RPHUMERtb2qBRViIHCBdtUrY+NmwuGb8pQdfTqQiCKPrxpdoycl8KWm2DLdkpoSdt479XoQ==} - dev: false - - /@types/mime-types/2.1.1: - resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} - dev: true - /@types/mime/1.3.3: resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} + dev: true /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + dev: true /@types/minimatch/5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -18476,18 +12836,6 @@ packages: dependencies: '@types/node': 20.11.22 - /@types/mysql/2.15.19: - resolution: {integrity: sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ==} - dependencies: - '@types/node': 20.11.22 - dev: false - - /@types/mysql/2.15.22: - resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} - dependencies: - '@types/node': 20.11.22 - dev: false - /@types/nlcst/1.0.1: resolution: {integrity: sha512-aVIyXt6pZiiMOtVByE4Y0gf+BLm1Cxc4ZLSK8VRHn1CgkO+kXbQwN/EBhQmhPdBMjFJCMBKtmNW2zWQuFywz8Q==} dependencies: @@ -18505,6 +12853,7 @@ packages: dependencies: '@types/node': 20.11.22 form-data: 3.0.1 + dev: false /@types/node-forge/1.3.10: resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} @@ -18563,10 +12912,7 @@ packages: /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - - /@types/npmlog/4.1.4: - resolution: {integrity: sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==} - dev: true + dev: false /@types/object-hash/3.0.6: resolution: {integrity: sha512-fOBV8C1FIu2ELinoILQ+ApxcUKz4ngq+IWUYrxSGjXzzjUALijilampwkMgEtJ+h2njAW3pi853QpzNVCHB73w==} @@ -18578,26 +12924,6 @@ packages: /@types/parse5/6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - /@types/pg-pool/2.0.3: - resolution: {integrity: sha512-fwK5WtG42Yb5RxAwxm3Cc2dJ39FlgcaNiXKvtTLAwtCn642X7dgel+w1+cLWwpSOFImR3YjsZtbkfjxbHtFAeg==} - dependencies: - '@types/pg': 8.6.6 - dev: false - - /@types/pg-pool/2.0.4: - resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} - dependencies: - '@types/pg': 8.6.6 - dev: false - - /@types/pg/8.6.1: - resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} - dependencies: - '@types/node': 20.11.22 - pg-protocol: 1.6.0 - pg-types: 2.2.0 - dev: false - /@types/pg/8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: @@ -18610,10 +12936,6 @@ packages: resolution: {integrity: sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==} dev: false - /@types/pretty-hrtime/1.0.1: - resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} - dev: true - /@types/prismjs/1.26.0: resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} dev: true @@ -18627,20 +12949,22 @@ packages: /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: true /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + dev: true /@types/react-collapse/5.0.4: resolution: {integrity: sha512-tM5cVB6skGLneNYnRK2E3R56VOHguSeJQHslGPTIMC58ytL3oelT8L/l1onkwHGn5vSEs2BEq2Olzrur+YdliA==} dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 dev: true /@types/react-dom/18.2.7: resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 /@types/react/18.2.17: resolution: {integrity: sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA==} @@ -18656,6 +12980,13 @@ packages: '@types/scheduler': 0.16.2 csstype: 3.1.1 + /@types/react/18.2.69: + resolution: {integrity: sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + /@types/request/2.48.12: resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} dependencies: @@ -18699,12 +13030,14 @@ packages: dependencies: '@types/mime': 1.3.3 '@types/node': 20.11.22 + dev: true /@types/serve-static/1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: '@types/mime': 3.0.1 '@types/node': 20.11.22 + dev: true /@types/set-cookie-parser/2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} @@ -18751,12 +13084,6 @@ packages: minipass: 4.0.0 dev: true - /@types/tedious/4.0.14: - resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} - dependencies: - '@types/node': 20.11.22 - dev: false - /@types/through/0.0.30: resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: @@ -18770,10 +13097,6 @@ packages: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} dev: false - /@types/trusted-types/2.0.3: - resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} - dev: true - /@types/unist/2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} @@ -18806,12 +13129,6 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/16.0.5: - resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} - dependencies: - '@types/yargs-parser': 21.0.0 - dev: true - /@types/yargs/17.0.32: resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: @@ -19780,16 +14097,6 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /@yarnpkg/esbuild-plugin-pnp/3.0.0-rc.15_esbuild@0.17.19: - resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} - engines: {node: '>=14.15.0'} - peerDependencies: - esbuild: '>=0.10.0' - dependencies: - esbuild: 0.17.19 - tslib: 2.6.2 - dev: true - /@zxing/text-encoding/0.9.0: resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} requiresBuild: true @@ -19831,14 +14138,6 @@ packages: dependencies: acorn: 8.10.0 - /acorn-jsx/5.3.2_acorn@7.4.1: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 7.4.1 - dev: true - /acorn-jsx/5.3.2_acorn@8.10.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -19857,6 +14156,7 @@ packages: /acorn-walk/7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} + dev: false /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -19866,6 +14166,7 @@ packages: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true + dev: false /acorn/8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} @@ -19878,24 +14179,6 @@ packages: hasBin: true dev: true - /address/1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true - - /adjust-sourcemap-loader/4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.2.11 - dev: true - - /agent-base/5.1.1: - resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} - engines: {node: '>= 6.0.0'} - dev: true - /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -19903,6 +14186,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: false /agent-base/6.0.2_supports-color@9.4.0: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -20026,10 +14310,6 @@ packages: dependencies: string-width: 4.2.3 - /ansi-color/0.2.1: - resolution: {integrity: sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==} - dev: false - /ansi-colors/4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -20059,12 +14339,6 @@ packages: type-fest: 3.13.0 dev: false - /ansi-html-community/0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true - /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -20114,28 +14388,17 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 - /app-root-dir/1.0.2: - resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} - dev: true - /append-field/1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} /aproba/2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: false /archy/1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} dev: true - /are-we-there-yet/2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.0 - dev: true - /are-we-there-yet/3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -20334,15 +14597,6 @@ packages: engines: {node: '>=0.8'} dev: false - /assert/2.0.0: - resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} - dependencies: - es6-object-assign: 1.1.0 - is-nan: 1.3.2 - object-is: 1.1.5 - util: 0.12.5 - dev: true - /assertion-error/1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -20360,13 +14614,6 @@ packages: dependencies: tslib: 2.6.2 - /ast-types/0.14.2: - resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} - engines: {node: '>=4'} - dependencies: - tslib: 2.6.2 - dev: true - /ast-types/0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} @@ -20374,13 +14621,6 @@ packages: tslib: 2.6.2 dev: true - /ast-types/0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} - dependencies: - tslib: 2.6.2 - dev: true - /astring/1.8.4: resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==} hasBin: true @@ -20458,14 +14698,6 @@ packages: - supports-color - terser - /async-limiter/1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: true - - /async/3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true - /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -20616,14 +14848,6 @@ packages: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} optional: true - /babel-core/7.0.0-bridge.0_@babel+core@7.22.17: - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.17 - dev: true - /babel-jest/29.6.2_@babel+core@7.22.17: resolution: {integrity: sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20653,23 +14877,6 @@ packages: schema-utils: 4.0.1 dev: true - /babel-loader/9.1.3_m7zg4tehf4iagxalhjjv66vmni: - resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' - dependencies: - '@babel/core': 7.22.17 - find-cache-dir: 4.0.0 - schema-utils: 4.0.1 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - - /babel-plugin-add-react-displayname/0.0.5: - resolution: {integrity: sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==} - dev: true - /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} @@ -20702,23 +14909,6 @@ packages: resolve: 1.22.4 dev: true - /babel-plugin-named-exports-order/0.0.2: - resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} - dev: true - - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.8: - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.8 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.22.17: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: @@ -20745,18 +14935,6 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.8: - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.8 - core-js-compat: 3.36.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.22.17: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: @@ -20781,17 +14959,6 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.8: - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.8 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.22.17: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: @@ -20814,16 +14981,6 @@ packages: - supports-color dev: true - /babel-plugin-react-docgen/4.2.1: - resolution: {integrity: sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==} - dependencies: - ast-types: 0.14.2 - lodash: 4.17.21 - react-docgen: 5.4.3 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-transform-react-remove-prop-types/0.4.24: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} dev: true @@ -20933,13 +15090,6 @@ packages: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: false - /better-opn/2.1.1: - resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} - engines: {node: '>8.0.0'} - dependencies: - open: 7.4.2 - dev: true - /better-path-resolve/1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -20950,15 +15100,12 @@ packages: /big-integer/1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} + dev: false /big.js/5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bignumber.js/9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false - /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -21041,10 +15188,6 @@ packages: transitivePeerDependencies: - supports-color - /boolbase/1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true - /boolean/3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} dev: true @@ -21057,20 +15200,6 @@ packages: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} dev: false - /boxen/5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - /boxen/7.1.1: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} @@ -21084,13 +15213,6 @@ packages: widest-line: 4.0.1 wrap-ansi: 8.1.0 - /bplist-parser/0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.51 - dev: true - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -21145,10 +15267,6 @@ packages: unload: 2.2.0 dev: false - /browser-assert/1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - dev: true - /browser-stdout/1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true @@ -21252,16 +15370,6 @@ packages: node-gyp-build: 4.6.0 dev: false - /bufrw/1.3.0: - resolution: {integrity: sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ==} - engines: {node: '>= 0.10.x'} - dependencies: - ansi-color: 0.2.1 - error: 7.0.2 - hexer: 1.5.0 - xtend: 4.0.2 - dev: false - /builtins/1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} dev: true @@ -21330,25 +15438,6 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - /c8/7.12.0: - resolution: {integrity: sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==} - engines: {node: '>=10.12.0'} - hasBin: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@istanbuljs/schema': 0.1.3 - find-up: 5.0.0 - foreground-child: 2.0.0 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.5 - rimraf: 3.0.2 - test-exclude: 6.0.0 - v8-to-istanbul: 9.0.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 - dev: true - /cac/6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -21385,7 +15474,7 @@ packages: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 - glob: 10.3.3 + glob: 10.3.10 lru-cache: 7.18.3 minipass: 7.0.3 minipass-collect: 1.0.2 @@ -21472,13 +15561,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /camel-case/4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: true - /camelcase-css/2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} @@ -21523,22 +15605,11 @@ packages: - supports-color dev: true - /cartesian/1.0.1: - resolution: {integrity: sha512-tR3qKRYpRJ6FXEGuoBwpuCYcwydrk1N2rduy7eWg1Msepi3i5fCxheryw4VBlCqjCbk3Vhjh3eg+IGHtl5H74A==} - dependencies: - xtend: 4.0.2 - dev: true - /case-anything/2.1.13: resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} engines: {node: '>=12.13'} dev: true - /case-sensitive-paths-webpack-plugin/2.4.0: - resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} - engines: {node: '>=4'} - dev: true - /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: false @@ -21690,13 +15761,6 @@ packages: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} dev: false - /clean-css/5.3.2: - resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: true - /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -21708,11 +15772,6 @@ packages: escape-string-regexp: 5.0.0 dev: true - /cli-boxes/2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - /cli-boxes/3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -21792,15 +15851,6 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-deep/4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - dev: true - /clone-response/1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: @@ -21896,6 +15946,7 @@ packages: /color-support/1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + dev: false /color/3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} @@ -21912,10 +15963,6 @@ packages: color-string: 1.9.1 optional: true - /colorette/2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true - /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -21941,16 +15988,6 @@ packages: engines: {node: '>= 6'} dev: false - /commander/6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true - - /commander/8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: true - /commander/9.4.1: resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} engines: {node: ^12.20.0 || >=14} @@ -21979,10 +16016,6 @@ packages: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} dev: true - /commondir/1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true - /compare-versions/5.0.3: resolution: {integrity: sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==} dev: false @@ -22070,6 +16103,7 @@ packages: /console-control-strings/1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: false /console-table-printer/2.11.2: resolution: {integrity: sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg==} @@ -22145,11 +16179,6 @@ packages: browserslist: 4.23.0 dev: true - /core-js-pure/3.30.2: - resolution: {integrity: sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg==} - requiresBuild: true - dev: true - /core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: false @@ -22310,6 +16339,7 @@ packages: semver: 5.7.1 shebang-command: 1.2.0 which: 1.3.1 + dev: true /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -22331,11 +16361,6 @@ packages: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} dev: false - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - /crypto-random-string/4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} @@ -22371,39 +16396,6 @@ packages: semver: 7.5.4 dev: true - /css-loader/6.10.0_webpack@5.88.2: - resolution: {integrity: sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - dependencies: - icss-utils: 5.1.0_postcss@8.4.35 - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0_postcss@8.4.35 - postcss-modules-local-by-default: 4.0.4_postcss@8.4.35 - postcss-modules-scope: 3.1.1_postcss@8.4.35 - postcss-modules-values: 4.0.0_postcss@8.4.35 - postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - - /css-select/4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: true - /css-tree/1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} @@ -22429,11 +16421,6 @@ packages: engines: {node: '>= 6'} dev: true - /css-what/6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - /cssesc/3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -22719,10 +16706,6 @@ packages: dependencies: mimic-response: 3.1.0 - /dedent/0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true - /dedent/1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: @@ -22779,14 +16762,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - /default-browser-id/3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - /default-browser-id/5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -22855,10 +16830,6 @@ packages: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: false - /defu/6.1.2: - resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} - dev: true - /degenerator/5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} @@ -22873,26 +16844,13 @@ packages: hasBin: true dev: false - /del/6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.10 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - dev: true - /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} /delegates/1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: false /denque/2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} @@ -22948,16 +16906,7 @@ packages: engines: {node: '>=12'} dependencies: execa: 5.1.1 - - /detect-port/1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true - dependencies: - address: 1.2.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true + dev: false /detective/5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} @@ -23038,26 +16987,12 @@ packages: resolution: {integrity: sha512-8o+oVqLQZoruQPYy3uAAQtc6YbtSiRq5aPJBhJ82YTJRHvI6ofhYAkC81WmjFTnfUbqg6T3aCglIpU9p/5e7Cw==} dev: true - /dom-converter/0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: true - /dom-helpers/3.4.0: resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} dependencies: '@babel/runtime': 7.22.5 dev: false - /dom-serializer/1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: true - /dom-serializer/2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -23068,13 +17003,7 @@ packages: /domelementtype/2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - /domhandler/4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: true + dev: false /domhandler/5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} @@ -23083,14 +17012,6 @@ packages: domelementtype: 2.3.0 dev: false - /domutils/2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: true - /domutils/3.0.1: resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} dependencies: @@ -23104,6 +17025,7 @@ packages: dependencies: no-case: 3.0.4 tslib: 2.6.2 + dev: false /dot-prop/6.0.1: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} @@ -23122,6 +17044,7 @@ packages: /dotenv-expand/10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} + dev: false /dotenv/16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} @@ -23210,14 +17133,6 @@ packages: /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /ejs/3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.5 - dev: true - /electron-to-chromium/1.4.433: resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} dev: true @@ -23262,14 +17177,6 @@ packages: dependencies: once: 1.4.0 - /endent/2.1.0: - resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} - dependencies: - dedent: 0.7.0 - fast-json-parse: 1.0.3 - objectorarray: 1.0.5 - dev: true - /engine.io-client/6.5.3: resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} dependencies: @@ -23343,10 +17250,6 @@ packages: ansi-colors: 4.1.3 dev: false - /entities/2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: true - /entities/4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} @@ -23356,12 +17259,6 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - /envinfo/7.8.1: - resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} - engines: {node: '>=4'} - hasBin: true - dev: true - /err-code/2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -23370,22 +17267,10 @@ packages: dependencies: is-arrayish: 0.2.1 - /error-stack-parser/2.0.7: - resolution: {integrity: sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==} - dependencies: - stackframe: 1.3.4 - dev: false - /error-stack-parser/2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} dependencies: stackframe: 1.3.4 - - /error/7.0.2: - resolution: {integrity: sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==} - dependencies: - string-template: 0.2.1 - xtend: 4.0.2 dev: false /es-abstract/1.21.1: @@ -23481,10 +17366,6 @@ packages: es6-symbol: 3.1.3 dev: false - /es6-object-assign/1.1.0: - resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} - dev: true - /es6-promise/3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true @@ -23640,10 +17521,6 @@ packages: dev: true optional: true - /esbuild-plugin-alias/0.2.1: - resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} - dev: true - /esbuild-plugin-file-path-extensions/1.0.0: resolution: {integrity: sha512-v5LpSkml+CbsC0+xAaETEGDECdvKp1wKkD4aXMdI4zLjXP0EYfK4GjGhphumt4N+kjR3A8Q+DIkpgxX1XTqO4Q==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} @@ -23673,17 +17550,6 @@ packages: resolve.exports: 2.0.2 dev: true - /esbuild-register/3.4.2_esbuild@0.17.19: - resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==} - peerDependencies: - esbuild: '>=0.12 <1' - dependencies: - debug: 4.3.4 - esbuild: 0.17.19 - transitivePeerDependencies: - - supports-color - dev: true - /esbuild-sunos-64/0.15.18: resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} @@ -23957,19 +17823,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /escodegen/2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -25064,17 +18917,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - /estree-to-babel/3.2.1: - resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} - engines: {node: '>=8.3.0'} - dependencies: - '@babel/traverse': 7.22.17 - '@babel/types': 7.24.0 - c8: 7.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /estree-util-attach-comments/2.1.0: resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==} dependencies: @@ -25385,18 +19227,6 @@ packages: - supports-color dev: false - /extract-zip/1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true - dependencies: - concat-stream: 1.6.2 - debug: 2.6.9 - mkdirp: 0.5.6 - yauzl: 2.10.0 - transitivePeerDependencies: - - supports-color - dev: true - /extract-zip/2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -25482,10 +19312,6 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 - /fast-json-parse/1.0.3: - resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} - dev: true - /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -25593,6 +19419,7 @@ packages: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 + dev: false /fetch-blob/3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -25602,10 +19429,6 @@ packages: web-streams-polyfill: 3.2.1 dev: false - /fetch-retry/5.0.5: - resolution: {integrity: sha512-q9SvpKH5Ka6h7X2C6r1sP31pQoeDb3o6/R9cg21ahfPAqbIOkW9tus1dXfwYb6G6dOI4F7nVS4Q+LSssBGIz0A==} - dev: true - /fflate/0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} dev: false @@ -25630,24 +19453,11 @@ packages: dependencies: flat-cache: 3.0.4 - /file-system-cache/2.1.1: - resolution: {integrity: sha512-vgZ1uDsK29DM4pptUOv47zdJO2tYM5M/ERyAE9Jk0QBN6e64Md+a+xJSOp68dCCDH4niFMVD8nC8n8A5ic0bmg==} - dependencies: - fs-extra: 11.1.0 - ramda: 0.28.0 - dev: true - /file-uri-to-path/1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} dev: true optional: true - /filelist/1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.2 - dev: true - /fill-range/4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -25678,24 +19488,6 @@ packages: transitivePeerDependencies: - supports-color - /find-cache-dir/2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} - dependencies: - commondir: 1.0.1 - make-dir: 2.1.0 - pkg-dir: 3.0.0 - dev: true - - /find-cache-dir/3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - /find-cache-dir/4.0.0: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} @@ -25713,13 +19505,6 @@ packages: safe-regex2: 2.0.0 dev: true - /find-up/3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -25769,20 +19554,9 @@ packages: hasBin: true dev: true - /flat/6.0.1: - resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==} - engines: {node: '>=18'} - hasBin: true - dev: false - /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - /flow-parser/0.199.1: - resolution: {integrity: sha512-Mt+GFUQYij3miM7Z6o8E3aHTGXZKSOhvlCFgdQRoi6fkWfhyijnoX51zpOxM5PmZuiV6gallWhDZzwOsWxRutg==} - engines: {node: '>=0.4.0'} - dev: true - /follow-redirects/1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} @@ -25826,14 +19600,6 @@ packages: for-in: 1.0.2 dev: false - /foreground-child/2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 3.0.7 - dev: true - /foreground-child/3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -25845,33 +19611,6 @@ packages: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: false - /fork-ts-checker-webpack-plugin/7.3.0_dtthwp2bsqb7yvb7hoeealjg4i: - resolution: {integrity: sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} - peerDependencies: - typescript: '>3.6.0' - vue-template-compiler: '*' - webpack: ^5.11.0 - peerDependenciesMeta: - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.22.13 - chalk: 4.1.2 - chokidar: 3.5.3 - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - fs-extra: 10.1.0 - memfs: 3.5.3 - minimatch: 3.1.2 - node-abort-controller: 3.1.1 - schema-utils: 3.3.0 - semver: 7.5.4 - tapable: 2.2.1 - typescript: 5.2.2 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - /fork-ts-checker-webpack-plugin/8.0.0_dtthwp2bsqb7yvb7hoeealjg4i: resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} @@ -26020,15 +19759,6 @@ packages: universalify: 2.0.0 dev: true - /fs-extra/11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs-extra/7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -26105,21 +19835,6 @@ packages: /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - /gauge/3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true - /gauge/4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -26134,65 +19849,12 @@ packages: wide-align: 1.1.5 dev: false - /gaxios/6.2.0: - resolution: {integrity: sha512-H6+bHeoEAU5D6XNc6mPKeN5dLZqEDs9Gpk6I+SZBEzK5So58JVrHPmevNi35fRl1J9Y5TaeLW0kYx3pCJ1U2mQ==} - engines: {node: '>=14'} - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.1 - is-stream: 2.0.1 - node-fetch: 2.6.12 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /gaxios/6.2.0_supports-color@9.4.0: - resolution: {integrity: sha512-H6+bHeoEAU5D6XNc6mPKeN5dLZqEDs9Gpk6I+SZBEzK5So58JVrHPmevNi35fRl1J9Y5TaeLW0kYx3pCJ1U2mQ==} - engines: {node: '>=14'} - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.1_supports-color@9.4.0 - is-stream: 2.0.1 - node-fetch: 2.6.12 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /gcp-metadata/6.1.0: - resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} - engines: {node: '>=14'} - dependencies: - gaxios: 6.2.0 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /gcp-metadata/6.1.0_supports-color@9.4.0: - resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} - engines: {node: '>=14'} - dependencies: - gaxios: 6.2.0_supports-color@9.4.0 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - /generic-names/4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} dependencies: loader-utils: 3.2.1 dev: true - /generic-pool/3.9.0: - resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} - engines: {node: '>= 4'} - dev: false - /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -26216,11 +19878,6 @@ packages: engines: {node: '>=6'} dev: false - /get-npm-tarball-url/2.0.3: - resolution: {integrity: sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==} - engines: {node: '>=12.17'} - dev: true - /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -26309,21 +19966,6 @@ packages: assert-plus: 1.0.0 dev: false - /giget/1.1.2: - resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==} - hasBin: true - dependencies: - colorette: 2.0.20 - defu: 6.1.2 - https-proxy-agent: 5.0.1 - mri: 1.2.0 - node-fetch-native: 1.1.1 - pathe: 1.1.1 - tar: 6.1.13 - transitivePeerDependencies: - - supports-color - dev: true - /git-hooks-list/1.0.3: resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} dev: true @@ -26350,10 +19992,6 @@ packages: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} optional: true - /github-slugger/1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: true - /github-slugger/2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -26376,16 +20014,6 @@ packages: dependencies: is-glob: 4.0.3 - /glob-promise/6.0.2_glob@8.1.0: - resolution: {integrity: sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==} - engines: {node: '>=16'} - peerDependencies: - glob: ^8.0.3 - dependencies: - '@types/glob': 8.1.0 - glob: 8.1.0 - dev: true - /glob-to-regexp/0.3.0: resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} dev: false @@ -26393,6 +20021,17 @@ packages: /glob-to-regexp/0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + /glob/10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.3 + path-scurry: 1.10.1 + /glob/10.3.3: resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} engines: {node: '>=16 || 14 >=14.17'} @@ -26465,6 +20104,7 @@ packages: inherits: 2.0.4 minimatch: 5.1.2 once: 1.4.0 + dev: false /glob/9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} @@ -26682,19 +20322,6 @@ packages: through2: 2.0.5 dev: true - /handlebars/4.7.7: - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} - engines: {node: '>=0.4.7'} - hasBin: true - dependencies: - minimist: 1.2.7 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.17.4 - dev: true - /har-schema/2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} @@ -26758,6 +20385,7 @@ packages: /has-unicode/2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: false /has-value/0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} @@ -26903,26 +20531,11 @@ packages: /headers-polyfill/4.0.2: resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==} - /hexer/1.5.0: - resolution: {integrity: sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==} - engines: {node: '>= 0.10.x'} - hasBin: true - dependencies: - ansi-color: 0.2.1 - minimist: 1.2.7 - process: 0.10.1 - xtend: 4.0.2 - dev: false - /hexoid/1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} dev: true - /highlight.run/7.2.0: - resolution: {integrity: sha512-vTg0EWiKxHoRO1w9zm+KuPWkOAJN2Mh/8LRfgVqMjrR+sSfdOjuJeKBa9wfmV1GssrGCWNLwnuygDLGIJ4BSCw==} - dev: false - /highlight.run/7.3.4: resolution: {integrity: sha512-Rgx+gy0tb2tH4hNzxYi/VK5pL/msaAtaQBIy8XsPHLujdSgo5OPWO6vOdjjB7ufM1l/CI2RLmlQ+L2QZOuHBjw==} dev: false @@ -26953,10 +20566,6 @@ packages: dev: false optional: true - /html-entities/2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - dev: true - /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -26964,23 +20573,10 @@ packages: /html-escaper/3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} - /html-minifier-terser/6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.2 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.17.1 - dev: true - /html-tags/3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + dev: false /html-to-text/9.0.3: resolution: {integrity: sha512-hxDF1kVCF2uw4VUJ3vr2doc91pXf2D5ngKcNviSitNkhP9OMOaJkDrFIFL6RMvko7NisWTEiqGpQ9LAxcVok1w==} @@ -27007,29 +20603,6 @@ packages: /html-void-elements/2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} - /html-webpack-plugin/5.5.1_webpack@5.88.2: - resolution: {integrity: sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==} - engines: {node: '>=10.13.0'} - peerDependencies: - webpack: ^5.20.0 - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - - /htmlparser2/6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: true - /htmlparser2/8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -27117,16 +20690,6 @@ packages: resolve-alpn: 1.2.1 dev: false - /https-proxy-agent/4.0.0: - resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} - engines: {node: '>= 6.0.0'} - dependencies: - agent-base: 5.1.1 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -27135,6 +20698,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: false /https-proxy-agent/5.0.1_supports-color@9.4.0: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} @@ -27265,12 +20829,6 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 - /import-in-the-middle/1.3.5: - resolution: {integrity: sha512-yzHlBqi1EBFrkieAnSt8eTgO5oLSl+YJ7qaOpUH/PMqQOMZoQ/RmDlwnTLQrwYto+gHYjRG+i/IbsB1eDx32NQ==} - dependencies: - module-details-from-path: 1.0.3 - dev: false - /import-in-the-middle/1.7.1: resolution: {integrity: sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==} dependencies: @@ -27280,15 +20838,6 @@ packages: module-details-from-path: 1.0.3 dev: false - /import-in-the-middle/1.7.3: - resolution: {integrity: sha512-R2I11NRi0lI3jD2+qjqyVlVEahsejw7LDnYEbGb47QEFjczE3bZYsmWheCTQA+LFs2DzOQxR7Pms7naHW1V4bQ==} - dependencies: - acorn: 8.10.0 - acorn-import-assertions: 1.9.0_acorn@8.10.0 - cjs-module-lexer: 1.2.3 - module-details-from-path: 1.0.3 - dev: false - /import-lazy/4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} @@ -27552,11 +21101,6 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - /is-absolute-url/3.0.3: - resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} - engines: {node: '>=8'} - dev: true - /is-accessor-descriptor/0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} @@ -27798,14 +21342,6 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-nan/1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - dev: true - /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -27855,11 +21391,6 @@ packages: engines: {node: '>=8'} dev: false - /is-path-cwd/2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true - /is-path-inside/3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -27888,11 +21419,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - - /is-plain-object/5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + dev: false /is-reference/3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} @@ -28061,6 +21588,7 @@ packages: /isobject/3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + dev: false /isomorphic-unfetch/3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} @@ -28069,6 +21597,7 @@ packages: unfetch: 4.2.0 transitivePeerDependencies: - encoding + dev: false /isomorphic-ws/5.0.0_ws@8.16.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} @@ -28140,27 +21669,13 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jaeger-client/3.19.0: - resolution: {integrity: sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==} - engines: {node: '>=10'} + /jackspeak/2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} dependencies: - node-int64: 0.4.0 - opentracing: 0.14.7 - thriftrw: 3.11.4 - uuid: 8.3.2 - xorshift: 1.2.0 - dev: false - - /jake/10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.4 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: true + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 /javascript-stringify/2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} @@ -28478,14 +21993,6 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock/27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.11.22 - dev: true - /jest-mock/29.6.2: resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -28818,36 +22325,6 @@ packages: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: false - /jscodeshift/0.14.0_@babel+preset-env@7.21.5: - resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - dependencies: - '@babel/core': 7.22.17 - '@babel/parser': 7.22.16 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.22.17 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.22.17 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.22.17 - '@babel/plugin-transform-modules-commonjs': 7.21.5_@babel+core@7.22.17 - '@babel/preset-env': 7.21.5_@babel+core@7.22.17 - '@babel/preset-flow': 7.18.6_@babel+core@7.22.17 - '@babel/preset-typescript': 7.21.5_@babel+core@7.22.17 - '@babel/register': 7.18.9_@babel+core@7.22.17 - babel-core: 7.0.0-bridge.0_@babel+core@7.22.17 - chalk: 4.1.2 - flow-parser: 0.199.1 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.21.5 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - dev: true - /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -28864,12 +22341,6 @@ packages: hasBin: true dev: true - /json-bigint/1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - dependencies: - bignumber.js: 9.1.2 - dev: false - /json-buffer/3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} dev: true @@ -28879,6 +22350,7 @@ packages: /json-parse-better-errors/1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -29072,11 +22544,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - /klona/2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: true - /known-css-properties/0.28.0: resolution: {integrity: sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==} dev: true @@ -29105,42 +22572,15 @@ packages: engines: {node: '>=0.10.0'} dev: false - /lazy-universal-dotenv/4.0.0: - resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} - engines: {node: '>=14.0.0'} - dependencies: - app-root-dir: 1.0.2 - dotenv: 16.4.4 - dotenv-expand: 10.0.0 - dev: true - /leac/0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} dev: false - /less-loader/11.1.0: - resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} - engines: {node: '>= 14.15.0'} - peerDependencies: - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 - dependencies: - klona: 2.0.6 - dev: true - /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -29175,28 +22615,6 @@ packages: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} dev: false - /lit-element/3.3.2: - resolution: {integrity: sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ==} - dependencies: - '@lit-labs/ssr-dom-shim': 1.1.1 - '@lit/reactive-element': 1.6.1 - lit-html: 2.7.3 - dev: true - - /lit-html/2.7.3: - resolution: {integrity: sha512-9DyLzcn/kbRGowz2vFmSANFbRZTxYUgYYFqzie89w6GLpPUiBCDHfcdeRUV/k3Q2ueYxNjfv46yPCtKAEAPOVw==} - dependencies: - '@types/trusted-types': 2.0.3 - dev: true - - /lit/2.7.4: - resolution: {integrity: sha512-cgD7xrZoYr21mbrkZIuIrj98YTMw/snJPg52deWVV4A8icLyNHI3bF70xsJeAgwTuiq5Kkd+ZR8gybSJDCPB7g==} - dependencies: - '@lit/reactive-element': 1.6.1 - lit-element: 3.3.2 - lit-html: 2.7.3 - dev: true - /load-json-file/4.0.0: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} @@ -29205,6 +22623,7 @@ packages: parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 + dev: true /load-tsconfig/0.2.3: resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} @@ -29264,14 +22683,6 @@ packages: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} dev: true - /locate-path/3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: true - /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -29352,11 +22763,6 @@ packages: chalk: 5.3.0 is-unicode-supported: 1.3.0 - /long/2.4.0: - resolution: {integrity: sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==} - engines: {node: '>=0.6'} - dev: false - /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false @@ -29484,14 +22890,6 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - /make-dir/2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} - dependencies: - pify: 4.0.1 - semver: 5.7.1 - dev: true - /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -29589,10 +22987,6 @@ packages: engines: {node: '>=8'} dev: false - /map-or-similar/1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - dev: true - /map-visit/1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} @@ -29608,15 +23002,6 @@ packages: /markdown-table/3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - /markdown-to-jsx/7.2.0_react@18.2.0: - resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==} - engines: {node: '>= 10'} - peerDependencies: - react: '>= 0.14.0' - dependencies: - react: 18.2.0 - dev: true - /marked/4.2.5: resolution: {integrity: sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==} engines: {node: '>= 12'} @@ -29638,12 +23023,6 @@ packages: is-buffer: 1.1.6 dev: false - /mdast-util-definitions/4.0.0: - resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} - dependencies: - unist-util-visit: 2.0.3 - dev: true - /mdast-util-definitions/5.1.1: resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==} dependencies: @@ -29855,10 +23234,6 @@ packages: unist-util-visit: 4.1.2 zwitch: 2.0.4 - /mdast-util-to-string/1.1.0: - resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} - dev: true - /mdast-util-to-string/3.1.0: resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} @@ -29891,15 +23266,10 @@ packages: fs-monkey: 1.0.4 dev: true - /memoizerific/1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} - dependencies: - map-or-similar: 1.5.0 - dev: true - /memorystream/0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + dev: true /meow/12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} @@ -30430,6 +23800,7 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 + dev: false /minimatch/8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} @@ -30634,10 +24005,6 @@ packages: /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - /ms/2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} - dev: true - /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -31026,6 +24393,7 @@ packages: /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: true /nlcst-to-string/3.1.1: resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==} @@ -31058,13 +24426,6 @@ packages: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} optional: true - /node-dir/0.1.17: - resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} - engines: {node: '>= 0.10.5'} - dependencies: - minimatch: 3.1.2 - dev: true - /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -31079,10 +24440,6 @@ packages: resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==} dev: false - /node-fetch-native/1.1.1: - resolution: {integrity: sha512-9VvspTSUp2Sxbl+9vbZTlFGq9lHwE8GDVVekxx6YsNd1YH59sb3Ba8v3Y3cD8PkLNcileGGcA21PFjVl0jzDaw==} - dev: true - /node-fetch/2.6.12: resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} engines: {node: 4.x || >=6.0.0} @@ -31176,6 +24533,7 @@ packages: /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true /node-releases/2.0.12: resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} @@ -31459,6 +24817,7 @@ packages: read-pkg: 3.0.0 shell-quote: 1.8.1 string.prototype.padend: 3.1.4 + dev: true /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -31480,15 +24839,6 @@ packages: through2: 4.0.2 dev: true - /npmlog/5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - dev: true - /npmlog/6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -31499,12 +24849,6 @@ packages: set-blocking: 2.0.0 dev: false - /nth-check/2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: true - /num2fraction/1.2.2: resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} dev: false @@ -31636,10 +24980,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.21.1 - /objectorarray/1.0.5: - resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} - dev: true - /oblivious-set/1.0.0: resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} dev: false @@ -31718,14 +25058,6 @@ packages: is-wsl: 3.1.0 dev: true - /open/7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - /open/8.4.0: resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} engines: {node: '>=12'} @@ -31799,27 +25131,10 @@ packages: dev: false optional: true - /opentracing/0.14.7: - resolution: {integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==} - engines: {node: '>=0.10'} - dev: false - /openurl/1.1.1: resolution: {integrity: sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==} dev: false - /optionator/0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: true - /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} @@ -31992,13 +25307,6 @@ packages: dependencies: yocto-queue: 1.0.0 - /p-locate/3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: true - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -32215,13 +25523,6 @@ packages: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} dev: true - /param-case/3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: true - /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -32252,6 +25553,7 @@ packages: dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 + dev: true /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -32299,13 +25601,6 @@ packages: resolution: {integrity: sha512-8Re9nmgP2LzQhq+FBs9+BZNTjmMwoF4geEKlpH0lxW1JKp3FmplN74306afGH9EsOjdfcXqKY2VCZtc3iAHIow==} dev: false - /pascal-case/3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true - /pascalcase/0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} @@ -32316,19 +25611,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false - /path-browserify/1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: true - /path-dirname/1.0.2: resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} dev: false - /path-exists/3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true - /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -32344,6 +25630,7 @@ packages: /path-key/2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} + dev: true /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -32410,6 +25697,7 @@ packages: /pend/1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: false /performance-now/2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -32494,6 +25782,7 @@ packages: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} hasBin: true + dev: true /pidtree/0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} @@ -32545,26 +25834,12 @@ packages: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} - /pkg-dir/3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} - dependencies: - find-up: 3.0.0 - dev: true - /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 - /pkg-dir/5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - dev: true - /pkg-dir/7.0.0: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} @@ -32590,13 +25865,6 @@ packages: engines: {node: '>=4'} dev: true - /polished/4.2.2: - resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} - engines: {node: '>=10'} - dependencies: - '@babel/runtime': 7.22.5 - dev: true - /posix-character-classes/0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} @@ -32779,19 +26047,6 @@ packages: postcss: 8.4.29 yaml: 2.3.1 - /postcss-loader/7.3.0: - resolution: {integrity: sha512-qLAFjvR2BFNz1H930P7mj1iuWJFjGey/nVhimfOAAQ1ZyPpcClAxP8+A55Sl8mBvM+K2a9Pjgdj10KpANWrNfw==} - engines: {node: '>= 14.15.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 8.1.3 - jiti: 1.21.0 - klona: 2.0.6 - semver: 7.5.4 - dev: true - /postcss-loader/8.1.1_typescript@5.2.2: resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} @@ -33131,11 +26386,6 @@ packages: path-exists: 4.0.0 which-pm: 2.0.0 - /prelude-ls/1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: true - /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -33233,13 +26483,6 @@ packages: engines: {node: '>=6'} dev: false - /pretty-error/4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: true - /pretty-format/27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -33260,6 +26503,7 @@ packages: /pretty-hrtime/1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} + dev: false /pretty-ms/7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} @@ -33312,11 +26556,6 @@ packages: resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} dev: true - /process/0.10.1: - resolution: {integrity: sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==} - engines: {node: '>= 0.6.0'} - dev: false - /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -33325,6 +26564,7 @@ packages: /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + dev: false /prom-client/15.1.0: resolution: {integrity: sha512-cCD7jLTqyPdjEPBo/Xk4Iu8jxjuZgZJ3e/oET3L+ZwOuap/7Cw3dH/TJSsZKs1TQLZ2IHpIlRAKw82ef06kmMw==} @@ -33484,26 +26724,6 @@ packages: escape-goat: 4.0.0 dev: false - /puppeteer-core/2.1.1: - resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} - engines: {node: '>=8.16.0'} - dependencies: - '@types/mime-types': 2.1.1 - debug: 4.3.4 - extract-zip: 1.7.0 - https-proxy-agent: 4.0.0 - mime: 2.6.0 - mime-types: 2.1.35 - progress: 2.0.3 - proxy-from-env: 1.1.0 - rimraf: 2.7.1 - ws: 6.2.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /pure-rand/6.0.2: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} dev: true @@ -33560,10 +26780,6 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - /ramda/0.28.0: - resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} - dev: true - /random-words/2.0.0: resolution: {integrity: sha512-uqpnDqFnYrZajgmvgjmBrSZL2V1UA/9bNPGrilo12CmBeBszoff/avElutUlwWxG12gvmCk/8dUhvHefYxzYjw==} dependencies: @@ -33684,43 +26900,6 @@ packages: react: 18.2.0 dev: false - /react-colorful/5.6.1_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /react-docgen-typescript/2.2.2_typescript@5.2.2: - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} - peerDependencies: - typescript: '>= 4.3.x' - dependencies: - typescript: 5.2.2 - dev: true - - /react-docgen/5.4.3: - resolution: {integrity: sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==} - engines: {node: '>=8.10.0'} - hasBin: true - dependencies: - '@babel/core': 7.22.17 - '@babel/generator': 7.22.15 - '@babel/runtime': 7.22.5 - ast-types: 0.14.2 - commander: 2.20.3 - doctrine: 3.0.0 - estree-to-babel: 3.2.1 - neo-async: 2.6.2 - node-dir: 0.1.17 - strip-indent: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /react-dom/18.2.0_react@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -33730,19 +26909,6 @@ packages: react: 18.2.0 scheduler: 0.23.0 - /react-element-to-jsx-string/15.0.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} - peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - dependencies: - '@base2/pretty-print-object': 1.0.1 - is-plain-object: 5.0.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-is: 18.1.0 - dev: true - /react-email/1.6.1_react@18.2.0: resolution: {integrity: sha512-ZMrRFxc1fk8keZx35OzExOuW0LLWlwtjsGAxO7BMAS9evSyLK3IZjIjNxu+NJmorL9TGeBSAhHNWYPWy9CXTWA==} engines: {node: '>=16.0.0'} @@ -33786,14 +26952,6 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /react-inspector/6.0.1_react@18.2.0: - resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==} - peerDependencies: - react: ^16.8.4 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: true - /react-is/16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -33838,17 +26996,12 @@ packages: scheduler: 0.23.0 dev: false - /react-refresh/0.11.0: - resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} - engines: {node: '>=0.10.0'} - dev: true - /react-refresh/0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} dev: true - /react-remove-scroll-bar/2.3.4_e74vmjybjy5dsfplslbsgtbvvi: + /react-remove-scroll-bar/2.3.4_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -33858,13 +27011,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 - react-style-singleton: 2.2.1_e74vmjybjy5dsfplslbsgtbvvi + react-style-singleton: 2.2.1_4aprenwzvd25d3zno6rr4bqbqq tslib: 2.6.2 dev: false - /react-remove-scroll/2.5.5_e74vmjybjy5dsfplslbsgtbvvi: + /react-remove-scroll/2.5.5_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -33874,13 +27027,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 - react-remove-scroll-bar: 2.3.4_e74vmjybjy5dsfplslbsgtbvvi - react-style-singleton: 2.2.1_e74vmjybjy5dsfplslbsgtbvvi + react-remove-scroll-bar: 2.3.4_4aprenwzvd25d3zno6rr4bqbqq + react-style-singleton: 2.2.1_4aprenwzvd25d3zno6rr4bqbqq tslib: 2.6.2 - use-callback-ref: 1.3.0_e74vmjybjy5dsfplslbsgtbvvi - use-sidecar: 1.1.2_e74vmjybjy5dsfplslbsgtbvvi + use-callback-ref: 1.3.0_4aprenwzvd25d3zno6rr4bqbqq + use-sidecar: 1.1.2_4aprenwzvd25d3zno6rr4bqbqq dev: false /react-resizable-panels/2.0.9_biqbaboplfbrettd7655fr4n2y: @@ -33993,7 +27146,7 @@ packages: react: 18.2.0 dev: false - /react-style-singleton/2.2.1_e74vmjybjy5dsfplslbsgtbvvi: + /react-style-singleton/2.2.1_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -34003,7 +27156,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -34081,7 +27234,7 @@ packages: resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - glob: 10.3.3 + glob: 10.3.10 json-parse-even-better-errors: 3.0.0 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 @@ -34094,6 +27247,7 @@ packages: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + dev: false /read-pkg/3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} @@ -34102,6 +27256,7 @@ packages: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 + dev: true /read-pkg/5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} @@ -34111,6 +27266,7 @@ packages: normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + dev: false /read-yaml-file/1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} @@ -34172,17 +27328,6 @@ packages: tslib: 2.6.2 dev: true - /recast/0.23.1: - resolution: {integrity: sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==} - engines: {node: '>= 4'} - dependencies: - assert: 2.0.0 - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tslib: 2.6.2 - dev: true - /recharts-scale/0.4.5: resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} dependencies: @@ -34275,10 +27420,6 @@ packages: safe-regex: 1.1.0 dev: false - /regex-parser/2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: true - /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} @@ -34387,21 +27528,6 @@ packages: rehype-stringify: 9.0.4 unified: 10.1.2 - /relateurl/0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: true - - /remark-external-links/8.0.0: - resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} - dependencies: - extend: 3.0.2 - is-absolute-url: 3.0.3 - mdast-util-definitions: 4.0.0 - space-separated-tokens: 1.1.5 - unist-util-visit: 2.0.3 - dev: true - /remark-frontmatter/4.0.1: resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} dependencies: @@ -34466,14 +27592,6 @@ packages: unified: 10.1.2 dev: true - /remark-slug/6.1.0: - resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} - dependencies: - github-slugger: 1.5.0 - mdast-util-to-string: 1.1.0 - unist-util-visit: 2.0.3 - dev: true - /remark-smartypants/2.0.0: resolution: {integrity: sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -34596,16 +27714,6 @@ packages: resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} dev: false - /renderkid/3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: true - /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} @@ -34655,28 +27763,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - /require-in-the-middle/5.2.0: - resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} - engines: {node: '>=6'} - dependencies: - debug: 4.3.4 - module-details-from-path: 1.0.3 - resolve: 1.22.4 - transitivePeerDependencies: - - supports-color - dev: false - - /require-in-the-middle/6.0.0: - resolution: {integrity: sha512-+dtWQ7l2lqQDxheaG3jjyN1QI37gEwvzACSgjYi4/C2y+ZTUMeRW8BIOm+9NBKvwaMBUSZfPXVOt1skB0vBkRw==} - engines: {node: '>=8.6.0'} - dependencies: - debug: 4.3.4 - module-details-from-path: 1.0.3 - resolve: 1.22.4 - transitivePeerDependencies: - - supports-color - dev: false - /require-in-the-middle/7.1.1: resolution: {integrity: sha512-OScOjQjrrjhAdFpQmnkE/qbIBGCRFhQB/YaJhcC3CPOlmhe7llnW46Ac1J5+EjcNXOTnDdpF96Erw/yedsGksQ==} engines: {node: '>=8.6.0'} @@ -34750,17 +27836,6 @@ packages: /resolve-pkg-maps/1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - /resolve-url-loader/5.0.0: - resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} - engines: {node: '>=12'} - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 8.4.35 - source-map: 0.6.1 - dev: true - /resolve-url/0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -34905,13 +27980,6 @@ packages: align-text: 0.1.4 dev: false - /rimraf/2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true @@ -34937,7 +28005,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.3 + glob: 10.3.10 dev: false /rollup-plugin-inject/3.0.2: @@ -35051,10 +28119,6 @@ packages: dependencies: mri: 1.2.0 - /safe-buffer/5.1.1: - resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==} - dev: true - /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -35097,29 +28161,6 @@ packages: rimraf: 2.7.1 dev: true - /sass-loader/13.2.2: - resolution: {integrity: sha512-nrIdVAAte3B9icfBiGWvmMhT/D+eCDwnk+yA7VE/76dp/WkHX+i44Q/pfo71NYbwj0Ap+PGsn0ekOuU1WFJ2AA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.6 - neo-async: 2.6.2 - dev: true - /scheduler/0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: @@ -35266,17 +28307,6 @@ packages: randombytes: 2.1.0 dev: true - /serve-favicon/2.5.0: - resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} - engines: {node: '>= 0.8.0'} - dependencies: - etag: 1.8.1 - fresh: 0.5.2 - ms: 2.1.1 - parseurl: 1.3.3 - safe-buffer: 5.1.1 - dev: true - /serve-static/1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -35293,6 +28323,7 @@ packages: /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false /set-cookie-parser/2.5.1: resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} @@ -35323,13 +28354,6 @@ packages: /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - /shallow-clone/3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - dependencies: - kind-of: 6.0.3 - dev: true - /sharp/0.32.6: resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} engines: {node: '>=14.15.0'} @@ -35367,6 +28391,7 @@ packages: /shell-quote/1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true /shelljs/0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} @@ -35844,10 +28869,6 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead - /space-separated-tokens/1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: true - /space-separated-tokens/2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -35958,6 +28979,7 @@ packages: /stackframe/1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false /stacktrace-gps/3.1.2: resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} @@ -36015,65 +29037,6 @@ packages: engines: {node: '>=4', npm: '>=6'} dev: true - /store2/2.14.2: - resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} - dev: true - - /storybook-addon-designs/7.0.0-beta.2_gtov7sygms2deenjyn5i42ywqa: - resolution: {integrity: sha512-ljBNmyCJdPTXhiBSfA1S+GBxtMooW2M7nxlt49OoCRH7jcxZOYQdiI8JYQiMF5Ur0MGakbSci0Xm+JzAvcm02g==} - peerDependencies: - '@storybook/addon-docs': ^6.4.0 || ^7.0.0 - '@storybook/addons': ^6.4.0 || ^7.0.0 - '@storybook/api': ^6.4.0 || ^7.0.0 - '@storybook/components': ^6.4.0 || ^7.0.0 - '@storybook/theming': ^6.4.0 || ^7.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@figspec/react': 1.0.3_react@18.2.0 - '@storybook/addon-docs': 7.0.12_biqbaboplfbrettd7655fr4n2y - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /storybook-addon-variants/0.2.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-4woVtd+XsHNHN7XDjFFNns1sVYotjYOh5/FP8AR+CzUK9Eb9WPvQ0re5z5rZztndND0NqhhJ5F65Iy4jrz6OzQ==} - peerDependencies: - '@storybook/addons': ^6.5.8 - '@storybook/api': ^6.5.8 - '@storybook/components': ^6.5.8 - '@storybook/core-events': ^6.5.8 - '@storybook/theming': ^6.5.8 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - cartesian: 1.0.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /storybook/7.0.9: - resolution: {integrity: sha512-kUgeS22kjqmAN/BZwCLjgP/IhtVb9/cU0UAjGp/1q6FfU7hy+N2NS/lWJESgnZFNArbB0qNuLLi2QbZd6OvXzA==} - hasBin: true - dependencies: - '@storybook/cli': 7.0.9 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /stream-buffers/3.0.2: resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==} engines: {node: '>= 0.10.0'} @@ -36124,10 +29087,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string-template/0.2.1: - resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} - dev: false - /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -36171,6 +29130,7 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 + dev: true /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} @@ -36295,15 +29255,6 @@ packages: webpack: ^5.0.0 dev: true - /style-loader/3.3.4_webpack@5.88.2: - resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - /style-mod/4.0.0: resolution: {integrity: sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==} dev: false @@ -36555,10 +29506,6 @@ packages: engines: {node: '>=0.10'} dev: true - /synchronous-promise/2.0.17: - resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} - dev: true - /synckit/0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -36742,35 +29689,6 @@ packages: bintrees: 1.0.2 dev: false - /telejson/7.1.0: - resolution: {integrity: sha512-jFJO4P5gPebZAERPkJsqMAQ0IMA1Hi0AoSfxpnUaV6j6R2SZqlpkbS20U6dEUtA3RUYt2Ak/mTlkQzHH9Rv/hA==} - dependencies: - memoizerific: 1.11.3 - dev: true - - /temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - - /temp/0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} - dependencies: - rimraf: 2.6.3 - dev: true - - /tempy/1.0.1: - resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} - engines: {node: '>=10'} - dependencies: - del: 6.1.1 - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: true - /term-size/2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -36784,32 +29702,6 @@ packages: supports-hyperlinks: 2.3.0 dev: false - /terser-webpack-plugin/5.3.7_nww33inhqu3uc3cp573wawoccu: - resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.19 - '@swc/core': 1.3.26 - esbuild: 0.15.18 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.17.1 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - /terser-webpack-plugin/5.3.7_webpack@5.88.2: resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} @@ -36874,16 +29766,6 @@ packages: real-require: 0.2.0 dev: true - /thriftrw/3.11.4: - resolution: {integrity: sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA==} - engines: {node: '>= 0.10.x'} - hasBin: true - dependencies: - bufrw: 1.3.0 - error: 7.0.2 - long: 2.4.0 - dev: false - /throttle-debounce/3.0.1: resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} engines: {node: '>=10'} @@ -37083,11 +29965,6 @@ packages: typescript: 5.2.2 dev: true - /ts-dedent/2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - dev: true - /ts-easing/0.2.0: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} dev: false @@ -37392,7 +30269,6 @@ packages: json5: 2.2.3 minimist: 1.2.7 strip-bom: 3.0.0 - dev: true /tsconfig-resolver/3.0.1: resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==} @@ -37823,13 +30699,6 @@ packages: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: false - /type-check/0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true - /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -37849,11 +30718,6 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - /type-fest/0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: true - /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -37865,10 +30729,12 @@ packages: /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} + dev: false /type-fest/0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + dev: false /type-fest/1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} @@ -37979,14 +30845,6 @@ packages: /ufo/1.3.0: resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==} - /uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true - /uid/2.0.2: resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} engines: {node: '>=8'} @@ -38032,15 +30890,9 @@ packages: dependencies: '@fastify/busboy': 2.0.0 - /undici/5.28.3: - resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} - engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.0.0 - dev: false - /unfetch/4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: false /unherit/3.0.1: resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} @@ -38118,13 +30970,6 @@ packages: dependencies: imurmurhash: 0.1.4 - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - /unique-string/3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -38141,10 +30986,6 @@ packages: /unist-util-generated/2.0.0: resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} - /unist-util-is/4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: true - /unist-util-is/5.1.1: resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} @@ -38182,27 +31023,12 @@ packages: dependencies: '@types/unist': 2.0.6 - /unist-util-visit-parents/3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 4.1.0 - dev: true - /unist-util-visit-parents/5.1.1: resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} dependencies: '@types/unist': 2.0.6 unist-util-is: 5.1.1 - /unist-util-visit/2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - dev: true - /unist-util-visit/4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: @@ -38241,15 +31067,6 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - /unplugin/0.10.2: - resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==} - dependencies: - acorn: 8.10.0 - chokidar: 3.5.3 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.4.6 - dev: true - /unset-value/1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} @@ -38261,6 +31078,7 @@ packages: /untildify/4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} + dev: false /unzipper/0.10.11: resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==} @@ -38363,7 +31181,7 @@ packages: resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} dev: false - /use-callback-ref/1.3.0_e74vmjybjy5dsfplslbsgtbvvi: + /use-callback-ref/1.3.0_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -38373,12 +31191,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 tslib: 2.6.2 dev: false - /use-isomorphic-layout-effect/1.1.2_e74vmjybjy5dsfplslbsgtbvvi: + /use-isomorphic-layout-effect/1.1.2_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -38387,22 +31205,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 react: 18.2.0 dev: false - /use-resize-observer/9.1.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} - peerDependencies: - react: 16.8.0 - 18 - react-dom: 16.8.0 - 18 - dependencies: - '@juggle/resize-observer': 3.4.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: true - - /use-sidecar/1.1.2_e74vmjybjy5dsfplslbsgtbvvi: + /use-sidecar/1.1.2_4aprenwzvd25d3zno6rr4bqbqq: resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -38412,7 +31219,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.69 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 @@ -38443,10 +31250,6 @@ packages: is-typed-array: 1.1.10 which-typed-array: 1.1.9 - /utila/0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: true - /utils-merge/1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -38497,6 +31300,7 @@ packages: /uuid/9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true + dev: false /uvu/0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} @@ -39170,28 +31974,6 @@ packages: /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - /webpack-dev-middleware/5.3.3_webpack@5.88.2: - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.0.1 - webpack: 5.88.2_uhpfu7q6noim4yjdo6qt2aajgu - dev: true - - /webpack-hot-middleware/2.25.3: - resolution: {integrity: sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==} - dependencies: - ansi-html-community: 0.0.8 - html-entities: 2.3.3 - strip-ansi: 6.0.1 - dev: true - /webpack-node-externals/3.0.0: resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} engines: {node: '>=6'} @@ -39202,10 +31984,6 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack-virtual-modules/0.4.6: - resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} - dev: true - /webpack/5.88.2: resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} @@ -39246,46 +32024,6 @@ packages: - uglify-js dev: true - /webpack/5.88.2_uhpfu7q6noim4yjdo6qt2aajgu: - resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.2 - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/wasm-edit': 1.11.5 - '@webassemblyjs/wasm-parser': 1.11.5 - acorn: 8.10.0 - acorn-import-assertions: 1.9.0_acorn@8.10.0 - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.1 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.7_nww33inhqu3uc3cp573wawoccu - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - /websocket/1.0.34: resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} engines: {node: '>=4.0.0'} @@ -39396,13 +32134,7 @@ packages: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 4.2.3 - - /widest-line/3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: true + dev: false /widest-line/4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} @@ -39421,10 +32153,6 @@ packages: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} - /wordwrap/1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true - /workerd/1.20231030.0: resolution: {integrity: sha512-+FSW+d31f8RrjHanFf/R9A+Z0csf3OtsvzdPmAKuwuZm/5HrBv83cvG9fFeTxl7/nI6irUUXIRF9xcj/NomQzQ==} engines: {node: '>=16'} @@ -39550,14 +32278,6 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic/2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - dependencies: - graceful-fs: 4.2.10 - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - /write-file-atomic/3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: @@ -39575,20 +32295,6 @@ packages: signal-exit: 3.0.7 dev: true - /ws/6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - async-limiter: 1.0.1 - dev: true - /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -39697,10 +32403,6 @@ packages: engines: {node: '>=0.4.0'} dev: false - /xorshift/1.2.0: - resolution: {integrity: sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==} - dev: false - /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -39829,6 +32531,7 @@ packages: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + dev: false /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} diff --git a/references/v3-catalog/package.json b/references/v3-catalog/package.json index 07e590c15..f95c04acc 100644 --- a/references/v3-catalog/package.json +++ b/references/v3-catalog/package.json @@ -14,6 +14,9 @@ "start:stripe": "ts-node -r tsconfig-paths/register -r dotenv/config src/stripeUsage.ts" }, "dependencies": { + "@opentelemetry/api": "^1.8.0", + "@sindresorhus/slugify": "^2.2.1", + "@traceloop/instrumentation-openai": "^0.3.9", "@trigger.dev/sdk": "2.3.18", "msw": "^2.2.1", "openai": "^4.28.0", diff --git a/references/v3-catalog/src/handleError.ts b/references/v3-catalog/src/handleError.ts index ce2d60d68..1690f687d 100644 --- a/references/v3-catalog/src/handleError.ts +++ b/references/v3-catalog/src/handleError.ts @@ -1,4 +1,4 @@ -import type { HandleErrorFunction } from "@trigger.dev/core/v3"; +import type { HandleErrorFunction } from "@trigger.dev/sdk/v3"; export const handleError: HandleErrorFunction = async (payload, error, { ctx, retry }) => { console.log("GOT TO handleError FUNCTION"); diff --git a/references/v3-catalog/src/trigger/logging.ts b/references/v3-catalog/src/trigger/logging.ts index 0966ed063..1315dd0fd 100644 --- a/references/v3-catalog/src/trigger/logging.ts +++ b/references/v3-catalog/src/trigger/logging.ts @@ -1,9 +1,10 @@ import { task } from "@trigger.dev/sdk/v3"; +import slugify from "@sindresorhus/slugify"; export const loggingTask = task({ id: "logging-task", run: async () => { - console.log("Hello world 9"); + console.log(`Hello world 9 ${slugify("foo bar")}`); return null; }, diff --git a/references/v3-catalog/src/trigger/retries.ts b/references/v3-catalog/src/trigger/retries.ts index d067dcea7..27197c4a1 100644 --- a/references/v3-catalog/src/trigger/retries.ts +++ b/references/v3-catalog/src/trigger/retries.ts @@ -59,15 +59,19 @@ export const taskWithFetchRetries = task({ return interceptor.run(next); }, run: async (payload: any, { ctx }) => { + logger.info("Fetching data", { foo: [1, 2, 3], bar: [{ hello: "world" }] }); + //if the fetch fails, it will retry const headersResponse = await retry.fetch("http://my.host/test-headers", { retry: { - "429": { - strategy: "headers", - limitHeader: "x-ratelimit-limit", - remainingHeader: "x-ratelimit-remaining", - resetHeader: "x-ratelimit-reset", - resetFormat: "unix_timestamp_in_ms", + byStatus: { + "429": { + strategy: "headers", + limitHeader: "x-ratelimit-limit", + remainingHeader: "x-ratelimit-remaining", + resetHeader: "x-ratelimit-reset", + resetFormat: "unix_timestamp_in_ms", + }, }, }, }); @@ -76,26 +80,32 @@ export const taskWithFetchRetries = task({ logger.info("Fetched headers response", { json }); const backoffResponse = await retry.fetch("http://my.host/test-backoff", { + timeoutInMs: 1000, retry: { - "500-599": { - strategy: "backoff", - maxAttempts: 10, - factor: 2, - minTimeoutInMs: 1_000, - maxTimeoutInMs: 30_000, - randomize: false, + byStatus: { + "500-599": { + strategy: "backoff", + maxAttempts: 5, + factor: 2, + minTimeoutInMs: 1_000, + maxTimeoutInMs: 30_000, + randomize: false, + }, }, }, }); const json2 = await backoffResponse.json(); + // This should use the defaults. + await retry.fetch("http://my.host/test-connection-errors"); + logger.info("Fetched backoff response", { json2 }); const timeoutResponse = await retry.fetch("https://httpbin.org/delay/2", { - timeout: { - durationInMs: 1000, - retry: { + timeoutInMs: 1000, + retry: { + timeout: { maxAttempts: 5, factor: 1.8, minTimeoutInMs: 500, @@ -105,16 +115,11 @@ export const taskWithFetchRetries = task({ }, }); - const json3 = await timeoutResponse.json(); - - logger.info("Fetched timeout response", { json3 }); - return { result: "successss", payload, json, json2, - json3, }; }, }); diff --git a/references/v3-catalog/src/trigger/utils/interceptor.ts b/references/v3-catalog/src/trigger/utils/interceptor.ts index a3b6ac8f8..e38db574f 100644 --- a/references/v3-catalog/src/trigger/utils/interceptor.ts +++ b/references/v3-catalog/src/trigger/utils/interceptor.ts @@ -28,5 +28,14 @@ export const interceptor = retry.interceptFetch( return new HttpResponse(null, { status: 500, }); + }), + http.get("http://my.host/test-connection-errors", ({ request }) => { + const retryCount = request.headers.get("x-retry-count"); + + if (retryCount === "2") { + return HttpResponse.json({ test: "connection-errors" }); + } + + return HttpResponse.error(); }) ); diff --git a/references/v3-catalog/src/trigger/weird-file-names.ts b/references/v3-catalog/src/trigger/weird-file-names.ts new file mode 100644 index 000000000..4b65909a9 --- /dev/null +++ b/references/v3-catalog/src/trigger/weird-file-names.ts @@ -0,0 +1,6 @@ +import { task } from "@trigger.dev/sdk/v3"; + +export const weirdFileName = task({ + id: "weird-file-name", + run: async (payload: { url: string }) => {}, +}); diff --git a/references/v3-catalog/trigger.config.ts b/references/v3-catalog/trigger.config.ts index cf442f15a..6aec640c5 100644 --- a/references/v3-catalog/trigger.config.ts +++ b/references/v3-catalog/trigger.config.ts @@ -1,8 +1,9 @@ -import type { ProjectConfig } from "@trigger.dev/core/v3"; +import type { TriggerConfig } from "@trigger.dev/sdk/v3"; +import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai"; export { handleError } from "./src/handleError"; -export const config: ProjectConfig = { +export const config: TriggerConfig = { project: "yubjwjsfkxnylobaqvqz", retries: { enabledInDev: true, @@ -15,4 +16,7 @@ export const config: ProjectConfig = { }, }, additionalPackages: ["wrangler@3.35.0"], + additionalFiles: ["./wrangler/wrangler.toml"], + dependenciesToBundle: [/@sindresorhus/, "escape-string-regexp"], + instrumentations: [new OpenAIInstrumentation()], }; diff --git a/references/v3-catalog/wrangler/wrangler.toml b/references/v3-catalog/wrangler/wrangler.toml new file mode 100644 index 000000000..219c87cfa --- /dev/null +++ b/references/v3-catalog/wrangler/wrangler.toml @@ -0,0 +1,7 @@ +name = "proxy" +main = "src/index.ts" +compatibility_date = "2023-10-30" +compatibility_flags = ["nodejs_compat"] + +[env.staging] +[env.prod] From 9e02b45808e0dd1aabb59b96b18bdeb90e349966 Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Mon, 25 Mar 2024 17:24:23 +0000 Subject: [PATCH 5/5] Fixed export --- packages/core/src/v3/index.ts | 13 +++++++++++-- packages/trigger-sdk/src/v3/retry.ts | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/core/src/v3/index.ts b/packages/core/src/v3/index.ts index 1ee6cda6c..d08a732e8 100644 --- a/packages/core/src/v3/index.ts +++ b/packages/core/src/v3/index.ts @@ -44,11 +44,20 @@ export { unflattenAttributes, primitiveValueOrflattenedAttributes, } from "./utils/flattenAttributes"; -export { defaultRetryOptions, calculateNextRetryDelay, calculateResetAt } from "./utils/retries"; +export { + defaultRetryOptions, + defaultFetchRetryOptions, + calculateNextRetryDelay, + calculateResetAt, +} from "./utils/retries"; export { accessoryAttributes } from "./utils/styleAttributes"; export { eventFilterMatches } from "../eventFilterMatches"; export { omit } from "./utils/omit"; export { TracingSDK, type TracingDiagnosticLogLevel, recordSpanException } from "./otel"; export { TaskExecutor, type TaskExecutorOptions } from "./workers/taskExecutor"; export { detectDependencyVersion } from "./utils/detectDependencyVersion"; -export { type PreciseDateOrigin, calculatePreciseDateHrTime, preciseDateOriginNow } from "./utils/preciseDate"; +export { + type PreciseDateOrigin, + calculatePreciseDateHrTime, + preciseDateOriginNow, +} from "./utils/preciseDate"; diff --git a/packages/trigger-sdk/src/v3/retry.ts b/packages/trigger-sdk/src/v3/retry.ts index d384f20f9..3651a6e7b 100644 --- a/packages/trigger-sdk/src/v3/retry.ts +++ b/packages/trigger-sdk/src/v3/retry.ts @@ -21,7 +21,7 @@ import { flattenAttributes, runtime, } from "@trigger.dev/core/v3"; -import { defaultFetchRetryOptions } from "@trigger.dev/core/v3/utils/retries"; +import { defaultFetchRetryOptions } from "@trigger.dev/core/v3"; import type { HttpHandler } from "msw"; import { AsyncLocalStorage } from "node:async_hooks"; import { tracer } from "./tracer";